프로세스 알아보기 (메모리 구조, 상태 전이)
프로그램 (Program)
프로그램은 작업을 수행하기 위해 컴퓨터에 제공되는 일련의 명령어들의 모음입니다.
프로그램은 보조기억장치(디스크)에 저장되어 있고 엑셀, 메모장 같은 실행파일일 수 있으며 컴파일된 결과물뿐만 아니라, 프로그래머가 작성한 소스코드까지도 포함됩니다.
다음은 C 언어로 작성된 간단한 프로그램입니다.
void main() {
printf("Hello\n");
}
프로세스 (Process)
프로세스는 실행 중에 있는 프로그램을 의미하며, 작업(Job) 또는 태스크(Task)라고도 합니다.
프로그램이 메모리에 적재(Load)되는 순간 프로세스가 됩니다.
프로세서(Processor)
프로세스가 동작될 수 있도록 하는 하드웨어(=CPU)입니다.
- 동작: 프로그램의 자원들이 메모리에 올라오고, 실행되어야 할 코드의 메모리 주소를 CPU의 레지스터로 올리는 것
프로세스 메모리 구조
프로세스 메모리 구조는 스택, 힙, 데이터 및 텍스트 4개의 섹션으로 나눌 수 있습니다.
데이터는 초기화되지 않은 데이터(bss)와 초기화된 데이터로 나뉩니다.
Stack
- 임시 데이터가 저장되는 곳입니다. 예) 지역변수, 매개변수
- 컴파일 타임에 크기가 결정되기 때문에 무한히 할당할 수 없고 stack 영역을 초과하면 stack overflow 에러가 발생합니다.
Heap
- 동적으로 할당되는 데이터가 저장되는 곳으로 런타임에 크기가 결정됩니다. 예) malloc
Data
- Uninitialized data (bss) - 초기화되지 않은 변수(전역 변수, static 변수)가 저장되는 곳입니다.
- Initialized data - 초기화된 변수(전역변수, static 변수)가 저장되는 곳입니다.
Text(Code)
- 프로그램의 코드가 저장되는 곳입니다.
- 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 지정돼 있습니다.
728x90
프로세스 상태
프로세스는 실행되면서 아래의 5가지 상태 변화를 겪습니다.
- New: 프로세스를 생성하기 위해 프로그램이 보조기억장치에 있는 상태입니다.
- Ready: 프로그램이 메인 메모리에 적재되어 프로세스가 된 상태입니다. CPU에 의해 실행되를 기다리고 있는 상태이며 준비 상태에 있는 프로세스들은 큐에서 대기하고 있습니다.
- Running: CPU가 해당 프로세스를 실행한 상태입니다.
- Waiting (or Block): 프로세스가 입출력완료, 시그널 수신 등 어떤 사건(event)을 기다리고 있는 상태를 말합니다.
- Terminated: 프로세스가 완전히 종료된 상태입니다.
프로세스 상태 전이
프로세스의 상태 전이 과정은 다음과 같습니다.
- Dispatch (ready -> running)
- 여러 프로세스들 중 한 프로세스를 선정하여 CPU에 할당하는 과정입니다.
- Interrupt (running -> ready)
- 할당된 CPU 시간이 지나면 Timeout Interrupt 가 발생하여 CPU를 다른 프로세스에게 양도하고 자신은 ready 상태로 전이되는 과정입니다.
- Block (running -> waiting)
- I/O 등의 자원 요청 후 즉시 할당받을 수 없어, 할당받을 때까지 기다리기 위해 running에서 waiting 상태로 전이되는 과정입니다.
- I/O 처리는 CPU가 아닌 I/O 프로세스가 담당하기 때문에 block이 발생합니다.
- Wakeup (waiting -> ready)
- 필요한 자원이 할당되면 프로세스는 waiting에서 ready 상태로 전이되는 과정입니다.