CPU와 장치 컨트롤러가 정보를 주고 받는 방법은 크게 3가지가 있다.
1. 프로그램 입출력
프로그램 속 명령어를 통해 입출력 장치를 제어하는 방법
CPU가 장치 컨트롤러의 레지스터 값을 읽고 쓰면서 입출력이 이루어진다.
- 프로그램을 실행하다 입출력 명령어를 만나면 CPU는 입출력 장치와 연결된 장치 컨트롤러와 상호작용하여 입출력 작업을 수행한다.
메모리 정보를 하드 디스크에 저장(백업)하기
1) CPU가 하드 디스크 장치 컨트롤러(의 제어 레지스터)에 쓰기 명령을 보낸다.
2) 장치 컨트롤러는 하드 디스크의 상태를 확인하여 상태 레지스터에 준비된 상태임을 표시한다.
3) CPU가 주기적으로 상태 레지스터를 확인하다가 장치가 준비된 상태가 되면, 저장할 데이터를 데이터 레지스터에 쓴다.
입출력 장치의 종류가 너무 많아 입출력 장치의 정보를 규격화 하기가 어렵다고 했는데, 어떻게 CPU가 그 수많은 입출력 장치들의 레지스터들을 다 알수 있을까..?
1) 메모리 맵 입출력
메모리에 접근하기 위한 주소 공간과 입출력 장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
- 512 : 하드 디스크 컨트롤러의 데이터 레지스터
- 513 : 하드 디스크 컨트롤러의 상태 레지스터
- 514 : 하드 디스크 컨트롤러의 제어 레지스터
- 메모리에 할당된 값이 위와 같다고 했을 때, 하드 디스크에 데이터를 쓰려고 한다면 CPU는 그냥 512번지에 'A'라는 데이터를 쓰면 된다. (메모리 접근 명령어 == 입출력 장치 접근 명령어)
장점
메모리와 입출력장치가 같은 주소 공간을 사용하기 때문에 같은 명령어를 사용한다.(입출력 전용 명령어가 필요하지 않음)
단점
하나의 주소 공간에 같이 사용하기 때문에 메모리 주소 공간이 축소된다.
2) 고립형 입출력
메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
- 입출력 전용 명령어를 통해 입출력 장치 컨트롤러에 접근한다.(입출력 장치의 읽기/쓰기 라인이 활성화되는 명령어를 사용한다.)
장점
주소 공간이 서로 분리되어 있기 때문에 메모리 주소 공간이 축소되지 않는다.
단점
분리된 주소 공간으로 인해 입출력 전용 명령어를 사용하여 장치 컨트롤러에 접근해야 한다.
2. 인터럽트 기반 입출력
장치 컨트롤러가 하드웨어 인터럽트를 발생시킨다.
- 입출력 장치가 CPU가 요청한 작업을 완료하고 나면 장치 컨트롤러가 작업은 완료했다는 인터럽트를 발생시킨다.
- 1. 프로그램 입출력에서 하드 디스크에 데이터를 백업할 때처럼 CPU가 주기적으로 상태 레지스터를 확인하지 않고 요청이 오면 확인하면 되기 때문에 CPU가 좀 더 효율적으로 일할 수 있다.
1) 동시다발적 인터럽트
a) 인터럽트가 발생한 순서대로 처리하는 경우
- CPU가 플래그 레지스터 내의 인터럽트 비트를 비활성화 하고 인터럽트를 처리하는 경우 == 다른 인터럽트는 받아들이지 않겠다. ➡️ 순차적으로 처리가 가능하다.
- 하드웨어 인터럽트의 경우, 인터럽트 비트를 비활성화 한 채로 아래의 그림과 같이 처리할 수 있다.
- 인터럽트 비트를 비활성화 해도 순차적으로 처리가 불가능한 경우(NMI : Non Maskable Interrupt)
- 하드웨어의 고장, 정전 등 치명적인 인터럽트가 발생하는 경우 해당 인터럽트를 먼저 처리할 수 밖에 없다.
현실적으로 모든 인터럽트를 차례차례 처리할 수는 없다.
같은 하드웨어 인터럽트 중에서도 더 빨리 처리해야 하는 인터럽트가 있다.(➡️ 우선순위가 높은 인터럽트가 있다.)
b) 우선순위를 반영하여 인터럽트를 처리하는 경우
- 플래그 레지스터 내의 인터럽트 비트를 활성화하고 인터럽트를 처리하는 경우
- NMI의 경우
PIC(Programmable Interrupt Controller) 방식이 가장 대중적인 방식이다.
여러 장치 컨트롤러에 연결되어 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단하여
CPU에게 지금 처리해야할 인터럽트가 무엇인지 알려주는 하드웨어
- NMI의 우선순위까지는 판단하지 않음(NMI가 발생하면 PIC를 거치지 않고 CPU에 다이렉트로 인터럽트를 알려 처리하는 경우가 많다.)
※ 프로그램 입출력과 인터럽트 기반의 입출력 간 공통점
- 입출력 장치와 메모리 간 데이터의 이동을 CPU가 주도한다.
- 이동하는 데이터는 반드시 CPU를 거친다.
3. DMA 입출력
DMA(Direct Memory Access)
CPU를 거치지 않고 입출력 장치가 메모리에 직접 접근하는 기능
1) DMA 입출력 과정
- CPU가 DMA 컨트롤렁게 입출력 작업을 명령한다.(작업에 필요한 정보들을 전달해준다.)
- 입출력장치의 주소, 작업 내용, 작업할 메모리의 주소 등
- DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하여 입출력 작업을 수행한다.
- 입출력 작업이 완료되면 DMA 컨트롤러는 인터럽트를 통해 CPU에게 작업 완료를 알려준다.
- 입출력 장치와 메모리 간 주고 받는 데이터는 CPU를 거치지 않는다.(대신 DMA 컨트롤러를 거친다.)
- CPU는 입출력 작업의 시작과 끝에만 관여한다.
- 시스템 버스는 공용 자원이기 때문에 동시 사용이 불가능하다.
- DMA 컨트롤러가 시스템 버스를 사용할 때는 CPU가 시스템 버스를 사용할 수 없고, CPU가 사용할 때는 DMA 컨트롤러가 사용할 수 없다.
- ➡️ DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 이용하거나
- CPU에게 request요청을 통해 일시적으로 이용하지 않도록 요청하고 자신이 시스템 버스를 이용한다.
2) 입출력 버스
DMA가 시스템 버스를 너무 자주 사용하면 CPU가 시스템 버스를 이용하지 못해 작업 효율에 문제가 생긴다.
이러한 문제를 해결하기 위해서 DMA 컨트롤러와 장치컨트롤러들을 '입출력 버스'라는 별도의 버스에 연결한다.
위의 그림과 같이 별도의 버스를 이용한다면 CPU는 아무런 방해없이 시스템 버스를 이용할 수 있다.
요즘의 컴퓨터에는 대부분 입출력 버스가 있다.
- 입출력 버스의 종류에는 PCI(Peripheral Component Interconnect)버스, PCIe(PCI Excpress)버스 등이 있다.
- PCIe 슬롯 : 입출력 장치들과 PCIe버스들을 연결해 주는 통로
[무료] 개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제 - 인프런 | 강의
베스트셀러 『혼자 공부하는 컴퓨터 구조 + 운영체제』 저자 무료 직강. 개발자들이 꼭 알아야 할 컴퓨터 구조, 운영체제 전공서 요약집., - 강의 소개 | 인프런
www.inflearn.com
'컴퓨터 구조와 운영체제 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 입출력 장치 - 장치 컨트롤러, 장치 드라이버 (0) | 2023.06.07 |
---|---|
[컴퓨터 구조] 보조기억장치 - RAID (0) | 2023.05.30 |
[컴퓨터 구조] 보조기억장치 (0) | 2023.05.30 |
[컴퓨터 구조] 메모리와 캐시 메모리 (0) | 2023.05.18 |
[컴퓨터 구조] CPU (0) | 2023.05.18 |