MailBox
- Process : 여러개의 MailBox에 연결이 가능
- MailBox : 여러개의 Process에 연결이 가능
- MailBox 연결 설정은 Programmer가 원하는 대로 설정
- send(A, message) : A mailbox에 메세지 전송
- receive(A, message) : A mailbox에서 메세지 수신
MailBox 특징 4가지
- 1. Allow a link to be associated with at most two processes : 두가지 process끼리 연결 가능
- 2. Broadcasting : mailbox에서 다른 process에 메세지 전달
- 3. Allow only one process to receive a message : 한 process만 수신받을 수 있다
- 4. Allow the sending process to select the receiver : 수신받을 process를 송신 process가 정할 수 있다
MailBox synchronization
- Blocking : synchronous : send 후 receive 될때까지 waiting 상태로 변환
- Non-blocking : asynchronous : send 후 바로 다음작업 실행
- Blocking receive : message가 수신될 때 까지 waiting 상태
- Nonblocking receive : waiting 상태 없이 항상 수신
Buffer 형태
- Zero capacity : message가 0개 : 정보가 불필요한 경우, 즉 송신여부만 필요한 경우 사용
- Bounded capacity : message 개수 유한개 : full되면 wait 된다
- Unbounded capacity : message 개수 무한개 : wait하지 않는다
Shared Momory VS Message Passing
- Message Passing (mailbox)
1. inter-computer 간의 소통에 효과적
2. smaller amounts data에 효과적
3. system call이 빈번하기 때문에 time이 소요된다
4. programming에 쉽다
- Shared Memory
1. fast
2. spinlock, hardcoding
3. protection 기술이 필요하다 (spinlock)
4장 : Threads, Concurency
Multi-Threading motivation
- do not need to be serialized : 순차적인 수행이 불필요한 경우가 있다 : server
- fork : process를 자주 만들면 overhead가 발생한다 (PID, PCB, duplicate address space)
- 그러므로 공유 가능한 것들(code, data, file)을 공유하여 여러개의 thread로 사용
Benefits
- 1. Responsiveness : 응답성
한 Process에서 Disk I/O가 발생시 Process가 통째로 waiting 상태가 된다
이때, thread를 나누어 하나의 thread만 Disk I/O가 발생하면 다른 thread는 동작이 가능하다
- 2. Resource Sharing : 자원 공유
code, data, file 를 공유하여 사용한다
- 3. Economy : 시간 경제적
creation : Process 대비 thread가 30배 절약
context switch : Process 대비 thread가 5배 절약
- 4. Utilization of Multi-Processor Architectures
1 Process가 n개의 thread로 나뉘면 각 thread는 각 cpu에 할당이 가능
Process = set of threads + collection of resource (code, data, file)
Multicore-programming
- 1. Data parallelism : Same operation : 동일 data를 subset을 분산하여 연산
- 2. Task parallelism : Unique operation : 각기 다른 연산으로 분산
Concurrent execution : 동시간에 1 thread만 처리
Parallelism : 동시간에 2가지 이상의 thread가 병렬적으로 처리
Why multicore programming is difficult
- 1. Identifying task
- 2. Balance
- 3. Data splitting
- 4. Data dependency
- 5. Testing and debugging
Multi-threading Model
- Kernel thread : by operating system
- User thread : by thread library
- m개의 user thread가 하나의 kernel thread에 묶인 형태로 여러 kernel thread인 형태
이때 user thread 묶음 중 하나의 thread가 block 되면 해당 kernel thread가 block 된다