SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
オペ―レーティングシステムの読み書き#3
                 2011/11/7
            Nagoya geekbar
今回は

user構造
proc構造
C言語の空間モデル
   Text
     命令列の格納領域
   Data
     非0で初期化されたデータ領域
   Bss
     0で初期化されたデータ領域
   Stack
     自動(auto)変数の格納領域
     関数呼び出し時のレジスタ退避域

注)スレッドは、まだ存在しないので対象外
変数の宣言と空間配置
int i;                // Bss
Int j = 1;            // Data

main()
{
  static int k = 1;   // Data
  int l = 1;          // Stack
  int m;              // Stack
  :
}
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/411
3080 * w1 = text size                                   からの復帰
3081 * w2 = data size                                   に備えてレ
3082 * w3 = bss size                      stack         ジスタの内
3083 */                                                 容を退避。
割り込みが起こると……..
                           PSWのモードがカーネル
          CPU
                           モードに変わり、空間が切り
           PC
                           替わる。割り込みの種類に応
                 ②
  ①                        じて、ベクターテーブルの値
                           がPCに書き込まれる
  text          ③ text

  data            data     割り込みの種類に応じて、ベ
                           クターテーブルの値がPCに
  bss                bss   書き込まれる


アプリケーション        カーネル



  stack           stack
空間の切り替え 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レジスタ
空間の切り替え 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
Unixの空間モデル
   アプリとカーネルのアドレス域は分離
     仮想記憶サポートで少し変わるけど、v6の時点で
      は完全に別空間
     各アプリケーションの空間は独立
   カーネルの空間は
     Text,Data,Bssは一部を除いて共有
     Stackはアプリ毎に個別
     Stackはstruct userのページの後半
PPDA - Per Processor Data Area
 OSを読み解く場合に最初に注目する構造
 プロセスなどの実行単位毎に割り当てる領域
 UNIXの場合はuserとproc
struct user
0413 struct user
0414 {
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 */
struct proc
0358 struct proc
0359 {
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];
おわり

Más contenido relacionado

La actualidad más candente

BlockSorting
BlockSortingBlockSorting
BlockSortingiuno
 
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Masahiko Sawada
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of LinuxTetsuyuki Kobayashi
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門sandai
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題にmagoroku Yamamoto
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 sandai
 
OpenSolaris Printing Environment
OpenSolaris Printing EnvironmentOpenSolaris Printing Environment
OpenSolaris Printing EnvironmentNaruhiko Ogasawara
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_aTom Hayakawa
 
Potlatch2の基本1
Potlatch2の基本1Potlatch2の基本1
Potlatch2の基本1Shu Higashi
 
Landscape of Norikra features
Landscape of Norikra featuresLandscape of Norikra features
Landscape of Norikra featuresSATOSHI TAGOMORI
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜbasicinc_dev
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話nullnilaki
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Kazuhiro Takahashi
 
Page frame management
Page frame managementPage frame management
Page frame managementsiburu
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7kingtomo
 

La actualidad más candente (20)

BlockSorting
BlockSortingBlockSorting
BlockSorting
 
Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理Bgworkerで簡易クラスタ管理
Bgworkerで簡易クラスタ管理
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of Linux
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
V6 unix in okinawa
V6 unix in okinawaV6 unix in okinawa
V6 unix in okinawa
 
仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に仮想記憶入門 BSD-4.3を例題に
仮想記憶入門 BSD-4.3を例題に
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
OpenSolaris Printing Environment
OpenSolaris Printing EnvironmentOpenSolaris Printing Environment
OpenSolaris Printing Environment
 
2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
 
Potlatch2の基本1
Potlatch2の基本1Potlatch2の基本1
Potlatch2の基本1
 
Landscape of Norikra features
Landscape of Norikra featuresLandscape of Norikra features
Landscape of Norikra features
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
Page frame management
Page frame managementPage frame management
Page frame management
 
Fluentd casual
Fluentd casualFluentd casual
Fluentd casual
 
Ctb57 with god7
Ctb57 with god7Ctb57 with god7
Ctb57 with god7
 

Similar a V6read#3

プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介MITSUNARI Shigeo
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014Shigeru Hanada
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価Satoshi Nagayasu
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門Knct-SG #1 Parser入門
Knct-SG #1 Parser入門y1r96 Ueno
 
Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)Takayuki Goto
 
Azure Storage Partition Internals
Azure Storage Partition  Internals Azure Storage Partition  Internals
Azure Storage Partition Internals Takekazu Omi
 
Boost.B-tree introduction
Boost.B-tree introductionBoost.B-tree introduction
Boost.B-tree introductionTakayuki Goto
 
2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめMakiko Konoshima
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camelssogabe
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 

Similar a V6read#3 (20)

V6read#4
V6read#4V6read#4
V6read#4
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
Boost tour 1_44_0
Boost tour 1_44_0Boost tour 1_44_0
Boost tour 1_44_0
 
PostgreSQL 12の話
PostgreSQL 12の話PostgreSQL 12の話
PostgreSQL 12の話
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
遊休リソースを用いた 相同性検索処理の並列化とその評価
遊休リソースを用いた相同性検索処理の並列化とその評価遊休リソースを用いた相同性検索処理の並列化とその評価
遊休リソースを用いた 相同性検索処理の並列化とその評価
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Knct-SG #1 Parser入門
Knct-SG #1 Parser入門Knct-SG #1 Parser入門
Knct-SG #1 Parser入門
 
Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)Proposed boost b_tree_library(ja)
Proposed boost b_tree_library(ja)
 
Stream2の基本
Stream2の基本Stream2の基本
Stream2の基本
 
Azure Storage Partition Internals
Azure Storage Partition  Internals Azure Storage Partition  Internals
Azure Storage Partition Internals
 
Boost.B-tree introduction
Boost.B-tree introductionBoost.B-tree introduction
Boost.B-tree introduction
 
2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ2011.06.11 v7から始めるunix まとめ
2011.06.11 v7から始めるunix まとめ
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 

Más de magoroku Yamamoto

Más de magoroku Yamamoto (20)

Deep learning入門
Deep learning入門Deep learning入門
Deep learning入門
 
波形で見るBig.little
波形で見るBig.little波形で見るBig.little
波形で見るBig.little
 
自動並列化コンパイラをAndroidに適用してみた
自動並列化コンパイラをAndroidに適用してみた自動並列化コンパイラをAndroidに適用してみた
自動並列化コンパイラをAndroidに適用してみた
 
Oscar compiler for power reduction
Oscar compiler for power reduction Oscar compiler for power reduction
Oscar compiler for power reduction
 
Unix v6 セミナー vol. 5
Unix v6 セミナー vol. 5Unix v6 セミナー vol. 5
Unix v6 セミナー vol. 5
 
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawaV6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
 
Adk2012
Adk2012Adk2012
Adk2012
 
Android binder-ipc
Android binder-ipcAndroid binder-ipc
Android binder-ipc
 
ぐだ生システム#2
ぐだ生システム#2ぐだ生システム#2
ぐだ生システム#2
 
ぐだ生って何
ぐだ生って何ぐだ生って何
ぐだ生って何
 
Android builders summit slide tour
Android builders summit slide tourAndroid builders summit slide tour
Android builders summit slide tour
 
第4回名古屋Android勉強会資料
第4回名古屋Android勉強会資料第4回名古屋Android勉強会資料
第4回名古屋Android勉強会資料
 
Poorman’s adk トレーナ
Poorman’s adk トレーナPoorman’s adk トレーナ
Poorman’s adk トレーナ
 
20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント20分でわかった事にするパワーマネジメント
20分でわかった事にするパワーマネジメント
 
Poormans sdk
Poormans sdkPoormans sdk
Poormans sdk
 
Ngk2011 b
Ngk2011 bNgk2011 b
Ngk2011 b
 
オレオレ家電
オレオレ家電オレオレ家電
オレオレ家電
 
Unixファイルシステムの歴史
Unixファイルシステムの歴史Unixファイルシステムの歴史
Unixファイルシステムの歴史
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
V6read#2
V6read#2V6read#2
V6read#2
 

V6read#3

  • 3. C言語の空間モデル  Text  命令列の格納領域  Data  非0で初期化されたデータ領域  Bss  0で初期化されたデータ領域  Stack  自動(auto)変数の格納領域  関数呼び出し時のレジスタ退避域 注)スレッドは、まだ存在しないので対象外
  • 4. 変数の宣言と空間配置 int i; // Bss Int j = 1; // Data main() { static int k = 1; // Data int l = 1; // Stack int m; // Stack : }
  • 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/411 3080 * w1 = text size からの復帰 3081 * w2 = data size に備えてレ 3082 * w3 = bss size stack ジスタの内 3083 */ 容を退避。
  • 6. 割り込みが起こると…….. PSWのモードがカーネル CPU モードに変わり、空間が切り PC 替わる。割り込みの種類に応 ② ① じて、ベクターテーブルの値 がPCに書き込まれる text ③ text data data 割り込みの種類に応じて、ベ クターテーブルの値がPCに bss bss 書き込まれる アプリケーション カーネル stack stack
  • 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. 空間の切り替え 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. Unixの空間モデル  アプリとカーネルのアドレス域は分離  仮想記憶サポートで少し変わるけど、v6の時点で は完全に別空間  各アプリケーションの空間は独立  カーネルの空間は  Text,Data,Bssは一部を除いて共有  Stackはアプリ毎に個別  Stackはstruct userのページの後半
  • 10. PPDA - Per Processor Data Area  OSを読み解く場合に最初に注目する構造  プロセスなどの実行単位毎に割り当てる領域  UNIXの場合はuserとproc
  • 11. struct user 0413 struct user 0414 { 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. struct proc 0358 struct proc 0359 { 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];