オペ―レーティングシステムの読み書き#3                 2011/11/7            Nagoya geekbar
今回はuser構造proc構造
C言語の空間モデル   Text     命令列の格納領域   Data     非0で初期化されたデータ領域   Bss     0で初期化されたデータ領域   Stack     自動(auto)変数の格納領域     関...
変数の宣言と空間配置int i;                // BssInt j = 1;            // Datamain(){  static int k = 1;   // Data  int l = 1;       ...
a.outと空間の関係                                     CPU                                                   PC                  ...
割り込みが起こると……..                           PSWのモードがカーネル          CPU                           モードに変わり、空間が切り           PC    ...
空間の切り替え 1                  CPU                   PCアプリケーション                        カーネル                  PSW              ...
空間の切り替え 2                           savu(u.u_rsav);                           retu(rp->p_addr);  text  data  bss   user   ...
Unixの空間モデル   アプリとカーネルのアドレス域は分離     仮想記憶サポートで少し変わるけど、v6の時点で      は完全に別空間     各アプリケーションの空間は独立   カーネルの空間は     Text,Data,...
PPDA - Per Processor Data Area OSを読み解く場合に最初に注目する構造 プロセスなどの実行単位毎に割り当てる領域 UNIXの場合はuserとproc
struct user0413 struct user0414 {0415 int u_rsav[2]; /* save r5,r6 when exchanging stacks */0416 int u_fsav[25]; /* save f...
struct proc0358 struct proc0359 {0360 char p_stat;0361 char p_flag;0362 char p_pri;      /* priority, negative is high */0...
おわり
Upcoming SlideShare
Loading in …5
×

V6read#3

1,383 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,383
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
20
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

V6read#3

  1. 1. オペ―レーティングシステムの読み書き#3 2011/11/7 Nagoya geekbar
  2. 2. 今回はuser構造proc構造
  3. 3. C言語の空間モデル Text  命令列の格納領域 Data  非0で初期化されたデータ領域 Bss  0で初期化されたデータ領域 Stack  自動(auto)変数の格納領域  関数呼び出し時のレジスタ退避域注)スレッドは、まだ存在しないので対象外
  4. 4. 変数の宣言と空間配置int i; // BssInt j = 1; // Datamain(){ static int k = 1; // Data int l = 1; // Stack int m; // Stack :}
  5. 5. a.outと空間の関係 CPU PC a.out header text text data data exec(2) bss ・関数を呼 び出すと自3076 /* read in first 8 bytes 動的に割り3077 * of file for segment 当てる。3078 * sizes: ・呼び出し3079 * w0 = 407/410/4113080 * w1 = text size からの復帰3081 * w2 = data size に備えてレ3082 * w3 = bss size stack ジスタの内3083 */ 容を退避。
  6. 6. 割り込みが起こると…….. PSWのモードがカーネル CPU モードに変わり、空間が切り PC 替わる。割り込みの種類に応 ② ① じて、ベクターテーブルの値 がPCに書き込まれる text ③ text data data 割り込みの種類に応じて、ベ クターテーブルの値がPCに bss bss 書き込まれるアプリケーション カーネル stack stack
  7. 7. 空間の切り替え 1 CPU PCアプリケーション カーネル PSW 00: カーネルモード text 11: ユーザモード text data 11用 00用 data APR0 APR0 APR1 APR1 bss APR2 APR2 bss APR3 APR3 APR4 APR4 APR5 APR5 APR6 APR6 struct user stack APR7 APR7 stack I/Oレジスタ
  8. 8. 空間の切り替え 2 savu(u.u_rsav); retu(rp->p_addr); text data bss user user user user user IOレジスタ text text text text text data data data data data bss bss bss bss bss stack stack stack stack stack
  9. 9. Unixの空間モデル アプリとカーネルのアドレス域は分離  仮想記憶サポートで少し変わるけど、v6の時点で は完全に別空間  各アプリケーションの空間は独立 カーネルの空間は  Text,Data,Bssは一部を除いて共有  Stackはアプリ毎に個別  Stackはstruct userのページの後半
  10. 10. PPDA - Per Processor Data Area OSを読み解く場合に最初に注目する構造 プロセスなどの実行単位毎に割り当てる領域 UNIXの場合はuserとproc
  11. 11. struct user0413 struct user0414 {0415 int u_rsav[2]; /* save r5,r6 when exchanging stacks */0416 int u_fsav[25]; /* save fp registers */0417 /* rsav and fsav must be first in structure */0418 char u_segflg; /* flag for IO; user or kernel space */0419 char u_error; /* return error code */0420 char u_uid; /* effective user id */0421 char u_gid; /* effective group id */0422 char u_ruid; /* real user id */0423 char u_rgid; /* real group id */0424 int u_procp; /* pointer to proc structure */
  12. 12. struct proc0358 struct proc0359 {0360 char p_stat;0361 char p_flag;0362 char p_pri; /* priority, negative is high */0363 char p_sig; /* signal number sent to this process */0364 char p_uid; /* user id, used to direct tty signals */0365 char p_time; /* resident time for scheduling */0366 char p_cpu; /* cpu usage for scheduling */0367 char p_nice; /* nice for scheduling */0368 int p_ttyp; /* controlling tty */0369 int p_pid; /* unique process id */0370 int p_ppid; /* process id of parent */0371 int p_addr; /* address of swappable image */0372 int p_size; /* size of swappable image (*64 bytes) */0373 int p_wchan; /* event process is awaiting */0374 int *p_textp; /* pointer to text structure */0376 } proc[NPROC];
  13. 13. おわり

×