# オペレーティングシステム ## 第一回 ### OS とは何か? * hardware -> software (OS -> User interface program -> Usermode) * OS は Kernel mode で動いている。(ユーザの権限で変更できない) * User mode はユーザの権限で変更できる。(上位) * 機能1. 機器の抽象化 * 接続されるデバイスを簡単に扱う interface を提供する。 * Ugly interface of hardware -> OS -> Beautiful interface * 機能2. リソースの管理 * 並行で実行されている program などのリソースが不必要に干渉しないようにする。 * BIOS -> boot loader -> OS の流れで起動。 * HDD の先頭にある MBR (Master Boot Record) を読み込む -> OS の Kernel を読み込む。 ### OS の歴史 * 第一世代(1945~55): Vaccum Tubes * OS もプログラミング言語すらもない時代。 * 機械語や電気回路をつかってプログラミングしていた。 * 例:世界最初の計算機 ENIAC * 真空管を使って配線。真空管の故障率が高くてクソ。加熱も必要だし面積も取るクソ。(寿命 2000 時間 -> 週に 2, 3 本まで下げたが) * 第二世代(1955~65): Transistors and Batch Systems * 電圧をつかってバイナリを表現。 * 真空管の代わりにトランジスタを採用。熱もそこまで出ないし軽い。ただ高価。 * 商用コンピュータが出現。でも高価だしプログラムはユーザが開発しなければならない無能。 * バッチ処理 + ジョブ管理 が登場。世界初の OS も登場。 * バッチ処理:複数のプログラムに対し実行順序を定義し,その順番で自動的に実行していく。 * 実行したいプログラムを紙テープや磁気テープにまとめて書き込むことによって,複数のプログラムをまとめて処理することが可能になった。-> 出力結果も実行順にまとめて出力できるようになった。 * 第三世代(1965-80): ICs and Multiprogramming * トランジスタの小型化から他部品の小型化へ。 * 一つの回路全体を半導体で作り込むようになった。(集積回路) * マルチプログラミング登場 * 複数プログラムをメモリに書き込んでおき,OS が管理 -> 同時に複数プログラム実行可能に。 * ある処理をしている際に CPU の空き時間が発生すれば(IO 待ちとか)他の処理を割り込ませたりすることができる。 * タイムシェアリング登場 * コンピュータシステム占有時間を細かく分け,複数ユーザに割り振る。 * 各ユーザがタスクを投げたときにすぐに処理されるようになった。 * 第四世代(1980-present): Personal Computers * 計算機が個人に一台に。 * さまざまな OS が出現。 * 第五世代(1990-present): Mobile Computers * スマホに入ってるやつなども出現。 ### コンピュータハードウェア * コンピュータ周辺機器 * CPU + memory, monitor, keyboard, usb printer, hard disk drive * それぞれがコントローラーを持ち,コントローラーは Bus を通じてそれぞれが接続されている。 * CPU * コアが多いと並列できるプログラムの数が多くなる。 * 情報を保持する 1, 2 次キャッシュ(cf: コンピュータアーキ)も存在。 * 1 次キャッシュは 16 kB, 2 次キャッシュは数 MB が普通。 * 二次キャッシュの場合は各コアが共有する/しないの 2 通り。 * intel は共有,AMD は個別。 * パイプライン(cf: コンピュータアーキ)を使って高速に処理。 * 命令はFetch, Decode, Data Fetch, Execute, Writebackの5つのステップでできている。 * 前の命令が終わるのを待たずにFetchを実行するので、プログラムの終了が早くなる。 * コントローラ * ハードウェアであり,デバイスのインターフェースを提供。 * ドライバーと呼ばれるソフトウェアを使って対話できる。