2012-09-11 4 views
0

나는 최근에 읽을 것을 시작했다 리눅스 커널 개발와 나는 이다.-it it! 더 나은 내 질문을 이해하기 위해 책을 아래 발췌를 읽어 보시기 바랍니다 :창문에 인터럽트 컨텍스트가 있습니까?

다수의 인터럽트를 식별하고 커널은 처리하고 인터럽트에 대응하는 특정 인터럽트 핸들러를 실행 이 번호를 사용합니다. 예를 들어, 입력 할 때 키보드 컨트롤러는 키보드 버퍼에 새로운 데이터가 있다는 것을 시스템에 알려주기 위해 인터럽트를 발생시킵니다. 커널은 내가 가지고있는 지금

... 들어오는 인터럽트의 인터럽트 번호를 메모하고 올바른 인터럽트 handler.The이 핸들러가 키보드 데이터를 처리하고 키보드 컨트롤러가 더 많은 데이터에 대한 준비가되어 알 수 있습니다 인터럽트 실행 내 컴퓨터에 듀얼 부팅, 때로는 (사실, 많은) 내가 창문에 뭔가를 입력 할 때, 나는 내 자신이 그것을 호출하는 것을 발견했다. 밤 크롤러 모드. 이것은 타이핑 중이며 화면에 아무 것도 보지 못하며 잠시 후 전체 텍스트가 한 번에 깜박이며 아마 버퍼가 모든 것을 내뱉습니다.

이제 Linux에서 이런 일이 발생하지 않습니다. 그것은 인터럽트 컨텍스트이 리눅스에 존재하고 윈도우에이 인터럽트가 없기 때문입니까?

아직, Windows에 인터럽트 컨텍스트가 있는지 확실하지 않습니다. Google에서 그에 대한 관련 결과를 제공하지 않았습니다.

답변

0

모든 OS에는 인터럽트 컨텍스트가 있지만 CPU 아키텍처의 기능/제약 사항입니다. 기본적으로 이것은 컴퓨터 하드웨어에서 "일하는 방식"입니다. 다른 운영체제 (및 운영체제 내의 드라이버)는 반환 전에 인터럽트에서 수행 할 작업과 작업에 대해 다른 선택을합니다. 창 경험과 관련이 있거나 그렇지 않을 수 있습니다. 키 누름을 화면 출력으로 변환하는 데 관련된 많은 코드가 있으며 인터럽트 처리는 아주 작은 부분입니다.

+0

인터럽트 컨텍스트가 * 모든 * 아키텍처에 존재하므로 어떤 프로세스와도 관련이 없습니까? – Tanmay

0

숫자는 인터럽트를 식별하며 커널은이 번호를 사용하여 인터럽트를 처리하고 인터럽트에 응답하는 특정 인터럽트 처리기를 실행합니다. 예를 들어, 입력 할 때 키보드 컨트롤러는 키보드 버퍼에 새로운 데이터가 있음을 시스템에 알리기 위해 인터럽트를 실행합니다. 커널은 들어오는 인터럽트의 인터럽트 번호를 기록하고 올바른 인터럽트 핸들러를 실행합니다. 인터럽트 핸들러 키보드 데이터를 처리하고 키보드 컨트롤러에 더 많은 데이터가 준비되었음을 알립니다.

이것은 매우 잘 설명되지 않습니다. USB 키보드를 사용하면 상황이 달라질 수 있지만, 마더 보드의 "8042"호환 칩셋이 IRQ 라인에서 CPU로 신호를 보내고 PS 코드가 무엇이든간에 실행하는 구형 PS/2 연결에서 어떤 일이 일어나는지에 대해 논의하는 것 같습니다 는 인터럽트 테이블의 위치 9에있는 주소에 있습니다 (일반적으로 실제 메모리의 주소 0에서 시작하는 포인터의 배열입니다. 메모리에서 주소를 변경할 수는 있지만 마지막으로이 장치로 재생 한 PC는 여전히 < 1MB RAM이고 다른 메모리 레이아웃 모드를 사용함).

디스패치 프로세스는 커널과 아무런 관련이 없습니다. 하드웨어가 작동하는 방식입니다. 키보드 컨트롤러는 인터럽트를 생성하지 않도록 요청할 수있어 OS/드라이버 소프트웨어가 새 이벤트 데이터를 사용할 수 있는지 정기적으로 "폴링"할 수 있도록 허용하지만 실제로이를 사용하는 데는 미친 듯합니다.

여전히 인터럽트 테이블의 코드 주소는 을 커널 또는 키보드 드라이버으로 지정하고 커널/드라이버 코드는 keyboad 컨트롤러의 I/O 포트에서 키보드 이벤트 데이터를 읽습니다. 이러한 하드웨어 인터럽트 처리기의 주요 목표는 장치에서 데이터를 가져 와서 버퍼에 가능한 한 빨리 저장하는 것입니다. 인터럽트에서 처리가 진행되는 동안과 키보드 컨트롤러에서만 처리 할 수 ​​있기 때문에 한 번에 하나의 이벤트 - 다음 이벤트 전에 버퍼로 읽어 들여야합니다.

응용 프로그램 소프트웨어에 일종의 입력 신호를 제공하거나 응용 프로그램 소프트웨어가 키보드 입력을 더 많이 읽으려고 기다리는 것은 OS/드라이버의 책임입니다. 준비 "패션. 어떤 방법 으로든 응용 프로그램이 입력을 읽고 응답 할 시간을 가지면 예기치 않게 오랜 시간이 걸릴 수 있습니다. 추가 키 입력으로 인해 실행 시간이 오래 걸리는 복잡한 페이지 매김 알고리즘이 트리거 될 수 있습니다 , 또는 키 스트로크 (keystroke)로 인해 프로그램이 디스크로 스왑 된 코드를 실행하게됩니다 (위키피디아에서 "가상 메모리"를 확인하십시오).이 경우 하드 디스크가 프로그램의 일부를 메모리로 읽어 들인 후에야 프로그램이 실행될 수 있습니다 계속 실행할 수 있습니다. 키보드 움직임을 완료하는 데 오랜 시간이 걸리는 키보드 처리 코드를 설명 할 수있는 창 이동, 그래픽 클리핑 알고리즘 등과 관련된 수천 가지의 엣지 경우가 있습니다. 다른 키 입력이 발생하면 키보드 드라이버에서 그 버퍼는 느린/차단 처리가 완료된 후에 응용 프로그램에 의해서만 "인식"됩니다. 예를 들어 프로그램의 일부가 디스크에서 스왑 된 경우 나머지 부분의 키 스트로크를 처리 할 준비가되어있는 것처럼 버퍼에서 모든 키 입력으로 인한 처리가 훨씬 더 빨리 완료 될 수 있습니다.

Windows가 Linux보다 Windows에서 더 좋은 이유는 무엇입니까? 주로 운영 체제, 드라이버 및 응용 프로그램이 덜 leaner and meaner "... 덜 부 풀린 소프트웨어 (예 : C++ vs C# .NET), 낭비되는 메모리가 적기 때문에 스와핑 및 지연이 적기 때문입니다.

+0

나는 그렇지 않다는 것에 동의하지만, "더 가볍고 더 편한"운전자에 관한 종언은 그것을 뒷받침 할만한 것이나, 아니면 단지 FUD인가? 오히려 OP가 자신들의 설치를 엉망으로 만들었다 고 말하고 싶습니다. –

+0

@SamKuhmonen : 저는 운전 기사가 아닌 "OS, 드라이버 및 응용 프로그램"을 총체적으로 말했습니다. 그것은 무수한 것에 기초한 일반적인 관찰입니다. 다른 버전의 Linux 및 Windows를 실행할 수있는 최소 하드웨어 사양 만 고려하면됩니다. 라즈베리 파이 (Raspberry Pi) 및 이와 유사한 저렴한 소형 장치는 수년 동안 Linux를 실행할 수있을 정도로 강력했습니다. Windows는 비슷한 하드웨어에서 실행되지 않습니다. Windows Phone 제품은 하드웨어가 더 좋더라도 안드로이드 (Linux 기반)에 비해 종종 느려졌습니다. –

+0

@SamKuhmonen : C++, C#, Java 등으로 작성된 코드의 실전 비교를 통해 여러 웹 사이트를 찾을 수 있습니다. http://benchmarksgame.alioth.debian.org/ - 사람들이 가상 머신을 사용하는 소프트웨어 개발 환경을 장려함으로써 Windows는 더 많은 비 대한 소프트웨어로 끝났습니다. FUD를 나에게 잘 생각한다면, 나는 그것을 명백하게 생각한다. –

관련 문제