일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 가독성
- network
- 리펙토링
- refactoring
- register
- Public IP
- 명령어
- 코드 컴플릿
- TCP
- float
- L2 switch
- MMU
- 클린 코드
- Clean code
- physical address
- page
- CPU
- floating point
- ack
- private ip
- 공인 IP
- osi 7
- Code complete
- cache
- ALU
- 사설 IP
- L3 Router
- interrupt
- addressing mode
- Sector
- Today
- Total
목록interrupt (3)
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에 마다 처리 방식은 ..