OSを知りましょうProtection & Isolation, Sharing


第一篇オペレーティングシステム抽象から続く文章です.
オペレーティングシステムのキーコースでは、抽象的な部分を第1編で紹介します.
他の2つの要素を考察することにした.

Protection & Isolation


osもソフトウェアであり、osが担当するschduler、メモリマネージャ、ファイルシステム、デバイスドライバもソフトウェアである.

上図に示すように、ハードウェアベースのモードは初期モードである.
しかし、悪意のあるアプリケーションやバグのあるアプリケーションがハードウェアリソースを独占しようとした場合(一人で使用)、どうすればいいのでしょうか.
あるいは、特定のアプリケーションがオペレーティングシステムにアクセスし、オペレーティングシステムの読み取り/変更を試みることを防止できる必要があります.

Timer Interrupt


まず、特定のアプリケーションがcpuを独占し、無限ループを阻止し、オペレーティングシステムにTimer割り込みが発生します.
プロセスがcpuに時間を費やすと、中断が発生し、オペレーティングシステムが制御を再開します.
iterruptが発生すると、プロセスはスタンバイ状態Ready Queueに入り、プロセスの優先度がプロセスより高い場合、他のプロセスもCPUを占有することができます.
// thread.c
void thread_sleep(int64_t ticks){ // current 를 sleep리스트에 저장하고 block 시켜줌
	struct thread *cur;
	enum intr_level old_level;

	old_level = intr_disable();	// interrupt off
	cur = thread_current();

	ASSERT(cur != idle_thread);

	cur->wakeup = ticks;	// 일어날 시간을 저장
	list_push_back(&sleep_list, &cur->elem);	// sleep_list 에 추가
	thread_block();		// block 상태로 변경

	intr_set_level(old_level);	// interrupt on  
}
Pintosでもこの点が見られ、iterruptは特定の時間にトリガーされ、実行中のcurrent threadsleep_listに入れ、cpuを占有しなくなります.

Privileged Instruction


ハードウェアはモードビットを提供し、そのビットに基づいて特権区分を行う.
Kernel ModeとUser Modeを分離し、命令の実行時に命令が実行可能かどうかを確認します.
インテルは、メーカーで特権として実行する命令を制定します.

Memory Protection


また、オペレーティングシステムは、オペレーティングシステムコードやデータなどのオペレーティングシステム独自の特権メモリを有する.アプリケーション(ユーザモード)からアクセスすると、
cpuはそれを意識し(すべてswで解決すると遅すぎる)、それをカーネルに渡すとカーネルのexection handlerがアプリケーションに対してkillなどの処理を行う.
仮想アドレス、物理アドレスの理由の1つが、任意のアドレスにアクセスする場合は、そのアドレスにアクセスしているカーネルかユーザーかを確認し、実際のメモリへのアクセスが許可されているかどうかを確認します.

(少しペン先が見えますが…)
これにより、Timer InterruptPrivileged InstructionMemory Protectionは、オペレーティングシステムとアプリケーションを区別し、オペレーティングシステムを保護する.
これにより、アプリケーション間で他のアプリケーションのデータが読み込まれたり変更されたりすることはありません.
各アプリケーションを分離する方法を見てみましょう.

- Isolation of memory


プロセスAが仮想メモリアドレスxにアクセスし、プロセスBも仮想メモリアドレスxにアクセスする場合、この2つのプロセスは同じメモリを参照していますか?
まず、各プロセスにはそれぞれの仮想メモリがあり、オペレーティングシステムは実際の物理メモリにマッピングするので、仮想メモリのアドレスが同じであっても、オペレーティングシステムのマッピングに応じて他の物理メモリを参照することができます.
なぜかというと、筆者は他の物理メモリを参考にしています.このような状況は確定していないのではないでしょうか.まさかそうでない場合もあるのではないでしょうか.
では、この2つの同じプロセスが同じ仮想メモリアドレスにアクセスした場合、物理メモリにも同じメモリ領域(フレーム)が共有される場合がありますか?
仮想メモリが物理メモリを効率的に使用できるのは、各プロセスが各仮想メモリにメモリを割り当てて使用できるためですが、実際の物理メモリにマッピングされている領域は1つだけで、このマッピングされた領域は2つのプロセスで共有できます.同じライブラリを使用するなど、重複する領域であれば、複数の物理メモリに個別に割り当てるのではなく、これらの領域を共有します.

元のトピックに戻ると、各プロセスが同じ仮想メモリアドレスにアクセスするため、オペレーティングシステムが別のメモリアドレスにマッピングされるため、他のプロセスのメモリを読み取りまたは変更できないプロセスもあります.
これは、各プロセスにそれぞれのページテーブルがあるためです.context-切り替えを行うと、プロセスAの実行時にプロセスAのページテーブルがロードされ、マッピングされます.プロセスBの実行時には、Bのページテーブルがロードされ、マッピングされます.

isolation of file:
メモリだけでなく、ファイルも分離され、特定のプロセスでは他のプロセスのファイルを読み取ることができません.
file systemはaccess制御を提供しているそうです.
プロセスが特定のI/Oを読み取り、書き込むことができない場合、システムはカーネルに要求し、カーネルは権限チェックを行い、命令を実行します.
これにより,アプリケーションとosを分離し,アプリケーション間で隔離することもできる.しかし、このように分離すると、アプリケーション間が個別のプロセスであってもIPC(Inter-ProcessCommunicatio)と呼ばれる通信が必要になることが分かった.Shared memory方式とMessage passing方式があり、共有メモリスペースを使用できます.速度が速く、データの往復移動が多いとすれば、Shared Memoryであり、往復移動のデータが少なく、実現しやすい方法はMessage passingである.

Sharing resources


最後に、オペレーティングシステムの「Sharing resources」について考えてみましょう.

筆者は今、文章を書きながら、作業マネージャを開いています.
435個のプロセスが交互に8個のcpuを占有する.435個のプロセス「共有」が限られている(8個)cpu、435個のプロセス「共有」が16 GBの限られたメモリ.

- Time Sharing


TimeSharingの代表的なリソースはCPUです.OSは、特定のプロセスに一定の時間を費やし、他のプロセスに一定の時間を費やします.(ネットでもTimeSharing!)関連キーワード:cpuスケジューリング

- Space Sharing


メモリはSpage Sharingのカテゴリに分かれています.各プロセスはそれぞれの仮想メモリを使用しますが、実際の物理メモリはページング、スワップ、エクスポートなどのプロセスで物理メモリを共有します.