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

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)
19. 10. 入出力 (外部 I/O)
20. 11. 入出力 (ユーザインターフェース)
21. 12. ファイルシステム
22. 12. 後半の総復習

4. プロセス間通信

授業の流れ・チーム分けの方針・態度目標

2024-04-12 のものと同じ。

https://lsnl.jp/~ohsaki/lecture/os/2024/#12-1

内容目標

- プロセス間通信とは何かを理解し、他人に説明できるようになる。

- プロセス間通信によって何が実現できるかを他人に説明できるようになる。

- ミニ CPU の動作例を用いて、スレッドによる競合状態 (race condition) が発生する原理を理解できるようになる。

課題

課題 1

以下の空欄 [ ア ]〜[ カ ] にあてはまる最も適切な語句を以下の (1)〜(15) から選べ。

プロセス間通信 (Inter-Process Communication; IPC) とは、 コンピュータ上で動作している [ ア ] 同士が情報を [ イ ] するための機能である。 コンピュータ上で動作しているプロセスは、 それぞれ [ ウ ] した [ エ ] を有しているため、 [ ア ] 同士が通信を行うためには、 [ オ ] が提供する何らかの仕組みを使用する必要がある。 代表的なプロセス間通信として、 [ エ ] の一部を複数の [ ア ] で共有する [ カ ] が挙げられる。

(1) アドレス、 (2) オペレーティングシステム、 (3) コンパイル、 (4) スレッド、 (5) ファイルサーバ、 (6) プロセス、 (7) マルチタスキング、 (8) メモリ空間、 (9) ユーザ、 (10) レジスタ、 (11) 交換、 (12) 保存、 (13) 共有メモリ、 (14) 実行、 (15) 独立

課題 2

実現のためにプロセス間通信が不可欠なものをすべて答えよ。

1. バックアップソフトウェア
2. プリエンプティブ・マルチタスキング
3. 複数プロセスの同期実行
4. 並列アルゴリズムの実装
5. 分割コンパイル

課題 3

資料: ミニ CPU の動作例 E6: 競合状態 (race condition) が発生する例 (2 スレッド版)
https://lsnl.jp/~ohsaki/lecture/os/2024/priv/mini-cpu-ipc.pdf

プリエンプティブ・マルチタスキングによる資料中の E6 (2 スレッド版) の動作を、 「ミニ CPU 係」と「オペレーティングシステム係」の 2 人がペアになってシミュレートせよ。

競合状態が発生しない場合と、 競合状態が発生する場合の両方をシミュレートせよ。

課題 4

スレッド同士であれば、 プロセス間通信 (より正確には「スレッド間通信」) が簡単に実現できるのはなぜか。

略解

課題 1

ア: (6) プロセス

イ: (11) 交換

ウ: (15) 独立

エ: (8) メモリ空間

オ: (2) オペレーティングシステム

カ: (13) 共有メモリ

※ なぜこれら以外の語句が適切でないかを論理的に説明できるようにせよ。

課題 2

4 のみ。

3 はシステムクロックを使って実現はできる (ので、 不可欠ではない)。

5 は分割したものを一つずつ順番にコンパイルすれば実現できる (ので、 不可欠ではない)。

※ 4 のみが正解であることを論理的に説明できるようにせよ。

課題 3

省略

課題 4

メモリ空間を共有しているため、 そもそもデータ領域を共有しているから。

レポート課題 2024-05-10

「レポート課題 2024-04-12」と同じ。

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

質問

- 先生はRustはC++の代替言語になると思いますか?それを踏まえて今から新しく学習するならどちらをお勧めしますか?教えて欲しいです。

将来のことはわかりませんが、C++ はかなり無理がある (複雑すぎる) と思います。
両方学ぶほうが良いと思いますが、どちらか一択なら Rust かな?

- 講義ありがとうございます。自習として、作業効率化のためのプログラムを作成したいと考えていますが、これは授業の「内容目標」と直接関連していないように感じています。このような自習は許可されますか?

そういう取り組みは大切なのでぜひ頑張ってください。ただ、この講義のレポート課
題は、シラバスに沿ったものにしてください。

- これから新しくプロセス間通信の手法が生まれることはあるのか。

将来のことはわかりませんが、「今後一切新しいプロセス間通信は登場しない」と考
えるのは無理があるでしょうね。

要望

- 講義のホームページが見にくい・扱いにくい。回を重ねるごとに縦方向に無限に伸びていく回ごとにページを分けたり適切なリンクを設定することでより簡単に必要な情報にたどり着けるようにしてほしい。

複数ページ版も用意してあります。が、「必要は発明の母」です。何が不便なのかを
分析して、それを解消するような環境を作ってみてください。私の講義はすべてオー
プンな技術しか使っていないので、ユーザ側で何でも自由にできます。

https://lsnl.jp/~ohsaki/lecture/os/2024/1.html

- 講義ありがとうございました。友人に聞いてオペレーティングシステムCTFの8.の課題を解決しようと思っていますが、ノートの初期状態の意味の部分などあまり分からないところがあったので授業で少し説明していただけるとありがたいです。

個別に解説はしませんので、わかっている人に教えてもらってください。

コメント

- 今日の講義も楽しかったです。

[<12. 3. プロセスとスレッド] [>14. 5. スケジューリング (1)]