본문 바로가기

프로그래밍/ 리눅스

I/O 모델 종류..

I/O 멀티 플렉싱 (레벨 트리거)

1개의 프로세스로 여러 파일 디스크립터를 감시 한다.

select와 poll이 있다.

 

시그널 기반 I/O (에지트리거)

입력 데이터가 있거나 지정된 fd에 기록할수 있는 상태일때 커널에서 시그널을 전송 한다.

select와 poll는 감시수가 많을수록 느려지지만 시그널은 감시수가 많을수록 월등한 성능 개선 효과가 있다.

 

epoll

epoll도 하나의 프로세스로 여러 fd의 i/o 를 감시하지만 시그널 기반 i/o와 감시해야할 fd가 많을 때 더 좋은 성능을 제공한다.

 

epoll은 시그널 기반 i/o보다 장점이 많다.

1. 시그널 처리라는 복잡한 작업 필요 없음

2. 감시하려는 이벤트 종류를 지정 가능

3. 레벨, 에지 트리거 통지중 어느 방식을 사용 할 것인지 선택 가능.

4. 시그널보다 이식성이 좋음.

 

레벨 트리거

블로킹하지 않고 i/o시스템 호출을 수행 할 수 있도록 fd가 준비된 경우

fd가 준비되었으면 i/o를 수행 결과에 따라 fd에 i/o를 수행하는 동작을 반복 할 수 있다.

 

에지 트리거

최근 감시 이후 fd에 i/o활동이 발생한 경우

i/o 이벤트가 발생한 경우에만 통지를 받음.

그러인해 통지를 받고 적절히 i/o를 수행하지 않으면 일부 i/o를 수행할 기회를 놓칠 수 있다.

에지 트리거를 쓸때는 fd를 블로킹 방식보다는 비블로킹 방식으로 쓰는게 더 좋다. 이렇게 하면 i/o이벤트를 받은 응용 프로그램은 read,write같은 EAGAIN이나 EWOULDBLOCK등 에러를 발생시키며 실패할때까지 I/O를 반복한다.

 

 

 

'프로그래밍 > 리눅스' 카테고리의 다른 글

I/O - poll  (0) 2013.03.25
I/O - select  (0) 2013.03.24
프로세스  (0) 2013.03.24
파일디스크립터..  (0) 2013.03.24
소켓 : 유닉스 도메인  (0) 2013.03.20