🤖 Computer Science
Process란?
정의
실행 중인 프로그램
특징
- OS에서 작업의 단위
- 독립된 메모리 공간을 할당 받음
- 명령어와 데이터를 가짐
- 작업을 완수하기 위해 특정 자원이 필요
- CPU 시간
- 메모리
- 파일
- I/O 장치
프로세스의 문맥(Context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 Register
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- Kernel Stack
프로세스의 상태(Process State)
프로세스는 상태가 변경되며 수행된다.
- New
- 프로세스 생성
- Ready
- 메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태
- Running
- CPU를 점유하고 instruction을 수행하는 상태
- Waiting(Blocked)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- 자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 기다리는 상태
- 자신이 요청한 event의 I/O 완료나 신호가 수신되면, Ready
- Suspended(Stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 Mid-term Scheduler에 의해 통째로 디스크에 swap out 된다.
- 외부에서 resume 해주면 Active
- Terminated
- 프로세스의 수행이 끝난 상태
프로세스의 메모리 구조
- Text section
- 명령어
- Data section
- 전역 변수
- Heap section
- 프로그램 런타임 중 동적으로 할당된 메모리
- Stack section
- 함수 호출시 임시 데이터 저장
- 함수 매개변수, 반환 주소, 지역 변수
PCB: Process Control Block
== TCB: Task Control Block
OS가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 특정 프로세스와 연관된 많은 정보를 담고 있음(구조체로 유지)
- OS가 관리상 사용하는 정보
- Process state, Process ID
- Scheduling information, Priority
- CPU 수행 관련 하드웨어 값
- Program counter
- CPU registers
- 메모리 관련
- code, data, stack의 위치 정보
- Memory management information
- Accounting information
- 파일 관련
- I/O status information
문맥 교환(Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
목적
interrupt가 발생했을 때, 시스템은 현재 실행중인 프로세스의 문맥을 저장하여, 나중에 재개할 때의 문맥을 복원할 수 있다.
동작
- CPU가 다른 프로세스에게 넘어갈 때 OS는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
예시
- System Call이나 Interrupt 발생 시 반드시 Context Switch가 일어나는 것은 아님
- (1)의 경우, CPU 수행 정보 등 Context의 일부를 PCB에 save 해야하지만 Context Switch는 아님
- (2)의 경우, Context Switch로 그 부담이 훨씬 큼(eg. Cache Memory Flush)
Process Scheduling
- Multi-Programming의 목적
- 동시에 여러 프로세스를 실행시키기 위함
- CPU 활용을 극대화하기 위해
- 시분할의 목적
- 프로세스 사이에서 CPU 코어를 빠르게 switch하기 위함
- 유저는 각 프로그램을 동시에 상호 작용 가능
Scheduling Queues
프로세스들은 각 큐들을 오가며 수행된다.
Job Queue
현재 시스템 내에 있는 모든 프로세스의 상위 집합
Ready Queue
현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
Device Queues
I/O device의 처리를 기다리는 프로세스의 집합
Queueing Diagram
- 프로세스가 시스템에 들어오면서
- CPU 코어에서 실행되기를 준비하고 기다리는 Ready Queue에 들어간다.
- 특정 이벤트가 발생하길 기다리는 프로세스는
- Wait Queue에 위치한다.
- Queue는 linked list로 구현됨
프로세스의 작동
실행의 두가지 경우
- 부모가 자식과 동시에 실행
- 부모가 자식이 종료 시까지 기다림
주소 공간의 두가지 경우
- 자식이 부모의 복제
- 자식이 새 프로그램을 가짐
프로세스 생성
- UNIX-like OS
- 새 프로세스는 fork() 시스템 콜에 의해 생성됨
- 자식 프로세스는 부모 프로세스의 주소 공간 복사로 이루어져있음
- 부모 프로세스는 실행을 이어감
- 할게 없으면
- 자식이 실행하는 동안 wait()을 할 수 있음
- ready queue에서 wait queue로 이동해서 자식의 끝을 기다림
- 차이점
- fork()시
- 0이 아닌 pid면 부모 프로세스
- return이 0이면 자식 프로세스
프로세스 종료
- 마지막 명령을 실행할 때
- exit() system call
- OS에게 삭제하라고 요청
- OS가 자원을 해제, 회수
좀비와 고아
- 좀비 프로세스
- 부모가 자식을 신경 안쓴다.
- 부모가 wait()를 아직 호출하지 않은 경우
- 고아 프로세스
- 부모가 먼저 죽었다.
- 부모가 wait()를 호출하지 않고 종료한 경우
Process와 Thread
Process
프로세스는 single thread를 실행하는 프로그램
- single thread control은 프로세스가 한번에 한 작업만 수행할 수 있음
- 현대 OS는 확장된 process 개념을 갖고 있음
- 프로세스가 multiple threads를 가질 수 있도록 함
- 그래서 한번에 여러 작업 수행
Thread
장점
단점
단점 극복 방법
예시
비교군과의 차이
- 프로세스는 각자 프로세스간의 통신에 IPC가 필요하다.
- 쓰레드는 쓰레드 간의 통신에 IPC가 필요하지 않다.
- 각 프로세스는 Code, Data, Heap, Stack 영역을 각자 보유한다.
- 쓰레드는 Code, Data, Heap 영역은 공유하고 Stack영역만 각자 보유한다.
- 프로세스는 생성과 context switching에 많은 비용이 들어간다.
- 쓰레드는 생성과 context switching에 적은 비용이 들어간다.