공부하는 스누피

[운영체제] 프로세스(Process) 정리 본문

CS/운영체제

[운영체제] 프로세스(Process) 정리

커피맛스누피 2020. 7. 15. 18:27

1. 프로세스

프로세스는 실행중인 프로그램이다.

프로그램을 실행시키려면 다음과 같은 요소가 필요하다.

 

- 메모리에 저장된 프로그램

- 프로그램 코드

- 프로그램 카운터 (다음 프로그램을 가리킴)

- 스택: LIFO, variables, function, parameters

- Data section: 전역 데이터

- Heap: 모든 threads가 공유하는 라이브러리, loadable modules. Runtime에 할당됨.

 

프로세스 하나당 한 개 이상의 스레드를 가지고 있다.

프로세스가 다른 프로세스에 접근하려면 IPC(Inter-Process Communication)을 사용해야 한다. 

 

- Interprocess Communication(IPC)

 Process 간 협동할 수 있음 -> 데이터 공유, 계산 속도 향상, 모듈화 가능

a. Message passing model (e.g. server-client)

 구현이 쉽고 conflict가 없으나 데이터 크기의 한계가 있음.

b. Shared menory model

 message passing model보다 빠르다. (mp model은 system call 사용하기 때문)

 데이터 크기의 한계가 없으나 cache coherency issue가 있다. 

 => Producer-consumer problem: bounded-buffer에서는 buffer가 가득 차거나 비었을 경우 producer는 생산량을, Consumer는 소비량을 조절해야 캐시 동기화 문제를 해결할 수 있다. 이를 생산자-소비자 협동이라고 한며, buffer가 동이화된다. Semaphore로 교착 상태를 해결할 수 있다.

 

2. 프로세스 실행

- Time-sharing System

프로세스를 사용해 한개 이상의 작업을 수행한다. => Multi-process, multi-thread 사용

많은 작업을 실행시키려면 프로세스 관리가 필요하다.

프로세스 관리는 Process state, Process control block, Process scheduling, Process 생성 및 종료에 의해 이뤄진다.

 

- Context Switch

Context: CPU 레지스터, process state, 메모리 관리 정보 값 => 저장, 복구되어야 함

=> Context state를 저장하고 복구

=> Pure overhead for system -> 하드웨어 기능이 바탕이 되어야 함.

=> 복잡한 OS에서는 일의 양이 많아짐

=> 프로세스가 스레드보다 비용이 많이 든다. (스레드는 Stack영역을 제외한 모든 메모리를 공유하기 때문)

 

- Process State

한번에 하나의 프로세스만 프로세서에서 실행될 수 있다.

OS는 Process state로 프로세스의 상태를 알 수 있다.

 

Process creation(new 상태)

=> Fork()로 새 프로세스 생성

(Linux fork()와 Windows의 CreateProcess()는 다르다. fork 호출될 때 parent와 child를 둘다 실행시키지만, CreatePorcess는 단순히 새 process를 만든다. 마지막 결과가 새 프로세스 생성이라는 것 밖에 공통점이 없다. )

 

Process termination(terminated 상태)

=> exit() system call : 프로세스 메모리 할당 해제시킴

=> Cascading termination : parent 종료된 후에 child가 OS에 의해서 종료될 경우

=> wait() system call : parent가 exit 상태 가지고 있는 것을 허용함. (자식 프로세스 종료 기다림)

=> zombie process: wait() 호출하기 전에 child가 종료됨. 종료할 child가 없어서 wait가 영원히 기다림..

=> Orphans: 자식 프로세스보다 부모 프로세스가 먼저 종료될 경우(wait()를 안 쓴 경우)

 

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

프로세스 관련 데이터를 저장하는 자료구조. 프로세스 식별자, 프로세스 상태, 제어 데이터를 포함하고 있다.

프로세스 생성과 동시에 만들어진다. 

 

참고

https://stackoverflow.com/questions/13839935/forking-and-createprocess

 

forking() and CreateProcess()

Are forking() and CreateProcess(with all required arguments), the same thing for Linux and WinXP, respectively? If they are different, then could someone explain the difference in terms of what ha...

stackoverflow.com

Operating System Concepts 9e

Comments