[OS4] Process, PCB

sumjo
|2024. 3. 4. 00:35

Process

프로세스는 실행중인 프로그램으로 볼 수 있다. 프로그램 그 자체는 Executable file이고 OS가 메모리에 올릴 때 프로세스로 추상화하여 메모리에 올리고 실행한다. 이 프로세스는 스케쥴링의 단위가 되고 서로 침범하지 못하는 독자적인 메모리 영역을 가지고 있다.

 

 

일반적인 상황에서 서로의 영역을 침범하지 않도록 운영체제가 관리한다

 

Process 구성

관련 내용은 많으니 간단히 설명

 

Text  : 코드 영역이라고도 하고 명령코드 자체를 저장하고 있다. 프로그램 카운터(PC)가 text segment에서 명령어를 실행하고 증가되는 식으로 코드를 실행한다.

Data : 초기화 된 global, static 변수

bss : 초기화 값이 없는 global, static 변수

Heap : 동적으로 할당된 값이 저장되는 영역

Stack : 함수의 호출에 대한 스택프레임과 그와 관련된 지역변수를 저장, 말그대로 스택이라 함수 호출시 스택처럼 쌓이는 방식

그 유명한 스택 오버플로우가 났다고 하면 Stack 공간에 데이터가 쌓이다가 터진것임. Heap에 비해 상대적으로 작다.

예시로 보면 이런 느낌이다.

 

Process State

프로세스는 라이프 사이클 동안 여러 상태를 가지게 된다.

New , Created: PCB와 함께 프로세스가 생성된 상태, 바로 실행되는 것은 아님

Ready : 프로세스가 CPU에 할당되기 위해 대기하는 상태

Running : CPU에 의해 프로세스가 실행되고 있는 상태

Waiting, Blocked : 프로세스가 실행 되다가 I/O 처리 등 바로 완료될 수 없는 작업을 위해 잠시 CPU를 반납하고 대기하는 상태

Terminated: 프로세스가 종료 되기 직전에 잠시 거치는 상태

 

Process Controll Block(PCB)

운영 체제에서 프로세스 관리에 필요한 메타데이터를 저장하는 자료 구조.

위에서 말한 프로세스의 상태(State)를 PCB에서 관리한다.

그 외에 프로그램이 다음으로 실행시킬 주소값을 담고있는 프로그램 카운터, CPU 레지스터가 가지고 있는 값,

스케쥴링 우선순위 등에 대한 정보, 열고있는 파일 등등의 정보를 가지고 있다.

 

이 PCB는 컨텍스트 스위칭에 중요한 역할을 한다.

프로세스가 Ready상태에서 다시 Running 될 때 프로세스의 PCB를 통해

프로세스가 이전까지 실행하던 위치(Program Counter), 스택 프레임, 레지스터 값등을 참조하여

이전의 실행 문맥(Context)부터 이어서 실행할 수 있는 것이다.