본문 바로가기
코스웨어/12년 내장형하드웨어

20121009 오늘 수업내용 - 이동혁

by 알 수 없는 사용자 2012. 10. 9.
728x90
반응형




<인터럽트 처리>

인터럽트란? ‘어떤 동작을 중간에 방해하다라는 의미

인터럽트가 발생하면 제어권이인터럽트 서비스 루틴(ISR, Interrupt Service Routine)으로 넘어간다.

인터럽트가 발생시 인터럽트 서비스 루틴에 의해서 어떤 코드가 수행되는데, 각 운영체제마다 시스템 호출을 위한 인터럽트 번호가 다르다.(DOS 0x21, 윈도우NT 0x2E, 리눅스는 0x80)

운영체제는 부팅 시에 각 인터럽트가 발생했을 때, 실행할 함수들과 함수들의 위치를 기록한 테이블 IDT(Interrupt Descriptor Table)를 작성한다.

일종의 벡터테이블과 비슷하다. (벡터테이블이란 해당하는 인터럽트가 발생 시에 실행할 함수들의 주소를 가지고 있는 표를 말한다.)

인텔 계열의 CPU에서 인터럽트를 사용하려면 ‘INT(int) 숫자으로 한다. 예를 들면 리눅스는  0x80 을 사용하기 때문에, int 80h 로 쓰면 된다.

IDT의 크기는 1024byte이고, IDT는 함수의 주소를 가지고 있으니깐 포인터이고 포인터의 크기는 4byte, 256개의 인터럽트 처리 함수가 등록 가능하다.

 

<IDT와 리눅스 시스템 호출>

인터럽트 번호 분류[ 3-1] (0~19번까지는 건들 수 없다.)



 

 

인터럽트 번호에 할당된 함수[ 3-2] (벡터테이블에서 함수로 점프하기 위한 조건)




인터럽트 CPU에서 인터럽트가 발생했을 때 참조할 IDT 테이블은

해당커널/arch/i386/kernel/cpu/common.c’ cpu_init() 함수의 load_idt(&idt_descr); 에서 등록하고, 각 인터럽트 번호에 할당되는 함수들은 해당커널/arch/i386/kernel/traps.c’ 에서 확인가능

*인터럽트 중에 하드웨어 인터럽트 : 인터럽트

*소프트웨어 인터럽트 : 트랩

인텔 CPU는 인터럽트 호출에 인터럽트 게이트디스크립터, 트랩 게이트디스크립터, 테스크게이트디스크립터를 사용

DPL 0번이면 커널 공간의 특권 레벨이라 건드릴 수 없고, 시스템 게이트는사용자가 사용할 수 있어야 하므로 사용자 공간의 특권 레벨과 같은 3이다.

누군가 시스템 호출을 하면 인터럽트 128(0x80) system_call( ) 함수가 호출된다.(MANPAGE SECTION 2번에 있는 함수들)

 










728x90