인터럽트(Interrupts)
인터럽트는 프로세서 최적화의 향상을 제공함.
- 대부분의 입출력 장치는 프로세서보다 느림.
- 프로세서는 장치를 기다리기 위해 반드시 일시정지함.
- 프로세서의 사용이 낭비됨.
Interrupt Processing
HW : 장치 컨트롤러 또는 다른 시스템 하드웨어가 인터럽트 이슈를 발생시킴 -> 프로세서는 현재 명령의 실행을 끝냄 -> 프로세서는 인터럽트 인식 신호를 보냄 -> 프로세서는 PSW와 PC의 컨트롤 스택에 push함 -> 프로세서는 인터럽트에 기반한 새 PC value를 load함
SW : 프로세스 상태 정보를 저장함 -> 프로세스 인터럽트 -> 프로세스 상태 정보를 다시 저장함 -> old PSW와 PC를 재저장함
인터럽트와 예외(Interrupts and Exception)
인터럽트의 두가지 종류임.
Interrupts - 비동기식 인터럽트 / 다른 하드웨어 디바이스에 의해 발생함 / 외부 인터럽트 / 현재 명령은 완료
Exception - 동기식 인터럽트 / CPU에 의해 발생함 / divied by zero , segmentation faults 등 / 시스템 콜을 포함함(내부예외) / 현재 명령이 완료되지 않을 수 있음
다양한 인터럽트
Sequential Interrupt Processing - 인터럽트가 실행되는 동안 인터럽트 발생이 불가능함 , 프로세서는 어떤 새로운 인터럽트 요청 신호를 무시함 -> 상대적인 우선순위를 고려하지 않는다는 단점이 있음
Nested Interrupt Processing - 인터럽트들의 우선순위를 정의함 , 낮은 우선순위의 인터럽트 서비스 루틴이 진행되는 동안 높은 순위의 인터럽트가 실행되는 것을 허락함
메모리 계급도

목적 - 높은 레벨 메모리에선 속도를 , 낮은 레벨 메모리에선 용량과 비용의 이점을 챙기는 가상 메모리 기술을 제공하기 위해서이다.
- 메모리 계층도와 두가지 종류의 프로그램 지역성 사이의 완벽한 매치로 최적화가 이루어진다.
시간 지역성 -> 항목이 참조된다면 , 다시 재 참조되는 경향이 있다.
공간 지역성 -> 항목이 참조된다면 , 참조된 항목의 주소는 다시 재 참조되는 경향이 있다.
캐시(Cache)
목표 - SRAM의 접근시간과, DRAM의 용량과 비용을 갖는 가상 메모리 기술을 제공하기 위해서이다.
Upper Level : SRAM ( small , fast , expensive )
Lower Level : DRAM ( large , slow , cheap )
추가적인 이점 - 프로세서에 의해 소비되는 메모리 bandwidth의 감소 , ISA의 변화가 요구되지 않음
Hit - 접근된 데이터가 upper level 안에서 발견될 때
Miss - 접근된 데이터가 lower level 안에서만 발견될 때
캐시 Mapping Function
- 캐시의 블록의 위치가 어떤 공간을 점유할 것인지 결정하는 기능
Direct Mapped Mapping
- 메인메모리 안에 있는 각 메모리를 캐시 안에 single line으로 할당한다. / 대체 정책이 없음
N-way Set Associative Mapping
- S는 sets의 수 , B는 블락의 크기 , N은 각 set 안에 있는 캐시 블락의 수 / Direct-mapped 캐시는 필수적으로 1-way set-associative caches임
Fully Associative Mapping
캐시 Write
Write-through - 항상 캐시와 메인메모리 모두에 데이터를 write한다. / 간단하나 느리고, 메모리 트래픽을 증가시킨다.(write buffer가 필요하기 때문)
Write-back - 캐시 안에만 오직 데이터를 write 하고, 메인 메모리에는 dirty block으로 대체될 때 업데이트한다.(dirty bit이 요구된다) / 빠르나 실행하기 복잡하고, 일관성 문제를 야기한다.
I/O Address Space
입출력 장치들이 가지는 주소들은 Port-Mapped I/O와 Memory-Mapped I/O가 있다.
Port-Mapped I/O - 입출력 장치는 I/O에 할당된 분리된 주소 공간을 가진다. / 추가 입출력 명령은 bus line이 적절한 장치와 제어를 선택하게 만든다.
Memory-mapped I/O - 메모리와 입출력 장치의 주소를 같은 공간을 사용한다. / 일반적인 명령어에 의해서 사용된다.(load,store)
두 메소드는 함께 실행될 수 있음.
Polling I/O
호스트는 I/O 모듈에 읽기 명령을 보낸다 -> 컨트롤러는 명령 레지스터를 읽고 , read 명령을 실행한다 -> 호스트는 작업이 끝날때까지 상태 체크 루프를 반복적으로 실행한다 -> 호스트는 I/O 모듈로부터 읽고 메모리 안에 내용을 작성한다. ( 만약 CPU가 다른 작업으로 스위치한다면 , 데이터가 손실될 수 있다. )
Interrupt-Driven I/O
입출력 명령에서 모듈로 CPU에서 이슈가 발생하면 , 다른 생산적인 작업으로 이동하는 것이다.
- 입출력 모듈은 프로세서가 인터럽트를 다루기 위해 실행될 것이다. / 여전히 CPU의 큰 데이터를 다루기 위해선 적극적인 개입이 필요하다.
DMA(Direct Memory Access)
- 큰 데이터를 처리하기 위해 더 효율적인 기술이 요구된다. / CPU가 데이터를 입출력장치와 메모리 사이에 직접적으로 전송하기 위해 우회하는 기술.
DMA로 명령 block의 이슈가 발생한다 -> 전송이 끝날 때 , DMA 모듈은 신호 완료를 위해서 인터럽트를 보낸다.