[オペレーティングシステム]プロセス構造-(1)


これまで、プロセスに関する多くの内容を学びましたが、プロセス構造がどのように構成されているかを理解してみましょう.

  • 一般的なプロセスの構成
  • テキスト(CODE):コード
  • データ:変数/初期化データ
  • スタック:一時データ(関数呼び出し、ローカル変数など)
  • heap:コードで動的に作成されたデータ


  • はい.
  • stack
  • 関数の空間
  • 関数の戻りアドレス(:関数関連コードの1行のアドレス)
  • を保存する.
  • 関数のパラメータ
  • を保存
    Return Address: 0050h
    a= 1
    b= 2

  • heap
  • ダイナミックスペース(C.malloc)

  • data
  • プログラム変数宣言:固定
  • グローバル宣言にのみ格納変数
  • 関数で宣言された変数は
  • を格納しません.
    c= 0
  • code
  • def func(a, b):
      print(a+b)
    c = 0
    c = func(1, 2)
    print(c)
  • program
  • def func(a, b):
      print(a + b)
    c = 0
    c = func(1, 2)
    print(c) #005h

    EAXレジスタ

  • 関数の戻り値を格納レジスタ
  • EBPレジスタ

  • 関数に問題が発生した場合、問題のレジスタをすばやく追跡します.
  • コードに問題が発生した場合は、スタックの上部に書き込み、EBPというレジスタ
  • に書き込みます.

    heap


    hipは動的に生成されるメモリ空間である.
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
      int *data; // 포인터 변수
      data = (int *) malloc(sizeof(int));
      *data = 1;
      printf("%d\n", *data);
      
      return 0;
    }
    heapを理解するには、次のコードを参照してください.mallocという名前の関数は、メモリを動的に生成する関数で、整数タイプのサイズをメモリ空間に割り当てます.intにポインタ変数が作成されると、malloc(할당)の戻り値は動的に作成されたメモリアドレスを返します.
    返される変数をdataという変数に割り当てると、ダイナミックメモリにアクセスできます.
    動的メモリをfree(해제)にする関数も存在する.
  • なぜお尻という空間が必要なのか
  • 実行コードのコードには指定された値がないため、データサイズの空間
  • を動的に理解する必要がある.

    data


    データメモリ領域はBSSとDATAの2つの空間に分かれている.
    int global_data1;
    int global_data2 = 1;
    
    int main()
    {
      int *data; // 지역변수는 stack에 저장
      data = (int*) malloc(sizeof(int));
      *data = 1;
      printf("%d₩n", *data);
      return 0;
    }

  • BSS:初期化されていないグローバル変数
  • global_data1

  • DATA:初期値を持つグローバル変数
  • global_data2