オペ―レーティングシステムの読み書き#1                 2011/9/26            Nagoya geekbar
UNIX/BSD/Linuxを読み解く Lions本読書会に出てみた 本だけで読み解くのは大変 +簡単な解説で理解できる人は増えるはず 拙者のネタとしてGeekBarで毎週やってみる     名古屋にいないときは新横浜から     ...
教材 Lions Commentary on UNIX   ASCII Books 3990円     ○ 原著OnLine版     ○ http://v6.cuzuco.com/v6.pdf     ○ http://www.lemis...
simh 古いコンピュータのシミュレータ Ubuntuでは apt-get install simh ドキュメントは     /usr/share/doc/simh/pdp11_doc.pdf pdp11のシミュレータの起動  $ pd...
2.9bsdの実行環境 - 準備 https://github.com/magoroku15/2.9BSD Downloadsでtar.gzを落とす 展開    $tar xfovz Dounloads/magoroku15-2.9BSD...
2.9bsdの実行環境 – 使ってみる$ cat README- How to start simh with this system in ubuntu.  pdp11 bsd.ini- How to boot.  rl(0,0)rlunix...
なぜ2.9bsdを使うのか v6, v7はエディタがedなので……. コンパイラが吐くpdp11のアセンブラを眺め  ると雰囲気がわかる 仕様を理解する場合のリファレンスとして  使う
このあたり
Commentary On UNIXに戻って2 Fundamentals (PDFだとP4)  命令セット9 Hardware Interrupt and Traps (PDFのP42)  割り込みをちょこっとだけ
Processor Status Word
各ビットの内容14,15   current mode (00 = kernel;)12,13   previous mode (11 = user;)5,6,7   processor priority (range 0..7)4      ...
実はCPUはみな同じ人気のある別のCPUの例11   OF オーバーフローフラグ.符号付演算で桁あふれが発生した場合にセットされる.10   DF ディレクションフラグ.ストリング操作命令においてポインタの増減方向を示す.09   IF インタ...
レジスタr0, r1 are used as temporary accumulators during expression    evaluation, to return results from a procedure, and in ...
CPUの処理   以下を繰り返す     PCから命令を読み     解析して     実行   実行の副作用として、PSWを書き換え    たり、PCを書き換えたり、SPの示すメ    モリの内容を書き換えたりする
誤解しやすい点 PCもレジスタの一種 比較と分岐は別命令 サブルーチンの呼び出・復帰     スタックに状態を退避・復元
CPUが命令の実行に失敗したら?   たとえば     丌正なアドレスを参照した     未定義の命令を実行しようとした     0で割り算した   次の命令はどこから取り出せばよい?
Trap “わな”を仕掛けておく   CPUが身動きが取れなかった場合に次    に命令を取り出す場所を“わな”として    仕掛けておく
PDP11での“わな”の種類 Vector Location   type                        priority       004         Bus timeout                    7  ...
“わな“のプログラム 1段目unix/low.s        05100500 / low core   0511 / trap vectors0501              0512 trap; br7+0. / bus error  ...
“わな”のプログラム 2段目0752 .globl trap, call      0761 mov $1,SSR00753 /* -------------- */   0762 jsr r0,call1; _trap0754 .globl ...
“わな”のプログラム 3段目2693 trap(dev, sp, r1, nps, r0, pc, ps)2694 {                                    2715   default:2695 registe...
3段目の処理 Location               type              USER       KERNEL   004      Bus timeout                  SIGBUS       pan...
大事な仕事 2751   case 6+USER: /* sys call */ 2752   u.u_error = 0; 2753   ps =& ~EBIT; 2754   callp = &sysent[fuiword(pc-2)&07...
sysent2906 * to the appropriate routine for processing a system call.2907 * Each row contains the number of arguments2908 ...
open systemcallのライブラリglobl _open, cerror_open:      mov   r5,-(sp)      mov   sp,r5      mov   4(r5),0f      mov   6(r5),0...
/usr/include/sys.sindir   = 0.exit    = 1.fork    = 2.read     = 3.write   = 4.                 systent[]のindexopen     = ...
System callの呼び出し1.   C言語で      open(“aa”, 2)2.   Libcで     sys 5 sysはemulator trap instruction3.   3段目で      5を取り出して4.   s...
Trap/Interupt を理解する   OSの骨格を形成している
次回は   引き続き trap/Interupt
おわり
Upcoming SlideShare
Loading in …5
×

V6read#1

1,388 views
1,309 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,388
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

V6read#1

  1. 1. オペ―レーティングシステムの読み書き#1 2011/9/26 Nagoya geekbar
  2. 2. UNIX/BSD/Linuxを読み解く Lions本読書会に出てみた 本だけで読み解くのは大変 +簡単な解説で理解できる人は増えるはず 拙者のネタとしてGeekBarで毎週やってみる  名古屋にいないときは新横浜から  月1でぐだ生でも取り上げる
  3. 3. 教材 Lions Commentary on UNIX  ASCII Books 3990円 ○ 原著OnLine版 ○ http://v6.cuzuco.com/v6.pdf ○ http://www.lemis.com/grog/Documentation/Lions/book.pdf On Line Manual pdf版  http://cm.bell-labs.com/7thEdMan/bswv7.html Simh  PDP11のシミュレータ  V6,v7はedしか使えないので2.9BSDを用意 (viが使えます)
  4. 4. simh 古いコンピュータのシミュレータ Ubuntuでは apt-get install simh ドキュメントは /usr/share/doc/simh/pdp11_doc.pdf pdp11のシミュレータの起動 $ pdp11 PDP-11 simulator V3.8-1 sim>
  5. 5. 2.9bsdの実行環境 - 準備 https://github.com/magoroku15/2.9BSD Downloadsでtar.gzを落とす 展開 $tar xfovz Dounloads/magoroku15-2.9BSD-2fa33c4.tar.gz $ls ~/magoroku15-2.9BSD-2fa33c4 root.dsk README bsd.ini home.dsk setup.ps swap.dsk usr.dsk自分でやってみたい人はhttp://gitter.matrix.jp/を参考にするよい
  6. 6. 2.9bsdの実行環境 – 使ってみる$ cat README- How to start simh with this system in ubuntu. pdp11 bsd.ini- How to boot. rl(0,0)rlunix- How to change multiuser ^d login: root- How to quit shimh # sync; sync; sync; ^esim> q
  7. 7. なぜ2.9bsdを使うのか v6, v7はエディタがedなので……. コンパイラが吐くpdp11のアセンブラを眺め ると雰囲気がわかる 仕様を理解する場合のリファレンスとして 使う
  8. 8. このあたり
  9. 9. Commentary On UNIXに戻って2 Fundamentals (PDFだとP4) 命令セット9 Hardware Interrupt and Traps (PDFのP42) 割り込みをちょこっとだけ
  10. 10. Processor Status Word
  11. 11. 各ビットの内容14,15 current mode (00 = kernel;)12,13 previous mode (11 = user;)5,6,7 processor priority (range 0..7)4 trap bit3 N, set if the previous result was negative2 Z, set if the previous result was zero1 V, set if the previous result gave an overflow0 C, set if the previous operation gave a carry
  12. 12. 実はCPUはみな同じ人気のある別のCPUの例11 OF オーバーフローフラグ.符号付演算で桁あふれが発生した場合にセットされる.10 DF ディレクションフラグ.ストリング操作命令においてポインタの増減方向を示す.09 IF インタラプト・イネーブルフラグ.このフラグをクリアすると外部割込みを受け付 けなくなる.08 TF トラップフラグ.デバッガなどでシングルステップ実行するときにセットするフラ グ.07 SF サインフラグ.演算結果の符合をあらわす.演算結果が負になった場合にセットさ れ,正になった場合にクリアされる.06 ZF ゼロフラグ.演算結果がゼロの場合にセットされる.04 AF 補助キャリーフラグ.BCD演算で使われるキャリーフラグ(詳細については別途 調べてね).02 PF パリティフラグ. 演算結果の各ビットについて,1となるビットが偶数のときは セットされ,奇数のときはクリアされる. つまり,演算結果の各ビットの1の数とPF を足すと必ず奇数になるようになっている. パリティチェックの常套手段.01 CF キャリーフラグ.演算の結果,桁上がりが生じた場合にセットされる.
  13. 13. レジスタr0, r1 are used as temporary accumulators during expression evaluation, to return results from a procedure, and in some cases to communicate actual parameters during a procedure call;r2, r3, r4 are used for local variables during procedure execution. Their values are almost always stored upon procedure entry, and restored upon procedureexit;r5 Is used as the head pointer to a ``dynamic chain„‟ of procedure activation records stored in the current stack. It is referred to as the ``environment pointer.r6 (also known as ``sp) is used as StackPointerr7 (also known as ``pc) is used asthe program instruction address register.
  14. 14. CPUの処理 以下を繰り返す  PCから命令を読み  解析して  実行 実行の副作用として、PSWを書き換え たり、PCを書き換えたり、SPの示すメ モリの内容を書き換えたりする
  15. 15. 誤解しやすい点 PCもレジスタの一種 比較と分岐は別命令 サブルーチンの呼び出・復帰  スタックに状態を退避・復元
  16. 16. CPUが命令の実行に失敗したら? たとえば  丌正なアドレスを参照した  未定義の命令を実行しようとした  0で割り算した 次の命令はどこから取り出せばよい?
  17. 17. Trap “わな”を仕掛けておく CPUが身動きが取れなかった場合に次 に命令を取り出す場所を“わな”として 仕掛けておく
  18. 18. PDP11での“わな”の種類 Vector Location type priority 004 Bus timeout 7 010 Illegal instruction 7 014 bpt-trace 7 024 iot 7 034 power failur 7 114 emulator trap instruction 7 240 11/10 parity 7 244 floting point error 7 250 Segumentation violation 7
  19. 19. “わな“のプログラム 1段目unix/low.s 05100500 / low core 0511 / trap vectors0501 0512 trap; br7+0. / bus error 0513 trap; br7+1. / illegal instruction0505 br7 = 340 0514 trap; br7+2. / bpt-trace trap0506 0515 trap; br7+3. / iot trap0507 . = 0^. 0516 trap; br7+4. / power fail0508 br 1f 0517 trap; br7+5. / emulator trap0509 4 0518 trap; br7+6. / system entry
  20. 20. “わな”のプログラム 2段目0752 .globl trap, call 0761 mov $1,SSR00753 /* -------------- */ 0762 jsr r0,call1; _trap0754 .globl _trap 0763 / no return0755 trap:0756 mov PS,-4(sp)0757 tst nofault サブルーチンコール。0758 bne 1f C言語のtrapを呼び、0759 mov SSR0,ssr 戻りる先はアセンブ0760 mov SSR2,ssr+4 ラのエントリcall1
  21. 21. “わな”のプログラム 3段目2693 trap(dev, sp, r1, nps, r0, pc, ps)2694 { 2715 default:2695 register i, a; 2716 printf("ka6 = %o¥n", *ka6);2696 register struct sysent *callp; 2717 printf("aps = %o¥n", &ps);2697 2718 printf("trap type %o¥n", dev);2698 savfp(); 2719 panic("trap");2699 if ((ps&UMODE) == UMODE)2700 dev =| USER; 2750 2721 case 0+USER: /* bus error *2702 switch(dev) { 2722 i = SIGBUS;2703 2723 break;2704 2724
  22. 22. 3段目の処理 Location type USER KERNEL 004 Bus timeout SIGBUS panic 010 Illegal instruction SIGINS panic 014 bpt-trace SIGTRC panic 024 iot SIGIOT panic 034 power failur SIGEMT panic 114 emulator trap instruction SystemCall - 240 11/10 parity panic panic 244 floting point error SIGFPT SIGFPT 250 Segumentation violation SIGSEG panic
  23. 23. 大事な仕事 2751 case 6+USER: /* sys call */ 2752 u.u_error = 0; 2753 ps =& ~EBIT; 2754 callp = &sysent[fuiword(pc-2)&077];•PCは”わな”に落ちた命令の次のアドレス•この命令は2バイトなので2を引いて•プログラムも空間からword(2バイト)を読み•下位6ビットを取り出す•この値をindexにしてsysentを見ると
  24. 24. sysent2906 * to the appropriate routine for processing a system call.2907 * Each row contains the number of arguments2908 * and a pointer to the routine.2909 */2910 int sysent[]2911 {2912 0, &nullsys, /* 0 = indir */2913 0, &rexit, /* 1 = exit */2914 0, &fork, /* 2 = fork */2915 2, &read, /* 3 = read */2916 2, &write, /* 4 = write */2917 2, &open, /* 5 = open */
  25. 25. open systemcallのライブラリglobl _open, cerror_open: mov r5,-(sp) mov sp,r5 mov 4(r5),0f mov 6(r5),0f+2 sys 0; 9f bec 1f jmp cerror1: mov (sp)+,r5 rts pc.data9: sys open; 0:..; ..
  26. 26. /usr/include/sys.sindir = 0.exit = 1.fork = 2.read = 3.write = 4. systent[]のindexopen = 5.close = 6.wait = 7.creat = 8.
  27. 27. System callの呼び出し1. C言語で open(“aa”, 2)2. Libcで sys 5 sysはemulator trap instruction3. 3段目で 5を取り出して4. sysent[5] カーネル内のopen処理を見つけ5. Open処理を呼ぶ
  28. 28. Trap/Interupt を理解する OSの骨格を形成している
  29. 29. 次回は 引き続き trap/Interupt
  30. 30. おわり

×