티스토리 뷰

공부자료

[운영체제] 프로세스

임다솜 임다솜 2016.11.19 19:19

Program, Process, Thread

Program "설치된 파일"

Process "실행되고 있는 프로그램"

Multi Process "실행되고 있는 프로그램이 여러 개인 것"

Thread "실행되고 있는 프로그램의 코드의 흐름"

Multi Thread "실행되고 있는 프로그램에서 코드의 흐름이 여러 개인 것"

Memory "CPU가 당장 실행해야 할 프로그램이나 데이터가 기록된 물리적 공간"




운영체제의 입장이 되어.

운영체제는 프로그램을 어떻게 실행할까?

CPU는 하나인데 프로그램을 여러 개 실행해야 한다면 어떻게 해야 할까?

운영체제의 관점에서 생각해보면 이해가 쉽게 되는 것 같습니다.



윈도우 작업관리자에서 확인할 수 있는 프로세스들



운영체제가 정의하는 프로세스의 상태

먼저 운영체제가 프로세스를 어떻게 정의하고 어떤 상태로 바라보는지 잠깐 보고 가야합니다. 아직 모든 내용을 이해할 순 없으니 간단하게 NEW, READY, Dispatch, RUNNING 정도의 흐름만 이해하고 넘어가면 좋을 것 같습니다.



프로세스의 상태와 상태 전이




"사용자가 크롬을 실행했다면"

사용자가 컴퓨터 전원을 켜고 크롬을 실행했습니다. 프로그램을 하나만 실행한 것이죠.

내가 만약 운영체제라면 어떻게 할까요?


1) 프로세스 생성 "state = NEW"


다중 프로세싱 운영체제에서의 Process Table과 Process Control Block


크롬이라는 프로그램을 실행하려면 실행코드도 필요하고, 메모리공간도 필요하고 다양한 데이터가 필요합니다. 이 데이터는 하드디스크에 저장되어 있습니다. 이 데이터를 가져와 PCB를 생성하고 PID를 할당하여 프로그램의 실행단위인 프로세스를 생성합니다. PCB 하나가 하나의 프로세스를 의미하고, PID라는 고유의 식별자를 할당하게 됩니다.

> PCB는 Process Control Block의 약자로, 말 그대로 프로세스를 관리할 수 있는 자료구조입니다. 이 데이터 중에는 프로그램 코드가 이진 바이트 코드로 저장되어 있어 CPU가 실행할 수 있게 됩니다. 뒤에서 자세히 설명할테니 가볍게 알고 넘어갑니다. 



2) 프로세스 준비 "state = READY"



크롬 프로세스의 PCB에서 필요한 데이터를 CPU 메인 메모리로 적재하여 실행 준비

메인 메모리가 충분하다면 PCB를 메인 메모리에 저장합니다. 그리고 프로세스에게 CPU의 사용권을 넘겨줄 때까지 기다리라고 지시합니다.

> 메인 메모리는 CPU가 당장 실행해야 할 프로그램이나 데이터가 기록된 물리적 공간을 의미합니다.



3) 프로세스 실행 "state = RUNNING"



프로세스를 관리하는 운영체제와 CPU를 이용해 연산을 하는 프로세스


대기 중인 크롬 프로세스에게 CPU 사용권을 넘겨줍니다. 크롬은 CPU를 이용해 연산을 수행합니다. PCB 데이터 중 이진 바이트 코드로 저장된 명령어를 한줄씩 가져와 필요한 연산을 수행하는 것이죠.

> 메인 메모리에 적재된 데이터 중 프로세스가 실행할 명령어를 가리키는 포인터가 있어 그 포인터에서 명령어를 가져와 연산을 하거나 Program Counter에 전달해 다음 명령어를 적재하는 등의 일을 하게 됩니다.



"사용자가 크롬을 실행한 뒤 뮤직플레이어를 실행했다면"

이번엔 사용자가 크롬을 실행한 뒤 곧이어 뮤직플레이어를 실행했습니다. 프로그램을 두 개 실행한 것이죠.

이런 경우에 운영체제는 어떻게 해야 할까요?


1) 프로세스 생성 "NEW"

크롬을 실행하는데 필요한 데이터를 가져와 PCB를 생성하고 프로세스를 생성합니다.


2) 프로세스 준비 "READY"

메인 메모리가 충분하다면 PCB를 메인 메모리에 저장합니다. 그리고 프로세스에게 CPU의 사용권을 넘겨줄 때까지 기다리라고 지시합니다.


이때 사용자가 뮤직플레이어를 실행했습니다.


3) 프로세스 생성 "NEW"

뮤직플레이어를 실행하는데 필요한 데이터를 가져와 PCB를 생성하고 프로세스를 생성합니다.


4) 프로세스 준비 "READY"

메인 메모리가 충분하다면 PCB를 메인 메모리에 저장합니다. 그리고 프로세스에게 CPU의 사용권을 넘겨줄 때까지 기다리라고 지시합니다.

> 이때 이미 크롬 프로세스도 메인 메모리에 올라와 있기 때문에 대기하고 있는 프로세스들은 대기 큐나 리스트에 넣어 준비상태로 관리합니다.

> 여기서 스케쥴링이 필요합니다. CPU를 독점적으로 한 프로세스가 사용하고 반환할 것인지, 돌아가면서 조금씩 사용할 것인지 등의 규제가 필요하게 되죠. 즉, 스케쥴링은 어떤 작업에 CPU 사용권을 어떻게 줄 것인지에 대한 문제가 되겠습니다.


5) 준비에서 실행으로 상태 변경 "Dispatch"

프로세스가 CPU를 사용하기 위해서는 CPU 레지스터에 PCB데이터를 적재해야 합니다. 만약 먼저 들어온 프로세스 순서대로 1초의 사용권을 주는 스케쥴링 방식을 선택했다면 크롬이 먼저 실행됩니다. 크롬 프로세스의 PCB 데이터를 CPU 레지스터에 적재합니다.

> 현재는 아무 프로세스도 실행되고 있지 않으므로 그냥 적재할 수 있지만, 다른 프로세스가 실행되고 있다면 Context Switching 작업을 거쳐야 합니다.(뒤에서 설명)


6) 프로세스 실행 "RUNNING"

PCB가 가지고 있는 정보 중에, 프로세스가 실행할 명령어가 저장된 공간을 가리키는, 포인터가 있습니다. 이 곳을 참조하여 명령어를 가져오고 CPU를 이용하여 연산을 하게 됩니다.

> 명령어(프로그램을 위해 작성한 코드)는 이진 값으로 저장되어 있고 CPU를 이용해 필요한 연산을 합니다.


7) 시간 할당량 초과 "TIME OUT"

스케쥴링 정책에 따라 1초가 지나면 자발적으로 혹은 강제로 CPU사용권을 가져옵니다. 이 CPU 사용권은 다음 순서의 프로세스에게 넘겨주어야 합니다. 이제 크롬 프로세스는 다시 "READY" 상태가 됩니다.

준비 큐에는 크롬 프로세스 다음으로 뮤직플레이어 프로세스가 있고, 이번엔 뮤직플레이어 프로세스를 실행해야 합니다.


8) 준비에서 실행으로 상태 변경 "Dispatch"

CPU 레지스터에 적재되어 있는 기존 PCB 데이터를 메인메모리로 옮긴 뒤 새 PCB 데이터를 적재합니다. 

> 이 것을 Context Switching 과정이라고 합니다. 현재 CPU 레지스터에는 크롬 프로세스의 PCB 데이터가 적재되어 있어 새 PCB 데이터가 들어갈 공간이 없습니다. 따라서 기존 PCB 데이터를 메인 메모리로 옮기고, 새 PCB 데이터를 CPU 레지스터로 적재합니다. 이렇게 문맥을 교환하는 것을 Context Switching이라고 합니다.


9) 프로세스 실행 "RUNNING"

현재 CPU 사용권을 뮤직플레이어에게 줍니다. 뮤직플레이어 역시 1초가 지나면 CPU 사용권을 반납하고 다시 대기합니다.


운영체제와 CPU는 이런 과정을 빠르게 반복합니다. 사용자는 마치 동시에 프로그램이 실행되는 듯한 경험을 하게 됩니다.




Process Control Block

PCB(Process Control Block)은 자료구조입니다.

운영체제가 프로세스를 관리하는데 용이하도록 필요한 정보를 담아놓은 자료구조이죠.

어떤 정보를 가지고 있는지 하나씩 살펴볼게요.


PCB 데이터 구성


Pointer

프로세스는 프로그램이 가지고 있는 코드를 실행하는 것입니다. 그러려면 프로그램의 코드도 필요하고 실행하기 위한 다양한 정보가 필요합니다. 그 데이터가 저장된 곳의 주소값을 가진 변수가 이 Pointer입니다. Pointer가 가리키는 데이터는 아래 그림과 같은 순서로 구성되어 있습니다. Text는 저급언어로 작성되어 있는 실행코드입니다.


프로그램 정보가 저장된 메모리 공간 구조



Process State

현재 프로세스의 상태를 나타내는 플래그입니다. NEW, READY, RUNNING 등의 상태를 표현합니다.


Process Number (PID)

프로세스의 아이디라고 할 수 있습니다. 프로세스를 구분하는 식별자 번호입니다.


Program Counter

CPU가 실행할 다음 연산자(명령어, instruction)를 가리키는 변수입니다. 이 연산자는 기계어입니다.


CPU Register

프로세스가 어떤 Inturrupt나 할당시간 초과에 의해 CPU를 반납하면 프로세스가 잠시 중단됩니다. 그리고 스케쥴링에 의해 다시 CPU를 할당받았을 때 프로그램의 처음부터 다시 실행할 순 없겠죠? 중단되기 전의 상태를 이어서 실행해야 합니다. 그래서 중단할 때의 상태를 CPU Register에 저장해 놓은 뒤 다시 실행될 때 이 데이터를 참고하여 프로세스를 실행하게 됩니다. 운영체제가 프로세스를 매우 빠른 속도로 스케쥴링하고, 이 CPU Register를 사용함으로써 마치 중단없이 계속해서 실행되는 듯이 느끼도록 프로그램을 실행하고 있습니다.


Memory Management Information

이 데이터는 메모리를 관리하는데 필요한 정보를 나타냅니다. 


I/O Status Information

이 데이터는 프로세스에 할당된 I/O 장치 리스트, Open 상태의 파일 리스트 등의 정보를 나타냅니다.


CPU Scheduling Information

이 데이터는 스케줄링 시 프로세스의 우선순위, 스케줄링 큐를 가리키는 포인터 등 스케줄링과 관련된 매개변수들을 나타냅니다.








댓글
댓글쓰기 폼
공지사항
Total
41,135
Today
35
Yesterday
59
링크
TAG
more
«   2018/07   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
글 보관함