このテキストは、運営している韓国のブログを日本語に翻訳したものです。

韓国のブログ:https://yunsuu.notion.site/e379eccd32c545419f0651f743c12c13?v=35310b282de24cc5a292fe45cc498a32&pvs=74

 

この記事は「Operating Systems: Three Easy Pieces」を読んでまとめた本です。

著者が無料で公開しているので、興味のある方はぜひ読んでみてください。

本にある良い問題は解いてgithubにアップロードしています。

github:https://github.com/yunsuu/ostep-homework-solution 

本のリンク:https://pages.cs.wisc.edu/~remzi/OSTEP/

 

 

 

この記事は、OSTEP, Chapter 5のプロセスAPIの学習と整理を行った後に書かれました。

プロセス管理は、システムの効率的な運用において非常に重要な部分を占めています。本記事では、forkwait、**exec**というプロセスの基本を構成する3つの核心的なシステムコールについて見ていきます。

fork:プロセスの複製

fork システムコールは、現在実行中のプロセスのコピーを作成します。この時、重要なことは、子プロセスがメイン関数から開始するのではなく、fork が呼び出された地点から開始するということです。生成された子プロセスと親プロセスのどちらが先に実行されるかは、オペレーティングシステムのスケジューリングポリシーによります。

wait:子プロセスの終了待ち

wait システムコールは、親プロセスが子プロセスの終了を待つために使用されます。これにより、子プロセスが行う作業が完了するまで親プロセスが他の作業を行わずに待機します。

exec:新しいプログラムの実行

exec システムコールは、新しいプログラムを実行するために使用されます。このコールは、現在のプロセスを新しいプログラムに置き換えて、別のプログラムを実行できるようにします。

forkとexecの組み合わせは簡単で柔軟で強力です。

シェルでコマンドを実行するときは、fork で子プロセスを作成した後、exec のバリエーションの一つを呼び出してプログラムを実行します。その後、wait を呼び出してコマンドの実行が終了するのを待ちます。

“ユーザー”という概念の導入

シグナルの重要性

シグナルはオペレーティングシステムで非常に重要な役割を果たします。これらのシグナルはプロセスの動作を停止させたり、中断させることができるため、システムの安定性とセキュリティのために効果的に管理することが必要です。

ユーザーの役割

では、シグナルを誰が送ることができるでしょうか?もし誰でもシグナルを送ってプロセスを停止させることができるなら、それは重大なセキュリティ問題になるでしょう。これを防ぐために、現代のシステムでは'ユーザー'という概念が導入されました。

ユーザーはシステムにログインしてパスワードを入力し、認証を得た後にのみシステムリソースにアクセスできます。この認証プロセスにより、ユーザーは一つ以上のプロセスを開始する権限を得て、これらのプロセスに対する完全な制御権を持つことになります。

ユーザーは一つまたはそれ以上のプロセスを開始し、それらのプロセスに対する完全な制御権を持つことができます。オペレーティングシステムはCPUやメモリなどのリソースを各ユーザーやプロセスに割り当て、目的に合った役割を果たすことができるようにします。