프로세스의 개념 (Process Concept)
- 실행중인 프로그램 (active)
- 싱글 프로세스에서는 병렬 실행이 되지 않는다
- program은 process와 다르게 disk에 저장되어 있는 passive(비활성)상태
- 프로그램이 실행되면 프로세스가 됨
Multi parts
- text section : 기계어로 된 코드들
- program counter : 주소를 가르킴
- Stack : 순간적(일시적)으로 사용되는 데이터를 포함
- ex.) 함수 파라미터, return addresses, 지역변수
- Data section : 전역 변수 포함
- Heap : run time 동안 할당된 동적 메모리 포함
프로세스 상태 (Process State)
- New : 프로그램이 메인 메모리에 할당
- Ready : 할당된 프로그램이 프로세스가 오면 실행되기위한 준비 마침
- Running : CPU가 해당 프로세스 실행
- Waiting : I/O가 block 상태로 CPU를 사용않고 다른 작업을 함(프로세스가 와도 실행하지 않는 상태)
- Terminated : 프로세스가 완전히 종료
CPU는 한정적이기 때문에 wait하고 resuming 하며 돌림
Process Control Block (PCB)
PCB : 프로세스에 대한 모든 정보가 모여있는 곳
Process State(프로세스 상태), Program Counter, CPU registers, CPU 스케쥴링 정보 등 포함
Thread (쓰레드)
- 프로세스는 single thread of execution을 가짐
- Multiple threads of control → threads
- PCB안에 thread detail 저장소, 멀티 프로그램 카운터가 있어야한다
프로세스 스케쥴링 (Process Scheduling)
-
Resource를 Task에 할당하는 방법론
-
Process Scheduler은 OS의 일부분으로 CPU core에서 다음 실행을 할 active 상태(사용가능한 프로세스들)중 선택하는 것
-
CPU사용을 최대화 하고, 프로세스간 switch를 빠르게 하기 위함이 목표
-
Ready Queue - 메인 메모리에 저장되어 실행 및 대기 중인 프로세스들
-
Wait Queue - event를 기다리는 프로세스들
Context Switching
- CPU가 다른 프로세스로 이동
- 인터럽트가 발생한 경우처럼 시스템에서 CPU에서 실행되는 프로세스의 현재 상태(Context)를 저장해 , Context를 복구해 다시 재개하는 데 사용
- PCB에 context가 포함됨
- 하드웨어 support에 의존적
Operations on processes
Process Creation
- 자신의 프로세스 복제해 다른 프로세스 생성
- parent, child process가 존재하며 tree로 표현 가능
자식 프로세스가 생길 때 부모 프로세스는 둘 중 하나로 행동
- 자식 프로세스와 동시에 작동
- 자식 프로세스가 종료할 때까지 기다림
새로운 프로세스에 대한 주소 공간 가능한 경우
- 자식 프로세스는 부모 프로세스의 복제품이기 때문에 같은 프로그램과 데이터 사용
- 자식은 로딩될 새로운 프로그램 있음
fork() : 새로운 프로세스 생성
exec() : fork() call 이후에 exec()에 의해 부모 자식 중 하나는 프로세스 메모리 공간을 새 프로그램으로 교체
wait() : 부모 프로세스는 wait으로 child를 종료를 기다림
Process Termination
Interprocess Communication
- 시스템에서 프로세스는 독립적(다른 프로세스들과 data 공유 X), 협력적(프로세스가 다른 프로세스들에 영향을 주고 받을 수 있음)
협력하는 이유
IPC(interprocess communication)
- Shared Memory
- 프로세스간 공유할 메모리 공간 (shared memory)가 만들어짐
- Message passing
- message 교환을 통해 정보를 주고 받음