1read 100read
2011年10月1期OSOSを作ってみよう
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
【ボロノート】1FD_OS【復活】 Linuxの将来 CTRONでマターリいこうよ OS作りに向いている言語は何ですが?
OSを作ってみよう
1 :03/02/26 〜 最終レス :11/10/13 いっちょOSでも作ってみようかな。
2 : 2!ヽ(`ー´)ノ
3 :
4 : 4
5 : PC用の32ビットプリエンプティブマルチタスクな保護OS。 APIは作りながら決める。 ファイルシステムはFATがベター。 デバドラは出来たらBIOSでやりたい。 取り敢えずはこんな感じでかな?
6 : >>5 > APIは作りながら決める。 仕様は最初に決めるべし > ファイルシステムはFATがベター。 ファイルシステムもテメーでつくてミロ
7 : まずはブートから。やっぱりGRUBを使うのが楽でしょう。 http://www.gnu.org/software/grub/ カーネルの構造は伝統的UNIXを真似るのが無難。 つまりモノリシックカーネル。 開発環境はGNU系で行くことにします。
8 : >仕様は最初に決めるべし 初心者にとってそれは意外と難しいです。最初にちゃんと仕様を決めても、 いざ実装する段階になって困難どと気付いたりとか。 >ファイルシステムもテメーでつくてミロ 習作だから出来るだけ手っ取りばやいのがいいかなと思ったんだよぅ。
9 : 今からコード書いてきます。
10 : ショシンシャがOS作るってか はらいてーぜ VBあたりでちまちまあそんでな
11 : ブートしました。 さてどこにアプしようか。
12 : アプしました。 http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030226.tar.gz
13 : そろそろ名前を決めときたいんだが良いのが思い付かん。 完成時はNWSOSのGUI無しバージョンみたいな感じに成る予定。 アイデア求む。
14 : Unilinwinmacbex http://pc.2ch.net/test/read.cgi/os/989371029/
15 : >>1 あらまお帰り。受験終わったのかい?
16 : どー見てもAさんか夜さんだな。
17 : Aさんだったら楽しみだな…
18 : >>15 Aさんか。
19 : ということは大学受かったということだよな。おめでとう!
20 : いえ、わたしはACではないハズです。 彼は昨日本郷で名誉の戦死を遂げられました。 ご冥福をお祈りします。合唱。
21 : 坂研狙ってたのか…勇者だな。
22 : プロセス起動まであと一歩。 24時間以内にはユーザモードでプロセスを起動させたかったんだが残念。 http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030227.tar.gz >>21 そういうわけではないそうです。 TRONにはもうあまり興味が無いと言っておりました。 >>14 クソスレあげんなやボゲェが。
23 : ページングをオンにしてみた。 後はプロセス固有空間にメモリを割り当てELFを読込むだけ。 http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030227-2.tar.gz
24 : ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)/<先生!こんなのがありました! _ / / / \___________ \⊂ノ ̄ ̄ ̄ ̄\ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| http://saitama.gasuki.com/saitama/
25 : こんなもんだれかDLするとおもってんのか おめでてーな といってあげてやる
26 : >>1 さん ボクは応援してるyo ガンガレ!! /join #osdev-j
27 : >>25 たしかにDLするやつはあんまりいないだろうな。 少なくとも今までのどの「2ch発OS」より良く出来てるが、 いかんせん地味だからな。まぁ、それは仕方ないことだ。 >>26 ありがとー
28 : /*** NoName\include\sys\aspace.h ***/ #ifndef_ese_sys_aspace_h_ #define_ese_sys_aspace_h_ #definePageSize4096 #defineKernelAddressMin0x00000000 #defineKernelAddressMax0x7fffffff #defineUserAddressMin0x80000000 #defineUserAddressMax0xffffffff #defineASpaceProtUser0x1 #defineASpaceProtKernel0x2 #defineASpaceProtWrite0x3 struct _PageEntry { unsigned intp:1; unsigned intrw:1; unsigned intus:1; unsigned intpwt:1; unsigned intpcd:1; unsigned inta:1; unsigned intd:1; unsigned intps:1; unsigned intg:1; unsigned intuser:3; unsigned intbase:20; };
29 : /*** NoName\include\sys\aspace.h ***/ extern void aspace_initialize(void); extern PageEntry *aspace_create(void); extern int aspace_delete(PageEntry *page_table); extern int aspace_map(PageEntry *page_table, unsigned int address, unsigned int size, char prot); extern int aspace_unmap(PageEntry *page_table, unsigned int address, unsigned int size); extern int aspace_read(PageEntry *page_table, unsigned int addr, void *buf, unsigned int size); extern int aspace_write(PageEntry *page_table, unsigned int address, void *buf, unsigned int size); extern int aspace_zero(PageEntry *page_table, unsigned int addr, unsigned int size); #endif_ese_sys_aspace_h_
30 : /*** NoName\include\sys\core.h ***/ #ifndef_ese_sys_core_h_ #define_ese_sys_core_h_ extern void lock_cpu(void); extern void unlock_cpu(void); extern void dispatch(void); extern void exit_and_dispatch(void); extern void task_startup(void); extern void syscall_entry(void); extern void exception0_entry(void); extern void exception1_entry(void); extern void exception2_entry(void); extern void exception3_entry(void); extern void exception4_entry(void); extern void exception5_entry(void); extern void exception6_entry(void);
31 : /*** NoName\include\sys\core.h ***/ extern void exception7_entry(void); extern void exception8_entry(void); extern void exception9_entry(void); extern void exception10_entry(void); extern void exception11_entry(void); extern void exception12_entry(void); extern void exception13_entry(void); extern void exception14_entry(void); extern void exception15_entry(void); extern void exception16_entry(void); extern void exception17_entry(void); extern void exception18_entry(void); extern void exception19_entry(void); #endif_ese_sys_core_h_
32 : /*** NoName\include\sys\cpu.h ***/ #ifndef_ese_sys_cpu_h_ #define_ese_sys_cpu_h_ #defineTYPE_SEG_DATA0x00/* 0000データセグメント */ #defineTYPE_SEG_EXPAND0x04/* 0100 エクスパンドダウン */ #defineTYPE_SEG_WRITEABLE0x02/* 0010 書き込み可 */ #defineTYPE_SEG_ACCESSED0x01/* 0001 アクセスされたか? */ #defineTYPE_SEG_CODE0x08/* 1000 コードセグメント */ #defineTYPE_SEG_CONFORMING0x04/* 0100 コンフォーミング */ #defineTYPE_SEG_READABLE0x02/* 0010 読み取り可 */ #defineTYPE_SEG_ACCESSED0x01/* 0001 アクセスされたか? */ #defineTYPE_GATE_INTR0xe #defineTYPE_GATE_TRAP0xf
33 : /*** NoName\include\sys\cpu.h ***/ typedef struct { unsignedlimit_L:16; unsignedbase_L:24 __attribute__ ((packed)); unsignedtype:4; unsigneds:1; unsigneddpl:2; unsignedp:1; unsignedlimit_H:4; unsignedavl:1; unsignedx:1; unsigneddb:1; unsignedg:1; unsignedbase_H:8; } SegDesc;
34 : /*** NoName\include\sys\cpu.h ***/ typedef struct { unsignedoffset_L:16; unsignedselector:16; unsignedcopy:8; unsignedtype:4; unsigneds:1; unsigneddpl:2; unsignedp:1; unsignedoffset_H:16; } GateDesc; typedefstruct { unsignedlimit:16; unsignedbase:32 __attribute__ ((packed)); } DescPtr;
35 : /*** NoName\include\sys\cpu.h ***/ typedef struct { unsignedlink; unsignedesp0; unsignedss0; unsignedesp1; unsignedss1; unsignedesp2; unsignedss2; unsignedcr3; unsignedeip; unsignedeflags; unsignedeax; unsignedecx; unsignededx; unsignedebx; unsignedesp; unsignedebp; unsignedesi; unsignededi; unsignedes; unsignedcs; unsignedss; unsignedds; unsignedfs; unsignedgs; unsignedldt; unsignediobase; } TSS;
36 : /*** NoName\include\sys\cpu.h ***/ extern void make_seg_desc(SegDesc *desc, unsigned int addr, unsigned int limit, char type, char dpl); extern void make_gate_desc(GateDesc *desc, int selector, void *entry, char type, char dpl); extern void make_tss_desc(SegDesc *desc, unsigned int addr, unsigned int limit, char dpl); extern void make_desc_ptr(DescPtr *ptr, unsigned int limit, void *base); extern void cpu_initialize(void); #endif_ese_sys_cpu_h_
37 : /*** NoName\include\sys\elf.h ***/ #ifndef_elf_h_ #define_elf_h_ #defineEI_MAG00 #defineEI_MAG11 #defineEI_MAG22 #defineEI_MAG33 #defineEI_CLASS4 #defineEI_DATA5 #defineEI_VERSION6 #defineEI_PAD7 #defineEI_BRAND8 #defineEI_NIDENT16 #defineELFMAG00x7f #defineELFMAG1'E' #defineELFMAG2'L' #defineELFMAG3'F'
38 : /*** NoName\include\sys\elf.h ***/ #defineIS_ELF(ehdr)((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ (ehdr).e_ident[EI_MAG3] == ELFMAG3) typedefunsigned intElf32_Addr; typedefunsigned shortElf32_Half; typedefunsigned intElf32_Off; typedefunsigned intElf32_Sword; typedefunsigned intElf32_Word; typedefunsigned intElf32_Size;
39 : /*** NoName\include\sys\elf.h ***/ typedef struct { unsigned chare_ident[EI_NIDENT]; Elf32_Halfe_type; Elf32_Halfe_machine; Elf32_Worde_version; Elf32_Addre_entry; Elf32_Offe_phoff; Elf32_Offe_shoff; Elf32_Worde_flags; Elf32_Halfe_ehsize; Elf32_Halfe_phentsize; Elf32_Halfe_phnum; Elf32_Halfe_shentsize; Elf32_Halfe_shnum; Elf32_Halfe_shstrndx; } ELF_Header;
40 : /*** NoName\include\sys\elf.h ***/ typedef struct { Elf32_Wordsh_name; Elf32_Wordsh_type; Elf32_Wordsh_flags; Elf32_Addrsh_addr; Elf32_Offsh_offset; Elf32_Sizesh_size; Elf32_Wordsh_link; Elf32_Wordsh_info; Elf32_Sizesh_addralign; Elf32_Sizesh_entsize; } ELF_SHeader;
41 : /*** NoName\include\sys\elf.h ***/ typedef struct { Elf32_Wordp_type; Elf32_Offp_offset; Elf32_Addrp_vaddr; Elf32_Addrp_paddr; Elf32_Sizep_filesz; Elf32_Sizep_memsz; Elf32_Wordp_flags; Elf32_Sizep_align; } ELF_PHeader; #endif/* _elf_h_ */
42 : /*** NoName\include\sys\kernel.h ***/ #ifndef_ese_sys_kernel_h_ #define_ese_sys_kernel_h_ #include <sys/typedef.h> #include <sys/task.h> #include <sys/memory.h> #include <sys/aspace.h> #include <sys/core.h> #include <sys/cpu.h> #include <sys/util.h> #endif_ese_sys_kernel_h_
43 : /*** NoName\include\sys\memory.h ***/ #ifndef_ese_sys_memory_h_ #define_ese_sys_memory_h_ extern unsigned int memory_upper; extern unsigned int num_free_page; extern void memory_initialize(unsigned int upper); extern void reserve_memory(unsigned int start, unsigned int size); extern void *alloc_page(void); extern void free_page(void *page); extern sys_grow_heap(Task *self, int size); #endif_ese_sys_memory_h_
44 : /*** NoName\include\sys\multiboot.h ***/ /* multiboot.h - the header for Multiboot */ /* Copyright (C) 1999 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
45 : /*** NoName\include\sys\multiboot.h ***/ /* Macros. */ /* The magic number for the Multiboot header. */ #define MULTIBOOT_HEADER_MAGIC0x1BADB002 /* The flags for the Multiboot header. */ #define MULTIBOOT_HEADER_FLAGS0x00010003 /* The magic number passed by a Multiboot-compliant boot loader. */ #define MULTIBOOT_BOOTLOADER_MAGIC0x2BADB002 /* The size of our stack (16KB). */ #define STACK_SIZE0x4000 /* C symbol format. HAVE_ASM_USCORE is defined by configure. */ #ifdef HAVE_ASM_USCORE # define EXT_C(sym)_ ## sym #else # define EXT_C(sym)sym #endif
46 : /*** NoName\include\sys\multiboot.h ***/ #ifndef ASM /* Do not include here in boot.S. */ /* Types. */ /* The Multiboot header. */ typedef struct multiboot_header { unsigned long magic; unsigned long flags; unsigned long checksum; unsigned long header_addr; unsigned long load_addr; unsigned long load_end_addr; unsigned long bss_end_addr; unsigned long entry_addr; } multiboot_header_t;
47 : /*** NoName\include\sys\multiboot.h ***/ /* The symbol table for a.out. */ typedef struct aout_symbol_table { unsigned long tabsize; unsigned long strsize; unsigned long addr; unsigned long reserved; } aout_symbol_table_t; /* The section header table for ELF. */ typedef struct elf_section_header_table { unsigned long num; unsigned long size; unsigned long addr; unsigned long shndx; } elf_section_header_table_t;
48 : /*** NoName\include\sys\multiboot.h ***/ /* The Multiboot information. */ typedef struct multiboot_info { unsigned long flags; unsigned long mem_lower; unsigned long mem_upper; unsigned long boot_device; unsigned long cmdline; unsigned long mods_count; unsigned long mods_addr; union { aout_symbol_table_t aout_sym; elf_section_header_table_t elf_sec; } u; unsigned long mmap_length; unsigned long mmap_addr; } multiboot_info_t; /* The module structure. */ typedef struct module { unsigned long mod_start; unsigned long mod_end; unsigned long string; unsigned long reserved; } module_t;
49 : /*** NoName\include\sys\multiboot.h ***/ /* The memory map. Be careful that the offset 0 is base_addr_low but no size. */ typedef struct memory_map { unsigned long size; unsigned long base_addr_low; unsigned long base_addr_high; unsigned long length_low; unsigned long length_high; unsigned long type; } memory_map_t; #endif /* ! ASM */
50 : /*** NoName\include\sys\queue.h ***/ /* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 上記著作権者は,以下の条件を満たす場合に限り,本ソフトウェア(本ソ * フトウェアを改変したものを含む.以下同じ)を使用・複製・改変・再配 * 布(以下,利用と呼ぶ)することを無償で許諾する. * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー * スコード中に含まれていること. * (2) 本ソフトウェアをバイナリコードの形または機器に組み込んだ形で利 * 用する場合には,次のいずれかの条件を満たすこと. * (a) 利用に伴うドキュメント(利用者マニュアルなど)に,上記の著作 * 権表示,この利用条件および下記の無保証規定を掲載すること. * (b) 利用の形態を,別に定める方法によって,上記著作権者に報告する * こと. * (3) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 * 害からも,上記著作権者を免責すること. * * 本ソフトウェアは,無保証で提供されているものである.上記著作権者は, * 本ソフトウェアに関して,その適用可能性も含めて,いかなる保証も行わ * ない.また,本ソフトウェアの利用により直接的または間接的に生じたい * かなる損害に関しても,その責任を負わない. * * @(#) $Id: queue.h,v 1.1 2000/11/14 14:44:21 hiro Exp $ */
51 : /*** NoName\include\sys\queue.h ***/ /* *キュー操作ライブラリ * * このキュー操作ライブラリでは,キューヘッダを含むリング構造のダブル * リンクキューを扱う.具体的には,キューヘッダの次エントリはキューの * 先頭のエントリ,前エントリはキューの末尾のエントリとする.また,キ * ューの先頭のエントリの前エントリと,キューの末尾のエントリの次エン * トリは,キューヘッダとする.空のキューは,次エントリ,前エントリと * も自分自身を指すキューヘッダであらわす. */ #ifndef_QUEUE_H_ #define_QUEUE_H_ /* * キューのデータ構造の定義 */ typedef struct queue { struct queue *next;/* 次エントリへのポインタ */ struct queue *prev;/* 前エントリへのポインタ */ } QUEUE;
52 : /*** NoName\include\sys\queue.h ***/ /* * キューの初期化 * * queue にはキューヘッダを指定する. */ Inline void queue_initialize(QUEUE *queue) { queue->prev = queue->next = queue; } /* * キューの前エントリへの挿入 * * queue の前に entry を挿入する.queue にキューヘッダを指定した場合 * には,キューの末尾に entry を挿入することになる. */ Inline void queue_insert_prev(QUEUE *queue, QUEUE *entry) { entry->prev = queue->prev; entry->next = queue; queue->prev->next = entry; queue->prev = entry; }
53 : /*** NoName\include\sys\queue.h ***/ /* * エントリの削除 * * entry をキューから削除する. */ Inline void queue_delete(QUEUE *entry) { entry->prev->next = entry->next; entry->next->prev = entry->prev; } /* * キューの次エントリの取出し * * queue の次エントリをキューから削除し,削除したエントリを返す.queue * にキューヘッダを指定した場合には,キューの先頭のエントリを取り出す * ことになる.queue に空のキューを指定して呼び出してはならない. */
54 : /*** NoName\include\sys\queue.h ***/ Inline QUEUE * queue_delete_next(QUEUE *queue) { QUEUE*entry; //assert(queue->next != queue); entry = queue->next; queue->next = entry->next; entry->next->prev = queue; return(entry); } /* * キューが空かどうかのチェック * * queue にはキューヘッダを指定する. */ Inline BOOL queue_empty(QUEUE *queue) { if (queue->next == queue) { //assert(queue->prev == queue); return(TRUE); } return(FALSE); } #endif /* _QUEUE_H_ */
55 : /*** NoName\include\sys\task.h ***/ #ifndef_ese_sys_task_h_ #define_ese_sys_task_h_ #include <sys/queue.h> #defineNumTask16 #defineTaskKernelStackSize(8*1024) #defineTaskUserStackSize(256*1024) #defineTaskStateNonExist0 #defineTaskStateReady1 #defineTaskStateWait2 #defineTaskStateActive4 #defineKernelCode0x8 #defineKernelData0x10 #defineUserCode(0x18 | 3) #defineUserData(0x20 | 3)
56 : /*** NoName\include\sys\task.h ***/ struct _Task { QUEUEqueue; Context*context; charkernel_stack[TaskKernelStackSize]; unsigned intuser_stack; intid; intstate; PageEntry*page_table; intheap; intheap_min; intheap_max; }; struct _Context { intcr3; intedi; intesi; intebp; intesp; intebx; intedx; intecx; inteax; inteip; };
57 : /*** NoName\include\sys\task.h ***/ struct _StackFrame { intes; intds; intedi; intesi; intebp; intesp2; intebx; intedx; intecx; inteax; interr; inteip; intcs; inteflag; intesp; intss; }; extern Task *active_task; extern Task *next_task; extern Task *idol_task; extern void task_initialize(void); extern Task *schedule(void); extern sys_create_task(Task *self, char *path); #endif_ese_sys_task_h_
58 : /*** NoName\include\sys\typedef.h ***/ #ifndef_ese_sys_typedef_h_ #define_ese_sys_typedef_h_ #defineNULL(0) #defineTRUE1 #defineFALSE0 #defineInlinestatic __inline__ typedefintBOOL; typedefunsigned charbyte; typedefunsigned shortword; typedefunsigned intdword; typedef struct _Task Task; typedef struct _Context Context; typedef struct _StackFrame StackFrame; typedef struct _PageEntry PageEntry; #endif_ese_sys_typedef_h_
59 : /*** NoName\include\sys\util.h ***/ #ifndef_ese_sys_util_h_ #define_ese_sys_util_h_ #defineROUNDUP(x, align)((((unsigned long)x) + (align) - 1) & ~((align) - 1)) #define CUTDOWN(x, align)(((unsigned long)x) / ((unsigned long)align) * ((unsigned long)align)) int strcmp(const char *s1, const char *s2); char *strcpy(char *dst, const char *src); void *memcpy(void *dst, const void *src, unsigned int len); void *memset(void *b, int c, unsigned int len); void printf_initialize(void); void printf (const char *format, ...); void panic(const char *msg); #endif_ese_sys_util_h_
60 : ここまでNoName\include\sys終了。
61 : ソースに興味が出てきたヤシは >>23 のリンク先をどうぞ。
62 : 荒らすならもっとおもろいの考えろやデブヲタヒッキーども
63 : ↓↓↓↓↓★ココだ★↓↓↓↓↓ http://www.pink-angel.jp/betu/linkvp/linkvp.html
64 : 頑張れよ〜 > 1
65 : >>22 >プロセス起動まであと一歩。 >24 時間以内にはユーザモードでプロセスを起動させたかったんだが残念。 >>23 >ページングをオンにしてみた。 >後はプロセス固有空間にメモリを割り当てELFを読込むだけ。 ファイルからどうやって読むんですか? ファイルシステムは? FDD/HDD からのドライバは? 「ページングをオンに」して、ページテーブルは作ってますか?
66 : >>65 なにが気に食わないのか。 へんな人…。 #荒らしを放置できなかった自分に反省します。 #以上、消えます
67 : NoName pagin oncreate init taskkore dake sika denaikedo iino?
68 : ソースがOSらしくて(・∀・)イイ!! 開発速くて(゚д゚)ウラヤマスィ...
69 : ELFについて調査中。 >>61 大量コピペは( ゚Д゚)ゴルァ >>65 >ファイルからどうやって読むんですか? GRUBにカーネルとは別にモジュールをロードする機能があるので、 ファイルシステムが出来るまではそれを使います。 >「ページングをオンに」して、ページテーブルは作ってますか? CR3をセットしてない状態でもPGフラグをオンに出来るのでしょうか? >>67 正常な動作です。まだ開発初期なのでデバッグプリントしか表示出来できません。 そのうちMGLか何かでも移植すると面白くなるかも。 >>68 >開発速くて(゚д゚)ウラヤマスィ... 今のところ昔書いたコードからコピペしてるからです。 多分デバドラとファイルシステムに入ったら速度落ちます。
70 : ま、ともかくがんばってね。
71 : OSKitとかってのは使えないの?
72 : プロセスの起動を試してるんだがお約束通りリセットがかかって上手く行かない。 もうちょっとちゃんと作らないとダメかな。 http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030228.tar.gz >>70 また〜りがんばります。 >>71 OSKit使えば凄いのが速攻で作れますが、 今回は一から作ってみたかったんです。
73 : >>72 bochs つかってみたら?gdbと連携すると超強力。拍子抜けするくらい。
74 : 趣味でエロサンプルムービー専門のサイトはじめました。 http://homepage3.nifty.com/digikei/sample/sample.html 気合入れてどんどん更新していきます
75 : >>74 MESばっかりじゃない?
76 : age.sf.jpに登録したら?
77 : >>73 P120のマシンを使ってるのできついです。plex86の方が早いらしいのですが、 デバッグをサポートする機能があるのかどうかわかりません。 一応二つとも試してみます。 >>76 う〜ん、今の段階ではあまりにもヘボすぎて登録するには気が引けます。
78 : >>77 まだ、起動に何秒もかかる代物じゃないんでしょ? バグが取れるならエミュレータで5分とかかかっても構わない気がするけど。 実際そんなにかからないだろうし。
79 : http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030301.tar.gz プロセスが起動。むちゃくちゃアホなミスでした。 一生懸命プロセスのコンテキストやスタックフレームを作ったのは良いけど、 プロセス構造体に入れとくのを忘れてました。どうりで動かないはずです。 プログラマ失格というより人間失格ですな。ってきます。 >>78 言われてみればそのとおりですね。 Bochs&GDB使って見ましたがかなり強力でした。 願わくばもうちょっとマシなマシンなら開発効率も上がるのですが。 さて、これからどんどんシステムコールを実装していくつもりなのでお楽しみに。
80 : **** YAHOO!BBのユーザーへの特報!!! **** 今YAHOO!BBでADSLを利用されてる方。 月額料金を無料にできる方法をお教えします。確実な方法です し方法も一つではなく何通りお教えしますので、ヤフーbbのユ ーザーである限り料金発生なくずっと使えます。 もう、2ちゃんねるを見た何人かのラッキーな方がすでに無料 で使用して頂いております。 興味のある方は以下のメールアドレスに連絡ください。 料金をとめる方法を少しの謝礼でお教えします。 ryoukinn5000@yahoo.co.jp ryoukinn2003@yahoo.co.jp よろしくお願いします。
81 : http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030301-2.tar.gz システムコールの経路を確保。 これでユーザプロセスからばんばんシステムコールを呼び出せます。 今のところinitプロセスはこんな感じ。get_task_id()がシステムコール。 あとprintf()の中でもputch()という一文字出力するシステムコールを呼んでいます。 #include "syscall.h" #include "util.h" int main(void) { int id = get_task_id(); printf("init task id = %d\n", id); while(1); return 0; }
82 : 明日はPITを使えるようにする予定。そのためにはIRQ周りをなんとかせねば。 そしてそれが終ればラウンドロビンでスケジューリング出来るハズ。 だんだんOSらしくなってきました。今が一番楽しい時期かもしれません。
83 : ースレ
84 : >>83 黙っとれ。 >>82 sage進行の方がいいんじゃないか?
85 : そろそろ名前をつけてくれぃ
86 : ひそかに期待・・・
87 : L様の覚え書き http://pc2.2ch.net/test/read.cgi/tech/1042375466/530
88 : >>84 そうします。 >>85 取り敢えずgikoというのはどうでしょうか? >>86 ありがとうございます。 気が変わってGUIの実装もしようかなと思っているので、 当初考えていたより結構面白くなるかもしれません。
89 : OS作ったら神!GUIについては WindowsとかマックとかLinuxとかは、いかにデスクトップをゴテゴテに するかを競っているかのように見えるが、それが終わったらどこへ向かうんだろう。 ある程度パソコンがわかるようになると途端にやることがなくなるよね。 パソコンって。自分だけかもしれないけどいかにシンプルでわかりやすい インターフェイスにするかってのを目指してほしいです。
90 : ライセンスの取り扱いはGPLでよろしいですか?
91 : >>89 environmentという意味でのOSを新しく作れたら神でしょうね。 MacとかTRONとか、あとUNIXなんかを作った人達は本当に神だと思います。 一方私なんかはせいぜいUNIXをパクったカーネルを書く程度です。 でも、いつかは神になりたいです(w GUIについては、そうですね、出来るだけシンプルかつ柔軟性に富み強力な ものが理想なのですが、そうすると全く新規に創造しなければいけなくなっ て大変ですから、今回はまずは何か既存のシンプルなものを移植するところ から始めたいと思います。 >>90 私が書いた部分に関してはPDSです。 kernel/printf.cとかinclude/sys/queue.hは他から流用したものなので それぞれのソースファイルの先頭に書いてあるライセンスが適用されます。 printf.cだとGPL。queue.hだとTOPPERSスタイルライセンスですね。
92 : なんか2ch見てると OSのでき = GUIのでき みたいな書き込みが散見されるんだけど アプリからは画面モード切替とフレームバッファのポインタさえ取得できれば十分な場合が多い ゲームなんかだと自力描画で独自GUIを実装するほうがフツーだとおもう。 widget setなどいわゆる「GUI」がほしけりゃ、microswindowsやらPicoGUIやらDJGPP用各種ライブラリやら ライブラリレベルでどーにでもなる ...というのはOSがグラフィックを管理してくれなかったDOS時代のジジイの世迷いごとでしょうか。
93 : >>92 >OSのでき = GUIのでき >みたいな書き込みが散見されるんだけど そういう観点で評価され、中身がクソでも大ブレイクしたのが 初期のMacOSやWin95ですからね。重要なんでしょう。 ユーザーの観点から見るとそうなる。 業務で使うときなど、OSがGUIを縛ることで、DOSの頃に比べ色々な アプリの操作性の統一が進んで使い方の習熟や「覚えていられるか」が 楽になったのが非常にありがたい。(人件費コスト等) #半年さわらないと使い方初心者に戻されてしまうMARKとかSTAR-CDは、、、
94 : 仮に0からOSを作る場合、POSIXとかの制約なしで、変えた方が便利な部分はなんだろう?
95 : http://www.geocities.co.jp/SiliconValley-Cupertino/5940/NoName-030302.tar.gz デバッグに手間取って遅くなってしまいましたが一応タイマを実装しました。 それとタスク(NoNameではプロセスのことをタスクと言います)を終了する システムコールも動くようになりました。次はキーボードドライバを実装する予定です。
96 : 一言コメントしたいのは、このソースは非常に綺麗だ、ということです。 特にそう思ったのは、core.S の dispatch ルーチンの単純さです。 今後もこの調子で成長できるのであれば素晴らしいですね。
97 : このソースで、"QUEUE"の部分は面白いです。 普通、リストやキューを使いたいときは、リストクラスの方が 「核となるデータを取り込む」か「核となるデータのポインタを持つ」 のが一般的だと思うのですが、このソースだと、逆さまに核となるデータ の一部(メンバ)に、キューの前後リンクポインタを持たせてしまってる んですね。単純だけど、面白いやり方ですね。 もしかして、私が常識知らずナだけで、一般に良く使われていたり?
98 : Windowsプログラムを流行出した頃から、本屋でよく見かけるC/C++プログラ ム中の関数名や変数名が、単語の区切りを大文字にする命名規則に従うものが 多くなった。 しかし、Cの伝統的なスタイルは、恐らく単語をアンダースコアで区切る ものだった(しかも省略形も多かった)。 聞いた話によると、「小文字の名前」は全く理由はわからないが、 人間には「見やすい」らしく、C言語が持てはやされた理由の一つだと も言われているらしい。 ちなみにこのソース、ほとんど小文字のアンダースコアスタイルが 用いられているが、単純に見やすく思う。ローカル変数や引数はやはり全部 小文字がいいのだろうか?
99 : struct Hoge { int huga; Hoge *next,*prev; }; Hoge* list_head = NULL; <後ろ頭>y-~~ のようにやるのは定石のような。
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
【ボロノート】1FD_OS【復活】 Linuxの将来 CTRONでマターリいこうよ OS作りに向いている言語は何ですが?