講義ページ (単一ページ版)
https://lsnl.jp/l/os
講義ページ (複数ページ版 (モバイル端末向け)、各回の資料のみ)
https://lsnl.jp/~ohsaki/lecture/os/2025/toc.html
[授業開始時に提出] 出席確認フォーム (パスワードが必要です)
https://lsnl.jp/app/lecture/attend/show/os
[授業中に使用] オペレーティングシステム CTF (パスワードが必要です)
https://lsnl.jp/~ohsaki/lecture/os/2025/priv/ctf.html
[授業中に使用] クリッカー (パスワードが必要です)
https://lsnl.jp/app/lecture/clicker/show/os
[授業中に提出] リフレクションシート (パスワードが必要です)
https://lsnl.jp/app/lecture/refl/show/os
[自習後に提出] レポート送信フォーム (パスワードが必要です)
https://lsnl.jp/app/lecture/report/show/os
講義ビデオ (パスワードが必要です)
https://lsnl.jp/video/os/2025/
大崎 博之
関西学院大学 工学部 情報工学課程
E-mail: os-staff[atmark]lsnl.jp
コンピュータの基本ソフトウェアであるオペレーティングシステムの概念と、 その原理を学ぶ。 オペレーティングシステムの歴史、 プロセスとスレッド、 デッドロック、 メモリ管理、 入出力、 ファイルシステムなど基本的な概念に加えて、 マルチメディア処理、 マルチプロセッサシステム、 セキュリティなど最近のトピックについても学ぶ。
オペレーティングシステムの基本的な概念が理解できるようになる。
まず、 オペレーティングシステムに関する技術のエッセンスを説明する。 その後、 それらの技術が、 現在広く利用されているオペレーティングシステムにどのように実現されている (もしくは実現されていない) かを解説する。 オペレーティングシステムを、 学術的な観点と、 実践的な観点の両方から学ぶため、 非常に興味を持って取り組めるであろう。
【オンライン受講生対象】 オンラインでの受講を許可された学生に対しては、 同時双方向型オンライン授業で対応します。
資料の掲載場所: https://lsnl.jp/l/os
同時双方向型オンライン授業への接続方法については担当教員 (ohsaki[atmark]kwansei.ac.jp) に問い合わせてください。
Andrew S. Tanenbaum 『モダンオペレーティングシステム第 2 版』 (ピアソン・エデュケーション・ジャパン、 2004 年) (絶版)
授業中試験 50%、平常リポート 50%
2025 年度 オペレーティングシステム講義スケジュール (予定)
2025-04-11 オペレーティングシステムの概要
2025-04-18 CPU の原理
2025-04-25 プロセスとスレッド
2025-05-02 プロセス間通信
2025-05-09 スケジューリング (1)
2025-05-16 スケジューリング (2)
2025-05-23 前半の総復習
2025-05-30 メモリ管理(1)
2025-06-06 メモリ管理(2)
2025-06-13 入出力 (外部 I/O)
2025-06-20 入出力 (ユーザインターフェース)
2025-06-27 ファイルシステム
2025-07-04 後半の総復習
2025-07-11 授業中試験
注意事項、 教育方針、 学習のポイント、 病欠/公欠の時に何をすればよいか等を説明しています。
大崎が担当する科目に共通の連絡事項・アドバイス
https://lsnl.jp/~ohsaki/lecture/
1. 解説 (40 分)
2. グループワーク (40 分)
3. 確認テスト (10 分)
4. 採点・リフレクションシート記入 (10 分)
- いろいろな人とチームになる
- チームの人数は自由に決めてよい
- しゃべる
- 質問する
- 説明する
- 動く (立ち歩く)
- チームで協力する
- チームに貢献する
- オペレーティングシステムとは何かを他人に説明できるようになる。
- シングルタスク型とマルチタスク型のオペレーティングシステムの違いを他人に説明できるようになる。
- オペレーティングシステムにおけるプリエンプティブ・マルチタスキングの概要を他人に説明できるようになる。
- パソコンやスマートフォンに搭載されているオペレーティングシステムの種別を確認できるようになる。
注意: Wikipedia 日本語版およびブログ等を情報源として用いてはならない。
英語が苦手な人へ: 英語のトレーニングも兼ねて、 日頃から英語の文献を読むことをおすすめします。 英語を読み続けるのがつらい場合は、 日本語の文献を探すのではなく、 機械翻訳 (ChatGPT がおすすめ) を使いましょう。
オペレーティングシステム (operating system) とは何かを説明せよ。
なぜ、 operation system ではないのか? なぜ、 (日本では「基本ソフトウェア」と呼ばれるのに) basic software ではないのか? なぜ、 operating software ではないのか?
シングルタスク型 (single-tasking) とマルチタスク型 (multi-tasking) のオペレーティングシステムの違いを説明せよ。
パソコンやスマートフォン等の上で、 複数のプログラムを同時に実行できる (ように見える) のはなぜかを説明せよ。
自身が所有しているパソコンもしくはスマートフォンに搭載されているオペレーティングシステムの正確な名称およびバージョンを実際に確認せよ。 確認方法と、 確認によって判明したオペレーティングシステムの名称およびバージョンを答えよ。
---- JIS X0001 04.08
operating system:プログラムの実行を制御するソフトウェアであって,資源割振り,スケジューリ
ング,入出力制御,データ管理などのサービスを提供するもの.〈備考〉オペレーティングシステム
は,ソフトウェアが主体であるが,部分的にハードウェア化することも可能である.
---- エンカルタ'05: オペレーティング・システム [Operating System]
オペレーティング・システム Operating System コンピューターの基本ソフトウェア。OSと略され
ることが多い。本来は、コンピューターを動作させるために必要な最小限のソフトウェア。メモリー、
CPUの処理時間、ディスク、周辺機器などのハードウェアの割り当てや、その使用を管理する。ワー
ドプロセッサーやスプレッドシートのようなアプリケーションを建物とすると、オペレーティング・シ
ステムは、土台にあたるものである。
---- 広辞苑5: オペレーティング-システム【operating system】
コンピューターで、利用者とハードウェアの間にあって、利用者がコンピューター-システムをで
きるだけ容易に使うことができるようにするための基本的なソフトウェア。OS
Operating system
https://en.wikipedia.org/wiki/Operating_system
参考資料
Types of operating systems
https://en.wikipedia.org/wiki/Operating_system#Types_of_operating_systems
参考資料
Computer multitasking
https://en.wikipedia.org/wiki/Computer_multitasking
参考資料
Check & update your Android version
https://support.google.com/android/answer/7680439?hl=en
Find the software version on your iPhone, iPad, or iPod
https://support.apple.com/en-us/HT201685
How do I determine the OS version at runtime in OS X or iOS (without using Gestalt)?
https://stackoverflow.com/questions/11072804/how-do-i-determine-the-os-version-at-runtime-in-os-x-or-ios-without-using-gesta
How can I check the system version of Android?
https://stackoverflow.com/questions/3093365/how-can-i-check-the-system-version-of-android
確認テストは持込み不可です。 回答用紙は、 持っている好きな用紙を使用してください。 ノートの 1 ページを使っても、 タブレット上に電子的に記入してもかまいません。 手持ちの紙がない人には A4 のコピー用紙を配布します。
回答後、 周囲の人と答案を交換して、 相互採点してください。 間違っている箇所があれば、再度解き直してください。 その後、周囲の人に再度採点を依頼してください。
100 点満点の答案になるまで上記を繰り返してください。
以下のページから、リフレクションシートを記入して送信してください。
[授業中に提出] リフレクションシート (パスワードが必要です)
https://lsnl.jp/app/lecture/refl/show/os
上記のフォームの上部にリフレクションシートのねらいや、 何を記入すべきかを説明しています。 これらをよく読んで、指示に従ってください。
リフレクションシートの提出期限は授業実施日の 23:59 です。
Computer multitasking https://en.wikipedia.org/wiki/Computer_multitasking
In computing, multitasking is the concurrent execution of multiple tasks
(also known as processes) over a certain period of time. New tasks can
interrupt already started ones before they finish, instead of waiting for
them to end. As a result, a computer executes segments of multiple tasks in
an interleaved manner, while the tasks share common processing resources
such as central processing units (CPUs) and main memory. Multitasking
automatically interrupts the running program, saving its state (partial
results, memory contents and computer register contents) and loading the
saved state of another program and transferring control to it. This "context
switch" may be initiated at fixed time intervals (pre-emptive multitasking),
or the running program may be coded to signal to the supervisory software
when it can be interrupted (cooperative multitasking).
ChatGTP による日本語訳
コンピューティングにおいて、マルチタスキングとは、一定期間に複数のタスク(プ
ロセスとも呼ばれる)を同時に実行することです。新しいタスクは、既に開始された
タスクが終了するのを待つのではなく、それらを中断することができます。その結果、
コンピュータは複数のタスクのセグメントを交互に実行しながら、中央処理装置
(CPU)やメインメモリなどの共通の処理リソースを共有します。マルチタスキング
は自動的に実行中のプログラムを中断し、その状態(部分的な結果、メモリ内容、コ
ンピュータレジスタの内容)を保存し、別のプログラムの保存された状態を読み込ん
で制御を移行します。この「コンテキストスイッチ」は、固定された時間間隔で開始
されることがあります(プリエンプティブマルチタスキング)、または、実行中のプ
ログラムが監視ソフトウェアに対して中断可能であることを通知するコードが組み込
まれている場合があります(協調マルチタスキング)。
マルチタスク https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%BF%E3%82%B9%E3%82%AF
マルチタスク (英: multi tasking) は、コンピュータにおいて複数のタスク(プロセ
ス)を切り替えて実行できるシステムのことである。Unix など「プロセス」という用
============ システムではない
語を使うシステムではマルチプロセスともいう(ほぼ同じものを別のシステムでは別の
============ task/tasking/process/processing を混同している
名で呼んでいることもあれば、違うものを同じ名で呼んでいることもあれば、何らかの
理由で呼び分けていることもある)。マルチプログラミングという語は複数のプログラ
============================ multitasking の本質と関係ない話
ムを動かすという点に着目した語である(一般に、「タスク」とか「プロセス」は、プ
ログラムの活動実体、といったようなものを指す語である)。逆に、同時に一つのタス
======= これは単なる task/process の話
クしか実行できない方式をシングルタスクという。
=== マルチタスクは「システム」で、シングルタスクは「方式」?
授業終了後に自習を行い、 到達目標まで到達せよ。 疑問に思った点、 わからない点は各自で信頼できる文献を用いて調査せよ。
その後、 「今週の作業内容」、 「『内容目標』をどの程度達成できた/できなかったか」、 「質問・要望・コメント」、 「感想」を「レポート送信フォーム」から送信せよ。
レポート課題の内容や書き方については、 レポート送信フォームに説明があるのでそちらを参照せよ。
提出方法: 「レポート送信フォーム」から送信せよ。 レポートが正しく提出されると、 レポートの控えが自身のメールアドレス宛に送信される。 レポートの控えは成績発表まで保存しておくこと。 レポートが再提出された場合は、 新しいほうを採点対象とする。
提出期限: 次回の授業開始の 48 時間前とする (例えば、 4/11(金) の課題であれば、 4/18(金) 5:05pm の 48 時間前である 4/16(水) 5:05pm)。 期限を過ぎたものは受理しない。
注意事項: 「質問・要望・コメント」は匿名にした上で公開する (講義ページに掲載する)。 公開されて困る内容は「質問・要望・コメント」等に含めないこと。 個人的な質問・相談等は「感想」の覧に記入せよ。
- なぜコンピューターはハードウェアでマルチタスクを行わないのですか?
ハードウェアを使ってマルチタスキングを行うものもあります。単一の CPU で、な
ぜプリエンプティブでマルチタスキングを実現するのか、という意味なら、他に方法
がないからです。多重度 16 とか多重度 32 でよいなら専用ハードウェアでの実現も
可能ですが、専用ハードウェアでは任意の多重度に対応できません。
- 英語の文献を調べるコツを教えてほしいです。
英語の文献の探し方ですか? 読み方ですか? 探し方なら、できるだけ一次情報を見る
ことです。
- 自習するにあたって参考にしても良いサイトとそうでないサイトの基準があれば教えて欲しいです。文献や大学の教授が書いた資料以外は避けた方が良いのでしょうか。
参考にしも「良い」/「良くない」の二値ではないのが難しいところですね。この文
献は信頼度 78% で、あの文献は信頼度 34% という世界です。
基本は一次情報からの距離です。
著者: 考案者/発明者 → 考案者/発明者と同じグループの人 → その分野で超一流の
人 → その分野の専門家 → 一般エンジニア/大学院生、実名の人 → 匿名の人
文献の種別: 考案者/発明者が書いた原著論文 → 超一流の人が書いた論文 → 教科
書 → 専門書 → 一般書 → 集合知 (Wikipedia) → ネット上の情報 (ブログ、X、
YouTube)
例えば、Dijkstra 法について調べるのであれば、Dijkstra が書いた原著論文が最高
の文献です。よくわからない人が書いたブログ記事や、よくわからない人が発信して
いる YouTube のビデオが最低の文献(情報)です。
- iOSなどのモバイル向けOSがデスクトップ向けOSに比べて工夫されていることは何ですか?
いろいろありますが、一番大きいのは省電力を下げる工夫だと思います
- 1つ目の解答欄に「どのような自習を行いましたか? 」という質問がありますが、これは学習した内容を問うているのですか。それとも、自習の取り組み方を聞かれているのですか。今回は後者の方ととらえて解答させていただきました。
両方です。何を勉強したのか(内容)、どんな方法で勉強したのか(手段・形式)、どん
な目的で行ったのか(目的)を書いてください。
- 最近のOSにRustとC(C++)のどっちを使うか?どっちも使うか?みたいな話にどう思ってらっしゃいますか?
「さすがに今後も C や C++ で書き続けるのはしんどいけど、どっちの方向に行くの
だろう」と思ってます。
- この欄は、特に何もなければ今後空欄で提出しても問題ありませんか。
はい。
- 授業内で行った課題のような問題が定期テストで出る感じですか?
はい。
- グループワークの時間もう少し増やしてほしいです。
説明の時間を取りすぎないようにします。
- 実際のスマホやPCでは、OSのアップデートでマルチタスクの性能はどれほど変わるのか気になりました。
- 初めての授業形態でしたが自分のためになる形式だと思いました。
- いい授業でした。
- 可能であれば教室を横長のものに変更してほしい。初回授業に苦しんだが、スクリーンが見えにくく感じる席に座ってしまった。
前方の席が空いていますので、見やすい席を探してみてください。
2025-04-11 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- 簡単なプログラムに対して、ミニ CPU の動作をトレースできるようになる。
- ミニ CPU の動作を手作業でトレースすることにより、CPU の原理を理解する。
- ミニ CPU とオペレーティングシステムの動作をシミュレートすることにより、プリエンプティブ・マルチタスキングの原理を理解する。
資料: 「ミニ CPU」によるコンピュータおよびオペレーティングシステムの動作の理解
https://lsnl.jp/~ohsaki/lecture/os/2025/priv/mini-cpu.pdf
資料中の E1 (12 + 34 = 46) の動作をトレースせよ。 各ステップにおける、 4 枚のカード (PC、 A、 B、 C) の値と、 ノート 5 行目の値の変化を書き出せ。
資料中の E2 (1〜3 の和の計算) の動作をトレースせよ。 各ステップにおける、 4 枚のカード (PC、 A、 B、 C) の値と、 ノート 10 行目の値の変化を書き出せ。
資料中の E3 (1〜4 の積の計算) の動作をトレースせよ。 各ステップにおける、 4 枚のカード (PC、 A、 B、 C) の値と、 ノート 10 行目の値の変化を書き出せ。
資料中の E4 (1〜5 の積の計算) におけるプリエンプティブ・マルチタスキングの動作を、 「ミニ CPU 係」と「オペレーティングシステム係」の 2 人がペアになってシミュレートせよ。
ミニ CPU 係の役割: 現在のカードセットを使って、 ミニ CPU の動作をひたすら実行する。 オペレーティングシステム係の指示に従ってカードセットを切り替える。 ただし、 カードセットを切り替えられるのはステップ 1 (PC カードに書かれている行番号の「指示」をノートから読み込む) の直前のみである。 つまり、 ステップ 1〜3 はまとめて一気に実行する (途中で切り替えられることはないアトミックな処理である)。
オペレーティングシステム係の役割: 自由なタイミング (例えば 10 秒ごと) で、 ミニ CPU に対して「はい、 カードセットを切り替えてください」と指示する。
| PC | A | B | C | 5行目の値 |
|----+----+----+---+-----------|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 12 | 0 | 0 | 0 |
| 2 | 12 | 34 | 0 | 0 |
| 3 | 46 | 34 | 0 | 0 |
| 4 | 46 | 34 | 0 | 46 |
| 4 | 46 | 34 | 0 | 46 |
| 4 | 46 | 34 | 0 | 46 |
| 4 | 46 | 34 | 0 | 46 |
| 4 | 46 | 34 | 0 | 46 |
| 4 | 46 | 34 | 0 | 46 |
| PC | A | B | C | 10行目の値 |
|----+----+---+---+------------|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 1 | 1 | 0 | 0 |
| 4 | 1 | 1 | 0 | 0 |
| 5 | 1 | 1 | 0 | 0 |
| 6 | 1 | 2 | 0 | 0 |
| 2 | 1 | 2 | 0 | 0 |
| 3 | 3 | 2 | 0 | 0 |
| 4 | 3 | 2 | 0 | 0 |
| 5 | 3 | 2 | 0 | 0 |
| 6 | 3 | 3 | 0 | 0 |
| 2 | 3 | 3 | 0 | 0 |
| 3 | 6 | 3 | 0 | 0 |
| 4 | 6 | 3 | 0 | 0 |
| 7 | 6 | 3 | 0 | 0 |
| 8 | 6 | 3 | 0 | 6 |
| 8 | 6 | 3 | 0 | 6 |
| 8 | 6 | 3 | 0 | 6 |
| 8 | 6 | 3 | 0 | 6 |
| PC | A | B | C | 10行目の値 |
|----+----+---+---+------------|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 |
| 2 | 1 | 1 | 0 | 0 |
| 3 | 1 | 1 | 0 | 0 |
| 4 | 1 | 1 | 0 | 0 |
| 5 | 1 | 1 | 0 | 0 |
| 6 | 1 | 2 | 0 | 0 |
| 2 | 1 | 2 | 0 | 0 |
| 3 | 2 | 2 | 0 | 0 |
| 4 | 2 | 2 | 0 | 0 |
| 5 | 2 | 2 | 0 | 0 |
| 6 | 2 | 3 | 0 | 0 |
| 2 | 2 | 3 | 0 | 0 |
| 3 | 6 | 3 | 0 | 0 |
| 4 | 6 | 3 | 0 | 0 |
| 5 | 6 | 3 | 0 | 0 |
| 6 | 6 | 4 | 0 | 0 |
| 2 | 6 | 4 | 0 | 0 |
| 3 | 24 | 4 | 0 | 0 |
| 4 | 24 | 4 | 0 | 0 |
| 7 | 24 | 4 | 0 | 0 |
| 8 | 24 | 4 | 0 | 24 |
| 8 | 24 | 4 | 0 | 24 |
| 8 | 24 | 4 | 0 | 24 |
| 8 | 24 | 4 | 0 | 24 |
省略
独習アセンブラ 新版
https://www.shoeisha.co.jp/book/detail/9784798170299
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
- 初回の講義時点では履修科目が未確定であったため、修正期間中に本科目を新たに履修することを決めました。そのため、第1回の講義への出席および課題提出ができておりません。つきましては、何か救済措置などご対応いただける可能性はありますでしょうか。
以下のページを見てください。
第 1 回目の授業を欠席した場合の手続き・学習法
https://lsnl.jp/~ohsaki/lecture/#7
- 講義ページの前回の質問についてのところに「授業内で行った課題のような問題が定期テストで出る」と書かれてありますが、これは定期テストではなく7月11日に行われる授業中試験のことでしょうか?
はい
- CPUのクロックレートが上がって処理できる命令が増えてもパソコン内の時間が早く進まないのはなぜですか?
いい質問ですね。RTC (Real-Time Clock) 等のハードウェアが搭載されているからです。
- このレポートはどのように評価し、どのように点数をつけるのですか?
内容に応じて評価します。
- 今回の授業ではトレースを扱ったが、最初は苦手であったが徐々にではあったが、理解することができた。次の授業でも深く学んでいきたいと思った。
- 授業中に手を動かして考えることで、後からの復習で初めて演習する授業よりもしっかり内容が身についたように感じました。より定着する勉強習慣を身につけていきたいです。
- 全体的に難しいと感じましたが、他の人と一緒に復習することでより理解を深められました。
1. 解説 (40 分)
2. グループワーク (30 分)
3. オペレーティングシステム CTF (10 分)
4. グループワーク (10 分)
5. リフレクションシート記入 (10 分)
2025-04-11 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-1
- プロセスの状態遷移図を描き、なぜそうなるかを他人に説明できるようになる。
- ミニ CPU の動作を手作業でトレースすることにより、「プロセス」と「スレッド」の違いを理解する。
- プロセスとスレッドの原理から、それぞれの利点・欠点を理解する。
プロセスの状態が running から waiting に遷移するのはどの場合か。
+--------------->
|
+-----------+
+----->| running |-----+
| +-----------+ |
v v
+-----------+ +------------+
----->| waiting |<----------| blocked |
+-----------+ +------------+
1. プロセスが生成された。
2. プロセスが終了した。
3. プロセスが入出力要求を行った。
4. 入出力要求による処理が完了した。
5. より優先度の高いプロセスが waiting 状態となった。
課題 1 におけるプロセスの状態遷移図では、 状態数が 3 であるため、 合計 6 (= 3 x 2) 通りの遷移が考えられる。 状態遷移図に 4 通りの遷移しか示されていないのはなぜかを説明せよ。
以下の資料を読み、 2025-04-18 の課題 3 と同じように、 資料中の E4 (2 スレッド版) および E5 (2 プロセス版) におけるプリエンプティブ・マルチタスキングの動作を、 「ミニ CPU 係」と「オペレーティングシステム係」の 2 人がペアになってシミュレートせよ。
資料: 「ミニ CPU」 によるスレッドとプロセスの理解
https://lsnl.jp/~ohsaki/lecture/os/2025/priv/mini-cpu-process.pdf
課題 3 におけるスレッドとプロセスのトレース結果をもとに、 スレッドの利点・欠点が以下のように説明される理由を説明せよ。
Threads vs processes
https://en.wikipedia.org/wiki/Thread_%28computing%29#Threads_vs_processes
- Lower resource consumption of threads
- Simplified sharing and communication of threads
- Thread crashes a process
5
※ 5 が正解であること、 それ以外が正解でないことを論理的に説明できるようにせよ。
blocked → running: blocked 状態は OS のスケジューリング対象ではないから
waiting → blocked: waiting 状態では OS に入出力を要求できないから
省略
- Lower resource consumption: E4 (2 スレッド版) では 「ノート」(メモリ) を切り替える必要がないから。
- Simplified sharing and communication: E4 (2 スレッド版) では 「ノート」上の値を 2 つのスレッドが共有できるから。
- Thread crashes a process: E4 (2 スレッド版) では一方のスレッドが他方のスレッドが使う「ノート」を破壊できるから。
[授業中に使用] オペレーティングシステム CTF (パスワードが必要です)
https://lsnl.jp/~ohsaki/lecture/os/2025/priv/ctf.html
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
- runningになったプロセスがrunning→blocked→waitingに遷移する時は、プロセス内のスレッドが全く実行されないのか、それともスレッドの実行途中でもblockedに遷移されることがあるのでしょうか。
スレッドはプロセスの一部です。プロセスが blocked 状態の時はスレッドも停止し
ます。
山田家 (プロセス) に、長男の山田一郎 (スレッド 1) と次男の山田次郎 (スレッド
2) がいるようなものです。山田家 (プロセス) が活動していない時は、一郎 (スレッ
ド 1) と次郎 (スレッド 2) も活動していません (活動できません)。
- 席移動までの40分間の時間で、これからやる課題を解くにあたってのヒントをもう少し具体的にお願いしたいです。席移動してからお互い分からなさすぎて話し合えない事が多いので。
グループワークの時間を確保したいので、アクティブラーニングで解決してください。
つまり、わからないことがあれば (グループワークの早い段階で) わかっている人を
探して教えてもらってください。
- CTFの問題と解答をセットで何度もチャレンジできると(そして問題がどんどん増えていくと)ゲーム感覚で学習が進んでいいなと思いました。
- 次の授業も色んな人とお話ししながら学んでいきたいと思います。
- プロセスとスレッドについて、そのどちらの方式を用いるかは自動で決めることができるのかあるいは何によって決まるのかが気になりました。
将来的にそういうプログラミング言語ができるかもしれませんが、現状はプロセスを
使うかスレッドを使うかはプログラマが決めます (プログラムをどう設計するかで決
まります)。
2025-04-25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- プロセス間通信とは何かを理解し、他人に説明できるようになる。
- プロセス間通信によって何が実現できるかを他人に説明できるようになる。
- ミニ CPU の動作例を用いて、スレッドによる競合状態 (race condition) が発生する原理を理解できるようになる。
Inter-process communication
https://en.wikipedia.org/wiki/Inter-process_communication
Semaphore (programming)
https://en.wikipedia.org/wiki/Semaphore_(programming)
以下の空欄 [ ア ]〜[ カ ] にあてはまる最も適切な語句を以下の (1)〜(15) から選べ。
プロセス間通信 (Inter-Process Communication; IPC) とは、 コンピュータ上で動作している [ ア ] 同士が情報を [ イ ] するための機能である。 コンピュータ上で動作しているプロセスは、 それぞれ [ ウ ] した [ エ ] を有しているため、 [ ア ] 同士が通信を行うためには、 [ オ ] が提供する何らかの仕組みを使用する必要がある。 代表的なプロセス間通信として、 [ エ ] の一部を複数の [ ア ] で共有する [ カ ] が挙げられる。
(1) アドレス、 (2) オペレーティングシステム、 (3) コンパイル、 (4) スレッド、 (5) ファイルサーバ、 (6) プロセス、 (7) マルチタスキング、 (8) メモリ空間、 (9) ユーザ、 (10) レジスタ、 (11) 交換、 (12) 保存、 (13) 共有メモリ、 (14) 実行、 (15) 独立
実現のためにプロセス間通信が不可欠なものをすべて答えよ。
1. バックアップソフトウェア
2. プリエンプティブ・マルチタスキング
3. 複数プロセスの同期実行
4. 並列アルゴリズムの実装
5. 分割コンパイル
資料: ミニ CPU の動作例 E6: 競合状態 (race condition) が発生する例 (2 スレッド版)
https://lsnl.jp/~ohsaki/lecture/os/2025/priv/mini-cpu-ipc.pdf
プリエンプティブ・マルチタスキングによる資料中の E6 (2 スレッド版) の動作を、 「ミニ CPU 係」と「オペレーティングシステム係」の 2 人がペアになってシミュレートせよ。
競合状態が発生しない場合と、 競合状態が発生する場合の両方をシミュレートせよ。
スレッド同士であれば、 プロセス間通信 (より正確には「スレッド間通信」) が簡単に実現できるのはなぜか。
ア: (6) プロセス
イ: (11) 交換
ウ: (15) 独立
エ: (8) メモリ空間
オ: (2) オペレーティングシステム
カ: (13) 共有メモリ
※ なぜこれら以外の語句が適切でないかを論理的に説明できるようにせよ。
4 のみ。
3 はシステムクロックを使って実現はできる (ので、 不可欠ではない)。
5 は分割したものを一つずつ順番にコンパイルすれば実現できる (ので、 不可欠ではない)。
※ 4 のみが正解であることを論理的に説明できるようにせよ。
省略
メモリ空間を共有しているため、 そもそもデータ領域を共有しているから。
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
- Semaphore を用いたプロセス間通信の制御を行うときに、一つのプログラムで正常にリソースの解放が行われなかった場合、影響を受ける他のプログラム結果はどうなるのでしょうか?
blocked 状態に入ったままになります (普通のプログラムであれば一定時間でタイム
アウトし、エラー処理を実行します)。
- 課題2で4のみが正解なのは、4では演算結果などの次の処理で必要な情報を渡す必要があるが、3ではその必要ないから(システムクロックでも制御できる)ということなのでしょうか。
はい。「6/1(日)の正午にみんなでカレーを食べよう」とあらかじめ約束していれば、
複数人で同期してカレーを食べられるのと同じです。
2025-04-25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- スケジューリング (scheduling)、スケジューラ (scheduler)、スケジューリングアルゴリズム (scheduling algorithm) の違いを理解し、他人に説明できるようになる。
- 効率的なスケジューリングが困難である 4 つの理由を理解し、他人に説明できるようになる。
- 横取りなし (ノンプリエンプティブ) のスケジューリングと、横取りあり (プリエンプティブ) のスケジューリングが、それぞれどのような用途に向いているかを理解する。
- FCFS (First-Come First-Served) スケジューリングの動作をトレースし、ターンアラウンドタイムを計算できるようになる。
資料
Scheduling disciplines
https://en.wikipedia.org/wiki/Scheduling_(computing)#Scheduling_disciplines
Turnaround time
https://en.wikipedia.org/wiki/Turnaround_time
オペレーティングシステムにおける、 「スケジューリング (scheduling)」、 「スケジューラ (scheduler)」、 「スケジューリングアルゴリズム (scheduling algorithm)」とは何か。
オペレーティングシステムにおいて、 効率的なスケジューリングが困難である理由を 4 つ説明せよ。
横取りなし (ノンプリエンプティブ) のスケジューリングと、 横取りあり (プリエンプティブ) のスケジューリングは、 それぞれどのような用途に向いているか。
下表に示すプロセス P1〜P4 を、 FCFS (First-Come First-Served) スケジューリングを用いて実行した時の、 各プロセスのターンアラウンド時間をそれぞれ答えよ。
| プロセス | 生成時刻 [スロット] | 計算時間 [スロット] |
|----------+---------------------+---------------------|
| P1 | 0 | 4 |
| P2 | 2 | 8 |
| P3 | 4 | 2 |
| P4 | 10 | 2 |
次に実行すべきプロセスを選択すること (行為) が「スケジューリング」であり、 その選択方法 (計算手順) が「スケジューリングアルゴリズム」である。 オペレーティングシステム (= ソフトウェア) において、 スケジューリングを実施するソフトウェアが「スケジューラ」である。
情報工学の分野では、 カタカナ語が過度なまでに多用される。 専門用語はカタカナで理解するのではなく、 元の英語で理解するのがポイントである。
上の「スケジューリング (scheduling)」、 「スケジューラ (scheduler)」、 「スケジューリングアルゴリズム (scheduling algorithm)」の例で説明しよう。
まず、それぞれの英単語の品詞を理解する。 特に、schedule には名詞と動詞の両方が存在する。 名詞としての schedule なのか、 動詞としての schedule なのかを理解する。
scheduling は単語の形 (末尾が -ing) からわかるように、 schedule (動詞) の動名詞である。 scheduling は schedule (動詞) の動名詞なので、 「schedule すること」という名詞の意味を持つ。
scheduling algorithm は「動名詞 + 名詞」の形なので、 scheduling algorithm における動名詞 scheduling は動名詞の形容詞用法 (名詞を修飾する形容詞としての動名詞) である。
動名詞の形容詞用法には、 「sleeping bagy (眠っている赤ん坊)」と「sleeping bag (眠ることのための袋)」の 2 つのパターンがある。 scheduling algorithm は、 意味から考えて「スケジュールすることのためのアルゴリズム (纂法)」であることがわかる。
scheduler は名詞である。 語尾が -er で終わっていることから、 「schedule する人もしくはモノ」を意味することがわかる。
これらの英単語の意味や、 英語の文法を正確に頭に入れてから、 課題 1 の「略解」を読んでみよ。
- プロセスの切り替えに時間がかかる (頻繁に切り替えると CPU が無駄になる)
- プロセスはブロックされるかもしれない (ブロックされると CPU を割り当てられなくなる)
- 必要な計算量は事前にわからない (事前にスケジューリング計画を立てるのが困難)
- 何が重要かは用途による (何が「良い」スケジューリングなのかは状況による)
※ 具体的な例を考えて、これら 4 つが本当に困難である理由であるかを理論的に説明できるようにせよ。
横取りなし (ノンプリエンプティブ) → バッチ (サーバ向けの OS)
横取りあり (プリエンプティブ) → 会話型 (一般的なエンドユーザ向けの OS)
※ なぜそうなのかを理論的に説明できるようにせよ。
FCFS (First-Come First-Served)
P1 ========
P2 ----================
P3 ----------------====
P4 --------====
+ + + + + + + + + + + + + + + + + + + + + + + +
0 5 10 15 20
ターンアラウンドタイム
P1: 4 [スロット]
P2: 10 [スロット]
P3: 10 [スロット]
P4: 6 [スロット]
平均: 7.5 [スロット]
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
- オペレーティングシステムは、最適スケジューリングの代わりに、スケジューリングアルゴリズム(計算方法)自体を状況に応じて実行途中に変えているのでしょうか。または、アルゴリズム自体にそのような機能が組み込まれているのでしょうか。
オペレーティングシステムの種類にもよりますが、一般的なデスクトップ OS では単
一のスケジューリングアルゴリズム (ラウンドロビンベースだが、優先度にも対応し
た複雑なもの) が使用されているようです。
- 横取りありの方が便利で、使い勝手がよいと勝手に思っていたので、横取りなしのほうが、本当はありがたいということを知って驚いた。
誰の目線かによりますね。プロセスにとっては「横取りあり」は嫌なこと (プロセス
は CPU を占有したいから) ですが、OS を対話的に使用している利用者にとっては
「横取りあり」は望ましいこと (応答時間が短くなるから) です。
2025-04-25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- 代表的なスケジューリングアルゴリズム (最短ジョブ優先方式、最小残り時間優先方式、ラウンドロビン方式) の特徴を理解し、他人に説明できるようになる。
- 代表的なスケジューリングアルゴリズムの動作をトレースし、ターンアラウンド時間の観点からそれぞれのスケジューリングアルゴリズムの特性の違いを理解できるようになる。
- 最短ジョブ優先方式や最小残り時間優先方式を現実のスケジューラで用いる場合に、どのような困難さがあるかを理解し、他人に説明できるようになる。
- ラウンドロビン方式のクォンタムの設定が、何と何のトレードオフであるかを理解し、他人に説明できるようになる。
資料
Scheduling (computing)
https://en.wikipedia.org/wiki/Scheduling_(computing)
Shortest job next
https://en.wikipedia.org/wiki/Shortest_job_next
Shortest remaining time
https://en.wikipedia.org/wiki/Shortest_remaining_time
Round-robin scheduling
https://en.wikipedia.org/wiki/Round-robin_scheduling
最短ジョブ優先方式 (SJF; Shortest Job First) と最小残り時間優先方式 (SRTF; Shortest Remaining Time First) の共通点と相違点をそれぞれ答えよ。
下表に示すプロセス P1〜P4 を、 SJF および SRTF スケジューリングを用いて実行した時の、 各プロセスのターンアラウンド時間および平均ターンアラウンド時間をそれぞれ答えよ。
| プロセス | 生成時刻 [スロット] | 計算時間 [スロット] |
|----------+---------------------+---------------------|
| P1 | 0 | 4 |
| P2 | 2 | 8 |
| P3 | 4 | 2 |
| P4 | 10 | 2 |
課題 2 の表に示すプロセス P1〜P4 を、 RR (Round Robin) スケジューリングを用いて実行した時の、 各プロセスのターンアラウンド時間および平均ターンアラウンド時間をそれぞれ答えよ。 ただし、クォンタムは 1 [スロット] とし、 新規に生成されたプロセスはキューの末尾に追加されるとする。
RR スケジューリングにおけるクォンタムを増加させると、 オペレーティングシステムのどのような特性が向上し、 また逆にオペレーティングシステムのどのような特性が低下するかを答えよ。
SJF も SRTF もジョブの実行時間が既知であることを前提としている。
SJF は横取りなし (non-preemptive) であるが、 SRTF は横取りあり (preemptive) のスケジューリングアルゴリズムである。
※ SJF や SRTF には複数の名称があることに注意する。 例えば、 SJF (Shortest Job First) は、 SJN (Shortest Job Next) や SPN (Shortest Process Next) とも呼ばれる。
「ジョブ (job)」や「タスク (task)」は、 計算機上が実行する処理のひとまとまりを表す。 どのくらいの単位の処理をジョブと呼び、 どのくらいの単位の仕事をタスクを呼ぶかは決まっていない。 一般的に、 ジョブは比較的大きな処理を、 タスクは比較的小さな処理を表すことが多い。
FCFS や SJF のようなスケジューリングアルゴリズムは、 汎用のアルゴリズムである。 つまり、 プロセスのスケジューリングのために用いられる専用のアルゴリズムではない。 例えば FCFS は、 オペレーティングシステムにおけるプロセススケジューリングにも、 データベースにおけるトランザクションのスケジューリングにも、 ルータにおけるパケットのスケジューリングにも用いられる (ことがある)。 このため、FCFS や SJF のようなスケジューリングアルゴリズムでは、 ひとまとまりの処理を「ジョブ」と読んでいる。
オペレーティングシステムにおけるプロセスのスケジューリングでは、 「ジョブ」が「プロセス (もしくはスレッド)」に相当する。 従って、 プロセスのスケジューリングという文脈では、 「SJF は残り時間が最も短いジョブに CPU を割り当てる」と言っても、 「SJF は残り時間が最も短いプロセスに CPU を割り当てる」と言っても、 どちらも正しい表現である。 「ジョブ」と「プロセス」のどちらを使うかは、 何を表現したいかによる。
SJF (Shortest Job First)
P1: 4 [スロット]
P2: 12 [スロット]
P3: 2 [スロット]
P4: 6 [スロット]
平均: 6.0 [スロット]
SRTF (Shortest Remaining Time First)
P1: 4 [スロット]
P2: 14 [スロット]
P3: 2 [スロット]
P4: 2 [スロット]
平均: 5.5 [スロット]
ここでは、 プロセスの切り替え時間をゼロとしている。 SJF よりも、 SRTF のほうがターンアラウンド時間が小さくなっている。
RR (Round Robin)
P1: 5 [スロット]
P2: 14 [スロット]
P3: 5 [スロット]
P4: 4 [スロット]
平均: 7.0 [スロット]
ここでも、課題 2 と同じく、 プロセスの切り替え時間をゼロとしている。 RR のターンアラウンド時間が、 SJF や SRTF よりも大きくなっている。
CPU の利用効率が向上する一方、 プロセスの応答性能が低下する (応答時間が増大する)。
以下は、 より多く (16 個) のプロセスを、 FCFS、 SJF、 SRTF、 RR でスケジューリングした時のシミュレーション結果である。 4 つのシミュレーションにおいて、 プロセスの生成時刻および計算時間はすべて同じである。
FCFS (First-Come First-Served)
SJF (Shortest Job First)
SRTF (Shortest Remaining Time First)
RR (Round Robin)
ジョブの実行時間や残り時間を利用する (逆に言えば、 それが既知の時にしか使えない) SJF や SRTF の平均ターンアラウンド時間が小さいことがわかる。 また、 RR のターンアラウンド時間は、 これら 4 方式の中で最も大きい (ターンアラウンド時間の観点では最悪の性能) こともわかる。
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
※次回は講義形式で前半の総復習をします。 前半の内容で理解が不十分なもの、 疑問が残っているもの、 もっと知りたいものを整理しておいてください。 次回の授業では、 授業中に「みなさんが聞きたいこと」を書き込んでもらって、 それらについて私が解説します。
- 「参考:」のRRスケジューリングで、P7とP8は同時に生成され、P7が先にキューに入っていますが、これは計算時間が短いからなのでしょうか、それとも微差でP7の方が速く生成されたからなのでしょうか。
シミュレータがそういう実装になっているからです。ラウンドロビンスケジューリン
グには、「プロセス P4、P5、P6 が存在しているところにプロセス P7、P8 が同時に
生成された時に、次のクォンタムをどれに割り当てるか」は定められていません (含
まれていません)。P4〜P8 どれも「アリ」です。
- どのスケジューリングアルゴリズムも、利点と欠点があり、すべてが理想的なスケジューリングをすることがどれだけ難しいことか分かった。それぞれの特性を理解し、適切に使用できたら良いと思った。
多目的最適化なので難しい (単一の評価関数を定めるのが難しい) こともあれば、
(単一の評価関数を定められたとしても) それを実現するのが難しいということもあ
ります。
1. ガイダンス・質問記入 (5 分)
2. 質問への回答 (35 分)
3. 席替え・CTF (15 分)
4. 質問への回答 (35 分)
5. リフレクションシート記入 (10 分)
- 解説された内容を判的思考で分析し、できるだけ多くを吸収する。
- 脳が覚醒した状態のままでいる。
- クリッカーに記入する質問は、可能な限り、正しい日本語で具体的に記入する。
- 始めて知ったこと、なるほどと思ったことはノートに記録する。
- 前半の「内容目標」すべてに到達できるようになる。
- 前半の内容に関連して、理解が不十分なもの、疑問が残っているもの、もっと知りたいものを言語化して質問できるようになる。
- 前半の内容に関連する疑問を一つでも多く解消できるようになる。
[授業中に使用] クリッカー (パスワードが必要です)
https://lsnl.jp/app/lecture/clicker/show/os
「レポート課題 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 がサイバー攻撃で情報漏えいしても私は何も困らな
いようにしています。
「生殺与奪の権を他人に握らせるな!!」 (冨岡義勇 (鬼滅の刃))
2025-04-25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- マルチプログラミング環境における CPU の利用率を計算できるようになる。
- スワッピングとページングの違いを理解し、ページングの利点を他人に説明できるようになる。
- ページングにおける仮想アドレスと物理アドレスの違いを理解し、他人に説明できるようになる。
- ページングの原理を理解し、仮想アドレス、物理アドレス、ページテーブル、ページサイズの関係を他人に理解できるようになる。
主記憶上に同時に 4 つのプロセスを配置できるシステムにおける CPU 利用率を求めよ。 ただし、 各プロセスが実行中に I/O 待ちとなる割合を 50% とする。
一般に、 スワッピング (swapping) よりも、 ページング (paging) のほうが効率的である理由を説明せよ。
仮想アドレス (virtual address) と物理アドレス (physical address) の違いを説明せよ。
16 ビットの仮想アドレス空間を持つページングにおいて、ページテーブルの大きさが 8 であった。 ページサイズを答えよ。
1 - (0.5)^4 = 0.9375 より約 94%。 各プロセスが I/O 待ちとなる確率が 0.5 であり、 すべてのプロセスが I/O 待ちとなった時に CPU が無駄となるから。
スワッピングは主記憶上にあるプロセス全体を外部記憶装置に書き出す。 一方、 ページングは主記憶上にある (例えば 4K バイトの) ページ単位で外部記憶装置に書き出す。 このため、 ページングは、 プログラムが有する参照の局所性 (locality of reference) を活かせるから。
Locality of reference
https://en.wikipedia.org/wiki/Locality_of_reference
「物理アドレス」とは、 プログラムが実際に格納されている主記憶上のアドレスである。 例えば、 主記憶の大きさが 256K バイトであれば、 物理アドレスの大きさは 18 ビットである。 「仮想アドレス」とは、 (オペレーティングシステムの仮想メモリによって) 各プロセスが利用できるアドレスである。 例えば、 主記憶の大きさが 256K バイトであっても、 仮想アドレスの大きさが 24 ビットであれば、 各プロセスには 16M バイトのメモリ空間が利用できるように見える。
ページテーブルの大きさが 8 (= 2^3) であるから、 ページアドレスは 3 ビットである。 16 ビットの仮想アドレスの上位 3 ビットがページアドレスであるから、 下位 13 ビットがページ内オフセットを表す。 従って、 ページサイズは 8,192 バイトである。
通常は、 仮想アドレス空間の大きさを決定し、 それとともにページングで用いるページサイズを決める。 仮想アドレス空間の大きさとページサイズが決まれば、 自動的に必要なページテーブルの大きさが決まる。
例えば、仮想アドレス空間の大きさが 24 ビットで、 ページサイズが 4 KB のページングを実現しようと決めたなら、 ページテーブルの大きさは 2^24 [B] / 4 [KB] = 4,096 だけ必要となる。 つまり、
(アドレス空間の大きさ) / (ページの大きさ) = (ページテーブルの大きさ)
という関係である。 上記の関係から、 「アドレス空間の大きさ」、 「ページの大きさ」、 「ページテーブルの大きさ」のうち 2 つがわかれば、 もう一つが求められる。
課題 4 は上記の関係を理解しているかを問う問題である (現実には、 ページテーブルの大きさからページサイズを推測するということは普通はしない (それが必要となる場面はほとんどない))。
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10
- 仮想記憶について調べていたら、キャッシュメモリとの違いについてが出てきました。キャッシュメモリも、参照の局所性を利用していると思うのですか、これらはどのように違うのでしょうか?
「外部記憶装置のうち、頻繁に使用するものを主記憶に載せて効率化する仕組み」と
考えれば仮想記憶はキャッシュメモリとしての機能も持っている、と言えると思います。
- ページングの参照の局所性についてあまり理解できなかったのですが、よく実行する命令は主記憶に長く置いておくことで、すぐ実行できるようにするということですか?それとも仮想アドレスで前回使ったメモリの周辺を見れば良いから参照する時間が早くなるということですか?
どちらでもありません。参照の局所性は「局所性」という性質のことです。参照され
るアドレスが同じようなところに集まる傾向がある、ということです。
参照の局所性を活かせば「よく実行する命令は主記憶に長く置いておくことで、すぐ
実行できるようにする」こともできますし、「前回使ったメモリの周辺を見れば良い
から (正確には「見ることが多いから」) (ページフォールトの発生頻度下がり) 参
照する時間が早く」することもできます。
2025-04-25 のものと同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#12-1
- C 言語で書かれたプログラムのポインタの値と仮想記憶 (ページング) における仮想アドレスの関係を理解し、他人に説明できるようになる。
- ページ置き換えアルゴリズム FIFO を理解し、その動作をトレースできるようになる。
- ページ置き換えアルゴリズム LRU を理解し、その動作をトレースできるようになる。
- 最適なページ置き換えアルゴリズムがどのようなものかを理解するとともに、その実現がなぜ困難であるかを理解する。
以下のプログラム ex1-1.c および ex1-2.c をコンパイルし、 実行ファイル ex1-1 および ex1-2 を得た。 その後、 64 ビットの OS 上で ex1-1 および ex1-2 を同時に実行したところ以下のような出力が得られた。 ex1-1 の変数 x と ex1-2 の変数 y が同じアドレスに格納されているのはなぜか。
ex1-1.c:
#include <stdio.h>
#include <unistd.h>
int x = 123;
int
main (void)
{
printf ("&x = %p\n", &x);
sleep (60);
}
ex1-2.c:
#include <stdio.h>
#include <unistd.h>
double y = 456.789;
int
main (void)
{
printf ("&y = %p\n", &y);
sleep (60);
}
プログラムの実行
$ ./ex1-1 & ← バックグラウンドで実行
&x = 0x555555558038
$ ./ex1-2 & ← バックグラウンドで実行
&y = 0x555555558038
以下のページが順番に参照された時のページフォールト数と、 最終的に主記憶装置に格納されているページの番号をすべて答えよ。 ただし、 ページ置き換えアルゴリズムは FIFO とする。 また、 主記憶に格納できるページ数を 4 とし、 初期状態ではどのページも格納されていない (空の状態である) とする。
0, 2, 1, 3, 5, 4, 6, 3, 7, 4, 7, 3, 3, 5
課題 2 において、 ページ置き換えアルゴリズムを LRU とした時の、 ページフォールト数と最終的に主記憶装置に格納されているページの番号をすべて答えよ。
課題 2 において、 最適なページ置き換えアルゴリズムを用いた時のページフォールト数を答えよ。 なお、 ページの参照系列があらかじめ分かっていると仮定してよい。
変数 x や変数 y のアドレスがページングによって実現されている仮想アドレスだから。 プロセスのデータ領域は独立しているため、 変数 x と変数 y は異なるデータ領域に格納されている。 OS によって各プロセスには 64 ビットの仮想空間が提供されている。 変数 x と変数 y は同じ仮想アドレスに格納されているが、 実際には主記憶上の異なる物理アドレスに格納されている。
ページフォールト数 10、 最終的に格納されているページ 7、 6、 5、 3 (順番は入れ替わっても構わない)。
FIFO (First In First Out)
ページフォールト数 9、 最終的に格納されているページ 3、 5、 4、 7 (順番は入れ替わっても構わない)。
LRU
次に参照される予定が最も先であるページを優先してページアウトすればよい。 ページフォールト数 8。
Memory paging
https://en.wikipedia.org/wiki/Memory_paging
In computer operating systems, memory paging (or swapping on some
Unix-like systems) is a memory management scheme by which a
computer stores and retrieves data from secondary storage[a] for
use in main memory.[citation needed] In this scheme, the
operating system retrieves data from secondary storage in
same-size blocks called pages. Paging is an important part of
virtual memory implementations in modern operating systems, using
secondary storage to let programs exceed the size of available
physical memory.
For simplicity, main memory is called "RAM" (an acronym of
random-access memory) and secondary storage is called "disk" (a
shorthand for hard disk drive, drum memory or solid-state drive,
etc.), but as with many aspects of computing, the concepts are
independent of the technology used.
Depending on the memory model, paged memory functionality is
usually hardwired into a CPU/MCU by using a Memory Management
Unit (MMU) or Memory Protection Unit (MPU) and separately enabled
by privileged system code in the operating system's kernel. In
CPUs implementing the x86 instruction set architecture (ISA) for
instance, the memory paging is enabled via the CR0 control
register.
ページング方式
https://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%E6%96%B9%E5%BC%8F
ページング方式 (Paging) とは、コンピュータのオペレーティングシス
テムにおいて記憶装置をページと呼ばれる小さな単位に分割して割り当
てを行うアルゴリズム群である。仮想記憶のベースとなる設計の一つ。
== 「方式」とは「群」である??
===== 「ベース」の意味が不明
=== 「方式」=「群」=「設計の一つ」??
物理メモリ空間および論理メモリ空間を、基本的に一定サイズのページ
と呼ばれる単位に分割して管理を行う。論理メモリから物理メモリ空間
への対応づけはページテーブルと呼ばれる構造体で実現され、この構造
===== 「データ構造」の誤り?
体はオペレーティングシステム (OS) によって管理される。物理メモリ
空間に対応づけられていない論理メモリを参照した時にはページフォル
トという例外によってOS側の例外処理ルーチンに制御が移行し、OS側の
管理によって適宜対応したページを二次記憶等から読み込み、テーブル
== なぜ「等」?? 他に何があるのか??
======= 「管理」によって「読み込む」??
======= なぜ「ページテーブル」ではなく「テーブル」??
を更新してその参照した命令の実行に戻る。
============== 日本語がおかしい。
これを実現するハードウエアであるメモリ管理ユニット (MMU) の中には
=== 「これ」が何を差すか不明。「ページング」であれば実現するのは OS。
トランスレーション・ルックアサイド・バッファ (Translation
Lookaside Buffer:TLB) と呼ばれる一種のキャッシュがあり、ユニット
======== 何を差している?? MMU??
内部ではこの対応表に基づいてメモリアドレスの対応づけを行っている。
== 上では「キャッシュ」、ここでは「表」??
============ 何と何の対応か書かれていない。
このテーブルから参照出来なかったときをTLBミスと呼ぶ。このときの処
================== 意味不明
理はMMUの設計によって異なり、MMU内にはTLBのみを持ちTLBミスが即例
外を起こし、OSがページテーブルを引いてTLBに追加することによって
===== 意味不明
TLBミスを解決するアーキテクチャや、ページテーブル自体のフォーマッ
============ 何のアーキテクチャ?? この日本語だと「処理」の「アーキテクチャ」となって意味不明。
トがOSが使えるビットを含めた形でMMUによって定義されていて、TLBミ
==================================================== 意味不明。書いている人が理解していないと思われる。
ス時にMMU自身が与えられた物理アドレスにあるページテーブルを参照す
るアーキテクチャもある。
================== そもそも「ページング」の本質と関係ない話。他にもっと重要なことがたくさんある。
「レポート課題 2025-04-11」と同じ。
https://lsnl.jp/~ohsaki/lecture/os/2025/#10-10