일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- refactoring
- TCP
- 공인 IP
- Clean code
- osi 7
- float
- 코드 컴플릿
- 클린 코드
- 사설 IP
- network
- register
- L2 switch
- 명령어
- 리펙토링
- Sector
- ALU
- 가독성
- ack
- page
- Public IP
- interrupt
- physical address
- cache
- floating point
- addressing mode
- Code complete
- L3 Router
- CPU
- private ip
- MMU
- Today
- Total
목록컴퓨터 구조/Interrupt (4)
Software Lab

Keyboard 같이 외부 입출력(I/O Devices) 장치에 의해 발생하는 external 인터럽트 과정을 살펴보자. 여러 I/O 장치들에서 동시다발로 인터럽트 요청이 발생 할 수 있다. 그래서 이런 요청들을 차례대로 제어하기 위해서는 PIC(Programmable Interrupt Controller) 장치가 필요하다. 메인보드의 South bridge 칩에 들어 있다. ① : Process A에서 Keyboard 데이터를 입력 받기 위해 getchar() 함수를 실행한다. getchar 함수 내부에는 system_call의 sys_read가 호출된다. 이때에는 Internal 인터럽트가 발생하고 Process A에서 OS로 Context Switching 된다. ② : Keyboard 데이터가 입..

exit 같은 system_call 함수가 호출할 때 발생하는 Internal 인터럽트 과정을 살펴보자. ① : Process A에서 system_call을 실행하기 위한 명령어들을 실행하게 된다. 어떤 종류의 system_call을 호출할 것인지는 eax 값으로 결정된다. 그림에서 왼쪽 아래 테이블은 eax 값에 해당하는 system call 종류를 나타낸다. sys_exit 실행하기 위해 eax에 0x01 값을 넣는다. 다음으로 int 0x80 명령어를 실행한다. ② : CPU는 발생한 인터럽트 번호와 IDTR(Interrupt Description Table Register) 값을 더한다. 더한 그 값은 OS의 ISR 함수 포인터가 저장된 메모리 주소이다. ③ : CPU는 이제 ISR의 함수 포인터..

Trap 인터럽트 중에서 0으로 나눌 때 발생하는 divide_error 인터럽트 과정을 살펴보자. ① : CPU가 Process A를 실행 중에 int a = 10 / 0 코드를 가져와서 처리하게 되었다. 그로 인해 0x00번 인터럽트(divide_error)가 발생하게 된다. ② : CPU는 발생한 인터럽트 번호와 IDTR(Interrupt Description Table Register) 값을 더한다. 더한 그 값은 OS의 ISR 함수 포인터가 저장된 메모리 주소이다. ③ : CPU는 이제 ISR의 함수 포인터를 가져와서 실행한다. 인터럽트 번호가 0x00이므로 divide_error를 실행할 것이다. divide_error에서는 Process A를 강제 종료시킬 것이다. OS에 마다 처리 방식은 ..

인터럽트는 3가지 종류가 있다. Trap : 예외 상황에 대한 인터럽트들이다. Divide error(0으로 나누었을 때), Page fault(memory에서 page를 못 찾을 때) 들이 있다. External : I/O 장치들이 발생시키는 인터럽트들로서 Hardware 인터럽트라고도 한다. Keyboard event, Mouse event, Timer 들이 있다. Internal : System call에 의해 발생하는 인터럽트로서 Software 인터럽트라고도 한다. 메모리에는 OS와 여러 프로세스가 올라가 있다. OS에는 인터럽트와 관련하여 IDT, ISR가 있다. IDT(Interrupt Description Table) : ISR의 함수 포인터가 인터럽트 번호순으로 저장된 Table이다. I..