Slow is better than NOTHING

Computer Science/1. OS

Process

Jeff_Kang 2019. 5. 9. 19:51
반응형

1. 프로세스(Process) 란?

 

Wiki 백과에 따르면, Process

프로그램은 일반적으로  하드디스크 등에 저장되어 있는 실행코드를 뜻하고, 프로세스는 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 지칭한다.

 

프로세스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기

ko.wikipedia.org

 

다시 정리하면, Program은 HDD 나 CD-ROM같은 Storage에 저장되어 있다. User가 임의의 Program을 실행하는 명령을 지시하면 OS는 저장되어 있는 Program을 Main memory로 적재(Load)시킨다. main memory에 있는 program은 CPU에 의해 실행되거나 실행 준비 상태에 있는데, 이러한 Program을 프로세스(Process)라고 한다. 

일반적으로 프로세스란,

 

 - 실행(Executing, Running) 중인 프로그램

 - PCB(Process Control Block) 을 지닌 프로그램

 - 프로그램 카운터(Program Counter) 를 지닌 프로그램

 - 능동적 개체(Entity)로, 순차적으로 수행하는 프로그램

 

이며, 하나의 프로세스는 CPU가 수행하는 작업 단위이다. 

 

2. 프로세스 구성 요소

 

Main Memory에 적재된 하나의 프로세스는 Code, Data, Stack, Heap 영역으로 구성된 독립된 메모리 영역을 할당 받는다.

Elements of Process

Code 영역 : 실행중인 프로그램의 Code를 구성하는 명령어들이 존재하며 RO(Read Only)이다. 프로그램은 실행되기 전에 Main memory에 CPU가 해석할 수 있는 Binary code형태로 저장된다.

 

Data 영역 : 프로그램의 전역 변수(Global Variable) 할당과 정적 변수(Static Variable) 의 할당을 위해 존재하는 공간이다. 프로그램이 실행 될 때 할당되어 종료 시 Return된다.

 

Heap 영역 : 프로그래머에 의해 생성된 프로그램의 동적 할당을 위한 공간이다. FIFO 구조

 

Stack 영역 : 지역 변수(Local Variable) 할당과 함수 호출(Function Call) 시 전달 되는 인수(Argument) 값이 저장되는 공간이다. LIFO 구조

 

3. 프로세스의 상태

 

1) 프로세스의 상태

 

하나의 프로세스는 CPU의 실행과 I/O 대기 등과 같은 서로 구분되는 상태를 반복적으로 거치며 완료된다. 즉, 하나의 프로세스가 완료되기 까지 다음과 같은 여러 상태 변화를 거치게 된다.

 

Process State

 

 

실행 상태(Running) : 프로세스가 CPU를 차지하고 있는 상태 

 

준비 완료 상태(Ready) : CPU가 사용 가능하게 될 때 작업을 위해 CPU를 할당 받을 수 있는 상태

 

대기 상태(Blocked, Waiting) : 프로세스가 CPU를 차지하고 처리하다가 I/O 등을 하게 되면 CPU 자원을 양도하고 I/O 처리가 완료될 때 까지 기다리고 있는 상태

 

 

 

2) 프로세스의 상태 전이

CPU에서는 한 개의 프로세스가 실행되고 있지만, 그 밖의 다른 프로세스들은 Ready or Block 상태로 있을 수 있고 이러한 프로세스들을 위해 우선순위에 의한 List(Queue)를 만들어 다른 프로세스들에게 CPU를 할당 할 수 있도록 한다.

먼저, Create 단계가 Job Queue에 의해 제시 되면 Spooler에 의해 Disk에 수록되어 보류 상태가 된 후 실행될 프로세스로 만들어 Ready Queue를 생성하여 가장 뒤에 삽입한다. 이와 같이 어떤 프로세스를 Ready Queue에 보낼 것인가에 대한 결정은 Job Scheduler가 담당한다. 

Process Scheduling

 

 

Dispatch : Process Scheduler(CPU Scheduler) 는 Ready 상태에 있는 여러 프로세스 중 실행될 프로세스를 선정하여 CPU에 할당하며, 그 프로세스는 Ready 상태에서 Running 상태로 변환된다

 

Timeout : OS는 한 프로세스가 시스템 리소스를 독점하는 것을 방지하기 위해 지정된 시간동안만 프로세스가 CPU를 점유하도록 하는데, 이 시간을 Time Slice 또는 Time qunatum 이라 한다. 프로세스가 지정된 Time slice 가 지나도록 계속 CPU를 점유해야할 경우 프로세스로 하여금 CPU 리소스를 일시적으로 반납하고 프로세스는 Ready 상태로 변환된다. 

이 때, Job Scheduler는 다시 CPU를 사용할 프로세스를 선정하여 Time Slice를 배정한 후 프로세스를 실행시킨다.

 

Blocking : 실행 상태의 프로세스가 TIme Slice를 초과하기 전에 I/O가 발생한다면 CPU를 양도하고 I/O가 완료될 때 까지 Blocked 상태로 변환된다.

 

UnBlocking(Wakeup) : I/O 처리가 완료되면 Block 상태의 프로세스에게 I/O 처리 완료를 알려 Ready 상태로 전환시킨다.

 

4. 프로세스 제어 블록(PCB)

 

 PCB는 OS가 표현한 프로세스이다. 모든 프로세스는 완료될 때 까지 여러 상태로 전이가 일어나며 변환되는 과정을 거친다고 설명하였다. 이러한 프로세스 상태의 조사와 통보는 Scheduler 안에 있는 트래픽 제어기(Traffic Controller)가 담당하며, Scheduler에 의해 CPU 할당 및 회수를 한다. 이를 위해서는 프로세스에 관한 모든 정보를 가지고 있는 PCB(Process Control Block)라고 하는 Database가 필요하다. PCB가 프로세스의 중요한 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남는다. 일부 운영 체제에서 PCB는 커널 스택의 처음에 위치한다.(Wiki)

Process Control Block

다양한 정보들이 있지만 PCB에는 대표적으로 다음과 같은 정보를 가진다.

 

 - 프로세스의 현재 상태(Running, Ready , Block)

 - 프로세스의 고유 이름 (Process ID, Identifier)

 - 프로세스 우선순위(Priority)

 - 프로세스가 적재된 기억장치의 주소를 가지는 포인터(Pointer)

 - CPU의 각종 레지스터 상태를 저장하기 위한 공간(CPU Registers) 

 - etc...

 

프로세스 생성 시 모든 프로세스는 각기 고유의 PCB를 가지게 된다. PCB의 내용의 변경은 프로세스의 상태 변화가 일어난 경우 트래픽 제어기에 의해 일어난다. PCB들은 서로 Link되어 있는 경우가 대부분이며, 같은 상태 프로세스들이 존재하는 Ready queue는 FIFO Queue, Priority Queue, Tree, Stack 또는 단순한 무순서의 연결리스트들로 PCB를 연결한다.

반응형

'Computer Science > 1. OS' 카테고리의 다른 글

Context Switching  (0) 2019.05.16
Thrashing  (0) 2019.05.16
Thread  (0) 2019.05.12
Interrupt  (0) 2019.05.09