2012-06-15 2 views
0

하드 디스크 데이터가 DMA를 사용하여 주 메모리로 전송된다는 것을 알았지 만 네트워크 스택 데이터는 DMA를 사용할 수 없으며 데이터는 프로세서를 통과해야합니다. 사실입니까? 그렇다면이를 피하는 방법은 무엇입니까? 프로세서를 통해 데이터를 전송하는 것이 실제로 비효율적이지 않습니까?내 컴퓨터의 네트워크 스택에서 DMA를 사용합니까?

+0

어디서 어떻게 알게 되었습니까? –

답변

1

대부분의 최신 네트워크 카드 또는 하드웨어는 데이터 전송에도 DMA를 사용하지만 CPU가 사용자 응용 프로그램에서 오는 대부분의 데이터를 네트워크에서 처리해야하는 데이터 카드는 (예를 들어, TCP 패킷과 이더넷 프레임의 형태로) 기대합니다. 이 처리는 CPU가 데이터를 전송하는 데 사용되는 다양한 네트워크 프로토콜을 구현하므로 CPU가 수행해야합니다.

부수적으로 하드 드라이브에 대해서도 마찬가지입니다. DMA가 대용량의 데이터 블록을 RAM에서 하드 디스크로 전송하는 데 사용되지만, 대부분의 경우 CPU는 이러한 데이터 블록이 올바른 위치에 배치되고 올바른 파일 시스템 유형으로 포맷되는지 확인해야합니다.

2

사실입니까?

아니요! 네트워크 장치는 이러한 용도로 특별히 할당 된 메모리 버퍼로 DMA를 전송합니다. 네트워크 IO를위한 DMA는 PCI 버스가 등장한 1990 년대 초반부터 x86 세계에서 일반적인 규칙이었습니다.

프로세서를 통해 데이터를 전송하는 것이 실제로 비효율적이지 않습니까?

예, 매우 비효율적입니다. 초기화 후에 코어가 최신 네트워크 카드와 직접 상호 작용하는 유일한 시간은 "전송 초인종"신호입니다. 이 초인종은 새로운 패킷을 전송할 메모리를 찾기 위해 카드에 알려주는 단독 쓰기 작업입니다. 코어 장치와 네트워크 장치 간의 다른 모든 상호 작용은 메모리를 통해 간접적으로 발생합니다.