2017-09-15 15 views
0

네트워크에서 대기중인 데이터를 제외하고 아무 것도 처리하지 않는 컴퓨터가 있다고 가정하고 네트워크에서 데이터를 수신 할 때 계산을 수행합니다.컴퓨터가 네트워크에서 데이터를 기다리는 프로세스로 전환 할 수 있다는 것을 어떻게 이해합니까?

지금 당장 나는 외에 정기적으로 데이터가 준비되었음을 나타내는 프로세서 레지스터를 확인한 다음 컴퓨팅을 수행하는 다른 방법이 없다고 생각합니다. 두건 네트워크 카드의 밑에 나의 이해에서 데이터를 받고, 기억에두고 그 자체로 cpu가 계산을 할 수있는 cpu 기록기에 쓴다. 다음에 주기적으로 프로세서가 물건을 계산할 것입니다. 실제로 일어나고있는 것에 대한 설명을 세부 사항 (하드웨어 및 OS)에서 작성할 수 있습니까? 이 질문은 나를 걱정스럽게합니다!

또한 자료를 볼 수있어서 기쁩니다.

+0

인터럽트 또는 폴링 특히 쉽게 나열 할 수있는 문서가 너무 많습니다. 주제가 너무 광범위하고 정보를 쉽게 이용할 수 있습니다. –

+0

참고 사항 [Wikipedia : Polling] (https://en.wikipedia.org/wiki/Polling_ (computer_science)) 및 [Wikipedia : Interrupt] (https://en.wikipedia.org/wiki/Interrupt) – xmojmr

답변

6

일부 데이터 레지스터를 주기적으로 확인하는 프로세서의 질문에서 설명한 방법이 사용되고 이라는 메시지가이라고합니다. 폴링은 구현이 간단하기 때문에 더 간단한 시스템에서 종종 사용되지만, 거기에 있거나 없을 수도있는 데이터를 확인하는 CPU 사이클을 낭비하는 단점이 있습니다.

실제로 최신 운영 체제에서는 이라는 CPU 하드웨어 기능을 사용하지만 OS의 스케줄러와 함께을 인터럽트합니다. 네트워크에서 데이터를 가져 오는 예제에서 프로그램은 네트워크에서 데이터가 수신 될 때까지 대기하는 일부 차단 읽기 호출을 사용합니다. 읽기 호출이 이루어지면 호출 프로그램은 완전히 실행을 멈추고 OS 스케줄러는 데이터가 수신 될 때까지 프로그램을 일시 중단 된 상태로 유지합니다.

(패킷이 수신 될 때까지) 실행을 멈추고 싶어하는 프로그램 신호는 종종 세마포 (semaphore) (또는 유사한 상호 배타 메커니즘)라고하는 소프트웨어 구조를 사용합니다. 그러나, 네트워킹 코드의 경우, 세마포어는 프로그래머에 의해 직접 액세스되지 않는다.

네트워크 카드가 패킷을 수신하면 네트워크 카드는 패킷을 어딘가에 RAM에 저장합니다. 이 작업이 완료되면 네트워크 카드가 CPU에 인터럽트를 트리거합니다. 인터럽트 (일반적으로)는 현재 실행중인 프로그램이 무엇이든간에 CPU가 실행을 멈추게하고 CPU는 네트워크 활동 처리와 관련된 커널 코드를 실행합니다. 이 경우 수신 된 패킷을 데이터 수신을 대기중인 프로그램으로 보냅니다.

마지막으로, 커널은 세마포어를 사용하여 패킷이 수신되었다는 신호를 보냅니다. 그런 다음 커널은 네트워크에서 데이터를 기다리는 프로그램을 "깨우기"위해 스케줄러를 갖습니다. 프로그램은 데이터를 처리 한 다음 네트워크에서 다음 데이터 세트를 기다릴 수 있습니다.

자세한 내용을 보려면 인터럽트, 일정 및 세마포를 읽는 것이 좋습니다. 이러한 기술은 단순한 네트워킹 그 이상의 의미로 사용됩니다. 비슷한 접근 방식으로 많은 다른 입출력 장치가 액세스됩니다.