[オペレーティングシステム]プロセス構造-(1)
これまで、プロセスに関する多くの内容を学びましたが、プロセス構造がどのように構成されているかを理解してみましょう.
一般的なプロセスの構成 テキスト(CODE):コード データ:変数/初期化データ スタック:一時データ(関数呼び出し、ローカル変数など) heap:コードで動的に作成されたデータ
はい. stack 関数の空間 関数の戻りアドレス(:関数関連コードの1行のアドレス) を保存する.関数のパラメータ を保存
heap ダイナミックスペース(C.malloc)
data プログラム変数宣言:固定 グローバル宣言にのみ格納変数 関数で宣言された変数は を格納しません.
code program 関数の戻り値を格納レジスタ 関数に問題が発生した場合、問題のレジスタをすばやく追跡します. コードに問題が発生した場合は、スタックの上部に書き込み、EBPというレジスタ に書き込みます.
heap
なぜお尻という空間が必要なのか 実行コードのコードには指定された値がないため、データサイズの空間 を動的に理解する必要がある.
data
BSS:初期化されていないグローバル変数 global_data1
DATA:初期値を持つグローバル変数 global_data2
一般的なプロセスの構成
はい.
Return Address: 0050h
a= 1
b= 2
heap
data
c= 0
def func(a, b):
print(a+b)
c = 0
c = func(1, 2)
print(c)
def func(a, b):
print(a + b)
c = 0
c = func(1, 2)
print(c) #005h
EAXレジスタ
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(해제)
にする関数も存在する.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *data; // 포인터 변수
data = (int *) malloc(sizeof(int));
*data = 1;
printf("%d\n", *data);
return 0;
}
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;
}
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:初期化されていないグローバル変数
DATA:初期値を持つグローバル変数
Reference
この問題について([オペレーティングシステム]プロセス構造-(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@zero_mountain/운영체제-프로세스-구조-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol