Machineboy空
입출력장치 ② 다양한 입출력 방법 - 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력 본문
세 가지 입출력 방식
- 프로그램 입출력
- 인터럽트 기반 입출력
- DMA 입출력
1) 프로그램 입출력
프로그램 속 명령어로 입출력장치(입출력장치에 연결된 장치 컨트롤러)를 제어하는 방법
입출력 명령어로써 장치 컨트롤러와 상호작용
ex. 메모리에 저장된 정보를 하드 디스크에 백업
(= 하드 디스크에 새로운 정보를 쓰기)
CPU가 장치컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
→ 근데 입출력장치의 종류가 너무나도 다양해서 방법을 규격화하기 어렵다고 했는데,
어떻게 장치컨트롤러의 레지스터를 다 알 수 있지?
CPU가 장치컨트롤러의 레지스터값을 알기 위한 방법 2가지
메모리 맵 입출력 (Memory Mapped I/O) | 고립형 입출력(Isolated I/O) |
![]() ![]() ![]() 메모리 접근 명령어 == 입출력장치 접근 명령어 |
![]() ![]() 입출력 전용 명령어를 사용 |
*주소 공간: 주소가 있는 공간 |
2) 인터럽트 기반 입출력
개념 복습
*(하드럽트)인터럽트 : CPU 사이클에 낭비를 막기 위해서 입출력장치가 일할 동안 다른 일 하게 하는 것
*플래그 레지스터 속 인터럽트 bit : 활성화되면 인터럽트를 받아들일 수 있게 됨
*인터럽트 요청 신호: "저 지금 끼어들어도 되나요? " 입출력장치가 보내는 알람
*인터럽트 서비스 루틴: 인터럽트를 처리 하기 위한 특별한 프로그램
*Non-maskable 인터럽트 (NMI): 인터럽트 비트를 비활성화해도 순차적 처리가 되지 않는 인터럽트, 즉 막을 수 없는 긴급 인터럽트
하드웨어가 고장나거나, 전원이 꺼지는 등 크리티컬한 인터럽트가 발생했을 때, 순차적이 아니라 당장 해결해야할 수도 있다.
우선순위 어떻게 판단?
3) DMA 입출력
프로그램 입출력, 인터럽트 기반 입출력의 공통점?
- 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고
- 이동하는 데이터도 반드시 CPU를 거친다.
가뜩이나 CPU는 바쁜데, 하드 디스크 백업과 같이 대용량 데이터를 이동할 때 모두 CPU를 거쳐야 한다면?
DMA(Direct Memory Access)
CPU를 거치지 않고 입출력장치가 메모리에 직접 접근하는 기능.
DMA를 위해선 DMA 컨트롤러가 필요하다.
앞선 예시의 DMA 과정에서 시스템 버스를 이용
그런데 시스템 버스는 공용 자원이기에 동시 사용이 불가능.
CPU가 시스템 버스를 사용할 때 DMA 컨트롤러는 시스템 버스를 사용할 수 없음.
반대도 마찬가지.
*Cycle stealing
입출력 버스
장치 컨트롤러가 시스템 버스에 직접 연결되어도 괜찮을까?
불필요하게 사용하지 않기 위해서 입출력버스 이용.
'Computer > CS' 카테고리의 다른 글
운영체제 ① 운영체제 알아야 하는 이유 (0) | 2024.01.11 |
---|---|
(참고) ATmega128 GPIO 레지스터 직접 조작하며 입출력해보기 (0) | 2024.01.11 |
입출력장치 ① 장치 컨트롤러와 장치 드라이버 (0) | 2024.01.10 |
보조기억장치 ② RAID Level (1) | 2024.01.09 |
보조기억장치 ① 하드디스크와 플래시 메모리, Garbage Collection (2) | 2024.01.09 |