만족

[Operating Systems] Process 본문

[Operating Systems] Process

기타 CS 이론/Operation System Satisfaction 2018. 3. 28. 22:37

Process란 무엇인가?


간단히 말해, 실행중인 프로그램(running process)를 말한다.


잠깐 혼동할 수 있는 개념을 정리하자면


Program: Storage에 저장된 instruction들의 집합

Process: Memory에 code, register, data등이 load되어 실행중인 Program

Processor: Process를 실행시키는 Hardware


Overview: Multi-Process


여러 개의 작업을 실행시켰을 때, 마치 여러 개의 작업이 동시에 실행되는 것 처럼 보인다.


그러나 실제로는 한 번에 하나의 작업(one task at once time)을 실행시킨다.


Time Sharing이라는 기법을 이용하여, 아주 짧은 시간마다 작업을 번갈아가면서 실행하기 때문에 마치 동시처리를 하는 것 처럼 보인다.

(예를 들어, 0.1초동안 A를 실행하고, 다음 0.1초동안 B를 실행하고, 다음 0.1초동안 A를 실행하는 것을 반복한다)


OS가 CPU Virtualization을 이용하여 사용자들에게 이러한 환상을 만들어 내는 것이다.


Constitute of Process


이것을 이해하기 위해서는 machine state(memory, register, others...)에 대한 이해가 필수적이다.


Memory: 실행중인 process가 읽고 쓰는 데이터들과 Instruction들은 Memory에 존재한다.

Register: 많은 instruction들은 명시적으로 레지스터를 읽고 쓰기 때문에 중요하다

Program Counter: 현재 process의 어떤 instruction을 실행중인지 알려준다.


Overview: Process API


기본적인 Process에 관련된 API에 대해 잠시 살펴보자.


Create: 새로운 process를 만든다

Destroy: process를 제거한다.

Wait: Running중인 process를 잠시 멈춘다. (Destroy 와는 다르다)

Miscellaneous Control:  잠시 멈추거나, 멈춘 process를 다시 running 시키는 것 등의 여러가지 controls

Status: process의 상태


C에서 몇 가지 예를 들자면


fork()는 현재의 process상태를 완전히 복사해 같은 process를 하나 만들어 낸다.

여기에서 만들어 내는 process는 parent process라고 불리며, 만들어진 process는 child process 라고 한다.

이 child process가 끝날 때 까지 parent process가 기다리게 하고 싶다면 wait()를 이용한다.


exec()는 매개값으로 전달된 path의 program으로 현재 process를 완전히 덮어씌운다.

A process에서 exec()로 B program의 path를 전달하면, 그 process는 완전히 B process가 된다.

주로 fork()로 child process를 만들고 그 process에서 exec()를 사용하는 방법을 취한다.



어떻게 Program은 Process가 되는가?


먼저 OS는 program의 code(instructions)와 static data들을 memory와 process의 address space에 올린다.

(Modern OS에서는 모든 instruction들을 초기에 모두 load하기 보다는 필요한 만큼만 올린다)


그런 다음 필요한 공간을 할당한다.

(C의 경우에는, local vaiable, function parameter, return address를 위한 stack이 필요하다)


또한 program의 heap을 위한 공간도 할당한다.

(C에서 heap은 동적 할당된 data들을 위해 존재한다.)

(처음에는 매우 작지만 malloc등의 방법으로 memory allocation을 할 수록 heap은 커지며 free 해 주면 줄어든다.)


I/O작업과 관련된 일들과 함께 몇가지 작업을 추가적으로 한다.


이제 program이 실행될 준비가 되었다.


Process State


Process는 Running 상태 외에도 다양한 상태를 갖는다.


Runnung: instruction들을 실행중인 상태

Ready: Runnung할 준비가 되었지만 OS에 의해 채택받지 못하여, 채택받기를 기다리는 상태

Blocked: 어떤 이벤트의 발생으로(대표적으로 CPU를 사용하지 않고 I/O를 작업을 시도하는) running 할 수 없는 상태.


이 상태는 변하기도 한다.


Running-> Ready (Descheduled): 어떤 이유로 OS에게 CPU 사용을 허락받지 못한 상태가 되었다

Ready-> Runnung (Scheduled): OS에 의해 선택받아 CPU를 사용하는 상태


Running-> Blocked: I/O Start

Blocked-> Ready: I/O End


--------------------------------------------------


Reference


Operating Systems: Three Easy Pieces (Remzi H. Arpaci-Dusesdau, Andrea C. Arpaci-Dusesdau)



Comments