본문 바로가기

학부_대학원/운영체제

동기화 vs 비동기화

SMALL

컴퓨터 문서를 읽다 보면 운영체제 뿐만 아니라 여러 부가적인 요소에서 동기화비동기화에 관한 내용이

아주 아주 많이 나온다.

하나의 용어로 완벽하게 설명하기가 좀 어려워서 I/O 동기화 방식비동기화 방식을 접하게되어서

이와 관련하여서 내용을 정리하고자 한다.


이와 관련해서 설명하기 전에 블로킹[Blocking] 함수에 관해서 알아 보고자 한다.

소켓 프로그래밍을 만들면서 recv 함수를 사용하면서 블로킹 함수로서 사용 하였다. 

* 물론 블로킹 함수를 사용할지 말지를 선택하는 것은, 어떠한 프로그램이냐에 따라 다르게 선택해야한다.

* 공격 payload를 작성할 때는 블로킹 함수를 사용 했다.

블로킹 함수는 한번 호출되고 나서 해당 역할을 완료 될 때까지 return 하지 않고 기다리는 것이다.

즉 해당 코드를 실행하고 있는 쓰레드는 계속 return이 되기를 대기하는 상태가 되는 것이다.

위와 같이 `블로킹 함수를 사용하면 동기화 I/O를 구현할 수있다` 라고 말한다. 의미를 생각해보자.

--> 완료 후 다른 일을 실행 하는 것 

동기화라고 하면 언제 끝나는지를 알 수있다는 의미가 있다고 생각된다. 이와 관련해서도 Thread 동기화를 생각해봐도

시작과 끝을 알 수있다는 개념이 포홤되어 있다고 생각된다.

그러면 항상 동기화는 좋기만 할까? 라는 고민을 하게 되었다. 그러면 비동기식은 왜 사용되는 걸까?

비동기식 I/O를 살펴보면 비동기식이 필요한 경우의 예를 동영상 플레이를 이용해서 설명한다.

아프리카 TV를 보면서 항상 버퍼링에 고통받는데.. 이를 생각하면서 이해를 했다.

위와 같이 동기식으로 즉 블로킹 함수를 사용해서 데이터 송/수신을 하고 영상을 보게 될 경우, 저러한 부분에서 버퍼링이 발생한다.

반면 비동기식의 경우에는 논 블로킹 함수를 사용해서 함수를 호출 하고나서, 지속적으로 데이터를 수신하며서 영상을 제공 한다.

이렇게 될 경우 버퍼링의 문제가 상당수 해소 될 수있다.

데이터 송수신[I/O]는 CPU와 거의 독립적으로 운영된다. 그렇기 때문에 CPU는 처음 recv 함수를 호출 후, 데이터를 기다리지 않고 return을 하게 된다.

그러면 I/O는 계속적으로 동작하게된다. 그 후 영상 플레이어를 작동하면 버퍼링의 문제를 해결 할 수있다.
















[출처] 뇌를 자극하는 윈도우즈 시스템 프로그래밍

LIST

'학부_대학원 > 운영체제' 카테고리의 다른 글

프로세스간 통신 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