프로세스란 현재 실행중인 프로그램을 의미함. 프로세스의 실행은 순차적으로 진행된다.
- 크롬 브라우저를 실행시키는 경우 크롬은 하나의 프로세스로 실행되는것.
#include <stdio.h>
// main() 함수와 그 안에 있는 코드 블럭이 바로 text section
int main() {
int a = 5;
int b = 10;
int sum = a + b;
printf("Sum: %d\n", sum);
return 0;
}
#include <stdio.h>
int global_variable = 100;
// global_variable는 전역변수이며 이 변수가 저장되는 곳이 데이터 섹션.
int main() {
return 0;
}
int main() {
// a,b,sum은 지역변수로 stack 에 저장됨.
int a = 5;
int b = 10;
int sum = a + b;
printf("Global Variable: %d\n", global_variable);
printf("Sum: %d\n", sum);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int *dynamic_array;
// malloc 함수를 사용하여 Heap 영역에 메모리를 할당시킴
dynamic_array = (int *)malloc(5 * sizeof(int));
if (dynamic_array == NULL) {
printf("메모리 할당에 실패했습니다.\n");
return 1;
}
return 0;
}
프로세스는 실행하면서 상태(state)가 변화함
ready는 준비가 다 된 상태이나 다른 애가 cpu를 먼저 쓰고 있어서 기다리는 상태이고, waiting은 I/O나 다른 이벤트가 발생하기를 기다리는 상태임.
예를 들어 우리가 게임을 한다고 치자. 우리가 게임을 하기 위해선 아이디랑 비밀번호를 치고 로그인을 해야함. 근데 로그인 되는 시간까지 이 게임을 running 상태에 올려놓고 있으면 cpu가 다른 작업을 못함. cpu는 비싼 자원으로 놀고 있는 시간이 최대한 발생하면 안됨. 그래서 로그인이 끝나기 전까지 waiting 상태로 바꿔놓고 그동안 다른 프로세스를 실행하는것.
각각 프로세스들의 정보를 담은 데이터 구조
task control block(TCB) 라고도 불림
"일반적으로" 하나의 프로세스에는 하나의 PCB 할당
Process ID: 101
Process State: Ready
Program Counter (PC): 0x1234
Register State:
- Register 1 (R1): 0x5678
- Register 2 (R2): 0x9ABC
- ...
Scheduling Information:
- Priority: High
- CPU Time: 10 ms
Memory Management Information:
- Base Address: 0x8000
- Limit Address: 0xA000
I/O State:
- Waiting for Input
- Last I/O Operation: Read File
- File Descriptor: File001
Parent Process ID: 50
Child Process IDs: [102, 103]
프로세스가 실행되다가 인터럽트(또는 system call)가 발생해 cpu를 다른 프로세스로 넘겨주는 과정. 이를 통해서 컴퓨터 시스템은 멀티태스킹을 지원하고 여러 프로세스가 동시에 실행될 수 있도록 하는것.
- 주의
시스템 콜이나 인터럽트가 발생한다고 무조건 문맥 교환이 발생하는것이 아니다. 다른 프로세스에 프로세서가 넘어가야 문맥 교환임.
다음에 이어서 ㄱ