1read 100read
2011年10月1期OSOSの設計(マジで
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
WindowsがMacより優れている点は *BSDがLinuxに勝っている点を何とか挙げていくスレ MYリカバリCDを作ろう ! GUIとか使ってるやつってバカ。
OSの設計(マジで
1 :02/02/02 〜 最終レス :12/01/09 単純なOSをマジで設計してみたい人&情報提供者集まれー CUIのシングルタスク(ノンプリエンプション)仮想記憶なし 他のOS上で疑似OSでもいい とかなら可能かな? ハードに近い部分や1から作るのが現実的でない部分は既存のモジュール使ったり 情報待ちます 部品として何が必要かとか
2 : 2げーーーーと!!!!
3 : バカはいくら集まってもバカ
4 : いや、でも素朴な疑問なんだけどさ、OSって実のところどうやって作るの?検索かけても全然出てこないし… Linuxのソースでもみるかなぁ… ってかOSって基本的にどういう仕組みで動いてるんだ
5 : >>4 OSは、アーキテクチャ(物理構成)から考えなきゃダメなんです。 カーネルに最低でもAPIの実装とドライバまわりがあれば、 後はモジュールをくっつけるだけです。
6 : >>5 想像してみたんですが kernelprogram→APILIB→DeviceDriver→BIOS→チップで CPUモード(OS走る時、ユーザプログラム走る時)の制御機能も必要すよね あとマシンとドライバからの割り込み制御と資源割当プログラム(ジョブスケジューラ、イニシエータとか?) とファイルシステムと・・って多いなー汗 詳しい説明キボンヌ
7 : 成る程、誰か詳しい人はおらんかね。MS−DOSレベルの話でもいいんだが…
8 : 凄い時間かかりそうだけどマターリといきませう
9 : まずここを読んでこい >OSを基礎から学ぶには? >ttp://pc.2ch.net/test/read.cgi/os/1004069708/ 参考文献もいくつか紹介されているから、それも読んでみるといい。
10 : MVSの教科書には、資源問題とかいろいろ書かれてたな。
11 : イイね!(・▽・ )
12 : FreeDOSのソースでも見ろ。
13 : >>1 プログラムとか設計とかの経験はどれくらいあるの? MS-DOS程度でいいんならFreeDOSのソースでも見たら? www.freedos.org
14 : >12 13 情報サンクス 昨日検索で見つけたヨ!(・▽・ )ソース探す 経験少ないから最初はコード見るのと微少変更から始めてみます とりあえずGaryNuttの実習Linuxかーねる買ってみた
15 : 出来上がったら、フリーで使わせて。
16 : >>3 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´∀`)< オマエモナー ( ) \_____ | | | (__)_)
17 : 素人計画なので出来るかどうかもワカラソ(´Д`;)
18 : とりあえずFreeDOSカーネル(DOS-C)は C85%アセンブラ15%の32000行(注釈抜き)らしい
19 : マイヤーサソ応援age
20 : >18 LionsのUNIX本みてUNIX互換にしたら? 全部で一万行でドライバまで入っていたはずだよ。 calderaからソースダウンロードできるしね。
21 : >18サンクス しかしやっぱ膨大な量勉強しないといけないですね もっと本読まないとだ(・.・ )学んできます
22 : 関連ページなどまとめ bw-www.ie.u-ryukyu.ac.jp/~j97010/minix/ www.bell-labs.com/topic/books/os6-book/index.html www.freedos.org/ guriponn.tripod.co.jp/docs/index.htm
23 : 結局マイヤータンはUNIX系(Posix云々と言ったほうがいいのかな?)を 目指すの?漏れはDOSフェチだからDOS系を勉強してみるか。
24 : とりあえず基礎知識がもっと全然必要みたいだから UNIXカーネルとCとアセンブラを0から勉強します PoP'N-MuWOTAタン頑張りませう!(・▽・ )
25 : 漏れはシェルスクリプトとちょっとしたC,CASL,Pythonぐらいしか しらないんですが。(;´Д`)これを気に勉強してみるか。
26 : 面白そうだネ。 ところで「はじめての486」買った? あれ勉強になるね。Intelのマニュアルよりとっつきやすい。 FreeDOSの起動コードなら結構分かりやすいから そこから地味に"Booting ??OS..."ってやるのもいいね。
27 : やっぱhttp://www.imasy.or.jp/~kawai/osask/ 見て作るべき。
28 : >>27 (;´∀`) ...
29 : >>OSASK ス。。スゴスギル。。。(´Д`;)
30 : >>28, >>29 どうよ?
31 : 天才っているんだネ・・・。(´`;) まぁ一般人はコツコツやっていこう・・・ Web資料(現在) アセンブラ(x86) http://www.d1.dion.ne.jp/~ecb/assembler/assembler00.html MINIXカーネル2.0研究 http://bw-www.ie.u-ryukyu.ac.jp/~j97010/minix/ Linuxカーネル2.2研究 http://www03.u-page.so-net.ne.jp/da2/h-takaha/internal/index.html >>FreeDOS教徒タン これかな http://www.ascii.co.jp/books/detail/4-7561/4-7561-0213-1.html
32 : PC/ATのブートについての資料ってどっかにあるかな
33 : >>32 起動などの資料 PC/ATブート構造 http://www.tkcity.net/~nobusan/boot/boot.html Linuxカーネルの起動詳細 http://lkh.linux.or.jp/24kernel/source/html4/boot.html LILO他 http://www.linux.or.jp/JF/JFdocs/LILO-README/intro.html ブートセクタのプログラミング http://www.cityfujisawa.ne.jp/~slcc/misc/electric-tips/boot.txt
34 : >>33 こんな早くレスつくと思わんかったです。 ありがとう。
35 : >>32 いいページ見つかったヨカタ(´∀` )ブート奥深・・
36 : 本のタイトル間違ってた。マイヤーたんゴメソ。 しばらくコテハン捨てます(w ところでワシも何か手伝おうか?ブートコード程度なら書くべ。 既存のOSからパチってくるだけだけど(w
37 : >>オオ 見たことないしブートコード見てみたいヨ スレ乗せられる?
38 : FreeDOSのboot.asm見てみたんだけど250行くらいあるね(´_`;)
39 : >>マイヤーたん。250行なんて、こんなのまだまだ軽いもんだYO!! 道は遠いね・・・ぼちぼちやっていった方がよさそう。
40 : ゴメソ スレに乗りきらないって意味だったんだけど実際キツイと思う リナクスのコード量がファイルシステム 127,000デバイスドライバ 963,000 ネットワーク 151,000その他 259,000 合計 1,500,000行だもんね・・・ ぼちぼちやっていくよ(一生かかりそうだけど(´∀` ;)
41 : Lionsようやく読み終わったぞと。 意味不明な場所多すぎだったけど。(;´Д`)
42 : >>41 Lionsは苦手だ…折れVAX知らないし。ていうか知ってるほうがスゴイ(w >>40 スマソ ていうかLinuxのコードは1人で管理できないよ…(;´Д`) ここは1つ 5万行ぐらいでシンプルなOS作ったらどうかな? 何かいるもんある?? とりあえず… http://www.capricorn.cse.kyutech.ac.jp/~tate/tako/80x86.html アセンブリャならここ見とけ。垂涎ものだべ。
43 : >>42 激しくThanx!
44 : おいらも昔OS作りに憧れてさ、ここまでは作ったんだけどねぇ フロッピーにぶちこみゃぁ起動すっぺ。 # set real mode. .code16 .text .org 0x00 .globl start start: mov $0x07c0, %ax mov %ax, %ds mov $bootmes, %si call message mov $newline, %si call message call idle message: cld lodsb or %al, %al jz done mov $0xe, %ah mov $7, %bx int $0x10 jmp message done: ret idle: hlt jmp idle bootmes: .ascii "Hello, world!" newline: .byte 10, 13, 0 pad: .word boottag - . .fill 10, 1, 0 .org 510 boottag: .word 0xaa55
45 : 良スレの予感。なのか?
46 : あとHeroさんのx86資料は読みやすくて奥が深い。 http://ns2.sitedesign.co.jp/~hero/hero.htm それと割り込み関連ではDBIOSのマニュアルが凄い。 Googleあたりで検索してくだされ。 こんだけ出せばOS作れるだろ(ぉ
47 : >>42 > とりあえず… > http://www.capricorn.cse.kyutech.ac.jp/~tate/tako/80x86.html > アセンブリャならここ見とけ。垂涎ものだべ。 おい。あほなこと言ってんじゃねーよ。 どうせ暇だろIA-32アーキテクチャマニュアルにしろ。 http://www.intel.co.jp/jp/developer/design/pentium4/manuals/index.htm せめてレディオテクニカだな。 ns2.sitedesign.co.jp/~hero/chm/X86CPU.CHM んで、汗はあるのか? MASM32 : www.movsd.com/masm.htm NASM : www.web-sites.co.uk/nasm/
48 : >>44 あはは、そういうの作ったよ漏れも…(泣 >>47 初心者にはこれぐらいの分量で良かろう。 普段ニーモニック調べるときは重宝するで。すげえ軽いし。
49 : >>44 ていうか、GASかよ! >>31 > アセンブラ(x86) http://www.d1.dion.ne.jp/~ecb/assembler/assembler00.html > 今、アセンブラのコンパイラって結構手に入らないみたいですね。 ナエワラタ 他は結構まともなのにねぇ。。。 BIOSの資料その他はInterrupt Requestを筆頭に 調べる気さえあればいくらでも英語圏から出てくる。 ビデオ周りのInterrupt Requestを一部和訳したヤシもいたから欲しけりゃ調べろ。 FDDブートはOSASKかThinkOSのML@Free-MLで既出だ。
50 : 日本語の資料が欲しけりゃ金出せ。
51 : 漏れ親切過ぎるな…しばらく引っ込むか。 >>49 ThinkOSでそんな投稿あったっけ?て漁ってたら しばらくぶりに動いてるよ…なんだなんだ??
52 : >>51 おおっ!本当だ。ってかLightConeたんが動いてる?(ワクワク > こんな2CHが立ってたんですね・・・。 にはワラタよ。 .....多重スレ違いスマソ。 で、ブートあったかと思ったら漏れにもわからなくなった。スマソ。
53 : ThinkOSじゃなかった。 http://www.freeml.com/ml_mess.php?ml=silverbullet&pg=1 の17番だ。
54 : VisualBasicしかできないけど、手伝うよ。
55 : >>49 すげーな。こっち見てたほうがよっぽどためになる。 ThinkOSは完全にネタだな、LightConeたん出た時点で(w >>54 激藁。マジならスマソ。 おまけ。NASMでやってみた。 segment .text org 0x7C00 cli cld xor ax,ax mov ss,ax mov ds,ax mov bp,0x7C00 lea sp,[bp-0x20] sti mov byte [BootDrive],dl print: mov si,FirstBootMes xor bx,bx mov ah,0x0E _print: lodsb cmp al,'$' je lazy int 0x10 jmp short _print lazy: hlt jmp short lazy BootDrive db 0 FirstBootMes db "Loading OS-AGE...",10,13,'$' times 0x01FE-$+$$ db '$' SectorEndSign dw 0xAA55 …実力ねぇなあー(泣
56 : ブートが実は簡単だってことはわかったんで、 次はファイルシステムを設計しよう。これができればやる気増大だと思う。 メモリマネージャとかタスクマネージャとかはしばらくほっとけ。 それと、メモリのどの番地にどんな情報をいれとくかって事も決めておこう。
57 : >>56 複数の事を同時に勉強中なので頭脳がクラッシュしそうです。 先に漏れの頭の中のスケジューリングを構築しなければ(;´Д`)
58 : スレ違いだけど、NASMって消滅したの?
59 : >>58 なんで? ちゃんとあるだろ? 製作者が消えても確かGPLだから消滅しないし。
60 : >>59 今のオフィシャルサイトって http://www.octium.net/nasm/ に変わったの?
61 : >>60 書いてあることを読む限りそうみたいだね。 http://www.web-sites.co.uk/nasm/ には何も書いてないみたいだけど。
62 : ついクセで man nasm ってやる自分が好き。cmd.exeは氏ね。
63 : ;==================================== ;NAME:print_char ;説明:1文字出力 ;IN: ; AL:INPUT CHAR ; DL:X DH:Y ;OUT: ; NONE ;=================================== print_char: push cx push bx ;move cursol mov ah,02h ;service num ;mov dh,cl ;Y ;mov dl,ch ;X mov bh,00h ;page int 10h ;put char mov ah,0ah ;service num mov bh,00h ;page mov bl,01h ;color ;mov al,byte ptr btmsg mov cx,01h ;how many write char int 10h pop bx pop cx ret
64 : ;====================================================================== ;NAME:print_str ;説明: 文字列出力、文末に00h必要 ; この命令後、カーソルの位置(DL値)はX方向に文字数だけずれる ;IN: ; AX:INPUT STRING ADDRES ; DS:INPUT STRING SEGMENT ; DL:X DH:Y ;OUT: ; AX:CHARACTER NUM ;====================================================================== print_str: push cx push bx push si push ds mov si,ax mov cx,ax pslp1: mov al,ds:[si] ;mov ax,si ;mov ah,00h ;call print_hex ;jmp pslp2 test al,al ;al=0? jz pslp2 call print_char inc si inc dl jmp pslp1 pslp2: mov ax,si sub ax,cx pop ds pop si pop bx pop cx ret
65 : ;=================================== ;NAME:disp_1num ;説明:1文字出力 ;IN: ; BX:INPUT NUM ; DL:X DH:Y ;OUT: ; NONE ;=================================== disp_1num: push cx push bx push ax ;move cursol mov ah,02h ;service num ;mov dh,cl ;Y ;mov dl,ch ;X mov bh,00h ;page int 10h mov ax,bx cmp ax,0ah jae over9 add ax,030h jmp ok over9: add ax,037h ok: ;put char mov ah,0ah ;service num mov bh,00h ;page mov bl,01h ;color ;mov al,byte ptr btmsg mov cx,01h ;how many write char int 10h pop ax pop bx pop cx ret
66 : ;=================================== ;NAME:print_shex ;説明:ALを16進表示 ;IN: ; AL:INPUT NUM ; DL:X DH:Y ;OUT: ; NONE ;=================================== print_shex: push bx push dx mov bx,ax and bx,0f0h ;shr bx,04h shr bx,01h shr bx,01h shr bx,01h shr bx,01h call disp_1num mov bx,ax and bx,0fh inc dx call disp_1num pop dx pop bx ret
67 : ;=================================== ;NAME:print_hex ;説明:AXを16進表示 ;IN: ; AX:INPUT NUM ; DL:X DH:Y ;OUT: ; NONE ;=================================== print_hex: push bx push dx mov bx,ax and bx,0f000h ;rol ax,04h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h call disp_1num mov bx,ax and bx,0f00h ;shr bx,08h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h shr bx,01h inc dx call disp_1num mov bx,ax and bx,0f0h ;shr bx,04h shr bx,01h shr bx,01h shr bx,01h shr bx,01h inc dx call disp_1num mov bx,ax and bx,0fh inc dx call disp_1num pop dx pop bx ret
68 : ;============================================================ ;mem_dump ;説明: MEMORYを見る ; IN AX:MEMORY_ADDR BX:MEMORY_SEGMENT ; DH:DISP_Y DL:NUM_LINE ;========================================================== mem_dump: push ds push si push cx push dx push ax push bx xor cx,cx mov cl,dl mov ax,cs mov ds,ax mov dl,0ch mov ax,offset maplowmem call print_str pop bx pop ax push ax push bx mov ds,bx mov si,ax ;mov dx,0507h inc dh inc dh mov dl,07h call print_hex mov ax,bx mov dl,02h call print_hex pop bx pop ax push ax push bx mov dl,0ch ;5行目の0c番目から書く ;mov bx,0610h ;6*16bytes out mov bh,cl mov bl,010h
69 : mdlp0: mov al,byte ptr [si] call print_shex inc si dec bl jz line_end inc dl inc dl inc dl jmp mdlp0 line_end: inc dh mov dl,0ch mov bl,010h dec bh jnz mdlp0 pop bx pop ax pop dx pop cx pop si pop ds ret maplowmem: DB '00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F',00h
70 : ;============================================================ ;reg_dump ;説明: REGISTERを見る ;========================================================== reg_dump: push di push es push si push ds push dx push cx push bx push ax ; push cs push di push es push si push ds push dx push cx push bx push ax mov ax,cs mov ds,ax mov ax,offset rdlabela mov dx,0190ah call print_str mov ax,offset rdlabelb mov dx,01b0ah call print_str pop ax mov dx,01a0ah call print_hex pop ax mov dx,01a10h call print_hex pop ax mov dx,01a16h call print_hex pop ax mov dx,01a1ch call print_hex
71 : pop ax mov dx,01c0ah call print_hex pop ax mov dx,01c10h call print_hex pop ax mov dx,01c16h call print_hex pop ax mov dx,01c1ch call print_hex mov ax,cs mov dx,01c22h call print_hex pop ax pop bx pop cx pop dx pop ds pop si pop es pop di ; pop cs ret rdlabela: DB 'ax bx cx dx',00h rdlabelb: DB 'ds si es di cs ip',00h
72 : 数年前にブートの仕組みを探ってた時に書いた奴です。 アセンブラもその時初めて勉強したんで無駄な処理も多いかと思います。
73 : >>72 解読させていただきます。ども。
74 : >>72 386以上に限定すればもっと短くなりそうやね。 でも、この量は鯖にあげたほうが良かったかも…
75 : マクロと386以上向けの最適化を行えば鯖にあげる必要はなさそう、 と言ってみる。 INCはどんなときでも連続2回までだよもん。
76 : 漏れはやっぱまだまだだから、鯖でも提供してサポートするよ、 と言ってみる。 つうかアセンブラの勉強してたらなんかForthに魅かれてるんですが。
77 : 鯖を提供する前になにもできてないぞ(W で、みんなアセンブラで書いてるけど、どの段階からCで書けるようになるの? 分担して、ついに2chOSとかできたら面白いね。
78 : つうか超基本的な部分はアセンブラ、後は OS?SKのAS?Aみたいに主とする機能を使いやすく 特化した言語でも作ってやってみたいんだが。 スマソ、各部品がエージェント(人工知能的オブジェクト) なOSで、SSTPとかで通信しあうという妄想において話しました。
79 : >>78 妄想以前に電波のかほり。 前段と後段のつながりがわからんぞ。 「専門の言語を使用して特殊なOSを作る」ということか? それぐらい大掛かりになるとサイト作った方がいいぞ。
80 : >>77 カーネルはCで書けるはずだよ。がんばれば。 漏れはアセンブリャしか出来ないからよー分からんが。 >>78 そんな大それた計画はOS作ってから言って呉れ。
81 : >>78 川合とおんなじ電波の周波数だな。
82 : ところで、よく見たらこのスレはOSの「設計」で「実装」じゃないじゃん。 そこらへんどうよ?
83 : >>82 別に?流れでどうにかなるでしょ
84 : 技術バリバリはここ! Come Here ! http://pc.2ch.net/test/read.cgi/tech/1013246022/
85 : 開発環境は、VMwareを2つ起動させて片方のゲストOS上で 開発→仮想フロッピーに書き込んで、 もう片方のVMwareはその仮想フロッピーを使って再起動。 ある程度のとこ来るまでは、これが最強っぽいなぁ。
86 : 1.グローバルディスクリプタの作成・設定 2.割り込みディスクリプタの作成・設定 3.A20ビットのマスク解除 4.CR0のPEビットをセット 5.セグメントレジスタの再設定 はじめて読む486によると、この手順でプロテクトモードに移行するらしい。 グローバルディスクリプタとか割り込みディスクリプタってのは、 ちゃんと考えて設定しなきゃならんのかな? とりあえずプロテクトモードに移るまでのソースきぼんぬ。
87 : にちゃんねるでこんなこと聞くほうが間違ってるな。
88 : >>86 (抜粋:マト違いならゴメソ) CR0(コントロール レジスタ0)の最下位ビットのPEビットが1になると、プロセッサはプロテクト モードに切り換わります。 プロセッサは、プロテクト モード用の設定が完了していなくてもプロテクト モードで実行が開始されます。 つまり、 最初の割り込み、far命令によるプログラム遷移、或いはセグメント レジスタの設定があるまで走ることになります。 この時点でプロセッサはディスクリプタ テーブルへのアクセスを要求します。 保護機構は、ディスクリプタ テーブルに依存 するため、ディスクリプタ テーブルが初期化されていなければ、システムはシャット ダウンとなります。 プロテクト モードの初期化には、GDT(グローバル ディスクリプタ テーブル)とIDT(割り込みディスクリプタ テーブル)の初期設定、 および最初のプロセスのためにTSS(タスク ステート セグメント)の作成が必要最低限のものです。 おそらく初期のディスクリプタ テーブルはROMに格納されています。 しかし、CPUがディスクリプタにアクセスするためには、それを指すGDTRやIDTRを設定 する前にディスクリプタ テーブルをRAMへコピーします。 PEビットをセットしてプロテクト モードを許可する前に、GDTのアドレスとリミットとともにGDTRを設定します。 IDTにはコードを 指すゲートを入れておき、これらのコードが移行初期化中に発生した例外をトラップするようにすべきです。 IDTRは初 期化されてIDTを指し、TRにはGDT(3)のセレクタが設定されます。 その後、CR0(コントロール レジスタ0)のPEビットがセットされ て、プロテクト モードを許可します。 次にfar JMP命令がCSレジスタに有効なプロテクト モードのディスクリプタを設定します。 最後にスタック セグメント、スタック ポインタ、データ セグメントが設定されます。 初期化処理はOSを休止し、ページングを許可し、 アプリケーション プログラムを開始します。
89 : 初めて読む486にソース書いてあるじゃん。 LinuxやBSDでgrep -r lgdt lidt とかやった?
90 : $grep -r -e lgdt -e lidt だった。スマソ
91 : >>86 ココもドウゾ http://lkh.linux.or.jp/24kernel/source/html4/boot.html#id_354_
92 : すこしおしえてください。 「はじめて読む486」てVCversion6で動かないですよね。(version1かMC6) どうやって確かめてます?
93 : >>91 いい感じのページ紹介ありがとう!
94 : 読むだけ。 grubでブートプロセスまでを他OSからコピペ してなんか弄ったりしたいけど、やらないw
95 : >>92 Windows上ではなくDOS上で実行する。 NASM、MASMとかで作成。
96 : >>95 WindowsMeでDOSモードで起動する方法教えてクレクレ
97 : Delphiのインラインアセンブラで作れる?漏れとしてはこの環境でgoしたいんだけど
98 : A20の制御がWinに奪われてるからダメだってば。 ピュアなDOSかFreeDOSあたりがいいよ。
99 : >>96 次の方法でDOSにける 材料:FD1枚 料理方法: スタート - 設定 - コントロール パネル - アプリケーションの追加と削除で 起動ディスク作成でディスクを作成してそれで起動する。 環境を整えればできると思われ。 > アセンブル (PATHとか、いらない常駐物を消すとか。後は自分で検索するなりして調べてくれ)
100read 1read 1read 100read
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
WindowsがMacより優れている点は *BSDがLinuxに勝っている点を何とか挙げていくスレ MYリカバリCDを作ろう ! GUIとか使ってるやつってバカ。