July 11, 2022
컴퓨터의 두 가지 주요 작업은 계산과 입출력 작업입니다. 이 중 입출력 작업이 더 중요한 경우가 많습니다. 이 글에서는 운영체제의 입출력 서브시스템의 구조를 살펴봅니다.
CPU는 명령어를 끝내고 다음 명령을 수행하기 전 항상 이 인터럽트 요청 라인을 검사합니다.
예기치 않은 상황을 만났을 때, 현재보다 더 중요한 일이 발생했을 때 인터럽트가 발생합니다.
외부 인터럽트는 전원 이상, 기계착오, 외부신호, 입출력 등 외부적인 요인으로 발생합니다.
내부 인터럽트는 Trap이라고 부르며, 0나누기, 오버플로우 등 잘못된 명령이나 데이터를 사용할 때 발생합니다.
소프트웨어 인터럽트는 요청에 의해 발생합니다. (SVC 인터럽트)
풀링은 사용자가 명령어를 사용해 입력핀의 값을 계속읽어 변화를 알아내는 방식입니다.
인터럽트 요청 플래그를 차례로 비교하며 인터럽트 핸들러 루틴을 수행합니다.
인터럽트 방식은 MCU 자체가 하드웨어적 변화를 체크하여 변화 시에만 일정한 동작을 합니다.
하드웨어로 지원을 받아야한다는 제약이 있지만 신속한 대응이 가능합니다.
자주 사용될 자료의 복사본을 저장하는 빠른 메모리 영역입니다.
복사를 한다는 점에서 버퍼와의 차이가 있습니다.
자주 사용될 자료를 예측하기 위해, Hit rate를 높이기 위해 지역성 원리를 사용합니다.
최근 참조된 주소의 내용은 다시 참조되는 특성을 시간 지역성이라 합니다.
참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성을 공간 지역성이라 합니다.
캐시의 데이터를 빠르게 참조하기 위해 태그를 붙입니다. 이 때 태그의 묶음을 캐싱라인이라 합니다.
종류로는 대표적으로 Fully Associative, Set Associative, Direct Map 세 가지가 있습니다.
참고: https://gofo-coding.tistory.com/entry/5-Set-Associative-Mapping