이번 강의에서 가장 중요한 점은 I/O register에 관한것이다.
우리는 전에 text,code,stack,heap으로 구분되는 Virtual Address Space에 대해 배웠다.
거기에 사실은 추가적으로 OS의 주소공간이 존재한다, 이건 모든 프로세스가 동일하게 가지고있고, 메인메모리의 physical 주소도 똑같이 매핑되어있다.

OS주소 공간에 바로 이 I/O register가 들어있는데 3가지영역으로 나눠진다.

1.command register: I/O에게 어떤 작업을 해야하는지 알려주는 레지스터
(즉, CPU는 이 레지스터를 write와 read모두 가능하지만 I/O는 read밖에못함)
2.status: I/O가 끝나고 CPU에게 report하는 목적의 레지스터
(이건 반대로 I/O는 이 레지스터를 write와 read모두 가능하지만 CPU는 read밖에못함)
3.data register:데이터를 담아두고, 1 word의 공간 사용가능
이러한 구조는 I/O Device마다 기본적으로 구성되어있는 Set이다.
CPU와 I/O 장치 간의 상호작용을 관리하는 방식으로 Polling과 Interupt를 소개해보고자 한다.
Polling

CPU가 주기적으로 status register의 ready. bit를 확인해서 준비됬으면 빠르게 응답할 수있음
단점은 지속적으로 CPU가 확인하기때문에 이것도 자원낭비이고 busy waiting시에는 낭비가 더 심해진다. -> interupt의 구상 배경
Interupt

장치가 준비되었거나 오류 발생시에만 CPU에게 요청을 걸어서 처리하도록한다
Exception과 거의 비슷하지만 지금 CPU가 자원을 사용하고있는 대상에게서 나온 신호가 아니라는 차이점이있다.
이 두 방식 모두 결국에는 CPU의 처리가 들어가기 때문에 CPU가 1 word단위(data register의 크기)로 데이터를 직접 보내는건 데이터의 크기가 MB단위만 되어도 부담이 너무 커져버린다.
그래서 DMA(Direct memory access)라는 장치를 따로두어서 CPU대신에 입출력을 해주는 장치를 두었다.

전체적인 흐름을 설명하기 위해서 data register에 대해 조금 깊숙히 들어가자면 어떤 I/O요청이 들어오면 그 데이터들을 FIFO의 구조를 가진(부르기 쉽게 큐라고 부르겠음)하드웨어 디바이스에 1 word단위로 넣어둔다. 이제 그 데이터들을 DMA가 순서대로 꺼내면서 Input output이냐에 따라 처리하는것인데, 만약 input 상황을 가정해 보자면
1.Cpu가 I/O controlller에게 넣어둘 데이터를 지시하고 I/O controller는 찾아오기 시작한다.
2. I/O controller가 input 큐에 full체크를하고 full이 아닌경우에만 큐에 삽입(full인 경우에 freeze시킴)
3.DMA는 큐가 empty인지 확인하고 아닌경우에만 큐에서 꺼낸다음(메모리에 넣을 데이터 추출) CPU로 부터 받은 시작주소를 이용해서 메모리에 데이터들을 쌓아 나간다. -> DMA는 데이터 + 시작주소 + 총 사이즈 이 3가지 정보를 가지고 메모리에 넣는 작업을 수행하게 되는것이다.
이 과정은 sequenctial하게 일어나는것이 아니다. 무슨 말이냐하면 2의 과정이 끝나야지 3을 실행하는게 아니라 2과정이 full check와 3과정의 empty check를 반복적으로 해주기때문에 비동기적으로 과정이 진행된다. 또한 CPU는 다른 작업을 수행하고 있다.
결과적으로 1이 먼저 시작하긴했으니 1에서 controller가 찾아야할 데이터를 먼저 다 처리해서 interupt를 발생시킬텐데 OS는 무시한다. 이것은 당연하게도 I/O controller는 찾아서 큐에 넣어주는 역할만다했을뿐 실제로 이 전체 작업의 완료는 메모리에 모든 데이터가 쓰이는 작업이기 때문에 DMA가 완료 Interupt를 발생시켜야지 OS가 CPU에 알려준다.
이번 강의에서는 이 정도가 핵심이었던거 같다.
'컴퓨터 구조론' 카테고리의 다른 글
| [컴퓨터 구조론] 마무리, Storage And I/O, Multiprocessor (0) | 2025.01.21 |
|---|---|
| [컴퓨터 구조론]12.Virtual Memory 3,4 (0) | 2025.01.14 |
| [컴퓨터 구조론]11. Virtual Memory 1,2 (0) | 2025.01.12 |
| [컴퓨터 구조론]10.Memory Hierarchy -2 (0) | 2025.01.11 |
| [컴퓨터 구조론]9.Memory Hierarchy -1 (0) | 2025.01.08 |