aka:UNIX SYSTEMS Programming
aka:UNIX SYSTEMS Programming
- UNIX SYSTEMS Programming
- Pt. I. Fundamentals
- Ch. 1. Technology's Impact on Programs
- Terminology of Change
- Asynchronous operation、ConcurrencyとCommunicationが昨今のソフトウエアを実現する重要キーワードという観点。
- Time and Speed
- Processor Cycleを一秒としたときの各部の動作スピード表がわかりやすい。
- quantumって、コンテキストスイッチの合間というかプロセスの処理割当時間なんだ。知らなかった。
- Multiprogramming and Time Sharing
- Multiprogrammingというのは、OSが複数のプロセスを扱えるということ。
- Timesharingというのは、(高速な)コンテキストスイッチによって、複数のプロセスをあたかも同時に処理しているように処理すること。
- Concurrency at the Application Level
- Processesはシンプルな並列処理方法。
- Threadsは、複数のプログラムカウンタによって、ひとつのProcessの中で並列処理を実現する方法。
- 共有メモリつきマルチプロセッサも並列処理を可能とする。
- 分散OS、分散オブジェクトシステムや分散計算ミドルウエアなども並列処理を実現。
- Security and Fault Tolerance
- 2000年からの10年は、Security and Fault Toleranceがソフトウエアのテーマとなるだろう。
- Buffer Overflows for Breaking and Entering
- Buffer Overflowsの説明。
- なぜ著者がこの節を入れたのかがわからない。前節のSecurityの具体例らしいのだが。
- もしかしたら単にこの本の出版時期にBuffer Overflowsがホットトピックだったのかもしれない。
- UNIX Standards
- POSIXは大事。
- この本のコードは、Solaris 9, Redhat Linux 8, Mac OS 10.2 で確認済みである。
- Additional Reading
- Ch. 2. Programs, Processes and Threads
- How a Program Becomes a Process
- Program: あらかじめ準備された命令列。
- Process: OSの中というか、OSが扱う概念というか実体。抽象的に言えば、Programの実行状態を指す。具体的にはOS内では構造体であり、その構造体は、Process ID、Process用アドレス空間、Processの状態、Threadと呼ばれるフロウ制御を少なくともひとつ(違う言い方をするとProcess Program Counter?)、等。
- Threads and Thread of Execution
- Thread of Execution: Process program counterが、次に実行すべき命令をきめる(というか、それを格納しているだけ?)。すると、それを過去未来に渡って俯瞰してみると、このProcessに関しProcessorが処理する命令列が見える。それをThread of Executionと呼ぶ。もちろん、Processorの方からみれば、複数のプロセスのThread of Executionをインタリーブして処理する。インタリーブの切替の部分の処理をContext Switchと呼ぶ。
- Symmetric Multi Processing: 複数のProcessorsをもったり複数のコアをもつことによって、ひとつのProcessの中に複数のThreads of Executionを持ち同時に実行することを可能とするアーキテクチャ。もちろん、OSがSMPに対応していることが必要。
- Thread: Threadは、Processと同じように、OSにおける概念または実体である。OSの中では構造体として取り扱われる。ThreadはProcessの中に存在し、ひとつのProcessの中でフロウ制御を表現するものであり、単一の場合も複数の場合もある。OSが複数のThreadに対応し、アーキテクチャがSMPのときは、複数ThreadsのProgramはSMPにおける複数Threads of Executionを活用できて効率があがる。なお、Threadは、Context Switchが存在しないProcessのようなものとも言える。
- Layout of a Program Image
- Program Image: Programが実行されるとき、メモリのブロックを割り当てられる。このブロックは、プログラムから見て、連続している。すなわち、アドレスに切れ目がない。Program ImageはOS毎にレイアウトが決っている。サンプルとして図2.1のものを本書では用いる。ちなみにブロックはOSから見ると必ずとも連続していない。OSはpageという単位でメモリを扱い、Program Imageもpagesに分割して取り扱われ、場合によってpagesは連続配置はされない。
- program text: この領域にProgramの命令列が格納される。
- initialized/uninitialized static data: static variablesが格納される。uninitializedの場合、ランタイムに領域が確保される。
- heap: malloc族が使う。
- stack or activation records: stackは関数呼出しを管理するための領域。関数呼出し毎にactivation recordが作成され、stackに追加される。activation recordは(return address, parameters, saved registers, automatic variables)等から構成される。activation recordの実際の構成は、ハードウエアとプログラミング言語に依る。
- Static variableは複数スレッドでは危険なので注意して使用すること。
- 加えて、Command-line argumentsとenvironment variablesを保持する領域あり。
- Library Function Calls
- Library functions の詳細は、man pagesを確認せよ。
- 伝統的なUNIX関数は、エラーの際に、戻り値を-1として、errnoにエラーの内容や種別を示す値を格納する。
- POSIXでは、新しく作成する関数については、errnoを使わずにそれ用の値を戻り値として返すように決めた。
- perrorとかstderrorとかの使い方や振舞について説明。しかしなんでこのタイミングでエラーの取扱いについてやるのかがわからん。なのでここを掘る気がおきない。動機がわかったら戻ってやることにする。
- Function Return Values and Errors
- 堅牢なProgramを書くためには、自分が書いた関数が同じProgramの中で、数千回も呼出されることであろうことを念頭に置くべき。
- そのとき、エラーの取扱いは重要。
- ライブラリ関数達は、よい関数を書くためのよいモデルである。ガイドライン的に12事項を提示。
- Argument Arrays
- メモ:ポインタ
- この節で、char ***hoge(...)とかでてくる。何これこわい。
- T.B.D.
- Thread-Safe Functions
- Use of Static Variables
- Structure of Static Objects
- Process Environment
- Process Termination
- Exercise: An env Utility
- Exercise: Message Logging
- Additional Reading
- Ch. 3. Processes in UNIX
- Ch. 4. UNIX I/O
- Ch. 5. Files and Directories
- Ch. 6. UNIX Special Files
- Ch. 7. Project: The Token Ring
- Pt. II. Asynchronous Events
- Pt. III. Concurrency
- Pt. IV. Communication
Last modified : 2012/02/05 09:58:50 UTC