본문 바로가기
OS & Hardware & Network/OS

프로세스[1] - 프로세스란, PCB와 Context Switch

by 코딩공장공장장 2024. 7. 25.

프로세스


  • 실행 중인 프로그램
  • 프로세스는 os의 실행 작업의 단위이다.
  • 프로세스는 작업을 완료하기 위해 CPU, memory, file, I/O devices와 같은 자원을 필요로 한다.
  • 각각의 프로세스는 독립된 메모리 영역을 할당 받는다.

* 프로그램 : 하드웨어를 동작시키는 명령어 집합

 

프로세스의 구조


 

 

프로세스는 메모리에서 위와 같이 여러개의 구역으로 나뉜다.

  • 코드 영역(Text Section)
  • 데이터 영역(Data Section)
  • 힙 영역(Heap Section)
  • 스택 영역(Stack Section)

* JVM으로 설명하면 코드 영역과 데이터 영역이 메서드 영역이다.

 

프로세스의 상태


상태 설명
new(생성) 프로세스 생성
running(실행) Instruction(명령어)이 CPU에 의해 실행됨
ready(준비) - 프로세스가 CPU에 의해 사용되지 않지만 언제든 running 상태로 진입하여 실행 될 수 있는
  우선 순위 높은 상태

- ready queue에서 대기함
waiting(대기) - I/O completion, 시그널 수신과 같은 이벤트를 기다리는 상태
- waiting queue에서 대기함
- 대기(block) 상태라고 부름
terminate(종료) 프로세스 종료



1. new -> ready

프로세스는 fork() 라는 시스템 콜을 통해 생성된다. 

초기화를 진행하며 새로운 메모리 공간을 할당받고 각 영역에 메모리를 할당하는 등의 초기화가 끝나면 ready 상태에 도달한다.

 

2. ready -> running

ready 상태에 있는 프로세스는 ready queue에 위치한다. 

CPU 자원을 할당 받으면 running 상태에 도달하고 이 과정을 Dispatch라고 한다.

 

3. running -> ready

CPU는 time sharing한 방식으로 동작하기에 일정 시간이 지나면 다른 프로세스를 실행시켜야한다.

현재 실행 중인 프로세스는 interrupt되어 ready queue로 이동되고 다음 실행 기회를 기다리며 이 과정이 반복된다.

 

4. running -> waiting

프로세스가 CPU에 의해 실행 중에 I/O 작업(또는 다른 block 이벤트)이 발생하면 현재 프로세스를 wait queue로 이동 시킨다. 이때 ready queue로 이동시키지 않고 wait queue로 이동시키는 이유는 I/O 작업이 완료되지 않을 때까지 프로세스는 실행되면 안되기 때문이다.(blocking-sync)

 

5. waiting -> ready -> running

I/O 작업이 완료됬다는 신호를 받으면 wait queue에 있던 프로세스는 ready queue로 이동하고

ready queue에서 자신의 순서를 기다리다 CPU의 점유를 받게 되면 ruuning 상태에 도달하여 실행된다.

 

6. running -> terminate

실행이 종료되면 프로세스는 종료되며 메모리 영역에서 제거된다.

 

PCB(Process Control Block)


시분할 작업을 위해 CPU가 프로세스를 변경시키며 수행하기 위해서 프로세스의 정보를 저장해야한다.

예를 들어 P0를 실행하다 P1을 실행하고 P0를 실행시킬 때 어디부터 실행해야하는지, 어떤 정보들을 레지스터에 저장했는지 등의 정보를 기억해야 시분할 작업을 진행할 수 있다. 이러한 정보를 저장시키는 공간이 PCB이다.

 

프로세스는 PCB로 나타내지며 아래와 같은 정보를 갖는다.

 

 

process state
(프로세스 상태)
new, ready, running, waiting, terminate와 같은 프로세스 상태
process number
(PID)
PID라는 process id 값으로 os에서 프로세스를 고유하게 식별하기 위한 값이다.
program counter
(PC)
현재 실행 중인 코드 이후에 실행시킬 코드의 메모리 주소를 가리킨다.
프로세스가Intrrupt 되어 ready queue에 이동된 다음 다시 running으로 될 때
이 값 부터 프로세스를 실행시킨다.
CPU register CPU의 레지스터 정보
CPU의 프로세스를 실행하기 위해 메모리에 매번 접근하는 것은 비효율적이기에
현재 실행하기 위해 필요한 정보들은 CPU의 레지스터에 저장시켜놓고 메모리가 아닌 CPU에 접근하여
실행한다. 이렇게 저장시켜 놓은 정보를 나중에 다시 실행하기 위해 PCB에 저장시켜 놓음
memory limit 프로세스의 메모리 크기
memory
management
information
- 프로세스 주소
- 프로세스의 각 메모리 영역 정보(크기, 주소 등)
- 할당한 메모리와 사용 가능한 메모리 주소
I/O status infromation - I/O 상태(진행, 완료, 오류 상태)
- 프로세스가 사용 중인 I/O 장치(디스크, 프린터, 소켓 등)
- 프로세스를 위해 열린 파일 목록

 

프로세스 스케쥴링


  • CPU가 여러 프로세스를 실행시킬 때, 어떤 프로세스를 실행 시킬지 우선 순위를 정하는 것 (반드시 FIFO는 아니다.)
  • 공평한 자원 배분, CPU 이용률 및 CPU 사용률 최대화, 응답시간 및 대기시간 최대화
  • Preemtive Scheduling과 Non-preemtive Scheduling이 있음
  • 스케쥴링 큐에는 ready queue와 wait queue가 존재

 

Context Switch


  • context란 프로세스가 사용되고 있는 상태 정보인 PCB를 말하며 이를 교환하는 것을 Context Switch라고 한다.
  • interrupt가 발생했을 때, 현재 실행 중인 프로세스의 context정보를 저장함

cpu 프로세서인 core는 한번에 하나의 작업만 가능하다. 동시에 여러 프로세스가 동작하도록 보이기 위해 매우 짧은 시간 단위로 프로세스를 번갈아가며 작업하기 위해 현재 실행 중인 프로세스를 interrupt하고 context switch를 하여 다른 프로세스를 실행시킨다.

 

Context Switch 과정

 

P0가 실행 중 interrupt가 발생하면 P0의 PCB를 저장한다. 

그런 다음 P1을 실행시키기 위해 PCB1을 불러들이고 P1을 수행한다.

P1의 CPU 점유시간이 만료되어 현재 P1의 상태정보를 PCB1에 저장한다.

P0를 실행시키기 위해 PCB0를 다시 레지스터에 적재하고 P0를 수행한다.

PCB를 메모리에 저장하고 다시 레지스터 적재하는 과정이 context switch이다.



반응형