오늘은 프로세스 컨텍스트에 대한 글을 다뤄보겠습니다.
프로세스 컨텍스트(Process Context)
프로세스가 실행하기 위해 필요한 컴퓨터 내의 정보 및 구성요소의 집합입니다. 프로세스 컨텍스트는 크게 User Context, System Context로 나눌 수 있습니다.
User Context
프로그램 작성자에 의해 결정되는 context입니다. User Context는 Code, Data, Stack으로 구성되어 있습니다.
Code : 프로그램 작성자가 작성한 코드 자체를 의미합니다.
Data : 프로세스의 전역변수를 말합니다.
Stack : 프로세스 즉, 프로그램 내에 있는 함수의 인자, 지역변수, 프로세스에 있는 함수를 호출하는 레지스터의 값을 저장합니다.
우리가 아래와 어떤 C 프로그램을 짰다고 생각해봅시다.
이러한 c 파일은 대표적으로 gcc라는 컴파일러에 의해서 바이너리 실행파일로 바뀌게 됩니다. 리눅스 기준으로 실행파일은 ELF 형식을 따르는데, 자세한건 나무위키를 참고해주세요.
실행파일이 만들어졌으니 이제 메모리에 할당되기 위한 준비를 거쳐야 합니다. 따라서 우리는 VAS(Virtual Address Space)라는 가상 주소 공간을 생성합니다. 이는 보조기억장치에 만들어집니다. 32비트 컴퓨터 기준으로 4G의 주소공간이 생성되며, 이 주소 공간에는 6가지 정도의 정보들이 저장됩니다.
1. Kernel
메인 메모리에 있는 커널과 동일하다고 생각해도 된다. 실제로, 여기에는 커널에 대한 정보가 들어있진 않습니다. (자세한 정보는 나중에 채우기!)
2. Stack
앞서 말한, 프로세스 실행에 필요한 함수의 인자, 지역변수, 해당 프로세스의 실행하는 함수를 호출한 함수의 레지스터 값이 저장되어 있습니다.
3. Heap
프로세스의 실행 과정에서 필요한 주소 공간들을 위한 여분의 공간으로 생각합시다.
4. bss
초기화 되어있지 않은 변수를 저장합니다.
5. Data
전역 변수를 저장합니다.
6. Code
코드를 저장하는 공간입니다.
이렇게 보조기억장치에서 메인메모리에 할당하기 위한 준비를 마쳤다면, 즉 new 상태에 대한 세팅을 모두 마쳤다면 ready 상태가 되어야합니다. 프로세스의 상태에 대해서는 이전 글에서 이미 다루었습니다.
ready 상태가 되기 위해서, 이 VAS의 값들을 메인 메모리에 올려줍니다. 이러한 과정으로 우리가 작성한 코드는 메인 메모리에 배정되어 CPU가 실행합니다.
그럼 위에서 설명한 것 중 User Stack에 대해서 조금 더 자세하게 살펴봅시다.
int glob = 10;
int main(argc, argv)
{
int var;
var = 33;
/* ... */
glob = func1(var, 50);
printf(glob, var);
}
int func1(int x, int y)
{
int w = 0;
w = x + y;
return w;
}
이런 식의 C 코드가 있다고 해봅시다. 그렇다면 이 코드가 실행되면서 func1까지 들어갔다면, 아래와 같은 user stack의 구조를 띄게 될 것입니다.
layer1에서도 사실 main()을 호출한 프로세스가 존재해서, 주소가 저장되긴 합니다만 여기서는 편의상 작성하지 않았습니다.
이런 식으로, User stack에는 함수의 파라미터, 지역변수, 해당 함수를 호출한 프로세스의 id를 갖게 됩니다. 이 과정들은 다음 글에서 더 자세히 다룹니다.
System Context
운영체제가 사용자 프로세스를 실행하기 위해서 내부적으로 만들어진 Context입니다. System Context는 Kernel Stack과 PCB로 구성됩니다. PCB는 이전에 포스팅으로 다루었으므로 이번 글에서는 생략합니다. Kernel Stack 또한 앞서 언급한 User Stack과 별다를 것이 없습니다.
Kernel Stack도 User Stack과 동일합니다. 따라서 생략합니다.
'CS > OS' 카테고리의 다른 글
[운영체제] 3-3. 프로세스 스위치 (0) | 2023.09.23 |
---|---|
[운영체제] 3-2. 프로세스 생성 (0) | 2023.09.23 |
[운영체제] 2-4. PCB (0) | 2023.09.12 |
[운영체제] 2-3. 프로세스 상태도 (0) | 2023.09.11 |
[운영체제] 2-2. 프로세스 정의 (0) | 2023.09.11 |