Process
실행 중인 프로그램(an instance of a running program)
Process의 구성
Images
- Code: 명령 코드(instrunction code)
- Data: 다양한 변수(전역)
- Stack: 함수 call을 위한 states들
- Heap: 동적 메모리
Process context
- Program context
- 데이터 레지스터(data register)
- 프로그램 카운터(PC), 스택 포인터(SP)
- Kernel context
- pid,gid,sid,env...
- VM structure(페이지 테이블)
- open files, signal handlers...
Process control Block(PCB) a.k.a PD(Process Descriptor)
프로세스에 관련 된 정보를 가지고 있는 자료 구조(structure)
PCB의 구성
Image
Process context
- program context
- kernel context
리눅스에서는 task_struct라고 구현 되어있음
Process State: 5-State model
- new: 프로세스가 생성됨
- ready: ready queue에서 프로세서에 의하여 스케쥴 되기 기다리는 상태
- running: 프로세스가 instruction 실행 중
- blocked(waited): 프로세스가 특정 이벤트(e.g 입출력 완료, signal)를 기다리는 상태
- exit(terminated): 프로세스가 종료된 상태
Process Switching
Dual mode operation
대부분의 OS는 특정한 H/W를 이용해서 user가 직접적으로 low-level의 H/W 와 교류하거나임의의 메모리 주소에 접근하는 것을 막는다.
2가지의 CPU의 모드를 가진다.
- 유저 모드(User mode)
- 권한이 적은 모드
- 유저의 프로그램은 보통 이 상태로 실행됨
- 커널 모드(Kernel mode)
- 권한이 높은 모드
- 그 프로세스의 명령문 ,레지스터, 메모리에 대한 권한을 가짐
- OS의 핵심
Process switching
실행 중인 프로세스 인터럽트 되거나 프로세서(processor)에 의해 강제로 다른 프로세스가 실행(running state)되게 할 때, 실행 중이던 프로세스가 다른 프로세스에게 넘겨주는 과정을 말함
- 언제 process swiching이 일어남?
아래 3가지 경우에 일어날 수도 있음( 안 일어난다는건? -> 모드 스위칭만 일어난 경우!)
- 외부 인터럽트(External Interrupt): 타이머, I/O 인터럽트
- 내부 트랩(Exception): 페이지 폴트, 잘못된 operation(divide by 0)
- 시스템 콜(syscall): I/O 명령, fork
- 프로세스 스위칭(Process switching) VS 모드 스위칭(Mode Switching)
- 모드 스위칭: 위 3가지(외부 인터럽트, 내부 트랩, 시스템콜) 경우 항상 모드 스위칭이 일어남
과정
- 현재 프로세스의 상태(process context- reg, flags(PC,SP))를 저장
- PC를 특정한 곳으로 향하게함(커널 모드를 수행하기 위한 장소)
- 커널 모드가 수행됨으로 특정 권한의 명령을 수행가능.
모드 스위칭만 하고 프로세스 스위칭을 하지 않는 경우 process context의 저장과 간단한 복원만 일어남(overhead가 적음)
- 프로세스 스위칭: 모드 스위치가 일어나고 경우에 따라 프로세스 스위칭이 일어남
과정
- 현재 프로세스의 context(process context)를 저장 - 어디에? 커널 스택에(PCB에서 context 저장)
- 현재 프로세스의 상태를 바꾸어준다. running -> blocked/ready/exit
- PCB를 적절한 queue에 넣어줌
- 다른 실행될 process를 스케쥴러를 통하여 선정
- 선정된 process를 적절한 queue로 부터 가져옴
- 실행될 프로세스의 상태를 running 으로 바꿈
- 실행될 프로세스의 context(register, flags)를 복원 한다.
프로세스 스위칭을 하는 동안 프로세서는 진행 상황(process들)이 없게 됨.
OS가 복잡 할수록 context 스위칭을 하는 동안 하는 일이 많아짐.
is the OS a process?
OS도 processor에 의하여 실행되어야함. 그렇다면 어떤 방식으로 ?
(A) 프로세스가 아닌 커널
(B) 유저 프로세스 안에서 실행되는 커널
(C) 프로세스로 취급 되는 커널
(B)의 방식이 리눅스에서 이용되며 모드 스위치만 일어나는 경우 오버헤드가 적은 장점이 있다.
Cooperating Processes
Communication
Synchronization
- Ordering between activities
Process coordination(Communication & Synchronization)
- Application programming (e.g shared memory)
- IPC(Inter-process communication)
Interprocess communication
IPC
프로세스간의 communication과 synchronize를 위한 장치.
IPC Models
- 하나의 컴퓨터에서 2개의 process간의 IPC
- 다른 컴퓨터에서 2개의 process간의 IPC
- Client-Server model
UNIX의 IPC 종류
- Basic IPC : Pipe,FIFO(named pipe)
- Advanced IPC
- Message passing
- semaphore
- shared memory
- socket(internet IPC , TCP/UDP)