글 수 83
예전에 하이텔 게제동 네트웍 게시판에 올렸던 글입니다.
제 목:[답변] 중첩이란 단어를 쓰는 이유... 관련자료:없음 [2547]
보낸이:유영천 (yuchi ) 2001-02-13 18:27 조회:274
동시에 여러개의 i/o를 처리하기 때문입니다.
영어단어 그대로 해석하자니 중첩이란 말이 되었는데 다중이란
표현을 사용했다면 약간 더 이해가 쉬웠을지도...
예를 들면 버클리 소켓의 recv()함수를 수행한다고 할때 100개의 소켓에
대해 동시에 recv()함수를 수행하려면 스레드 100개가 필요합니다.
overlapped(중첩) io 가 다른 점은 1개의 스레드만으로도 100개의 소켓에
대 동시 recv(물론 send나 기타 io도 포함)가 가능하다는 점입니다.
어떻게 가능한가?
디바이스 드라이버에 의존합니다.
네트워크 디바이스 드라이버는 몇개의 계층으로 나뉘는데 일반적인
소켓 api의 바로 하위 계층, 그러니까 드라이버로 치면 최상위 계
층에 위치한 것이 ndis protocol 드라이버입니다.
일단 랜카드나 기타 디바이스에 도착한 모든 패킷은 프로토콜 드라
이버 계층까지 올라옵니다.
WSASend,WSARead,ReadFile,WriteFile등 overlapped io를 지원하는 api로
recv등을 요청했다면 프로토콜 드라이버에 패킷을 받을 메모리를(실제 버
퍼 메모리는 유져프로그램쪽에서 할당) 할당해 놓고 io가 pending
(overlapped방식에서 error코드로 발생하는 IO_PENDING이 이것입니다)
되었음을 표시만 해둡니다.
네트웍 디바이스의 인터럽트에 의해 패킷이 프로토콜 드라이버까지
올라오면 여기서 pending된 io가 있는지 확인하고 있으면 해당 io
(소켓등)의 버퍼에 패킷을 채워주는 것입니다.
따라서 별도의 스레드가 필요없고 하드웨어 인터럽트에 의해 움직
이므로 추가로 cpu자원을 잡아먹지 않는것입니다.물론 동시에(실제
로 정말 동시는 아니지만) 복수의 io를 처리할 수 있구요.
제 목:[답변] 중첩이란 단어를 쓰는 이유... 관련자료:없음 [2547]
보낸이:유영천 (yuchi ) 2001-02-13 18:27 조회:274
동시에 여러개의 i/o를 처리하기 때문입니다.
영어단어 그대로 해석하자니 중첩이란 말이 되었는데 다중이란
표현을 사용했다면 약간 더 이해가 쉬웠을지도...
예를 들면 버클리 소켓의 recv()함수를 수행한다고 할때 100개의 소켓에
대해 동시에 recv()함수를 수행하려면 스레드 100개가 필요합니다.
overlapped(중첩) io 가 다른 점은 1개의 스레드만으로도 100개의 소켓에
대 동시 recv(물론 send나 기타 io도 포함)가 가능하다는 점입니다.
어떻게 가능한가?
디바이스 드라이버에 의존합니다.
네트워크 디바이스 드라이버는 몇개의 계층으로 나뉘는데 일반적인
소켓 api의 바로 하위 계층, 그러니까 드라이버로 치면 최상위 계
층에 위치한 것이 ndis protocol 드라이버입니다.
일단 랜카드나 기타 디바이스에 도착한 모든 패킷은 프로토콜 드라
이버 계층까지 올라옵니다.
WSASend,WSARead,ReadFile,WriteFile등 overlapped io를 지원하는 api로
recv등을 요청했다면 프로토콜 드라이버에 패킷을 받을 메모리를(실제 버
퍼 메모리는 유져프로그램쪽에서 할당) 할당해 놓고 io가 pending
(overlapped방식에서 error코드로 발생하는 IO_PENDING이 이것입니다)
되었음을 표시만 해둡니다.
네트웍 디바이스의 인터럽트에 의해 패킷이 프로토콜 드라이버까지
올라오면 여기서 pending된 io가 있는지 확인하고 있으면 해당 io
(소켓등)의 버퍼에 패킷을 채워주는 것입니다.
따라서 별도의 스레드가 필요없고 하드웨어 인터럽트에 의해 움직
이므로 추가로 cpu자원을 잡아먹지 않는것입니다.물론 동시에(실제
로 정말 동시는 아니지만) 복수의 io를 처리할 수 있구요.