윈속의 동작모드 소켓의 동작모드 ▶ 소켓의 동작모드에는 blocking, non-blocking, 비동기(asynchronous) 모드 세 가지가 있다. ▶ blocking 모드 ● 소켓을 처음 생성하면 디폴트로 blocking 모드가 되는데, 이 소켓에 대 해 어떤 시스템 콜을 호출하였을 때 네트워크 시스템(즉, TCP/IP)이 동작 을 완료할 때까지 그 시스템 콜에서 프로세스가 멈추어 있게 된다. ● block 될 수 있는 소켓 시스템 콜은 listen(), connect(), accept(), recv(), send(), read(), write(), recvfrom(), sendto(), close() 등이다. ● 일 대 일 통신을 하거나 프로그램이 한가지 작업만 하면 되는 경우는 blocking 모드로 프로그램을 작성할 수 있다. ▶ Non-blocking 모드 ● 소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없 는 경우라도 시스템 콜이 바로 리턴되어 응용 프로그램이 block되지 않게 하는 소켓 모드 ● 통신 상대가 여럿이거나 여러 가지 작업을 병행하려면 non-blocking 또는 비동기 모드를 사용하여야 한다. ● non-blocking 모드를 사용하는 경우에는 일반적으로 어떤 시스템 콜 이 성공적으로 실행될 때까지 계속 루프를 돌면서 확인하는 방법(폴링)을 사용한다. ● 유닉스에서는 fcntl() 시스템 콜을 사용하여 소켓을 non-blocking 모드 로 바꿀 수 있다. ▶ 비동기 모드 ● 소켓에서 어떤 I/O 변화가 발생하면 (데이터의 도착 등) 그 사실을 응 용 프로그램이 알 수 있도록 하여 그 때 원하는 동작을 할 수 있게 하는 모드 ● 전화에서 상대방과 통화할 수 없을 때 전화를 걸어 달라고 부탁하고 끊는 것과 유사하다. ● 소켓을 비동기 모드로 바꾸는 방법에는, select() 함수를 이용하는 방 법, 그리고 fcntl()를 사용하여 소켓을 signal-driven I/O 모드로 바꾸는 방 법이 있다. ● select()를 이용하는 방법은 I/O 변화가 발생할 수 있는 소켓 전체를 대상으로 select()를 호출해 두면 그 중 임의의 소켓에서 I/O 변화가 발생 되었을 때 select()문이 리턴되고 이 때 원하는 작업을 하는 방법이다. ● signal-driven I/O 방법은 특정 소켓에서 I/O 변화가 발생하였을 때 그 소켓이 SIGIO 시그널을 발생시키도록 하고 응용 프로그램에서는 이 시그 널을 받으면 필요한 작업을 하도록 하는 방법이다.
Synchronous vs AsynchronousThe send, receive, and reply operations may be synchronous or asynchronous. A synchronous operation blocks a process till the operation completes. An asynchronous operation is non-blocking and only initiates the operation. The caller could discover completion by polling, by software interrupt, or by waiting explicitly for completion later. (Does it make sense to have an RPC send not block?) An asynchronous operation needs to return a call/transaction id if the application needs to be later notified about the operation. At notification time, this id would be placed in some global location or passed as an argument. The notion of synchronous operations requires an understanding of what it means for an operation to complete. In the case of remote assignment, both the send and receive complete when the message has been delivered to the receiver. In the case of remote procedure call, the send, receive, and reply complete when the result has been delivered to the sender, assuming there is a return value. Otherwise, the send and receive complete when the procedure finishes execution. During the time the procedure is executing, the sender and receiver are in a rendezvous, as mentioned before. Note that synchronous/asynchronous implies blocking/not blocking but not vice versa, that is, not every blocking operation is synchronous and not every non blocking operation is asynchronous. For instance, a send that blocks till the receiver machine has received the message is blocking but not synchronous since the receiver process may not have received it. Similarly, we will see later a Xinu receive that is non-blocking but is not asynchronous. These definitions of synchronous/asynchronous operations are similar but not identical to the ones given in your text books, which tend to equate synchronous with blocking. Asynchronous message passing allows more parallelism. it can do some computation while the message is in transit. In a synchronous system, such parallelism can be achieved by forking a separate process for each concurrent send, but this approach incurs the cost of extra process management. This cost is typically bearable with lwps but not hwps. Asynchronous message passing introduces several problems. What happens if the message cannot be delivered? The process never waits for delivery of the message, and thus never hears about the error. Software interrupts could be used to report such errors. Another problem related to asynchronous communication is to do with buffering. If messages sent asynchronously are buffered in a space managed by the OS, then a process may fill this space by flooding the system with a large number of messages. |
'프로그래밍 > Etc' 카테고리의 다른 글
[Etc] VSGesture라는 프로그램을 아시나요? (2) | 2010.06.02 |
---|---|
[Etc] VC++ 개발자와 함께하는 Visual Studio 2010 세미나 후기 (0) | 2010.05.30 |
[Etc] 비주얼 2005 디버그 모드 브레이크 포인트 안걸리는 문제 (2) | 2010.03.08 |
[Etc] 라이브러리 추가 팁 (0) | 2009.11.28 |
[Etc] 게임 해킹, 아는 만큼 막을 수 있다. (0) | 2009.11.28 |