본문 바로가기
대딩/운영체제

프로세스_Process, Process Address Space, PCB, MultiProcessing

by 경아ㅏ 2022. 5. 11.

Process

특정 언어로 프로그램을 작성하면 소스코드 파일이 만들어집니다.

C로 작성했다면 *.c, C++로 작성했다면 *.py의 파일이 생성되는데요, 

코드 파일을 gcc와 같은 컴파일러로 컴파일 하면 실행파일(.exe, a.out) 이 산출됩니다.

이와 같이 디스크에 저장되어있는 실행파일을 프로그램 이라고 부릅니다. 

 

그렇다면 프로세스는 무엇일까요?

GUI에서 프로그램을 더블클릭하거나, 리눅스에서 ./(프로그램 이름)을 명령하면, 디스크에 저장된 프로그램이 로더에 의해 메모리에 복사됩니다. 이와 같이 프로그램이 실행 중인 상태가 되면, 이를 프로세스라고 부릅니다. 프로세스는 실행과 스케줄링의 가장 기본적인 단위로, 프로그램의 복사본과 이를 실행하는데 필요한 데이터(메모리)를 하나로 묶어 구성한 것입니다.  모든 프로세스는 PID(Process ID)를 가지고 있어 커널이 이를 고유 번호로 관리합니다. 

 

 

Process Address Space

모든 프로세스는 0x00000000 ~ 0xFFFFFFFF 까지 가상의 독립적인 메모리 공간을 갖습니다.

 

1) Code segment

프로그램을 실행하게 되면, 디스크에 있는 바이너리코드가 code segment 단에 적재됩니다. 프로그램을 이루는 코드가 1줄씩 실행될 때마다 PC(Program Count)가 1씩 증가합니다. 

 

2) Static data

전역 변수, class에서 선언한 static 변수가 저장되는 영역입니다.

 

3) Heap

malloc, new 키워드 등으로 동적 할당한 영역입니다.

 

4) Stack

함수가 콜 될 때마다 함수 수행을 위해 필요한 메모리가 스택에 쌓이고 함수를 리턴하면서 없어집니다.

Stack의 가장 윗단에는 int main() 함수가 있습니다.

 

 

PCB(Process Control Block)

프로세스의 다음과 같은 정보들이 PCB 구조체 안에 저장됩니다.

 

  • Process state
  • Program counter
  • CPU registers
  • CPU scheduling information
  • Memory-management information
  • Accounting information
  • I/O status information

 

MultiProcessing

가장 초기의 시스템은 Batch system으로 한번에 하나의 프로그램만 동작 시키는 방식을 사용하였습니다. 가장 간단한 방식이지만, 한 프로그램이 끝날 때까지 다른 프로그램을 동작시키지 못하기 때문에, 하나의 프로그램이 I/O나 event를 기다리고 있다면 다른 프로그램은 무한히 대기해야 하는 문제점이 있습니다. 현재는 여러개의 프로세스를 번갈아가며 스케줄링 하는 Multi programming(Multi processing) 시스템을 사용하여 CPU utlization을 높이고 있습니다.

 

 

Process State Diagram

Multiprocessing 방식에서, Process는 다음과 같은 생애 주기를 갖습니다.

 

 

1) New: 프로그램을 실행시키면, 여러가지 초기화 작업이 이루어집니다. 프로세스에게 PID를 부여하고, PCB 정보를 초기화 합니다. Process Address Space도 만들어집니다.

 

2) Ready: 초기화가 끝난 프로세스는 ready queue안에 들어가 대기합니다.

 

3) Running: Ready queue에 들어간 프로세스가 스케줄링되어 실행되고 있는 상태를 의미합니다. 

 

  • Running 중인 프로세스가 waiting queue로 가는 경우: I/O 나 event wait이 발생할 때 waiting queue로 들어가서, I/O나 event wait이 완료 된 후 다시 ready queue로 복귀합니다. 
  • Running 중인 프로세스가 ready queue로 가는 경우: Time interrupt가 걸리거나, waiting queue에 있는 프로세스의 I/O 요청이 완료되어 현재 CPU를 점유하고 있는 프로세스에 interrupt가 걸린 경우 다시 ready queue로 복귀합니다.

 

4) Terminated: 프로세스의 모든 명령이 다 처리되었을 때 프로그램이 종료됩니다.

 

프로세스들이 번갈아가며 스케줄링 되는 것이 우리 눈에는 여러개의 프로그램이 동시에 돌아가는 것처럼 보이는 것입니다. 

 

 

Context Switch

Multiprocessing 의 개념으로, 운영체제는 스케줄링과 Interrupt Handling을 통해 여러 프로세스를 번갈아 동작시킵니다. 이 때, 프로세스의 특정 시점에 대한 정보를 저장해 놓지 않으면 다시 복귀한 이후 어디서부터 프로세스를 수행해야 하는지 알 수 없습니다. 따라서, CPU에서 동작하고 있던 프로세스가 내려올 때는 문맥과 레지스터 정보를 PCB에 저장해놓고, 다시 CPU에서 동작시킬 때 PCB에 있는 정보를 로드하여 실행합니다. 

댓글