2010-12-04 3 views
2

죄송합니다, 이것이이 질문에 적합한 장소인지 잘 모르겠습니다 만, 그렇지 않다면 사과하겠습니다. :)누군가가 이해할 수없는 운영체제 개념을 좀 도와 주실 수 있습니까? 인터럽트

저는 현재 운영체제 이론에서 모듈을 만들고 있는데, 저는 이것이 이해할 수없는 몇 가지 개념을 가지고 있습니다. 이것은 질문 할 수있는 적절한 곳이 될까요?

내 주요 질문은 인터럽트에 관한 것입니다. CPU가 인터럽트가 있음을 감지하면이 인터럽트가 발생한 곳을 찾아야한다는 것을 이해합니다. 내 이해는 다음과 같습니다. 누구에게이 말이 맞는지 말해 줄 수 있습니까? 내 지식의 몇 가지 차이점을 설명해주십시오.

CPU가 인터럽트가 발생한 곳을 감지하기 위해 모든 개체를 쿼리하여 원본을 식별 할 수 있지만 이러한 I/O 기반 질문에는 시간이 오래 걸릴 수 있습니다. 대신, 인터럽트 사이클을 사용하고 데이터 버스에서 인터럽트 식별자를 예상합니다. 그것이 8 비트 데이터 버스라면, 256 인터럽트 레벨 (즉, 2^8)이있다. (이유는 무엇입니까?)

그래서 가능한 모든 인터럽트 수준에 대해 인터럽트 서비스 루틴 (ISR)이 기록되고 프로세서에서 표준화 된 고정 위치 (인터럽트 벡터)의 테이블에 저장됩니다. 내 메모에 "주소를 알기 전에 위치를 알아야합니다"라고 표시됩니다 (의미는 무엇입니까?)

인터럽트주기의 일부로 수신 된 인터럽트 수준 식별자는 인터럽트 벡터에 대한 인덱스로 사용됩니다 이것 좀 내려주세요?). 내 이해 가치, 인터럽트 수준 식별자는 CPU로 전달되며 인터럽트 벡터를 가리 키도록 사용됩니다.

또한 인터럽트가 "서비스되는"경우는 무엇을 의미합니까?

대단히 감사합니다. 긴 단락으로 인해 유감스럽게 생각합니다. 나는이 부분의 많은 부분에 대해 조금 혼란스러워합니다!

답변

3

인터럽트 작업의 대부분은 CPU가 다른 장치 (예 : 패킷을받은 네트워크 카드)에 의해 인터럽트되도록 허용하는 것입니다. 이 유스 케이스를 먼저 이해하는 것이 더 쉽다는 것을 알았다.

네트워크 카드가 일부 데이터를받은 CPU에 알려야 할 때 CPU의 "인터럽트 핀"에 숫자를 보냅니다. 일반적으로 이는 8 비트 숫자입니다. 이 번호를 "인터럽트 수준"이라고합니다.

CPU는 인터럽트를 처리하기 위해 일부 코드로 점프 한 다음 원래대로 되돌릴 수있는 방법으로 만들어졌습니다. 이것은 기본 제공 하드웨어이므로 간단해야합니다. 각 인터럽트 수준을 호출 할 함수의 주소와 일치시키는 테이블이 있습니다. 이 기능을 "인터럽트 서비스 루틴"이라고합니다. 이 테이블의 위치는 테이블에서 조회하는 하드웨어이므로 표준화되어 있습니다 (주소가 칩에 하드 코드되어 있음).

인터럽트 서비스는 인터럽트와 관련된 코드를 실행하는 것을 의미합니다. 네트워크 카드의 경우 네트워크 카드에서 패킷을 읽고이를 메모리에 복사해야합니다 (아마, 네트워크 카드 자체의 메모리는 제한됩니다). 당신은 "인터럽트 사이클의 일부로 수신 된 인터럽트 레벨 식별자가 인터럽트 벡터에 대한 인덱스로 사용됩니다"라고 물어 봅니다. 이것은 우리가 방금 한 일을 말하는 또 다른 방법입니다. 카드의 신호 (인터럽트 레벨)는 CPU에서 테이블의 인덱스 ("인터럽트 벡터")로 사용됩니다. 거기에서, 그것은 실행할 코드의 주소를 찾는다; 이 코드는 네트워크 카드 용 장치 드라이버 (또는 OS)에 의해 설치됩니다.

ISR 함수가 반환되면 CPU는 인터럽트를 받았을 때와 같은 방식으로 레지스터를 다시 저장하므로 아무 일도 일어나지 않은 것처럼 실행을 재개 할 수 있습니다. 이를 생각하는 한 가지 방법은 인터럽트가 CPU가 한 번에 여러 프로그램 (프로그램과 네트워크 카드 드라이버)을 실행할 수있게하는 메커니즘이라는 것입니다.

인터럽트와 동일한 개념을 "소프트웨어 인터럽트"에도 사용할 수 있습니다.이 인터럽트는 CPU 외부에서 나오는 신호 대신 내부에서 오는 신호입니다.

0

글쎄, 확실히 귀하의 질문에 많은 질문이 있습니다. 그들 중 한 명에게 전화하게하십시오.

인터럽트는 서블릿이라고 말하고, OH HANG ON, 나는 개가 있어야합니다. 인터럽트가 완료되면 '작동하지 않습니다.'

내 바보 같은 경우에는 문을 긁적 거리는 개가 방해를 받았습니다. 나는 (내가 단어 서비스를 타이핑하는 도중에) 내가 한 일을 멈추고, 개를 내보내고 타이핑을 재개했다.

개 인터럽트 요청을 처리했습니다.