<인터럽트 처리>
인터럽트란? ‘어떤 동작을 중간에 방해하다’ 라는 의미
인터럽트가 발생하면 제어권이인터럽트 서비스 루틴(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번에 있는 함수들)
'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글
리눅스 커널 2.4 분석하기(소스인사이트에 커널소스추가) (4) | 2012.10.10 |
---|---|
리눅스 커널 2.4 분석하기(vmware를 통해 윈도우에 리눅스커널 빌드) (4) | 2012.10.10 |
MS Word에서 글을 작성하고 블로그로 보내기. (4) | 2012.10.10 |
2012.10.09 리눅스 커널 (4) | 2012.10.10 |
[Linux Kernel]2012/10/09 작업일지(VMware에서 Linux 파일 공유 설치.) - by. 이창현 (9) | 2012.10.09 |
taglist(page134) 다운로드 주소 (1) | 2012.10.04 |
tar 와 gzip 그리고 bzip (2) | 2012.10.04 |
허겁지겁 퇴근하지 말고, (2) | 2012.10.02 |