1.2.1 Interrupts 처음 도입부만 정리함..
📖 책 내용 해석해보기
책 내용
입출력(I/O)을 수행하는 프로그램 생각해보자. 입출력 동작을 시작하기 위해 장치 드라이버는 장치 컨트롤러에 있는 적당한 레지스터를 로드한다. 그리고 장치 컨트롤러는 무슨 액션을 취해야할지 결정하기 위해 이 레지스터들의 내용을 조사한다. 컨트롤러는 장치에서 그것의 로컬 버퍼로 데이터를 전송한다. 데이터 전송이 끝나면, 장치 컨트롤러는 장치 드라이버에게 그것의 동작이 끝났음을 알린다. 장치 드라이버는 그 때 운영체제의 다른 부분에 통제권을 준다. 만약 그 동작이 읽는 거라면 데이터 또는 데이터의 포인터를 리턴하면서 말이다. 다른 동작일 때에는 장치 드라이버는 상태 정보를 리턴한다. 예를들면 "성공적으로 읽음" 또는 "장치가 바쁨" 과 같은 정보이다. 그런데 컨트롤러는 장치 드라이버에게 동작이 끝났음을 어떻게 알릴까? 이것은 interrupt를 통해 수행된다.
책 내용 정리
- 장치를 통해 입력이 이루어진다.
- 장치 드라이버는 장치 컨트롤러가 입력에 대해 행동을 취할 수 있도록 한다.
- 장치 컨트롤러는 버퍼로 입력 데이터를 전송한다.
- 장치 컨트롤러는 장치 드라이버에게 전송이 끝났음을 알린다.
- 이 때 컨트롤러가 드라이버에 알리기 위해 사용하는 것이 interrupt이다.
📖 이해 안가는 부분 공부
버스와 컴퓨터 아키텍처 구조

PCI bus의 역할
- 컴퓨터 내부의 장치들이 서로 소통을 할 수 있도록 데이터 전송의 길 역할을 해줌
장치 컨트롤러의 역할
- 장치마다 다른 프로토콜의 bus 규격을 가지는데 이 bus간의 소통을 위해
- 여러개 연결된 장치의 데이터를 보내기 위해
- 효율적인 데이터 전송을 위해
장치 드라이버와 장치 컨트롤러의 연결 구조

장치 드라이버란?
- 운영체제가 각각의 장치에 접근할 수 있도록 인터페이스 역할을 하는 소프트웨어
장치 소통 과정

- 장치 드라이버는 디스크 데이터를 주소가 X인 버퍼로 전달하라는 명령을 받는다.
- 장치 드라이버는 디스크 컨트롤러에게 C bytes를 디스크에서 주소 X인 버퍼로 전달하라고 명령한다.
- 디스크 컨트롤러는 DMA(메모리 직접 참조) 전송을 시작한다.
- 디스크 컨트롤러는 각각의 바이트를 DMA 컨트롤러에 보낸다.
- DMA 컨트롤러는 바이트들을 주소가 X인 버퍼에 보낸다. 이 때 메모리 주소가 증가하면서 C는 0이 될 때까지 감소하면서 보낸다.
- C가 0이되면, DMA는 CPU에게 인터럽트를 걸어 전송이 완료됐다고 신호를 보낸다.
인터럽트
- CPU가 프로그램을 실행하는 도중, 입출력 장치로부터의 처리 등 예외상황이 발생했을 때 CPU에게 알려 CPU가 처리할 수 있도록 하는 것이다.
입출력 버퍼
- CPU와 보조기억장치 사이에서 사용되는 임시 저장 공간
- 보조기억장치는 CPU에 비해 속도가 매우 느린데 여기서 발생하는 효율성 문제를 해결하기 위해 존재
- 버퍼에 쌓아뒀다가 한번에 CPU가 처리하도록 하는 식으로 효율성 문제를 해결한다.
📖 참고 글
장치 컨트롤러, 장치 드라이버에 대해 잘 설명되어 있는 글
https://melonicedlatte.com/computerarchitecture/2020/01/01/234600.html
📖 읽어볼 글
컴퓨터 구조와 I/O
https://jongmin92.github.io/2019/02/18/Programming/computer-structure/
- 로컬 버퍼에 대해 검색하다 찾은 글인데 내용 정리가 잘되어 있는 것 같다. 아직 안읽었는데 내일 읽어보기!!