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とか使ってるやつってバカ。