컴퓨터 문서를 읽다 보면 운영체제 뿐만 아니라 여러 부가적인 요소에서 동기화와 비동기화에 관한 내용이
아주 아주 많이 나온다.
하나의 용어로 완벽하게 설명하기가 좀 어려워서 I/O 동기화 방식과 비동기화 방식을 접하게되어서
이와 관련하여서 내용을 정리하고자 한다.
이와 관련해서 설명하기 전에 블로킹[Blocking] 함수에 관해서 알아 보고자 한다.
소켓 프로그래밍을 만들면서 recv 함수를 사용하면서 블로킹 함수로서 사용 하였다.
* 물론 블로킹 함수를 사용할지 말지를 선택하는 것은, 어떠한 프로그램이냐에 따라 다르게 선택해야한다.
* 공격 payload를 작성할 때는 블로킹 함수를 사용 했다.
블로킹 함수는 한번 호출되고 나서 해당 역할을 완료 될 때까지 return 하지 않고 기다리는 것이다.
즉 해당 코드를 실행하고 있는 쓰레드는 계속 return이 되기를 대기하는 상태가 되는 것이다.
위와 같이 `블로킹 함수를 사용하면 동기화 I/O를 구현할 수있다` 라고 말한다. 의미를 생각해보자.
--> 완료 후 다른 일을 실행 하는 것
동기화라고 하면 언제 끝나는지를 알 수있다는 의미가 있다고 생각된다. 이와 관련해서도 Thread 동기화를 생각해봐도
시작과 끝을 알 수있다는 개념이 포홤되어 있다고 생각된다.
그러면 항상 동기화는 좋기만 할까? 라는 고민을 하게 되었다. 그러면 비동기식은 왜 사용되는 걸까?
비동기식 I/O를 살펴보면 비동기식이 필요한 경우의 예를 동영상 플레이를 이용해서 설명한다.
아프리카 TV를 보면서 항상 버퍼링에 고통받는데.. 이를 생각하면서 이해를 했다.
위와 같이 동기식으로 즉 블로킹 함수를 사용해서 데이터 송/수신을 하고 영상을 보게 될 경우, 저러한 부분에서 버퍼링이 발생한다.
반면 비동기식의 경우에는 논 블로킹 함수를 사용해서 함수를 호출 하고나서, 지속적으로 데이터를 수신하며서 영상을 제공 한다.
이렇게 될 경우 버퍼링의 문제가 상당수 해소 될 수있다.
데이터 송수신[I/O]는 CPU와 거의 독립적으로 운영된다. 그렇기 때문에 CPU는 처음 recv 함수를 호출 후, 데이터를 기다리지 않고 return을 하게 된다.
그러면 I/O는 계속적으로 동작하게된다. 그 후 영상 플레이어를 작동하면 버퍼링의 문제를 해결 할 수있다.
[출처] 뇌를 자극하는 윈도우즈 시스템 프로그래밍
'학부_대학원 > 운영체제' 카테고리의 다른 글
프로세스간 통신 IPC - Shared Mem (0) | 2016.08.10 |
---|---|
캐시[Cache]란? (0) | 2016.08.10 |
System Bus[버스란?] (0) | 2016.08.08 |
캐시 쓰기 정책 (0) | 2016.08.04 |
TLB[Traslation Lookaside Buffer] (0) | 2016.08.02 |