Cooperating Process
- Independent Process : 다른 Process와 독립적으로 동작하는 Process. 다른 Process에 영향을 주지도, 영향을 받지도 않는다.
- Cooperating Process : 다른 Process들과 영향을 주고받는 Process (ex. Parent-Child Process)
장점 (Advantage of Cooperating Process)
- 정보 공유 (Information Sharing)
- 처리속도 향상 (Computation Speed-UP)
- 모듈화 (Modularity)
- 편의성 (Convenience)
Role
Producer : 정보 or 기능을 제공하는 Process (ex. Compiler, Assembler, Webserver)
Consumer : 정보 or 기능을 제공받는 Process (ex. Assembler, Loader, Webbrowser)
*Assembler와 같이 Producer가 될 수도, Consumer가 될 수도 있다. (Assembler는 Compiler에게 정보를 제공받고, Loader에게 정보를 제공한다.)
Producer와 Consumer간에는 Buffer가 필요하다. → Buffer는 유동성에 따라
- Unbounded Buffer → 크기 제한 ❌
- Bounded Buffer → 크기 제한 ⭕
Producer는 Buffer에 Insert()하고 Consumer는 Buffer에 Remove()를 하며 Process간 통신할 수 있다.
InterProcess Communication (IPC)
Process간 통신(Communication)과 동기화(Synchronize)
Communication
Process간 통신에서는 Shared Memory방식보다는 Message Passing방식을 선호한다.
Message Passing
두가지 기능을 제공한다 →
- Producer ⇒ Send() : 전송하는 Message의 크기가 Fixed or Variable할 수 있다.
- Consumer ⇒ Receive()
P와 Q가 Communication을 한다고 하면
- P와 Q간 Link를 생성한다. (Physical한 특성과 Logical한 특성을 고려하여. 아래에서 자세히 설명.)
- Send/Receive를 통한 통신.
- 구현시 고려해야할 점.
- Link를 어떻게 구현할 것인가? → Physical한 특성(ex. Shared Memory, Hardware Bus, Switch, Network 등) 과 Logical한 특성 (ex. Direct/Indirect, Syschronous/Asynchronous, Auto/Explicit Buffer)을 고려하여 Link를 생성한다.
- 한 Process 쌍 당 몇개의 Link를 만들 것인가?
- 얼마나 많은 Process들이 통신할 수 있도록 할 것인가?
- Link의 대역폭 크기는?
- Message의 크기와 크기의 유동성은? (Fixed or Variable)
- 단방향? 양방향?
Direct Communication
Process들간에 직접 통신하는 것. 받는, 보내는 Process의 이름을 명시해주어야 한다.
Send(P,message) → P에게 보낸다.
Receive(Q,message) → Q로부터 받는다.
위에 설명한 구현시 고려해야할 점을 고려하여 구현한다.
Indirect Communication
Mailboxes(Port라고도 함)를 통한 간접 통신
- 각각의 MailBox는 고유한 값을 가진다.
- 같은 MailBox를 쓰는 Process들만 서로 통신이 가능하다.
Send() : MailBox에 Message를 전달한다.
Receive() : MailBox에서 Message를 꺼낸다.
통신과정
- MailBox생성 : Create a new mailbox
- Send and Receive
- MailBox파괴 : destroy
단점
여러 Process(3 개이상의 Process)가 같은 MailBox를 사용하면 메세지의 수신자가 불확실해질 수 있다.
ex. 두개의 Process가 동시에 Receive()를 하는 경우 누가 메세지를 수신했는지 불확실하다.
해결방법
- 2개의 Process끼리만 통신할 수 있도록 한다.
- 한 Process가 Receive() 하는 동안은 다른 Process가 Receive() 할 수 없도록 한다.
- Receive()를 한 Process를 명시한다 ⇒ 수신자를 명시한다.
Synchronization, Asynchronization
Message Passing방식은 Block or Non-Block이다.
Block = Synchronous = 동기
- 한 Process가 보내면 다른 Process가 받을 때 까지 기다린다.
- 한 Process가 받을라면 다른 Process가 보낼 때 까지 기다린다.
Non-Block = Asynchronous = 비동기 → Buffer가 필요하다.
- Process는 송,수신을 기다리지 않는다.
- Sender는 Buffer에 메시지를 보내고, 자기가 할 일을 한다.
- Receiver는 Buffer에서 메시지를 확인하고, Buffer에 메시지가 잇으면 가져오고, 없으면 Null을 가져온다.
Buffer
- Zero Capacity : 버퍼가 없다 → Block방식이다.
- Bounded Capacity : 버퍼가 가득차기 전에는 Non-Block방식, 버퍼가 가득차면 Block방식이다.
- Unbounded Capacity : 항상 Non-Block방식이다. Buffer의 크기가 유동적이다.
Client-Server Communication
Socket
통신의 종단점(Endpoint). IP와 Port로 구성되어있다.
161.25.19.8:1625 → IP : 161.25.19.8, Port : 1625
통신은 한 쌍의 Socket에서 일어난다.
Remote Procedure Call (RPC)
Function을 Call하듯이 원격으로 다른 컴퓨터의 Procedure를 Call 하는 것.
Stub : Proxy(안내자)
- Client-side Stub : Server의 위치를 확인하고 파라미터 등 필요한 정보를 전달한다.
- Server-side Stub : 파라미터를 받고 Procedure를 호출하고 결과를 반환한다.
Remote Method Invocation (RMI)
Java에서 사용하는 mechanism → RPC와 매우 유사.
원격의 객체에서 다른 객체의 Method를 호출할 수 있도록 해준다.
'Computer Science > OS' 카테고리의 다른 글
Threads (1) | 2023.11.25 |
---|---|
3강 연습문제 (2) | 2023.11.25 |
Processes(1) (0) | 2023.11.24 |
운영체제 2강 연습문제 (0) | 2023.11.21 |
Operating System Structures(2) (0) | 2023.11.21 |