" Process is a program in execution "
counter.c (프로그래밍) ---(컴파일)---> counter (기계어코드) ---(실행)---> process
CPU의 수행 상태를 나타내는 하드웨어 문맥. 특정 시점에서 어디까지 수행했는지.
( program counter: 프로그램 중 몇번째 line 수행하는지 가리킴
register: code 수행 시, 사용되는 data )
=> 저장, 관리 잘하면 context switching 용이
프로세스 주소 공간: code, data, stack(user mode call stack 저장)
프로세스 관련 커널 자료 구조: PCB, Kernel stack
- PC값을 사용하여 현재 수행하는 line의 code 접근
- 명령어를 ALU에 탑재
- R1, R2에서 data를 가져와서 ALU 연산 수행
- Rn에 ALU 연산 결과 data 저장
1. process A가 CPU에서 running 중이다.
2. timer interrupt 발생 시, process A는 작업을 멈추고, ready queue의 맨 뒤로 줄을 선다.
3. process A가 CPU running 도중 disk에서 data를 읽어 와야할 경우, blocked로 바뀌고, Disk I/O queue에 줄을 선다.
4. Disk는 controller에 의해 순차적으로 data 읽고, process A의 data를 읽는 작업이 끝나면, disk controller가 CPU에 interrupt를 건다. (I/O 작업이 끝났음을 알려줌)
5. CPU는 interrupt가 들어왔으니 작업중이던 process를 멈추고, CPU 제어권이 운영체제 kernel에 넘어간다.
6. 운영체제 kernel은 process A의 메모리 영역에 A의 data를 넘겨준다. process A의 상태를 blocked -> ready로 바꿔서 CPU를 얻을 수 있는 자격을 준다.
공유 데이터 (sw자원): 동시에 여러 개의 process가 공유 데이터에 접근할 수 없음. 제어가 필요함. blocked 상태로 기다림.
: 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보 (구조체)
PCB
에 저장PCB
에서 읽어옴 (Copy)
(1) user mode -> kernel mode -> user mode로의 전환일 뿐.
(2) Timer Interrupt, I/O Request
kernel mode: A->Blocked
reg -> cache (자주 가져오는 data 저장) -> DRAM
ex) A의 실행 blocked? -> cache memory flush (B의 cache memory 넣어야 하기 때문)
: 상당한 overhead 발생
- Job queue: 현재 시스템 내의 모든 프로세스 집합
- Ready queue: 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스 집합
- Device queues: I/O device의 처리를 기다리는 프로세스 집합
프로세스들은 각
queue
들을 오가며 수행된다.
- Long-term scheduler (Job scheduler)
: 시작 프로세스 중 어떤 것을 ready queue로 보낼지 결정. 프로세스에 memory를 주는 문제.
degree of multiprogramming (memory에 올라가있는 프로세스의 수) 제어.
time sharing system에는 없음(무조건 ready)
=> 잘 안 씀. multiprogramming은 주로 중기 스케줄러로 제어.
- Short-term scheduler (CPU scheduler)
: 어떤 프로세스를 다음번에 running시킬지 결정. 프로세스에 CPU를 주는 문제. ms단위.
- Medium-term scheduler(Swapper)
: 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 보냄. 프로세스에서 memory를 뺏는 문제. degree of multiprogramming 제어.
프로세스 내부에 CPU 수행 단위가 여러 개 있는 경우
Thread 구성: program counter, register set, stack space => thread마다 따로 필요
Thread가 서로 공유하는 부분 (task)
: code section, data section, OS resources
메모리 공간 공유 => (+) 자료 공유 용이 (-) 하나 잘못되면 전체 다 X
lightweight process: thread를 여러 개 두는 것이 process를 여러 개 두는 것보다 가벼움
Thread의 장점
1. Responsiveness (응답성, 반응성)
: 다중 thread task 구조에서는 하나의 서버 thread가 blocked인 동안에도 동일한 task 내의 다른 thread가 running되어 처리 ⬆️
ex) multi-threaded web: network(blocked) dispaly(continues)
2. Resource Sharing
: 동일한 일을 수행하는 다중 thread가 협력하여 처리율(throughput) ⬆️, 성능 향상
3. Economy
: process보다 creating & CPU switching에서 overhead가 작음
ex) Solaris(Linux)가 각각 30배, 5배 overhead
4. Utilization of MP Architectures
: 병렬성 ⬆️
Process: 안정성 good, 데이터 보호성 good // 비용 bad
Thread는 하나의 PCB안에서 CPU 관련 정보를 담는 program counter
, registers
만 각각 가지고 있음.
Implementation of Threads
- Kernel Threads: supported by kernel
- User Threads: supported by library
운영체제 - 반효경
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09