Upload
naruhiko-ogasawara
View
1.721
Download
2
Embed Size (px)
DESCRIPTION
尻切れとんぼで申し訳ないがまあ勉強会の議論のネタにということで。
Citation preview
Operating System ってなんだろう?
おがさわらなるひこnaruoga at twitter, gmail, hatena
@ Study Party Basics of Computer
その前に重要な注釈この資料を書いている人はOS の専門家でもなければ
カーネルのソース一つ読んだことがないたんなるうんちく好きです。
間違ってもこの資料を本気にしないで自分で確かめてね。
あと日立よりの記述が多いのはぼくの大学の恩師が日立中研で OS の
開発をやってたからです。
さらに言うと組み込み系はなにも知らないのでなかったことになってます。ひどい。
Agenda
まずは歴史から OS の「本分」って何だろう? ネタになりそうなキーワード列挙
Agenda
まずは歴史から OS の「本分」って何だろう? ネタになりそうなキーワード列挙
OS 前史
コンピュータ黎明期には OS は存在しなかった 昔のコンピュータはパンチカードやテープで
プログラムを食わせて、順に実行していくのが普通だった
複数のプログラム間を調停する必要はない プログラムはそのコンピュータ専用に機械語
(後にアセンブラ)でかかれるのが当然 ハードウェアの抽象化などいらない
OS の誕生①
SHARE (IBM のユーザーズグループ ) アセンブリでコケたジョブは取り除くとか、暴
走したジョブを殺すとか人手やるの大変 GM と North Americal Aviation が GM/NAA I/O
system ってのを作ったよ! と自慢 SHARE Operating System (SOS) の提案 IBM 704 にて実装 (1953)
IBM 帝国の基礎となった存在
OS の誕生②
こういう発想は SOS が最初ではなかった 簡単なジョブ管理をするソフト「モニタ」 例えば日立中研ではモニタを 1963 年には自前
で書いていた 商用 FORTRAN の発売より必要とされた
ポイントは、このようなソフトに Operating System という名前がついたこと
元々は IBM 用語
TSS ショック①
OS でバッチジョブが効率化して分かったこと 9 割のジョブは本体処理が非常に小さいので、
前準備と後始末の時間がムダになる 並列で実行していく方が効率がいい
「タイムシェアリングシステム」考案 CPU タイムを分割して複数ジョブを実行する マルチプロセス、マルチユーザの時代到来 最初の実装は MIT の McCathy (Lisp の発明者 )
主導 (1957) on modified IBM 704
TSS ショック②
「ジョブ」から「プロセス」へ 逐次実効される「ジョブ」から並列実行される
「プロセス」という概念の登場 有限のハードウェア資源を分け合う
「資源管理」が OS の機能として認識される 特権レベルという考え方の導入
ファイルの所有権といったセキュリティの概念の萌芽が産まれる
管理者対ハッカーの長い戦いの始まり
MULTICS①
MIT の Saltzer教授を中心に、 GE ( 後にコンピュータ部門を Honeywell に売却 ) 、 AT&Tベル研究所の共同研究による理想の OS
高水準言語 (PL/I) による実装 仮想記憶の実現 完全なセキュリティモデル ダイナミックリンクライブラリ
1964 年、 GE のフラッグシップモデル GE ー645 をターゲットに始まる
MULTICS②
理想が高邁過ぎて実装が遅れに遅れる ベル研が撤退を決定 (1969) 紆余曲折あったものの完成はした (1975) が、ビジネス的には大失敗
しかし、そこで提唱されたアイディアは非常に革新的であり、今の OS に取り込まれている
仮想記憶などのアイディアについては論文として公開していたため、それを読んだ日立の技術者に実現の先を越されるという逸話あり
UNIX の誕生①
ベル研の Ken Tompson と Dennis Ritcheほか MULTICS から撤退してちょっとヒマになった ちょっとした暇つぶしに研究所に落ちてるミニ
コン (PDP7) でゲームでも遊べる OS 作ろうか 仮想記憶? 要らね要らね。 ダイナミックリンクなんか役にたたんだろ アセンブラでごりごり書いちゃえ
んでできたのが UNIX (1970)
後に Ritche が「俺の作った言語で書こうよ」と持ちかけて C でポーティング (1973)
UNIX の誕生②
UNIX の偶然 研究者が使いたいものに割り切った仕様だった
ので、研究機関や大学に好評 AT&T は当時ソフトビジネスが禁止されていた
欲しいところ(研究所や大学)に実費で配布 規模もそこそこなので OS の研究にちょうどいい 仕様が小さい言語 (C) で書かれていたので移植性
が高い
研究機関・大学における標準の地位を得る
西海岸から来た悪魔君
UNIX のソースコードを受け取ったところにUCB (the University of California, Barkeley) が
何人かのスキモノがハックしまくり CShell, vi, TCP/IP socket, 仮想記憶 , ...
これが Berkeley Software Distribution (BSD) ぶっちゃけ近代的 UNIX のネタは全部 BSD が仕
込んだといっても過言ではない。
ちなみに Stanford 大で Stanford University Network というハードウェアを作ってたハッカー Andy Bechtolsheim とビジネス屋の Scott McNealy らを誘って BSD
のコアメンバー Bill Joy が起こした会社が SUN ですね。
視点を変えて~言語マシン~
厳密な定義は置くとして、 OS とはハードとソフトと人をつなぐもの、と雑駁にいうと、「ある言語の中だけでそのコンピュータの全機能が扱える」ものがあったら、その言語はOS と言えるじゃないか!
Lisp マシン (Symbolics, LMI, InterLisp/D, ELIS)
今だと Emacs が近いかも。 Pascal マシン (Pcode マシン ) Smalltalk80 (Alto)
マイコン登場
Intel が出した 8080 というチップをきっかけに噴出した自作コンピュータブーム
高水準言語を使いたいという声に、ダートマス大学で発明された BASIC という教育用言語に目をつけた人たちがいた
その中にはヒットしたマイコンキット MITS Altair向けに BASIC を作って売った Bill Gatesと Paul Allen のコンビも
これは「ソフトを売って儲けるってありなんだ」というビジネスモデルを発明したということで画期的な事件ですが OS とは関係ないね
マイコン BASIC 時代
初期のマイコン用 BASIC は初期汎用機のアセンブラと同じく OS的機能はなかった
Apple ][ での革新= OS 化 電源 ON で ROM から BASIC フロッピーディスクのファイルを
管理できる 日本における各種 BASIC標準搭載マシンにつ
いても同様であり、これが「始めて触れたOS らしきもの」という人は多いのでは?
CP/M & DOS
CP/M (by Digital Research Inc.) 8ビット時代を席巻した OS
PCDOS / MSDOS (by Microsoft) DOS = Disk Operating System IBM が PC に搭載した OS
ほんとは IBM は CP/M 86 を考えてたんだけど、約束をすっぽかされて急遽MS が手をあげた
MS は他から買ってきて大急ぎで仕上げた
肝心なのは、どちらもせいぜいファイル管理ぐらいしか機能を提供してなかったこと
笑ってお仕事Windows!
OS と言える初の Windows 、Windows 95 の登場
ほぼ全ての資源管理は Windows側に移る それまでは DOS や BIOS に多くを依存 MS 自ら「 Operating Environment 」と言っていた
32bit CPU の機能を利用し、今までの擬似マルチタスクでなく完全なマルチタスクへ移行
ただし 堅牢性やセキュリティよりも互換性を重視した
ちょっと脱線~マイクロカーネル~
OS の機能はどんどん肥大化 プラットフォームも増大
OS から「本当に必要な部分」を切り出して、それ以外の機能はその上に載せればいいんじゃないか?
そしたら移植しなきゃいけない部分が減るよね 「マイクロカーネル」という概念の登場
CMU の Mach カーネルが有名 「これからの OS は全てマイクロカーネル」?
Mac OS X のご先祖 NeXTstep
「ソーダ水売り」に Apple から追放された Steve Jobs が世に問うたワークステーション NeXT Cube
商売としてはまあアレでしたが…… その OS 、 NeXTstep は Mac OS X のご先祖
Mach カーネルの上に BSD を載せる Interface Builder で GUI プログラミングも楽々 ObjectiveC で先進的オブジェクト指向開発! Display Postscript によるクールな GUI
WNT == VMS++
MS は DOS から発展した Windows の限界を感じ、もと DEC の Dave Cutler をスカウト
NT = New Technology マイクロカーネルを採用
Win32以外に POSIX (Unix) なども動作 x86以外に DEC Alpha 、 IBM PowerPC 、 MIPS
などの CPU アーキテクチャにも対応 新しいファイルシステム NTFS 詳しくは「闘うプログラマー」読め
今の MS の繁栄を築いたが、時代とともにNTFS以外はほとんどなかったことに……
国産 OS ってどうよ①
1960 年代の汎用機全盛時代は各社 (富士通、日立、日本電気、東芝、三菱、沖など ) は独自アーキテクチャで OS 開発も行っていた
1970 年代に入ると IBM System/360 という歴史的名機が誕生(話すと長くなるので割愛)
非関税障壁で産業保護を狙うが守りきれない そこで 1972 年、業界再編により「互換機路線」を指示
独自アーキテクチャ、独自 OS の道を断つ だから役人って奴は……
国産 OS ってどうよ② TRON (The Realtime Operating system Nucleus)
東京大学、坂本健助教授 ( 当時 ) 提案 いろいろ派生はあるけどここでは BTRON の話
BTRON 仮身・実身モデルを中心としたユニークな OS 通商産業省の外郭団体 CEC によって全小学校へ
の標準環境としての導入が決まりかける が、アメリカから非関税障壁とのクレーム
え?国際規格だから誰でも実装できるんだけど? 結局ビビってお流れ だから役人って奴は……
Minix Operating System
独禁法の縛りが解けて UNIX のソースコードは手軽に手に入れられるものではなくなった
機能が増えた代償に OS の勉強として手軽に読んでいじるものではなくなってしまった
アムステルダム自由大学の A.S.Tanenbaum教授が自著の付録として 16bit PC で動く軽量な学習用 Unix like OS 「 Minix 」を開発
だれもがいじれ、全容が把握できる OS 書籍としての copyright だったため自由に改変で
きない不満が募る (32bit 化、仮想記憶… )
まずは歴史から~ Linux 誕生~
ヘルシンキ大学の院生 Linus Torvalds もこの状況にイライラしていた
いっそのことフルスクラッチで作っちゃえ! できたよー、と Minix コミュニティに投下 一気に大ブレイク!
これは別に Linus が天才だったわけでもなければ Minix がへぼかったわけでもない。たまたまインターネットによるコラボレーションという時代の波にうまく乗ったこと、 Minix が最初に書かれたころに比べると
高性能の PC が入手しやすい時代になっていたということ。要はタイミングが全て。
AST 先生 vs Linus 論争
詳しくはネットで見ろことで一点だけ、 AST 「今更モノリシックカーネル開発するとか
何? Linux は i386 しか考えてないやん?」 Linus 「じゃ成功したマイクロカーネルって?先生の例は商業的に成功してないよね」
さて 2010 年になってみると 今純粋な形で商業的に成功しているマイクロ
カーネルは Machぐらいだが、これは偶然 Linux は 10 を越えるプラットフォームに対応
まずは歴史から~まとめ①~
非常に大雑把にいってしまうと組み込み系を除く OS は次の三つに集約されてしまった
汎用機用 OS/360 系列 POSIX 互換 OS (いわゆる Unix Like OS) Windows NT 系
Mac は? OS をどこまで OS として定義するかだけど、
Mach + BSD にガワをかぶせただけというオレ解釈(異論大歓迎)
まずは歴史から~まとめ②~
研究レベルはともかくとして、完全に新しい概念の OS というのは長いこと現れていない
しかし、別の潮流が 趣味としての OS 自分が作りたいから OS を作る 今ある概念を一度捨ててみたり プロジェクトとして成立したものはなさそうだ
が、多分作っている人たちが望んでいない OS 作りを個人のホビーとする動き
Agenda
まずは歴史から OS の「本分」って何だろう? ネタになりそうなキーワード列挙
歴史を見てきましたが出来事 概念OS の誕生 簡易的なジョブ管理
TSS マルチプロセスの実現( CPU の仮想化)プロセス管理特権レベルの導入3A ( 認証・権限・課金 ) の概念の導入
MULTICS 高水準言語 (PL/I) による実装(移植性)仮想記憶共有ライブラリ
UNIX システム記述専用言語 (C) による実装 (移植性 )
マイクロカーネル
ハードウェアに近い層とそれ以外の層の分離
恣意的なまとめ: OS とは「資源を管理」するように進化してきた
OS = 「資源」の管理
「資源」=「物理的資源」+「論理的資源」 「物理的資源」=ハードウェア、もあれば
物理メモリ 記憶装置 I/O…
実体がない「論理的資源」もある タスク プロセス メモリ ファイル…
OS = 資源の「管理」
「管理」といって具体的に何を指すのか 新しい資源を作ったり、消したり、順序を入れ替えたりすること
プロセス管理・ファイル管理・メモリ管理 有限の資源を無限に見せかけること
仮想記憶・タイムスライスによる擬似並列処理 プログラマにいろいろな物理資源を抽象化して共通に見せること
ファイルシステム・ Hardware Abstruction Layer
移植性: H/W をアプリから隠す
UI は? UI は OS じゃないの?
一般的な定義では、 OS には含まない UI と OS は切り離して存在しうるため OS の上に「殻となって」機能するから「シェ
ル」と呼ばれる でも GUI がない Windows や Mac OS X って?
技術的には切り離し可能(のはず) しかし現実問題、シェルが提供している機能を
アプリケーションが使いまくりなので不可分 これは技術じゃなくて商品性の話
Agenda
まずは歴史から OS の「本分」って何だろう? ネタになりそうなキーワード列挙
お詫び
ちゃんとした内容で書こうと思ったんですが知識と時間がなくて余裕で間に合いませんでした。
ということで思いつくキーワードをでたらめに列挙します
体系的な話をどうするかは検討しましょう
プロセスとスレッド
プロセス=多くの OS における最小の実行単位 独立したメモリ空間を持つ
スレッドはプロセスと似ているがメモリ空間を共有するのが違い
一個のプロセスの中で複数のスレッドが走る コンテキスト(実行環境)スイッチング CPU の時分割処理とマルチ CPU の割り当て 擬似マルチタスクと真のマルチタスク
メモリ管理
ハードウェアのアドレスマップと実メモリと仮想記憶の関係
ページ IN・ページ OUT の考え メモリ管理ユニット (MMU) の仕事 メモリブロックの割り当て戦略
ファイルシステム
そもそも OS においてファイルは必須の概念? 例えば Palm OS にはファイルはなかった
ファイルシステムの基礎概念 コンテンツと管理ブロック ジャーナリングファイルシステム
Linux の次世代 FS (Raiser FS, Btrfs) のソースとか読むのも面白いかも
ハードウェアの抽象化
UNIX における抽象化の例 デバイスをファイルに見せる create / read / write / close ついでに Plan9 とか
デバイスドライバ OS の提供する I/F にしたがうことで「 OS (を経由してユーザー)から見てすべてのデバイスを共通に扱える」ためのモジュール
各 OS における H/W の自動認識
ユーザインタフェース
一例として X の基礎 ウィンドウの管理 HID H/W イベントの振り分け
キーボード割り込みを受けてから特定のアプリケーションがそのイベントを受けるまで
シェルサービス OS ではない、シェルが提供しているサービス Windows のショートカットなど
特権概念
ユーザーモードとカーネルモードの概念 x86 を例にして特権モードへの遷移を見たり 特権モードでできること、できないこと
勝手に書き散らして来ましたが
私個人としては OS そのものを作ることにはあんまり興味がないです(だから「 OS 自作入門」の輪読とかはちょっと違う)。
もっと一般的な話を、微妙にハードウェアにはみ出したり、アプリ側にはみ出したり、って感じでやっていけたらいいな。
こんな変な OS があるよ、という話もしたい。 とはいえランダムな雑談はちとしんどい
体系的なテキストが欲しいよね。
そこで提案。
天下の MIT のテキストを拝借しませんか? http://ocw.mit.edu/OcwWeb/Electrical
EngineeringandComputerScience/6828Fall2006/CourseHome/
Lecture Notesも一通り揃ってるし ボリュームがありすぎるというなら興味がある
ところだけつまみ食いしてもいいと思う いかがでしょうか?
おしまい。デタラメな資料でごめんなさい。