Machineboy空

입출력장치 ② 다양한 입출력 방법 - 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력 본문

Computer/CS

입출력장치 ② 다양한 입출력 방법 - 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력

안녕도라 2024. 1. 10. 11:38

세 가지 입출력 방식

  • 프로그램 입출력
  • 인터럽트 기반 입출력
  • DMA 입출력

1) 프로그램 입출력

프로그램 속 명령어로 입출력장치(입출력장치에 연결된 장치 컨트롤러)를 제어하는 방법

입출력 명령어로써 장치 컨트롤러와 상호작용

 

ex. 메모리에 저장된 정보를 하드 디스크에 백업 

(= 하드 디스크에 새로운 정보를 쓰기)

제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보

 

CPU가 장치컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.

 

 ‭→ 근데 입출력장치의 종류가 너무나도 다양해서 방법을 규격화하기 어렵다고 했는데,

어떻게 장치컨트롤러의 레지스터를 다 알 수 있지?

 

 

CPU가 장치컨트롤러의 레지스터값을 알기 위한 방법 2가지

메모리 맵 입출력 (Memory Mapped I/O) 고립형 입출력(Isolated I/O)





메모리 접근 명령어 == 입출력장치 접근 명령어

입출력 전용 명령어를 사용
*주소 공간: 주소가 있는 공간  


2) 인터럽트 기반 입출력

 

개념 복습

*(하드럽트)인터럽트 : CPU 사이클에 낭비를 막기 위해서 입출력장치가 일할 동안 다른 일 하게 하는 것

*플래그 레지스터 속 인터럽트 bit : 활성화되면 인터럽트를 받아들일 수 있게 됨

*인터럽트 요청 신호: "저 지금 끼어들어도 되나요? " 입출력장치가 보내는 알람

*인터럽트 서비스 루틴: 인터럽트를 처리 하기 위한 특별한 프로그램

 

정확하게는 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생

 

*Non-maskable 인터럽트 (NMI): 인터럽트 비트를 비활성화해도 순차적 처리가 되지 않는 인터럽트, 즉 막을 수 없는 긴급 인터럽트

하드웨어가 고장나거나, 전원이 꺼지는 등 크리티컬한 인터럽트가 발생했을 때, 순차적이 아니라 당장 해결해야할 수도 있다.

 

 

우선순위 어떻게 판단?

 

NMI의 우선순위까지 판단하진 않음.

 


3) DMA 입출력

 

프로그램 입출력, 인터럽트 기반 입출력의 공통점?

  • 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고
  • 이동하는 데이터도 반드시 CPU를 거친다.

 

가뜩이나 CPU는 바쁜데, 하드 디스크 백업과 같이 대용량 데이터를 이동할 때 모두 CPU를 거쳐야 한다면?

 

DMA(Direct Memory Access)

CPU를 거치지 않고 입출력장치가 메모리에 직접 접근하는 기능.

 

DMA를 위해선 DMA 컨트롤러가 필요하다.

 

앞선 예시의 DMA 과정에서 시스템 버스를 이용

그런데 시스템 버스는 공용 자원이기에 동시 사용이 불가능.

 

CPU가 시스템 버스를 사용할 때 DMA 컨트롤러는 시스템 버스를 사용할 수 없음.

반대도 마찬가지.

 

*Cycle stealing

 


입출력 버스

 

장치 컨트롤러가 시스템 버스에 직접 연결되어도 괜찮을까?

 

불필요하게 사용하지 않기 위해서 입출력버스 이용.