LoginSignup
0
1

More than 3 years have passed since last update.

プロセスとかスレッドとか聞くけどいったいなんだ

Posted at

プロセスとかスレッドとか、いまいちよくわかっていない初心者がお勉強のために書いてます

プロセス

  • 実行状態のアプリケーションのこと。
  • 1つのプロセスには1つのメモリ領域が割り当てられる。

    • プロセスが利用する情報はすべてこのメモリにロードされる。
    • プロセスが実行される際、CPUはそのプロセスに割り当てられたメモリのデータに対して演算を行う。 キャプチャ.PNG
  • マルチタスクOSでは、細かく実行するプロセスを切り替えているため、一度にたくさんのアプリケーションが動いているように見える。

  • CPUは一度に1プロセスしか処理できない

  • プロセスがメモリに保持している情報:
    プロセスは下記のようなデータ構造でメモリ上に存在している

    • テキストセグメント 
      ・プログラムの命令列(要は実行されるプログラムのソース)read only
    • データセグメント 
      ・静的セグメント
       ・定数やグローバル変数が置かれる
      ・BSS
       ・初期化されていない変数が置かれる
      ・ヒープセグメント
       ・通常の変数が置かれる
       ・動的に確保される(プロセスがメモリ領域を増減させる場所なので、プロセス実行時までサイズが分からない)
       ・ガベージコレクションでのお掃除対象
    • スタックセグメント
       ・引数やローカル変数、CPUのレジスタを一時的に退避させておく キャプチャ.PNG

スレッド

  • プロセス内で命令を実行する部分のこと。
  • 親のプロセスから生成することで、同じアプリケーションを並列に動かすことができる。
  • CPUコアを利用する単位 キャプチャ.PNG
  • 同時マルチスレッディング(SMT)では1つのコアに対して2つのスレッドを割り当てる。
  • 1つのプロセスがスレッドをいくつ使うかはアプリケーション次第(jsはシングルスレッド、javaはマルチスレッド可)
  • プロセスからスレッドを生成した場合、親プロセスの下記の値を親の仮想アドレス空間にコピーする
    • スタック領域
    • スタックポインタ(スタックセグメントの中で次にデータを書き込むアドレスを保持)
    • プログラムカウンタ(次に実行する命令が格納されているアドレスを保持)
  • 上記以外は親プロセスと同じものを使用し、スレッド専用のメモリは確保しない
  • 複数スレッドと多くのデータを共有するため、使用しようとした変数の値が他のスレッドによって書き換えられていたり消されていたりすることもある
  • 上記の状態で動作しても問題ないプログラムをスレッドセーフという
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1