Kanadeの工作室

電気も機械もあるんだよ!

OS超入門

なぜOSを使うか

 そもそもコンピュータは機械語しか実行できません.そして機種によって機械語の書き方が違います.つまりあるコンピュータで動くプログラムを別のコンピュータで動かそうとしても動きません.これだとプログラムをコンピュータごとに作らないといけないので効率が悪いですね.

 このハードウェアごとの違いを,「システムコール」というインターフェースで抽象化します.機械語では「メモリの何番地の値を~~にする.」のようにハードウェア的な表現をしているのに対して,システムコールでは「~~を画面に表示する.」というように機能に即した表現をしています.そしてOSはシステムコールをハードウェアに合わせて実行してくれます.システムコールを使ってプログラムを書くことでハードウェアに依存しないプログラムが書けます.

OSの機能

 OSはハードウェアに依存しない形式でいろいろなシステムコールを実行してくれる便利な奴ですが,このような機能を実現するために,OSはコンピュータ起動の直後から実行されコンピュータを支配します.というのも,OSが動いてるコンピュータ上で,プログラムはコンピュータ資源を使うために毎度OSにお伺いを立てないといけないからです.

※OSが起動するまで

 コンピュータの電源を入れると,マザーボード上にあるBIOSが実行されます.BIOSは諸々の初期化をした後にOSを呼び出します.デュアルブートではここで呼び出すOSを変えてやればいいわけです.

 詳しくは → http://park12.wakwak.com/~eslab/pcmemo/boot/boot2.html

ファイルシステム

 ファイルが保存されているドライブは一次元配列ですが,それをWindowsのC:\user\hogeとかLinuxの/home/hogeのように,木構造にしてるのもOSです.

プロセス管理・メモリ管理

 パソコンで,同時にいくつかのプログラムを,お互いが干渉することなく実行できるのは,OSがプログラムごとに時間(CPUを使える時間)・空間(メモリ)を分割して割り当てているからです.あるプロセスからするとまるで自分一人だけがコンピュータを使っているかのように見えるような環境を提供します.

プロセス・スレッド

 プロセスを細かい単位に区切ったものをスレッドといいます.たとえばオムライスを作るというプロセスは,「米を炒める」「卵を焼く」というスレッドにわけることができます.

 OSはスレッド単位で実行を管理します.マルチスレッド(スレッドを同時に複数実行できる)なCPUを使っている場合はOSがそれぞれにスレッドを割り当ててくれます.プロセスを適切にスレッドを分割することでプロセスを早く実行できたり,CPUを効率的に使うことができます.

 ひとつしかフライパンがない場合,「米を炒める」→「卵を焼く」とするしかないですが,フライパン2つでオムライスを作る場合,平行して実行できますね.また「米を炒める」が7割ぐらい進んだら「卵を焼く」を実行すると,ちょうどいいタイミングで両方ができて冷めずに済みます.「米を炒める」が7割進んだところに「「卵を焼く」を実行する.」というシステムコールを書いておけば,OSはCPUのスレッドに合わせて(マルチスレッドならシステムコールが呼ばれたところから並列に,シングルスレッドなら順番に)実行してくれます.

 このようにOSはリソースを効率的に使うようにプロセスの実行を管理してくれます.

アドレス変換

 メモリは一本の一次元の配列です.複数のプロセスが同時に動いている場合,あるプロセスが使っているメモリが別のプロセスによって意図せずに書き換えられてしまうとまずいです.OSはメモリを分割してそれぞれプロセスに割り当てます.

プロセスにとってのアドレス(0~n)を物理メモリ(a~n+a)と対応させる仕組みがアドレス変換です.

それぞれのプロセスが一本のメモリを持っているかのようにするためにアドレス変換を行います.プロセスがメモリを要求してきたら,物理メモリの中から使われていない領域を探してプロセスにアクセス権を与えます.ここで,プロセスのメモリ

プロセスがn番地の値(0,1,2,,,)

しばらく使っていないメモリ領域を,いったんハードディスクに移します. (自分の部屋にも実装して……)

組込みOS

組込み機器

リアルタイム性,つまり時間に正確な

ITRON

参考書

OSを使ってみる

https://www.amazon.co.jp/dp/B075ST51Y5/ref=cm_sw_em_r_mt_dp_FJv4FbNGZNMK7

OSを作ってみる

https://www.amazon.co.jp/dp/B00IR1HYI0/ref=cm_sw_r_tw_dp_x_8Pv4FbYZHX1H4

https://www.amazon.co.jp/dp/B07YBQY75J/ref=cm_sw_r_tw_dp_x_7Qv4Fb2C6CE7S

最近出た チョットワカルようになる

https://www.amazon.co.jp/dp/4877832394/ref=cm_sw_r_tw_dp_x_HLn1FbEENZW6B

Linuxのコードを読む

₍ᐢ.ˬ.ᐢ₎ にゃーん