네트워크 프로그래밍의 I/O 모델

2454 단어
성명: 전재 출처, 개인 홈페이지:supiccc

I/O 재사용


커널에서 프로세스가 지정한 입출력 조건이 하나 이상 준비된 것을 발견하면 프로세스에 알립니다.

I/O 재사용이 필요한 이유

  • 고객이 여러 개의 설명자를 처리해야 할 때
  • 한 고객이 여러 개의 인터페이스를 동시에 처리해야 할 때
  • TCP가 감청 세트 인터페이스와 이미 연결된 세트 인터페이스를 동시에 처리할 때;
  • 서버가 TCP와 UDP를 모두 처리해야 하는 경우;
  • 한 서버가 여러 서비스 또는 여러 프로토콜을 처리해야 할 때

  • 시작 전 주의 사항


    하나의 입력 작업은 두 단계로 나뉜다. 하나는 데이터 준비를 기다리는 단계이고, 하나는 내부 핵에서 프로세스로 데이터를 복사하는 단계이다.

    다섯 가지 입출력 모델


    입출력 차단(상용) 모델


    프로세스가 recvfrom () 을 호출하여 데이터를 읽으면, 프로세스는 recvfrom (시스템 호출) 을 호출하기 시작해서 돌아오는 시간 동안 막힙니다. 성공적으로 되돌아와야만 프로세스가 데이터를 처리할 수 있습니다.

    비차단 I/O 모델


    프로세스가 recvfrom을 호출할 때 데이터 보고가 준비되지 않으면 커널이 바로 EWOULDBLOCK 오류로 되돌아옵니다. 응용 프로세스는 끊임없이 recvfrom를 호출합니다. 이 프로세스를 폴링(polling)이라고 합니다. 이렇게 하면 CPU 시간이 많이 소모됩니다. 보통 특정한 기능을 제공하는 시스템에서만 가능합니다.

    입출력 재사용 모델


    프로세스가 select (poll) 를 호출하고 이 두 시스템이 호출하는 것을 막습니다.
    예를 들어 select(poll)와recvfrom을 사용할 때, select가 플러그인 인터페이스로 이 조건을 읽을 수 있을 때,recvfrom를 호출하여 읽은 데이터를 프로세스 버퍼로 복사합니다.
    여러 개의 설명자가 준비될 때까지 기다릴 수 있다는 장점이 있다.다중 스레드에서 입출력 차단을 사용하는 것과 유사합니다.

    신호 제어 I/O 모델


    신호를 사용하여 커널이 설명자가 준비되었을 때 SICIO 신호 알림 프로세스를 보냅니다.

    비동기식 입출력 모델


    프로세스는 커널이 어떤 조작을 시작한다고 알려주면 되돌아오고 커널이 전체 조작을 진행하며 조작이 끝난 후에 프로세스에 알려줍니다!(POSIX 비동기식 I/O 함수는 aio_ 또는 lio_로 시작), 막히지 않습니다!

    비교하다


    앞의 네 가지 모델은 주로 1단계(데이터 준비 대기)와 다르고 2단계는 읽기 과정, 반 막힌다.
    그래서 앞의 네 가지 모델은 동기화 I/O 모델이라고 불리는데 그 진정한 I/O 작업은 프로세스를 막는다!

    I/O 재사용:select 함수와poll 함수


    프로세스가 여러 이벤트 중 하나를 기다리는 프로세스를 표시하고, 한 개 이상의 이벤트가 발생하거나 지정된 시간이 지나야만 깨울 수 있습니다!
    #include 
    #include 
    int select(int maxfdp1, fd_set * readset, fd_set * writeset,
        fd_set * exceptset, const struct timeval * timeout);
                                     : ,0- ,-1- 
    
    #include 
    int poll(struct pollfd * fdarra, unsigned long nfds, int timeout);
                                     : ,0- ,-1- 
    

    참고 자료


    UNIX 네트워크 프로그래밍 1권: Interface API(3판)

    좋은 웹페이지 즐겨찾기