Engineering from Scratch

エンジニア目指してます

2022/06/02

プロセスとスレッド

MMU

  • Memory Management Unit
  • プロセスごとに専用の物理メモリ領域を確保し,その物理領域にアクセスするための仮想アドレスを用意し,両者のアドレスのマッピングを行う
    • マッピング情報はページテーブルという名前でメモリ上に保持される

プロセスがメモリに保持している情報

  • テキストセグメント
    • プログラムの命令列
  • データセグメント
    • PDA(Processor Data Area)
      • スタックポイント
        • スタック領域のどこを見ているかを指す
      • プログラムカウンタ
        • プログラムのどこを実行しているかを指す
    • データ領域
    • スタック領域
      • 引数やローカルスコープのデータ

プロセスとスレッドの違い

1つのプログラムをプロセスとスレッドで並列に処理を行う時を考える。

プロセス

テキストセグメントは親と子プロセスで共有し,データセグメントは親と子プロセスで違う領域を持つ。

スレッド

ほぼ全てのデータをスレッドと共有する。

パフォーマンスの違い

プロセスの場合

プロセスごとに固有のメモリ領域を持つため,プロセスを切り替える場合は,仮想アドレスと物理アドレスマッピングをそのプロセス用のものへと切り替える必要がある。

1度アドレスを解決した結果はMMUがキャッシュしているため,プロセスを切り替えるごとにMMUが持っているキャッシュをクリアする必要がある(TLBフラッシュ)。TLBフラッシュ直後は全てのキャッシュが消えるので,コストが大きい。

スレッドの場合

スレッドごとに共通のメモリ領域を持つため,利用する物理アドレスと仮想アドレスのマッピング情報を変える必要はなく,TLBフラッシュも起こらない。

参考

moro-archive.hatenablog.com

Unix Processes

System Calls

Kernelはハードウェアでの処理を仲介する。直接Kernelにアクセスすることはなく,system callを通してアクセスできる。

Processes Have Parents

システム上のプロセスにはその親プロセスが存在する。

参考

workingwithruby.com