2010-02-18 3 views
1

나는 웹 프로그래밍의 세계에서 왔으며 일반적으로 서버는 사용자가 필드에 입력하는 데이터를 사용할 수있게하는 지정된 방법 (get, post 등)을 통해 superglobal 변수를 설정합니다. 또 다른 방법은 AJAX를 사용하여 AJAX XMLhttpRequest 객체가 브라우저에서 알림을 받으면 시작하는 이벤트에 콜백 메소드를 등록하는 것입니다 (가정합니다 ...). 그래서 나는 시스템 프로그래머의 코드가 대리자와 상호 작용하여 사용자 입력에 응답하여 실행해야하거나 프로그래머가 "대기 중"프로세스를 직접 제어해야하는 일종의 디스패치 인터페이스가 있다면 내 질문에 맞을 것이라고 생각한다. 그리고 디스패치가있는 경우 특정 이벤트가 발생할 때까지 기다리는 OS에 루프 구조가 있습니까?OS 또는 시스템 프로그램이 사용자 입력을 어떻게 기다리는가?

저는 기본 프로그래밍 논리 클래스에 속하며 교수가 이와 같은 "정교한"질문에 대답하지 않기 때문에이 질문을 묻습니다. no이 예제는 입력이 사용자로부터 수신되지 않을 경우 루프가 오래되었거나과 순서를 반복한다 "무언가를"계속 것) 1 믿고 날 리드

//start 
    sentinel_val = 'stop'; 
    get user_input; 
while (user_input not equal to sentinel_val) 
    { 
     // do something. 
     get user_input; 
    } 
    //stop 

: 내 책은 같은 모호한 의사 코드 예제를 제공합니다 새로운 입력이 마술처럼 나타날 때까지 입력 한 다음 그 값이나 null 값으로 다시 반복합니다. 이 책은 프로그램이 이벤트 주도 입력으로부터 데이터를 얻는 방법을 전달하기 위해 파일에서 프라이밍 및 읽기의 예제를 사용하려고 시도한 것 같습니다.

나는

귀하의 get user_input 의사 기능은 종종 readLine 같은 것입니다 ... 내 이해를 바탕으로 :(

+4

나는 웃을 지 울 것인지 모르겠다. –

+0

+1 @Neil, 가끔은 내가 망각으로 downvoted되지 않고 쓰고 싶은 대답을 작성하는 방법이 있었으면 좋겠다. –

+0

@Carl 왜 시도하지 않습니까? 여기에 downvotes 볼 수 있습니다. –

답변

4

가장 낮은 레벨에서 컴퓨터 입력은 비동기 적입니다. "인터럽트"를 통해 발생합니다. 기본적으로 CPU 외부에있는 키보드 컨트롤러 (키보드 컨트롤러)는 " 이 데이터를 처리하고 동의합니다. " (이것은 복잡하지만 일반적 아이디어입니다). 그래서 CPU가 멈추고 키 스트로크를 잡아서 버퍼에 넣고 읽은 다음 인터럽트 이전의 작업을 계속합니다.

매우 비슷한 일이 인바운드 네트워크 트래픽 발생, 더 높은 수준에서 등, 디스크에서

읽기의 결과는, 당신이 사용하고있는 운영 체제 또는 프레임 워크에 의존 가져옵니다.

키보드 입력을 사용하면 차단 된 사용자 입력을 기다리는 프로세스 (기본적으로 응용 프로그램)가있을 수 있습니다. 이 "차단"은 컴퓨터가 기다리고 있다는 것을 의미하지는 않으며 대신 다른 프로세스를 실행할 수 있습니다. 그러나 키보드 결과가 나오면 기다리는 사람이 깨어납니다.

대기중인 프로세스의 관점에서 "get_next_character()"함수를 호출하고이 함수가 문자와 함께 반환되었습니다. 기타

솔직하게 말해서,이 모든 것들이 서로 어떻게 묶여 있는지는 매우 흥미롭고 이해하기 쉽습니다. :)

1

기본 설명을 혼란 스러워요. 즉, 데이터가 포함 읽을 때까지 기능이 차단된다는 것을 의미합니다 새로운 라인 문자

아래에서는 OS가 인터럽트를 사용합니다 (즉, 키보드를 일반적으로 다루지는 않지만 필요한 경우에만 해당). 사용자가 일부 키를 눌렀을 때 응답하게하려면 키보드 인터럽트가 발생합니다. 특별한 루틴으로 이동하기위한 실행 키보드의 데이터로 입력 버퍼를 채 웁니다. OS는 적절한 프로세스 (일반적으로 활성 프로세스)가 readLine 함수를 사용하여이 데이터에 액세스하도록 허용합니다.

거기에 더 많은 복잡성이 있지만 간단한보기입니다. 누군가가 더 나은 설명을한다면 나는 기꺼이 우월한 지식에 굴복 할 것입니다.

+0

감사합니다.이 답변을 통해 초기 전구 또는 진입 점이 제공되어보다 자세한 답변을 얻을 수있었습니다. –

2

OS는 하드웨어 이벤트 (인터럽트)에 의해 구동됩니다. OS는 인터럽트를 기다리지 않고 대신 CPU에 루프를 넣기위한 특수 명령을 실행합니다. 하드웨어 이벤트가 발생하면 해당 인터럽트가 호출됩니다.

1
It seems the book has tried to use the example of priming and reading from a file 
to convey how a program would get data from event driven input, no? 

예. 책의 내용입니다. 실제로 ... 유닉스 운영체제는 모든 장치의 모든 입출력을 이와 같이 보이도록 추상화한다는 아이디어 위에 세워졌습니다.

실제로 대부분의 운영 체제와 하드웨어는 저수준 데이터 읽기를 수행하고 운영 체제로 다시 제어를 되돌리기 위해 서브 루틴을 호출 할 수있는 인터럽트를 사용합니다.

또한 대부분의 시스템에서 많은 장치가 나머지 운영 체제와 독립적으로 작동하며 높은 수준의 API를 운영 체제에 제공합니다. 예를 들어, 컴퓨터 프로세스의 키보드 포트 (또는 더 좋은 예는 네트워크 카드)가 인터럽트되면 키보드 드라이버는 운영 체제에 다른 API를 제공합니다. 기기의 표준을 살펴보고 이러한 표준이 무엇인지 확인할 수 있습니다.예를 들어, 키보드 포트가 제공하는 API를 알고 싶다면 linix 배포판의 키보드 드라이버 소스 코드를 볼 수 있습니다.

관련 문제