オペレーティングシステム

1. URL
2. 担当教員
3. 講義目的
4. 到達目標
5. 授業方法
6. 参考書
7. 成績評価
8. スケジュール
9. 大崎が担当する科目に共通の連絡事項・アドバイス
10. 1. オペレーティングシステムの概要
11. 2. CPU の原理
12. 3. プロセスとスレッド
13. 4. プロセス間通信
14. 5. スケジューリング (1)
15. 6. スケジューリング (2)
16. 7. 前半の総復習
17. 8. メモリ管理 (1)
18. 9. メモリ管理(2)

7. 前半の総復習

授業の流れ

1. ガイダンス・質問記入 (5 分)
2. 質問への回答 (35 分)
3. 席替え・CTF (15 分)
4. 質問への回答 (35 分)
5. リフレクションシート記入 (10 分)

態度目標

- 解説された内容を判的思考で分析し、できるだけ多くを吸収する。

- 脳が覚醒した状態のままでいる。

- クリッカーに記入する質問は、可能な限り、正しい日本語で具体的に記入する。

- 始めて知ったこと、なるほどと思ったことはノートに記録する。

内容目標

- 前半の「内容目標」すべてに到達できるようになる。

- 前半の内容に関連して、理解が不十分なもの、疑問が残っているもの、もっと知りたいものを言語化して質問できるようになる。

- 前半の内容に関連する疑問を一つでも多く解消できるようになる。

クリッカー

[授業中に使用] クリッカー (パスワードが必要です)
https://lsnl.jp/app/lecture/clicker/show/os

レポート課題 2025-05-23

「レポート課題 2025-04-11」と同じ。

https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10

質問

- operating systemがbasic softwareではないのは、basicやsoftwareが指す範囲がOSの機能より広いからでしょうか?それとも英語圏の人が見るとbasicの意味がずれているからでしょうか?

「なぜ」かの問いに対する答えは「命名した人がそう付けたから」になります。「な
ぜそう付けたか」を知るのは困難ですが、(1) 「命名者は operating system を適切
だと考えた (事実)」、(2) operating system より basic software のほうが抽象的
な言葉である (事実)、ことから類推できると思います。

ただし、命名者が実際に「basic software」を候補として検討したかどうかはわかり
ません。日本語の「基本ソフトウェア」という用語ができたのは、operating system
と命名されたずっと (数十年くらい?) 後です。

コメント

- オペレーティングシステムCTFの第4問、第5問に関して、問題文の意図の違いがわからず、そのためどうして第4問の解が1で、第5問の解が1024となったのかがわかりません。

04-process:
汎用レジスタ数 8、 アドレスバス幅 64 ビット、データバス幅 32 ビットの単一の
CISC CPU と 64 GB のメモリ、4 TB の外部ストレージを搭載した計算機において、使
用するメモリ量が 1 GB のプロセスを同時に何個並列に実行できるか。ただし、プロセ
ステーブルの最大エントリ数を 2^10 とする。

05-process:
汎用レジスタ数 8、 アドレスバス幅 64 ビット、データバス幅 32 ビットの単一の
CISC CPU と 64 GB のメモリ、4 TB の外部ストレージを搭載した計算機において、使
用するメモリ量が 1 GB のプロセスを同時に何個並行に実行できるか。ただし、プロセ
ステーブルの最大エントリ数を 2^10 とする。

間違い探しのような問題ですが、「並列 (parallel)」と「並行 (concurrent)」の違
いです。

質問への回答 (重複した質問は除いています)

- 効率的なスケジューリングを可能には出来ないのですか? どうすれば出来ますか?

「効率的」の基準によると思います。今のスケジューラは (一般的な用途であれば)
それなりに効率的だと思います。

- 今まで学んだスケジューリングやプロセスの切り替え、プロセス間通信などは全てOSを通して動いているのですか?

はい。OS のカーネル起動直後からずっと動いています (動いているのが普通です)。

- 自習においてオペレーティングシステムの様々な動作について似たような動作をするプログラミングを作成するといったことをする時がありますが、それはオペレーティングシステムの理解を高める上で有効的だと思いますか?

はい。

- SJF・SRTFのような実行時間が既知であるスケジューリングアルゴリズムはどのレベルまでなら実装可能ですか?

既知なら (もちろん) 実現可能で、既知でなくても推測すれば (近似的に) 実現可能です。

- OSに興味を持ったので、これから自分で勉強を先に進めていきたいのですがおすすめの参考書や勉強方法はありますか?

情報工学としてのオペレーティングシステムなら、参考書に挙げているタネンバウム
の本がおすすめです。以下も見てみてください。

充実した研究活動のための 100 の書籍 (草稿)
https://lsnl.jp/~ohsaki/research/100-books/

- ヘッドマウントディスプレイの開発に興味があるのですが、この場合、OSの知識は必要になってくるのでしょうか?

はい。ディスプレイ (ハードウェア) の開発ですか? それとも HMD 用のソフトウェ
アの開発ですか? ハードウェアの開発なら不可欠でしょう。ソフトウェアの開発でも
OS のことを知らないとキツイと思います。

- 普段のタスクで実行時間が既知となっているのはどれくらいの割合なのでしょうか?

「タスク」の種類によります。

- 実行するプロセスが決まっている場合、実行時間を求めることは簡単ではないのか

実行する「プログラム」ですね (プロセスはプログラムを実行した時の activity で
す)。一般には簡単ではありません (例; Microsoft Word を何分実行するかは事前
に (使用しているユーザでさえ) わからないことが大半です)。

- 機械系に進みたいと考えているのですがオペレーティングシステムで習った内容はどのように役に立ちますか?

- 今後の技術発展次第では、私達が今OSの講義で学んだ事が役に立たなくなることはありますか? - オペレーティングシステムで習った内容は、何をするときにどのように役に立ちますか? - オペレーティングシステムで習った内容はいつどのように役に立ちますか?

役立つものではなく、役立てるものです。他の質問への回答を観てください。

- WindowsやLinuxなどの一般的なOSでは、実行時間を事前に知らずにSJFやSRTFのような戦略をどのように応用しているのでしょうか?

実行時間がわからないので、「のような戦略」を採用していません。

- テストは難しいですか?

いいえ。

- マルチタスキングについて: 組み込みシステムのような実行する処理がしっかり決まっているものでノンプリエンプティブ(割り込みなし)、アプリケーションシステムのようなユーザー入力のあるものなどでプリエンプティブ(割り込みあり)が採用されると理解したのですが、調べてみると実際には初期のOSにはノンプリエンプティブ・最近のOSにはプリエンプティブが選ばれる傾向にあるとの記述が多く見られたのですがどのような経緯でプリエンプティブがより選ばれているのか?ご存知でしたら教えていただきたいです。

実装が単純で、CPU のオーバヘッドが小さいことを重視するならノンプリエンプティ
ブが良い選択です。逆に言えば、多少実装が複雑でもよくて、CPU のオーバヘッドも
気にならないならプリエンプティブのほうが向いています。

- 人間の仕事が失われつつありますが、OS系ではどのような仕事が失われると思いますか?

「OS 系」とは何のことでしょう?

- 入力データによってターンアラウンド時間が短くなるアルゴリズムは変わっていきますか?

はい。

- RRスケジューリングは何によく使われるのでしょうか?

(授業で学んだように) 会話型のシステムです。

- スケジューリングでは様々な処理方法(計算方法)を習いましたが、これらのほかにも処理方法はあるのでしょうか?

はい。

- オペレーティングシステムは今どのように使用していて、将来どのようなことに活用されると思いますか?

どういう意味ですか?

- 私たちが使っているコンピュータと量子コンピュータの違いは何ですか?また、OSにも違いはあるのでしょうか?

計算に使用する素子 (トランジスタ vs. 量子ビット) も計算原理も違います。量子
コンピュータが初期段階なので、量子コンピュータ向けの OS も (まだ) 存在してい
ないと思います。

- スケジューリングアルゴリズムを理解しているとどのような場面でアルゴリズムを使うことになりますか?

どう使うかは質問者次第です。

- OS設計に関わる職業は、どのような知識・スキルを持っておとよいか、将来的な視点でも聞いてみたいです。

コンピュータ、ハードウェア、ネットワーク、セキュリティなど情報工学全般だと思います。

- 現在使われているスケジューリングアルゴリズム以外の、全く新しいスケジューリングアルゴリズムがこれから誕生することはありそうですか?あるとしたらどのようなものがありえそうでしょうか?

あるでしょうが、(将来のことは予測できないと思っているので) わかりません。

- Queueing Theoryはコンピュータのスケジューリングアルゴリズム以外ではにどのような事象を考える際に活用することがありますか?

もともとオペレーションズリサーチの一分野なので、軍事目的です (でした)。通信
ネットワークも待ち行列理論が多用されています。

- オペレーティングシステムの講義でどの分野が1番大切だと思いますか?

- このオペレーティングシステムのすべての講義に関して、どれも大事な内容ばかりだと思いますが、特に重要であり将来役立つと思われるテーマは何ですか?

私の授業なら、ミニ CPU による OS のさまざまな仕組みの原理だと思います。

- 最もシェアされているOSはWindowsだと思いますが今後これを超えるようなOSは現れると思いますか

いわゆる「日本の常識、世界の非常識」というやつですね。端末の台数ベースでは、
Android (カーネルは Linux) が圧倒的なシェアを占めています。

Usage share of operating systems
https://en.wikipedia.org/wiki/Usage_share_of_operating_systems

- 競合状態になる確率はとても低いと仰っていましたが、なぜ低いのですか?個人的には頻発してもおかしくないのではないかと思います。

 機械語の命令数が 1000 のプログラムが 2 種類あって、ある特定の命令の実行時に
 コンテキストスイッチが発生した時に競合状態になるとすると、1 回のコンテキスト
 スイッチで競合状態が起きる確率は 1/1000 * 1/1000 = 1/10^6 となるからです。

 上の試算は 1 回のコンテキストスイッチングあたりなので、100 万回コンテキスト
 スイッチすれば確率はほぼ 1 になります。

- 第3回のプロセスとスレッドの課題1でプロセスの状態は3つで書かれていますが、例えばprocess state wikiで検索すれば違った図(もう少し状態が増えている図)が示されていると思います。授業のとwikiの、どっちを参考にすればいいですか?できればwikiの方の図の説明をもらえると助かります。

授業中にも説明したように、「プロセスの状態遷移図は状態数をいくつにする」とい
うは決まっていません。何を表現したいかで、表現したい人によって少しづつ違う図
になります。

- スマホにはどのようなスケジューリングアルゴリズムが使われていますか? 画面分割機能があるのでRRではと考えていますが、複数タスクがある時に再度開くとアプリが再起動される場合があるので教えて欲しいです。

他の質問への回答を観てください。画面分割機能があるかどうかというより、プリエ
ンプティブマルチタスキングかどうかです。

- 情報系を専攻する学生にとって、ITパスポート、基本情報技術者試験、応用情報技術者試験などの国家資格を取得しておくことは、将来のキャリア形成や技術的基盤の構築の面でどれほど有用だとお考えでしょうか?

勉強の動機付けには良いと思いますが、資格自体にはほとんど価値がないと思います。

- スレッドは一般的にメモリ内に何種類ぐらい内蔵されていて、どのように使い分けられているのですか?

ソフトウェアのスレッドと CPU のスレッドを混同しているように思えます。「倍精
度浮動小数点の変数はメモリ内に何種類ぐらい内蔵されていて、どのように使い分け
られているのですか?」と同じように変な質問です。

どのようなソフトウェアなのかによります。スレッド数 1 のものが大半だと思います。

- 量子コンピュータの開発によって既存のコンピュータの性能をはるかに上回る計算速度で計算が可能になり、様々な技術の進歩が期待されていますが、量子コンピュータの実用化にはあとどれくらいの時間がかかると思いますか?

- 現在、最新のiOSは18.5ですがiOSは今後どのくらい進化すると先生はお考えですか?

(未来は予測できないと考えているので) わかりません。

- なぜ英語をそのままカタカナにした用語が多いのでしょうか?コンピューターのシステムに関する言葉を日本語にする際、その意味に該当する漢字などを組み合わせて用語を作ったほうが、言葉としてよりわかりやすいのではないでしょうか。漢字を用いて表現せず、カタカナで訳すことにした理由や利点が知りたいです。

1960〜1970 年代くらいまでは漢字で表現する努力がされていたと思います。新しい
概念を表す語の数が多すぎてあきらめたのだと思います。

- AIと組み合わせたスケジューリングアルゴリズムって、実際にあるんですか?

「プロセススケジューリング」なら (まだ) ないような気がしますが、例えばタクシー
やトラックの配車スケジューリング等では使われていると思います。

- OSは割り込みをどのように使ってマルチタスクを実現していますか

他の質問への回答を観てください。後半の授業で扱います。

- サーバOSについてお聞きしたいです。サーバは他のコンピュータ(クライアント)を繋いで、情報を提供するコンピュータと認識しています。この前提の上で、インターネット検索を行った限り、「OSの更新」は所謂『アップデート』『バージョンアップ』にあたり、「サーバの更新」は『古くなった(老朽化した)ものを新しくする(置き換える)』と出てきます。このような説明の差が生まれるのはなぜなのでしょうか?OSもサーバも、物理的に存在するものであると認識しているのですが、その解釈が間違っているのでしょうか?

誰が、どういう文脈で何を説明している文章なのかによります。

まず、OS はソフトウェアです。ソフトウェアなのでメモリ上に存在しますが、目に
は見えません。OS はソフトウェアなので (物理的には) 劣化しません。

「サーバ」はソフトウェアを差すことも、ハードウェアを差すこともあります。例え
ば、Web サーバはソフトウェア、ラックマウント型サーバはハードウェアを差します。

- RRスケジューリングにおいて、クォンタムが2として計算時間が1のプロセスが来た場合、プロセスの切り替えはどのタイミングですか?

クォンタムが 2 なら、2 の倍数スロットで切り替えることになります。

- スケジューリングのアルゴリズムが動作するとき、スレッドとプロセスの区別はOSのどのレイヤーで意識されるのでしょうか?

どういう意味ですか?  プロセススケジューリングなら、名前の通りプロセス単位で
スケジューリングします。

- 情報工学全般に関して、これは学生時代にしておいたほうがよかったなということはありますか?

(やりたいと思ったことは一通りやったので) 特にありません。

- Vim系エディタとEmacs系エディタのいずれを選好されますか?

Emacs です。

- 今までに先生が目先の利益(単位や成績など)を気にせず学んだ事の中で、一番学んで良かったと思う事は何ですか?

UNIX やプログラミング (すぐに使える便利テクニックではなく、それらの設計思想
や考え方) だと思います。

- タイル型ウィンドウマネージャーだとhyprlandやi3等があると思いますが、それらから自作のウィンドウマネージャーに移行された理由を教えていただきたいです。

バージョン管理システムのログを見ると、ウィンドウマネージャは 2010 年に開発を
始めたようです。当時は「タイル型ウィンドウマネージャというものがあるらしい」
と認識していた程度で、他のタイル型ウィンドウマネージャを真面目に使ったことは
ありません (ので移行していません)。i3 の初期リリースが 2009 年のようです。

- WindowsやLinuxなどの代表的なOSと、あまり知られていないマイナーなOSでは、それぞれどのような特徴や違いがあるのでしょうか?

マイナーなどの OS なのかによります。「『鬼滅の刃』と同人誌のマンガはどう違う
のでしょうか」という質問と同じですね (同人誌のどのマンガなのかによります)。

- とりあえず広く浅く勉強してそのあと深く勉強したいと考えたとした時、OSから伝播できる他の分野(データベースやネットワークやアーキテクチャなどなど)として先生が思うおすすめなものはありますか?

やっぱり (誰かに勧めれれたものではなく) 「自分が興味のあるもの」が良いと思い
ます。私の場合は、シューティングゲーム → 高級言語プログラミング → アセンブ
リ言語プログラミング、ハードウェア、OS → ハードウェア設計、デスクトップ環
境……のように広がってゆきました。

- 先生が使われているスマートフォンに関して教えて欲しいです。

  OS は、自由な OS である Lineage OS を使っています。プロプリエタリなアプリは
  できるだけ使用せず、よく使用するアプリは自作したもの (音楽プレイヤー、地図、
  PDF ビューア、スケジューラ、電卓、タイマ等) を使っています。

  すべての ICT 環境は、Google、Microsoft、Apple、Amazon 等に依存せず利用できる
  ようにしています。例えば、Google が突然サービスを有料化したり、Google のアカ
  ウントが BAN されたり、Google がサイバー攻撃で情報漏えいしても私は何も困らな
  いようにしています。

  「生殺与奪の権を他人に握らせるな!!」 (冨岡義勇 (鬼滅の刃))


[<15. 6. スケジューリング (2)] [>17. 8. メモリ管理 (1)]