공부하는 스누피
[운영체제] 프로세스(Process) 정리 본문
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
Operating System Concepts 9e
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 사용자 모드, 커널 모드 (0) | 2021.04.17 |
---|---|
[운영체제] 교착 상태 Deadlock (0) | 2021.04.12 |
[운영체제] 가상 메모리 (0) | 2020.11.23 |
[운영체제] CPU 스케줄링 (0) | 2020.11.17 |
[운영체제] I/O모델: 동기, 비동기, Blocking, Non-Blocking (0) | 2020.11.11 |