Process Management 
프로세스가 여러 개 때, CPU가 CPU 스케줄링을 통해 관리하는 것
( 이때 CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다. 이러한 프로세스들의 특징을 갖고 있는 것이 Process Metadata이다. )

 

[ Process Metadata ]

  • Process ID : PID(Process Identification Number)라고도 한다. // 프로세스 고유 식별번호
  • Process State : 프로세스의 현재 상태(준비, 실행, 대기)를 기억시킨다. //프로세스 상태
  • Process Priority : 프로세스 우선순위 등과 같은 스케줄링 관련 정보를 기억시킨다. //스케줄링 정보
  • CPU Registers : 프로세스의 레지스터 상태를 저장하는 공간으로 CPU 내 범용 레지스터, 데이터 레지스터, 세그먼트 레지스터 등이 갖고 있는 값을 기억시킨다.
  • Owner : CPU 사용시간의 정보(Quantum)과 각종 스케줄러에 필요한 정보를 기억시킨다. //계정 정보
  • 기억장치 관리 정보 : 프로그램이 적재될 기억 장치의 상한치, 하한치, 페이지 테이블 등의 정보를 기억시킨다.
  • 입출력 정보 : 프로세스 수행 시 필요한 주변 장치, 파일들의 정보를 기억시킨다.
  • 프로그램 카운터 : 다음에 실행되는 명령어의 주소를 기억시킨다. //계수기

이러한 정보들이 담긴 메타데이터는 프로세스가 생성되면 PCB라는 곳에 저장된다!

 


PCB (Process Controll Block)

프로세스 메타데이터들을 저장해 놓는 곳
하나의 PCB 안에는 하나의 프로세스의 정보가 담겨있다

프로그램 실행 -> 프로세스 생성 -> 프로세스 주소 공간에 (코드, 데이터, 스택) 생성 -> 이 프로세스의 메타데이터들이 PCB에 저장

 

 

PCB 상세 구조 ->

 

 

 

 

 

 

 

PCB가 필요한 이유 

CPU에서는 프로세스의 상태에 따라 교체 작업이 이루어진다.

이때 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해둔다. 

 

 

 

PCB의 관리 방식

Linked List 방식으로 관리된다. PCB list head에 PCB 생성될 때마다 붙게 된다. 연결이 이루어져있는 연결리스트 형태로 삽입, 삭제 용이

프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료시 제거가 된다.

 

이렇게 수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.

 

 


 

Context Switching

CPU가 현재 실행하고 있는 task(process, thread)의 상태를 저장하고
다음 진행할 task의 상태 및 register 값들에 대한
정보(context)를 읽어 새로운 task의 context 정보로 교체하는 과정

 

* context란 : CPU가 다루는 Task(Process / Thread)에 대한 정보를 말하고, 대부분의 정보는 Register에 저장되고 pcb로 관리된다. 

 

 

인터럽트가 발생하거나, 실행 중인 CPU 사용 허가 시간을 모두 소모하거나, 

입출력을 위해 대기해야 하는 경우 Context Switching이 발생

프로세스가 Ready -> Running , Running -> Ready , Running -> Block 처럼 상태 변경 시에 발생

 

 

 

Context Switching 수행 과정

1. Task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리

2. 현재 실행하고 있는 Task의 PCB 정보를 저장 (Process Stack, Ready Queue)

3. 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행

 

 

Context Switching Cost

1. Cashe 초기화

2. Memory Mapping 초기화

3. 메모리의 접근을 위해서 항상 실행되어야 하는 kernel

위와 같은 Cost가 소요되기 때문에 잦은 context switching은 성능 저하를 가져온다.

 

* Process가 Thread보다 많이 든다. ( Thread는 stack영역을 제외한 모든 메모리를 공유하기 때문에 context switching 발생시 stack 영역만 변경하면 되기 때문)

 

 

 

Context Switching과 Interrupt

CPU는 하나의 프로세스 정보만을 기억한다.

여러 프로세스가 실행되는 다중 프로그래밍 환경에서는 CPU가 각각의 프로세스의 정보를 저장했다가 복귀하고 다시 저장했다가 복귀하는 일을 반복하는 것이다.

프로세스 중단과 실행시 interrupt가 발생하므로 context switching이 많이 발생한다는 것은 interrupt가 많이 발생한다는 것을 의미한다.

 

 

Context Switching과 시간 할당량

시간 할당량이 적어지면 :

문맥 교환 수, 인터럽트 횟수, 오버헤드가 증가하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖는다.

 

시간 할당량이 커지면 :

문맥 교환 수, 인터럽트 횟수, 오버헤드가 감소하지만 여러 개의 프로세스가 동시에 수행되는 느낌을 갖지 못한다.

 

 

 


<참고>

https://m.blog.naver.com/adamdoha/222019884898 https://jhnyang.tistory.com/33

+ Recent posts