Comments
Description
Transcript
序文(pdf)
序文 オペレーティングシステムは,あらゆるコンピュータシステムの本質部分である.同様に,オ ペレーティングシステムの教育は,あらゆる計算機科学または情報科学教育の本質部分である. 子供向けのゲームから,政府や多国籍企業のための極めて高度な事業企画ツールに至るまで,い まやコンピュータは,実際のところすべての領域であまねく利用されるものとなった.このた め,オペレーティングシステムの分野は,常に急速な技術変化の中にある.しかし,一方で,オ ペレーティングシステムの基本的な諸概念は,変化することのない明確なものであり続けてい る.このような普遍の基本概念が,本書の基盤をなしている. 本書は,大学の学部 3 ∼ 4 年レベル,あるいは大学院修士課程 1 年レベルにおける,オペレー ティングシステム入門コースの教科書として作成した.また,現場の専門家に役に立つことも想 定している.本書では,オペレーティングシステムの根底にある諸「概念」を明確に記述してい る.基本的なデータ構造,コンピュータ構成,および C 言語などの高水準言語に読者が親しんで いることが,本書の前提である.オペレーティングシステムを理解する上で必要なハードウェア の話題は,第 1 章に含まれている.コード例には,大部分は C 言語,一部で Java 言語を用いた. ただし,これらの言語の詳細を知らなくても読者がアルゴリズムを理解できるようにしてある. 本書では,各種の概念を直感的に記述している.重要な理論的結果を包含しているが,形式的 証明は省略した.参考文献として,当該結果を最初に発表し証明した研究論文を示し,さらに, 読むべき資料を示すようにした.証明の代わりに,問題となっている結果が正しいであろうこと を示す図表や例を提示している. 本書に取り上げた基本的な概念とアルゴリズムの多くは,現在の商用のオペレーティングシス テムで使用されているものを基にしている.われわれの狙いは,これらの概念とアルゴリズム を特定のオペレーティングシステムによらない形で述べることにある.また,最も普及し最も 時代をリードしてきたオペレーティングシステム,たとえば,サンマイクロシステムズ社(Sun Microsystems)の Solaris,Linux,Mach,マイクロソフト社(Microsoft)の MS-DOS,Windows NT,Windows 2000 および Windows XP,DEC 社の VMS および TOPS-20,IBM 社の OS/2,そ してアップル社(Apple)の Mac OS X などに対応した,多くの例を記載した. なお,本書でオペレーティングシステムの例として Windows XP と記しているときは,Windows XP と Windows 2000 の両方を指す.Windows XP には存在するが Windows 2000 には存在しない 機能については,その都度述べる.Windows 2000 には存在するが Windows XP には存在しない 機能のときには,Windows 2000 と明記した. iv 序文 本書の構成 本書の構成は,オペレーティングシステムの教育コースにおける著者らの長年の経験を反映し たものである.また,原稿を査読いただいた方々の結果や,前版への読者のコメントも考慮して いる.さらに,IEEE Computing Society と Association for Computing Machinery(ACM)両学 会の合同タスクフォースが発行した,オペレーティングシステム教育のための計算機科学のカリ キュラム(Computing Curricula 2001)の提案にも対応している. 読者には,各章を順に読み進まれることを勧める.これにより,オペレーティングシステムに ついて最も丁寧に学習できる.一方,章(や節)の順序を変更して読むことも可能である. 本書の内容 本書は 8 部から構成されている. • 第 I 部「概要」:第 1 章と第 2 章では,オペレーティングシステムとは何か,何をするもの か,そして,どのように設計され構成されているかを説明する.オペレーティングシステ ムが持つ共通の機能は何か,オペレーティングシステムはユーザに対して何をしてくれる のか,また,コンピュータオペレータに対しては何をしてくれるのかについて述べる.記 述は目的を中心に,自然な説明をしている.これらの章では,内部的にどのように処理さ れているかは論議しない.したがって,これらの章は,オペレーティングシステムとは何 かを,その内部アルゴリズムに立ち入らずに理解したい読者,または入門課程の学生にも 適切である. • 第 II 部「プロセス管理」:第 3 章から第 7 章では,オペレーティングシステムの心臓部であ るプロセスの概念と並行性について述べる.プロセスとはシステム内の仕事の単位のこと である.システムは並行に実行するプロセスの集まりから構成されており,いくつかのプ ロセスはオペレーティングシステムのプロセス(システムコードを実行する)であり,残 りはユーザプロセス(ユーザコードを実行する)である.これらの章では,プロセススケ ジューリングの方法,プロセス間通信,プロセス間同期およびデッドロックの処理などに ついて述べる.また,スレッドについての議論も行う. • 第 III 部「メモリ管理」:第 8 章と第 9 章では,プロセスを実行中のメインメモリの管理を 扱う.CPU 利用率とユーザへの応答速度を向上させるために,コンピュータのメモリには いくつかのプロセスを入れておかなければならない.メモリ管理のアプローチに応じてメ モリ管理方式には様々な形態があり,個々のアルゴリズムの効率も状況によって異なる. • 第 IV 部「記憶管理」:第 10 章から第 13 章は,ファイルシステム,大規模記憶,および I/O が,現在のオペレーティングシステムでどのように扱われているかについて述べる. ファイルシステムは,ディスク上のデータとプログラムの両方について,実行時の貯蔵と アクセスのためのメカニズムを提供する.これらの章では,記憶管理の古典的な内部アル ゴリズムと構造を述べる.アルゴリズムに関しては,その特性や利点と欠点など,具体的 かつ実際的な理解を与える.コンピュータに接続される I/O デバイスには多様な種類があ るため,アプリケーションがそれらの全機能を制御できるように,オペレーティングシス 序文 v テムは幅広い機能を提供する必要がある.I/O システムの設計,インタフェースおよび内 部的なシステム構造と機能など,システムの I/O について深く議論する.一般に,I/O デ バイスは最も低速なコンピュータの主要な構成要素である.I/O デバイスは効率上のボト ルネックとなるため,性能に関する問題も検証する.二次記憶および三次記憶に関する話 題についても述べる. • 第 V 部「保護とセキュリティ」:第 14 章と第 15 章では,互いに相手の動作から保護されな ければならないオペレーティングシステム内のプロセスについて議論する.保護とセキュ リティのために,オペレーティングシステムから適切な権限を与えられたプロセスだけが, ファイル,メモリ,CPU,およびその他の資源を処理できることを保証するメカニズムが 用いられる.保護とは,プログラム,プロセスあるいはユーザが,コンピュータシステム で定義されている資源にアクセスするのを制御するためのメカニズムである.このメカニ ズムは,課せられるべき制御を指定する手段を,強制する手段とともに提供しなければな らない.セキュリティは,システムに格納された情報(データとコード)とコンピュータ システムの物理的資源とを,権限のないアクセス,悪意ある破壊と改変および偶然のミス から保護する. • 第 VI 部「分散システム」:第 16 章から第 18 章では,メモリと時刻を共有していないプロ セサの集まりである分散システムを扱う.システムの様々な資源にユーザがアクセスでき るので,分散システムでは,計算速度やデータの可用性と信頼性が向上する.分散システ ムでは,分散ファイルシステムもユーザに提供される.分散ファイルシステムは,ファイ ルサービスシステムの一種で,ユーザ,サーバ,および記憶デバイスは,分散システム内 のサイトに分散して配置される.分散システムは,プロセスの同期と通信のための様々な メカニズムと,デッドロック問題をはじめとする,集中システムでは発生しない種々の不 具合に対応するためのメカニズムも提供しなければならない. • 第 VII 部「専用システム」:第 19 章と第 20 章では,リアルタイムシステムとマルチメディ アシステムという二つの専用システムを扱う.これらのシステムは,本書の他の部分で焦 点を当てている汎用システムとは異なる,特定の要件が与えられている.リアルタイムシ ステムには,計算結果が「正しい」ということだけでなく,指定された時限内に結果が得 られなければならないという要件がある.マルチメディアシステムでは,与えられた時間 枠内にマルチメディアデータがクライアントに送達されなければならないという,サービ ス品質保証上の要件がある. • 第 VIII 部「事例研究」:第 21 章から第 23 章では,実際のオペレーティングシステムについ て解説することで,本書に述べた概念をまとめる.具体的には,Linux,Windows XP,お よび Windows 2000 について述べる.Linux を取り上げた理由は,一時期の UNIX は,学習 に都合が良い程度に小さく,かつ「おもちゃ」ではないオペレーティングシステムであっ たからである.UNIX の内部アルゴリズムの多くは,速度や緻密性より簡潔性を重視して 選ばれていた.Linux は計算機科学科あるいは情報科学科に用意されていて,多くの学生 は,これらのシステムにアクセスできる.Windows XP と Windows 2000 を取り上げた理 由は,UNIX とは大きく異なる設計と実装を持つ現代のオペレーティングシステムを学ぶ vi 序文 機会を与えてくれるからである.第 23 章では,オペレーティングシステムの発展に寄与し たオペレーティングシステムについて手短に説明している. オペレーティングシステムの環境 本書では,現実のオペレーティングシステムの例を多数用いて,オペレーティングシステムの 基本概念を説明する.ただし,マイクロソフト系列のオペレーティングシステム(Windows NT, Windows 2000,Windows XP を含む)と UNIX の様々なバージョン(Solaris,BSD,Mac OS X を含む)を特に注視している.さらに,Linux オペレーティングシステムに関しては,本書を書 いた時点での最新版のカーネル(バージョン 2.6)について,かなり紙面を割いている. 本文では,C 言語と Java 言語で書かれたプログラム例を多く提示している.これらのプログラ ムは以下のプログラミング環境で動作することを想定している. • Windows システム:Windows システムでの基本的なプログラミング環境は,Win32 API (Application Programming Interface)である.Win32 API は,プロセス,スレッド,メモリ および周辺デバイスを管理するための機能を提供している.本書には,Win32 API の使用 方法を説明するための C プログラム例を種々記載している.例示プログラムは,Windows 2000 と Windows XP 上でテストした. • POSIX:POSIX(Portable Operating System Interface)は,主に UNIX ベースのオペレー ティングシステムで実装されている標準機能の集まりである.Windows XP や Windows 2000 でも POSIX プログラムを実行することはある程度可能ではあるが,基本的に UNIX と Linux システム上での POSIX に焦点を絞っている.POSIX 準拠システムでは,POSIX コ ア標準(POSIX.1)を必ず実装していなければならないことになっている.Linux,Solaris, および Mac OS X は,そのような POSIX 準拠システムの例である.POSIX は,リアルタイ ム拡張(POSIX1.b),スレッドライブラリ拡張(Pthreads として知られている POSIX1.c) など,さらにいくつかの拡張標準を定義している.Pthreads やリアルタイムプログラミン グ拡張を含めて POSIX ベースの API を解説するために C 言語によるプログラミング例を 提示している.例示したプログラムは,gcc 3.3 コンパイラを用いて,Debian Linux 2.4 と 2.6,Mac OS X,および Solaris 9 でテストした. • Java:Java は広く使われているプログラミング言語である.豊富な API を持ち,スレッド の生成および管理機能を言語に内蔵している.Java プログラムは,Java 仮想機械(JVM: Java Virtual Machine)を支援しているオペレーティングシステムなら,どれででも動作す る.様々なオペレーティングシステムとネットワーク概念について,いくつかの Java プロ グラムを使って説明する.テストには JVM1.4 を用いた. Windows と Unix/Linux という二つの最も普及しているオペレーティングシステムと,広く使 われている Java 環境とを代表している点で,これら三つのプログラミング環境を取り上げた.読 者が C 言語に親しんでいることを想定して,ほとんどのプログラミング例は C 言語で書かれてい る.C 言語と Java 言語の両方を知っている読者は,本書のほぼすべてのプログラムを簡単に理解 できるはずである. 序文 vii スレッド生成などいくつかの箇所では,同じ概念を,これら三つのプログラミング環境すべて で説明している.これによって,読者は同じ仕事をする三つの異なるライブラリを比較検討で きる.一方,ある概念の説明に一つの API しか用いない箇所もある.たとえば,共有メモリは POSIX API だけを使って説明しており,TCP/IP でのソケットプログラミングでは Java API を 使っている. 練習問題と課題 本文に述べた概念をはっきりさせるために,POSIX や Win32 API,あるいは Java を用いたプ ログラミングの練習問題および課題を章末に記載した.課題には標準的な練習問題よりも濃い内 容を取り上げている.これには,Linux カーネルにシステム呼出しを追加する課題,fork() シス テム呼出しを使って UNIX シェルを作成する課題,マルチスレッドの行列計算処理,共有メモリ を使った生産者−消費者問題などがある. 謝辞 本書はこれまでに発行した版を基にしている.当初の三つの版は James Peterson との共 著である.これまでの版の作成には,次の方々にもご協力いただいた.Hamid Arabnia,Rida Bazzi,Randy Bentson,David Black,Joseph Boykin,Jeff Brumfield,Gael Buckley,Roy Campbell, P. C. Capon,John Carpenter,Gil Carrick,Thomas Casavant,Ajoy Kumar Datta,Joe Deck, Sudarshan K. Dhall,Thomas Doeppner,Caleb Drake,M. Racsit Eskicioglu,Hans Flack,Robert Fowler,G. Scott Graham,Richard Guy,Max Hailperin,Rebecca Hartman,Wayne Hathaway, Christopher Haynes,Bruce Hillyer,Mark Holliday,Ahmed Kamel,Richard Kieburtz,Carol Kroll, Morty Kwestel,Thomas LeBlanc,John Leggett,Jerrold Leichter,Ted Leung,Gary Lippman, Carolyn Miller,Michael Molloy,Yoichi Muraoka,Jim M. Ng,Banu Ozden,Ed Posnak,Boris Putanec,Charles Qualline,John Quarterman,Mike Reiter,Gustavo Rodriguez-Rivera,Carolyn J. C. Schauble,Thomas P. Skinner,Yannis Smaragdakis,Jesse St. Laurent,John Stankovic,Adam Stauffer,Steven Stepanek,Hal Stern,Louis Stevens,Pete Thomas,David Umbaugh,Steve Vinoski, Tommy Wagner,Larry L. Wear,John Werth,James M. Westall,J. S. Weston,Yang Xiang. 第 12 章の一部は,Hillyer and Silberschatz [1996] に基づいている.第 17 章の一部は,Levy and Silberschatz [1990] に基づいている.第 21 章は,Stephen Tweedie による未発表原稿に基づいて いる.第 22 章は,Dave Probert,Cliff Martin,Avi Silberschatz による未発表原稿に基づいてい る.Mike Shapiro,Bryan Cantrill および Jim Mauro には,Solaris 関連のいくつかの質問に答え ていただいた.Josh Dees と Rob Reynolds には,Microsoft .NET の記載に寄与していただいた. UNIX シェルインタフェースを設計,拡張する課題は,バーモント州ウィヌスキのセントマイケ ルズカレッジの John Trono から寄稿されたものである. 今回の版では多くの練習問題を追加したが,これらは Arvind Krishnamurthy から提供を受け たものである. 今回の版を査読していただいた次の方々に感謝いたします.Bart Childs,Don Heller,Dean Hougen,Michael Huangs,Morty Kewstel,Euripides Montagne,John Sterling. viii 序文 企画編集者の Bill Zobrist と Paul Crockett は,今回の版を作成する上での専門的な手引きを作 成してくれた.Simon Durkin はこの二人を補佐し,本企画を順調に進めるためのこまごましたこ とを管理してくれた.編集制作責任者は Ken Santor であった.表紙のイラストは Susan Cyr が, 表紙デザインは Madelyn Lesure が担当した.Beverly Peavler が原稿の編集作業をした.校正担 当は Katrina Avery,索引編集担当は Rosemary Simpson であった.Marilyn Turnamian は図表の 作成を手伝ってくれた. 最後に,著者らの個人的な感謝を付け加えたい.Abraham は大学に復帰し,Valerie と結婚す ることで,人生の新たな節目を迎えた.そのおかげで,Abraham は心の平穏を得て,本書の執筆 に集中することができた.Peter はこの企画の進行中,理解し支援してくれた家族や友人,同僚 に感謝する.Greg は家族の絶え間ない興味と支援に感謝する.また,友人の Peter Ormsby には とりわけ感謝したい.彼はどんなに忙しいときでも,まず「執筆は進んでいるかい?」と尋ねて くれた. Abraham Silberschatz, New Haven, CT, 2004 Peter Baer Galvin, Burlington, MA, 2004 Greg Gagne, Salt Lake City, UT, 2004