장치 컨트롤러와 CPU가 정보를 주고 받는 방법
- 프로그램 입출력
- 인터럽트 기반 입출력
- DMA 입출력
프로그램 입출력
- 프로그램 속 명령어로 입출력장치를 제어하는 방법
- CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 만나면 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용하여 수행
- CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어짐
ex) 메모리에 저장된 정보를 하드 디스크에 백업하는 과정근데, CPU는 레지스터들을(입출력장치들의 주소) 어떻게 알까 ❓❓
💡 2가지 방식이 있음
메모리 맵 입출력
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
- 메모리 맵 입출력 방식에서 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이나 모두 똑같이 메모리 주소를 다룸
고립형 입출력
- 메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법
- CPU가 메모리 읽기/쓰기 선이 활성화되는 명령어를 실행하면 메모리에 접근하고, 입출력장치 읽기/쓰기 선이 홠성화되면 명령어를 실행하면 장치 컨트롤러에 접근
즉, 사용 목적에 따라 전용 명령어가 있음정리
인터럽트 기반 입출력
- 말 그대로 인터럽트를 기반으로 하는 입출력
- 입출력장치에 의한 하드웨어 인터럽트는 정확히 말하면 입출력장치가 아닌 장치 컨트롤러에 의해 발생
CPU가 장치 컨트롤러에 입출력 작업 명령
↓
장치 컨트롤러가 입출력장치를 제어하며 입출력을 수행하는 동안 CPU는 다른 작업 가능
↓
장치 컨트롤러가 입출력 작업 완료하고 CPU에게 인터럽트 요청 신호 보냄
↓
CPU 하던 작업 백업시키고 인터럽트 서비스 루틴 실행
동시에 여러 인터럽트가 발생한다면❓❓
💡 간단한 방법:
순차적
으로 처리
하지만, 현실적으로 모든 인터럽트를 순차적으로 처리할 순 없음 😭
- 이유
NMI(Non Mask Interrupt)
가 발생하면 우선순위가 높은 인터럽트부터 처리되기 때문.- 플래그 레지스터 속
인터럽트 비트
가 활성화되어있는 경우
💡 우선순위를 반영하여 인터럽트를 처리하는 방법
프로그래머블 인터럽트 컨트롤러(PIC)
라는 하드웨어를 사용
PIC
- 여러 장치 컨트롤러에 연결됨
- 장치 컨트롤러의 하드웨어 인터럽트의 우선순위 판단해줌 (
NMI
우선순위는 판단 안함)- CPU에게 지금 처리해야 할 인터럽트 알려줌
- 보통 여러 개를 계층적으로 사용
Q. 프로그램 기반 입출력, 인터럽트 기반 입출력에 공통점은❓❓
A. 입출력장치와 메모리 간의
데이터 이동을 CPU가 주도
하고, 이동하는 데이터도반드시 CPU를 거친다는 점
🚨 혼자서 하는 일도 많은 CPU는 입출력장치를 위한 연산 때문에 더 바빠짐
그래서 나온 게
DMA(Direct Memory Access)
DMA 입출력
직접 메모리에 접근
할 수 있는 입출력 기능- 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요
과정
CPU는 DMA 컨트롤러에 입출력 작업을 명령
↓
DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행
(필요하면 DMA 컨트롤러는 메모리에 직접 접근)
↓
입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림
📍 생각해볼 문제
DMA 컨트롤러는 시스템 버스로 메모리에 직접 접근 가능하다. (
시스템 버스는 동시 사용 불가
)
그럼, DMA 컨트롤러와 CPU가 시스템 버스를 동시에 써야 한다면?
- CPU가 쓰지 않을 때, 사용하기
- CPU가 일시적으로 사용하지 않는다는 허락을 구하고 사용
✍ 용어
사이클 스틸링
: CPU입장에 시스템 버스 사용 주기를 뺏았긴 기분을 뜻함입출력 버스
시스템 버스를 너무 자주 이용하는
DMA 컨트롤러
그래서, 시스템 버스 이용 빈도를 낮추기 위해입출력 버스
가 생김
ex)
PCI 버스
,PCI express (PCIe) 버스
등등
<출처>
"혼자 공부하는 컴퓨터구조+운영체제".강민철.https://www.youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl (2023.05.01)
책과 강의를 통해 학습한 내용을 요약 정리했습니다.