石黒/日誌/2013-09-11
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[石黒/日誌]]
*後期の授業 [#v7352902]
残り単位わずか。
-英語: EL適当に
-卒論英語
-専門: コンピュータ構築設計論
言語関連の授業取ろうかと思ったけどシラバス(と担当の先生)を見てやめた。一番血肉になりそうなのはやはり構築論ではないかと。
ただ、前期みたいに何時間も使いたくないので9月中に予習をしたい。
*組込みOS輪講担当分メモ 10th Step メモリ管理 [#n830fa69]
**OSの役割(10.1) [#j55d5f4c]
>
OSとは何かを正しく把握することは難しい。(中略)OSは、基本的に互いに関係のない2つの役割を果たしているからである。それはマシン拡張の役割とリソースマネージャの役割である。
アンドリュー・S・タネンバウム, モダンオペレーティングシステム原著第2版 p.3
ここで、リソースマネージャの役割をA, マシン拡張の役割をBとおこう
-OSの無いコンピュータ
-- => A. 単一のプログラム
-- => B. プログラムが直接HWを操作
-OSのあるコンピュータ
-- => A'. 複数のプログラム
-- => B'. HW操作の抽象化
OSの前に…
**ノイマン型コンピュータとは(10.1.1) [#q79d3a2d]
-CPU
-I/O
-Mem
これらを資源と考える
A'の役割とは、つまり複数プログラムのために資源を管理する
-CPU => スレッド, スケジューリング
-I/O => 割り込みなど
-Mem => 今回やる
**3つの方法(10.1.2) [#m59f0fdf]
+各プログラムに任せる
--衝突が起こる[ノートの絵]
+リンカスクリプトで静的に決定(static)
--スケールできない
+必要に応じて確保(dynamic)
--最も現実的
--スタックでは不十分
--ユーザはallocate, free可能
--OSはメモリ保護で不正を防ぐ
**メモリ管理の概要(10.2) [#t7cd18c8]
Dynamicな2つの方法
+可変サイズ(10.2.1〜10.2.2)
+固定サイズ(10.2.3)
どちらが適しているか?
予想: 可変のほうが効率が良さそう
***可変サイズ [#veeba6dd]
Cのmalloc(), free()の実装を考えてみる
注意: Cのmalloc, freeはあくまでライブラリ関数であり、システムコールではない
K&R p.225
原始的な方法から少しずつ改良していこう
+単純な切り出し
--freeできない
+ヘッダを設ける
--freeしたあとの領域を使えない
+リンクリストにする
--フラグメンテーションが起こるがとりあえず形にはなった
--双方向リンクにしたものを"ヒープ"と呼ぶ
欠点:空き領域探索が線型探索になる -> 計算量O(n)
予想: 可変のほうが効率が良さそう
=> 結論: 空き効率は良いが遅い
リアルタイム性にかかわるので棄却
***固定サイズ [#ta3c1d65]
メモリプールを以下のように確保
- 16byteのブロック*L個 のリンクリスト
- 128byteのブロック*M個 のリンクリスト
-1024byteのブロック*N個 のリンクリスト
:mallocするとき|リンクの先頭を割り当てる
:free|リンクに再び接続する
サイズに無駄が出るが、探索不要で高速
終了行:
[[石黒/日誌]]
*後期の授業 [#v7352902]
残り単位わずか。
-英語: EL適当に
-卒論英語
-専門: コンピュータ構築設計論
言語関連の授業取ろうかと思ったけどシラバス(と担当の先生)を見てやめた。一番血肉になりそうなのはやはり構築論ではないかと。
ただ、前期みたいに何時間も使いたくないので9月中に予習をしたい。
*組込みOS輪講担当分メモ 10th Step メモリ管理 [#n830fa69]
**OSの役割(10.1) [#j55d5f4c]
>
OSとは何かを正しく把握することは難しい。(中略)OSは、基本的に互いに関係のない2つの役割を果たしているからである。それはマシン拡張の役割とリソースマネージャの役割である。
アンドリュー・S・タネンバウム, モダンオペレーティングシステム原著第2版 p.3
ここで、リソースマネージャの役割をA, マシン拡張の役割をBとおこう
-OSの無いコンピュータ
-- => A. 単一のプログラム
-- => B. プログラムが直接HWを操作
-OSのあるコンピュータ
-- => A'. 複数のプログラム
-- => B'. HW操作の抽象化
OSの前に…
**ノイマン型コンピュータとは(10.1.1) [#q79d3a2d]
-CPU
-I/O
-Mem
これらを資源と考える
A'の役割とは、つまり複数プログラムのために資源を管理する
-CPU => スレッド, スケジューリング
-I/O => 割り込みなど
-Mem => 今回やる
**3つの方法(10.1.2) [#m59f0fdf]
+各プログラムに任せる
--衝突が起こる[ノートの絵]
+リンカスクリプトで静的に決定(static)
--スケールできない
+必要に応じて確保(dynamic)
--最も現実的
--スタックでは不十分
--ユーザはallocate, free可能
--OSはメモリ保護で不正を防ぐ
**メモリ管理の概要(10.2) [#t7cd18c8]
Dynamicな2つの方法
+可変サイズ(10.2.1〜10.2.2)
+固定サイズ(10.2.3)
どちらが適しているか?
予想: 可変のほうが効率が良さそう
***可変サイズ [#veeba6dd]
Cのmalloc(), free()の実装を考えてみる
注意: Cのmalloc, freeはあくまでライブラリ関数であり、システムコールではない
K&R p.225
原始的な方法から少しずつ改良していこう
+単純な切り出し
--freeできない
+ヘッダを設ける
--freeしたあとの領域を使えない
+リンクリストにする
--フラグメンテーションが起こるがとりあえず形にはなった
--双方向リンクにしたものを"ヒープ"と呼ぶ
欠点:空き領域探索が線型探索になる -> 計算量O(n)
予想: 可変のほうが効率が良さそう
=> 結論: 空き効率は良いが遅い
リアルタイム性にかかわるので棄却
***固定サイズ [#ta3c1d65]
メモリプールを以下のように確保
- 16byteのブロック*L個 のリンクリスト
- 128byteのブロック*M個 のリンクリスト
-1024byteのブロック*N個 のリンクリスト
:mallocするとき|リンクの先頭を割り当てる
:free|リンクに再び接続する
サイズに無駄が出るが、探索不要で高速
ページ名: