2023. 10. 11. 00:05ㆍRun/Operating System
1. Multi-Programming
- Multi-programming의 목적: CPU 이용 최대화하기 위해 항상 어떤 process 실행되도록 하는 것
→ 시분할: 각 프로그램 실행되는 동안 사용자와 상호작용 할 수 있도록 process 사이에서 CPU 빈번하게 교체하는 것
2. Multi-Processing (다중 처리기)
- Multi-core 라고도 함
- CPU scheduling (= process scheduling)
- CPU 여러 개 사용 (매우 밀접한 통신을 하는 둘 이상의 processor, 즉 CPU 가짐)
- n개의 CPU를 가지는 multi-processor 하나가 1개의 CPU를 가지는 single-processor n개보다 비용 적게 듦
- 기능 적절히 분산된 경우 한 CPU가 고장나도 나머지도 동작 못하는 것이 아님
- 속도가 정확히 n배 증가하는 것은 아님 (∵ overhead 및 경쟁 존재)
Process Scheduling?
- Process scheduler: CPU에서 실행 가능한 여러 process 중 하나 선택
- Scheduling queue 사용 (process는 일생 동안 다양한 scheduling queue 사이를 이동)
- Context switch: Interrupt 발생 시 현재 process 상태(context) 보관하고 새 process의 보관된 상태(context) 가져오는 것
- Context switch 시간은 순수한 overhead
Interprocess Communication (IPC)?
- OS 내에서 실행되는 병행 process가 협력적인 경우
- Information sharing, computation speedup, modularity, convenience
1) Message Passing
- 동일한 주소공간 공유하지 않고도 process끼리 통신
- Kernel level에서 진행되므로 안전함 (빠르긴 하나 전체적으로 봤을 때 shared memory보다 느림)
- Message queue 사용, message 간 우선순위 이용하려면 queue만으로는 부족
→ 여러 CPU scheduling algorithm 존재 (https://serinyoon.tistory.com/70)
- Direct communication (1:1): 수신자/송신자 이름 명시
- Indirect communication (1:N): mailbox 사용
2) Shared Memory
- Shared memory 영역은 shared memory segment를 생성하는 process의 주소공간에 위치
- 이 segment를 이용하여 통신하고자 하는 process는 자신의 주소공간에 segment를 추가
- User level에서 진행됨
- 보통 OS는 한 process가 다른 process의 메모리에 접근하는 것 금지 → 제약 조건 제거해야 shared memory 가능
- Process들은 동시에 동일한 위치 쓰지 않도록 해야 함 (무한 버퍼, 유한 버퍼 사용)
Message Passing vs Shared Memory
- Message passing은 적은 양의 데이터 교환할 때 유용, 분산 시스템에서 shared memory보다 구현 쉬움
- 시스템의 처리 core 수가 증가할수록 message passing이 더 선호됨
- Shared memory가 메시지 전달 더 빠름 (∵ shared memory 영역 구축할 때만 system call 딱 한 번 함, 커널 도움 필요 X)
3. Multi-Core
- 하나의 칩에 여러 개의 core를 포함시키는 것
- 모든 multi-core 시스템은 multi-processor 시스템이지만, 그 반대는 성립하지 않음
- Multi-thread programming은 multi-core를 더 효율적으로 사용할 수 있는 기법을 제공함
- Parallelism (multi-core): 동시에 여러 task 실행 가능한 것
- Data parellelism: 여러 core에 같은 data를 분배함, same operation on each
- Task parallelism: 여러 core에 thread 분산함, each thread performing unique operation
- 속도 빠르나 debugging 어려움, data 나눌 때 sync 맞추기 어려움
- Concurrency (single-core): 여러 task 진행시킬 수 있는 것 (동시는 아님)
Multi-core = 하나의 CPU에 여러 core 넣는 것
Multi-thread = 하나의 CPU에 여러 thread 넣는 것
결국 비슷한 것 아닐까?
4. Multi-Thread
- 프로그램 하나, thread 여러 개
- Thread들은 각각의 program counter를 가짐
- Responsiveness: 시간 많이 걸리는 작업 별도의 작업에서 실행, 동시에 사용자에게 응답
- Resource sharing: IPC의 message passing과 shared memory는 명시적으로 처리, thread는 자동적으로 공유
- Economy: thread를 사용하면 새로운 process 생성하는 것보다 overhead 덜 함
1) Many-to-One Model
- Kernel Thread : User Thread = 1 : N
- 한 thread의 block이 모든 thread의 block이 됨
- 한 번에 하나의 thread만 kernel에 접근할 수 있기 때문에 multi-thread가 병렬로 실행될 수 없음
2) One-to-One Model
- Kernel Thread : User Thread = 1 : 1
- 한 thread가 block 되어도 다른 thread는 실행 가능
- User thread 생성할 때 kernel thread도 생성해야 함 (overhead)
3) Many-to-Many Model
- Kernel Thread : User Thread = N : M
- 위 두 model의 단점을 해결 (한 thread의 block 상관 없음, 병렬 실행 가능, 필요한 만큼 user thread 생성 가능)
4) Two-level Model
- Many-to-Many + One-to-One
'Run > Operating System' 카테고리의 다른 글
[OS] CPU Scheduling (0) | 2023.10.11 |
---|---|
[OS] Memory Management (0) | 2023.10.11 |
[OS] Synchronization & Deadlock (0) | 2023.10.11 |