책/운영체제

운영체제 Ch03_'Process-1'

RyoTTa 2021. 1. 7. 23:12
반응형

Ch3 Process

 현대의 컴퓨터 시스템들은 메모리에 다수의 프로그램이 적재되어 병행 실행되는 것을 허용한다. 이러한 필요성이 프로세스의 개념을 만들었으며, 프로세스란 실행 중인 프로그램을 말한다. 프로세스는 현대 컴퓨팅에서 작업의 단위이다.

 

3.1 프로세스 개념

3.1.1 프로세스

 비공식적으로, 프로세스란 실행 중인 프로그램이다. 이후부터 프로세스(Process)와 작업(Job) 둘다 사용해 설명한다.

Process

 프로세스의 메모리리 배치는 일반적으로 여러 섹션으로 구분된다. 

  Text : 실행코드

  Data : 전역 변수

  Heap : 프로그램 실행 중 동적으로 할당되는 메모리

  Stack : 함수를 호출할 때 임시 데이터 저장장소(매개변수, 복귀주소, 지역변수)

 텍스트 및 데이터 섹션 크기는 고정된다. 그러나 스택 및 힙의 크기는 프로그램 실행 중 동적으로 바뀐다.

메모리의 대략적 구조

3.1.2 프로세스 상태(Process State)

Process State

 프로세스는 실행되면서 상태(State)가 변한다. 상태는 부분적으로 그 프로세스의 현재의 활동에 따라서 정의된다.

 새로운(new) : 프로세스가 생성중이다.

 실행(running) : 명령어들이 실행되고 있다.

 대기(waiting) : 프로세스가 어떤 이벤트가 일어나기를 기다린다.

 준비(ready) : 프로세스가 처리기에 할당되기를 기다린다.

 종료(terminated) : 프로세스의 실행이 종료되었다.

 

3.1.3 프로세스 제어 블록(Process Control Block, PCB)

 각 프로세스는 운영체제에서 프로세스 제어 블록(PCB)에 의해 표현된다. PCB는 특정 프로세스와 연관된 여러 정보를 수록하며, 다음과 같은 것들을 포함한다.

PCB

 Process state : 프로세스 상태를 나타낸다.(new, running, waiting, ready, terminated)

 Program counter : PC,이 프로세스가 다음에 실행할 명령어의 주소를 가르킨다.

 CPU-Registers : 컴퓨터 구조에 따라 다르지만 여러 레지스터가 존재한다. 나중 프로세스가 다시 스케줄될때 계속 올바르게 실행되야 하므로 인터럽트 발생시 저장되어야 한다.

 CPU-scheduling : 프로세스 우선순위, 스케줄 큐에 대한 포인터, 다른 스케줄 매개변수를 포함한다.

 Memory-management info : 사용하는 메모리 시스템에 따라 Base 레지스터와 Limit 레지스터 값, 페이지 테이블 등 정보를 저장한다.

 Accounting info : CPU 사용시간과 경과된 실시간, 시간제한, 계정 번호, 프로세스 번호(PID) 등을 포함한다.

 I/O status info : 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.

 

3.1.4 스레드

 현대 운영체제는 하나의 프로세스가 다수의 실행 스레드를 가질 수 있도록 허용한다. 즉 Multi-Processor에서의 효율을 증대화 시킨다.

 

3.2 프로세스 스케줄링(Process Scheduling)

 다중 프로그래밍의 목적은 CPU 이용을 최대화하기 위하여 항상 어떤 프로세스가 실행하도록 하는데 있다. 따라서 프로세스 스케줄러는 코어에서 실행가능한 여러 프로세스 중에서 하나의 프로세스를 선택한다. 

 I/O Bound Process는 계산에 소비하는 것보다 I/O에 더많은 시간을 소비하는 프로세스이다.

 CPU Bound Process는 계산에 더 많은 시간을 사용하여 I/O 요청을 자주 생성하지 않는다.

 

3.2.1 스케줄링 큐(Scheduling Queue)

 프로세스가 시스템에 들어가면 Ready Queue에 들어가 Ready 상태가 되어 CPU 코어에서 실행되기를 기다린다.

 이러한 큐는 일반적으로 링크드리스트로 저장된다. Ready Queue 헤더에는 리스트의 첫번째 PCB에 대한 포인터가 저장되고 각 PCB에는 다음 PCB를 가리키는 포인터 필드가 포함된다.

 

 시스템에는 Wait Queue도 존재하는데, 이것은 I/O 완료와 같은 이벤트가 발생하기를 기다리는 프로세스가 저장된다.

Ready Queue와 Wait Queue

 프로세스 스케줄링의 일반적인 표현은 아래와 같은 큐잉 다이어그램으로 나타낼 수 있다. Ready Queue, Wait Queue 두가지가 제시되어있다. 

 새 프로세스는 Ready Queue에 놓인다. 실행을 위해 선택되거나 디스패치(Dispatch) 될 때까지 기다린다. 프로세스에 코어가 할당되고 Running 상태가 되면, 여러 이벤트 중 하나가 발생할 수있다.

Queueing Diagram

3.2.2 CPU 스케줄링(CPU Scheduling)

 스케줄링은 크게 2가지로 나뉠수 있다.

 Long-term scheduler(=Job scheduler)

  프로세스를 선택하고 메모리에 적재한다.

  멀티 프로그래밍 수준을 조정한다.

  실행간격이 길기 때문에 결정하는데에 시간이 오래걸린다.

  Ready Queue와 다른 Job Queue가 사용된다.

 

 Short-term scheduler(=CPU scheduler)

  실행준비가된 프로세스중에서 CPU를 할당할 프로세스를 선택한다.

  프로세스는 몇 ms만 실행된다.

  따라서 매우 빠르게 작동해야 한다.

 

3.2.3 문맥 교환 (Context swtich)

 인터럽트는 운영체제가 CPU 코어를 현재 작업에서 뺏어 커널 루틴을 실행할 수 있게 한다. 따라서 이러한 인터럽트 처리가 끝난뒤 문맥(Context)를 복구 할 수 있도록 현재 프로세스의 상태를 저장할 필요가 있다. 즉, 이러한 상태는 PCB에 저장된다.

 CPU 코어를 다른 프로세스가 사용할 수 있도록 교환하려면 이전의 프로세스상태를 보관하고 새로운 프로세스의 보관된 상태를 복구하는 작업이 필요한데 이것이 문맥 교환(Context Swtich)이다.

 아래의 그림과 같이 프로세스가 전환될때, 현재 PCB에 상태를 저장하고 새로운 프로세스의 PCB를 복원한다.

Context Switch

  

반응형