Transcript 일반 code

제06강 : Monitor
Monitor
세마포어의 문제점
• 코딩, 이해, 검증이 어렵다.
• 여러 사람의 자발적인 협조에 의존할 수 밖에
• 한 개의 오류가 전체 시스템에 악영향을 미친다.
P(S);
critical section
V(S);
P(Z);
일반 code critical section
P(M);
V(Z);
critical section
일반 code
V(M);
P(Q);
일반 code critical section
V(Q);
일반 code
P(X);
critical section
V(X);
P(S);
일반 code
critical section
P(Y);
V(S);
critical section
일반 code
V(Y);
P(M);
일반 code
critical section
V(M);
일반 code
Monitor
• 상호배제를 위한 abstract data type
• Monitor
– shared data (hide)
– critical sections
Data
int x; /*shared var*/
inc_x();
{ --------}
Procedures
dec_x()
{ --------}
Critical Section of n Processes
Process:
{
P(S);
critical section
V(S);
일반 code
} while (1);
Critical Section of n Processes
int x; /*shared var*/
Process:
{
P(S);
critical section
Process:
{
Call Monitor
V(S);
일반 code
} while (1);
일반 code
} while (1);
inc_x();
{ --------}
dec_x()
{ --------}
Monitor
• 동시 호출?
– 하나씩 차례대로 진입시킨다.
• wait()
– 모니터 안에서 block 될때
• signal()
– 모니터 안에서 wakeup 시
int x; /*shared var*/
inc_x();
{ -----wait()-}
dec_x()
{ -----signal()-}
IPC
(Inter Process Communication)
Network
Interprocess Communication
(IPC)
• 두가지 방식:
– Shared memory
– Message
CPU
CPU
Memory
Memory
P1
P3
Shared
Memory
P2
• OS system call을 통해
OS
OS
Network
Interprocess Communication
(IPC)
CPU
• 두가지 방식:
– Shared memory
– Message
Memory
P1
Shared
Memory
P2
OS
Producer-Consumer Problem
os
아래한글
produce
프린터
프로그램
consume
CPU
Memory
P1
Shared
Memory
modulo operation
ring buffer
process synchronization
OS system call
allocate shared memory
allocate semaphore
P(S) V(S)
P2
OS
Interprocess Communication
(IPC)
• 두가지 방식:
– Shared memory
– Message
• OS system call을 통해서
CPU
CPU
Memory
Memory
P1
P3
OS
OS
Network
Producer-Consumer Problem
• 두가지 IPC System calls:
– send(주소, Message)
– receive(주소, Message)
CPU
CPU
Memory
Memory
P1
P3
OS
OS
Network
Producer-Consumer Problem
• 두가지 IPC System calls:
– send(주소, Message)
– receive(주소, Message)
• 직접통신
• 간접통신
CPU
CPU
Memory
Memory
P1
P3
OS
OS
종로 12번지
사서함 7번
Network
직접 통신
종로 12번지
• 상대방 프로세스의 PID 사용
– system calls:
• send(PID, message)
• receive(PID, message)
• 문제:
– Compile 전에 상대방 PID를 알 수 있어야
– mailbox (우편 사서함)
사서함 7번
간접 통신
• 상대방 컴퓨터의 mailbox (port) 사용
– system calls:
• port#=allocate_port()
• send(port#, message)
• receive(port#, message)
CPU
CPU
Memory
Memory
P1
P3
• 세계표준 port 번호
– web
– email
– ftp
port
port
OS
OS
Network