시스템해킹 스터디 - (5) 입출력장치
A A

참고 도서: 혼자 공부하는 컴퓨터구조 + 운영체제

 

섹션 9에 대한 정리.

(장치 컨트롤러, 장치 드라이버, 그 외 입출력장치)

 

📍 장치 컨트롤러와 장치 드라이버

입출력장치는 종류가 너무 다양하고, 그에 따라 장치마다 속도, 데이터 전송 형식 등도 다양하기 때문에

컴퓨터 내부와 정보를 주고받는 방식을 규격화하기 어렵다.

CPU와 메모리의 데이터 전송률은 높지만(빠름) 입출력장치의 전송률은 낮다(느림).

이러한 이유로 장치 컨트롤러를 사용한다.

 

장치 컨트롤러

입출력장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고받는다.

모든 입출력장치는 하나 이상의 장치 컨트롤러와 연결되어 있다.

 

장치 컨트롤러의 역할:

  • CPU와 입출력장치 간의 통신 중개: 일종의 번역가 역할로, 다양한 입출력장치의 종류에서 오는 규격화의 어려움을 어느 정도 해소
  • 오류 검출: 입출력장치에 오류가 있지는 않은지 확인
  • 데이터 버퍼링: 버퍼를 통해 전송률의 차이를 완화

 

장치 컨트롤러의 구조

 

입출력 버스(시스템)에 연결되어 정보를 주고받는다.

주고받는 정보는 데이터, 상태, 제어 정보로 각각 레지스터에 저장된다. (상태/제어 레지스터 하나로 사용되기도 함)

  1. 데이터 레지스터
    • CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼 역할)
    • 데이터 레지스터 대신 RAM을 사용하기도 함
  2. 상태 레지스터
    • 상태 정보 저장
      • 입출력장치가 입출력 작업을 할 준비가 되었는지
      • 입출력 작업이 완료되었는지
      • 입출력장치에 오류는 없는지 등
  3. 제어 레지스터
    • 입출력장치가 수행할 내용에 대한 제어 정보

 

장치 드라이버

장치 컨트롤러의 동작을 감지하고 제어하는 프로그램이다.

(장치 컨트롤러가 HW적 통로라면, 장치 드라이버는 SW적 통로)

 

장치 동작/실행 방법을 알려주는 SW이므로, 장치 드라이버를 설치하지 않으면 해당 장치를 사용할 수 없다.

컴퓨터(운영체제)가 연결된 장치의 드라이버를 인식하고 실행할 수 있어야 컴퓨터 내부와 정보를 주고받을 수 있다.

 

 

📍 다양한 입출력 방법

3가지 입출력 방식: 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력

 

1. 프로그램 입출력

프로그램 속 명령어로 입출력장치를 제어, 즉 입출력 명령어로 장치 컨트롤러와 상호작용하는 방법이다.

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

 

예: 메모리에 저장된 정보를 하드디스크에 백업 = 하드디스크에 새로운 정보 쓰기

1) CPU가 하드디스크 컨트롤러의 제어 레지스터에 쓰기 명령

2) 하드디스크 컨트롤러는 제어 레지스터를 확인하고 하드디스크 상태 확인 후 상태 레지스터에 준비완료 표시

3-1) CPU는 상태 레지스터를 주기적으로 읽어보며 하드디스크의 준비 여부를 확인

3-2) 하드디스크가 준비되었다면 백업할 메모리의 정보를 데이터 레지스터에 씀

 

그렇다면 CPU가 장치 컨트롤러의 레지스터를 어떻게 인식할 수 있을까?
-> 메모리 맵 입출력 & 고립형 입출력

 

메모리 맵 입출력

메모리 맵 입출력

 

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법이다.

메모리에 접근하는 명령어와 입출력장치에 접근하는 명령어가 같다.

메모리 주소 공간이 축소된다.

 

고립형 입출력

고립형 입출력

 

메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법이다.

입출력 전용 명령어를 사용한다.

 

 

2. 인터럽트 기반 입출력

동시다발적인 인터럽트 발생 시, 현실적으로 모든 인터럽트를 순차적으로 처리할 수 없다.

더 빨리 처리해야 하는 인터럽트(Non-Maskable Interrupt)가 있기 때문이다.

따라서 우선순위를 반영해 인터럽트를 처리한다.

우선순위를 반영한 인터럽트

 

PIC (Programmable Interrupt Controller)

CPU가 지금 처리해야 하는 인터럽트가 무엇인지 판단하는 하드웨어이다.

장치 컨트롤러와 CPU 사이에 존재한다.

여러 장치 컨트롤러에 연결되어, 장치 컨트롤러의 하드웨어 인터럽트 우선순위를 판단한다.

(하드웨어 우선순위만 판단하며 NMI 우선순위까지 판단하지는 않음)

 

 

3. DMA 입출력

Direct Memory Access

CPU를 거치지 않고 입출력장치가 메모리에 직접적으로 접근하는 입출력 방식이다.

 

DMA 입출력 방식

 

DMA 입출력 방식:

1. CPU는 DMA 컨트롤러에 입출력 작업을 명령

2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업 수행 (필요한 경우 메모리에 직접 접근)

3. 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림

 

결과적으로 CPU는 입출력 작업의 시작과 끝만 관여하면 되므로 효율적이다.

 

그러나 공용 자원인 시스템 버스를 동시에 사용할 수 없는 문제가 있다.

따라서, DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용한다.

혹은 CPU에게 일시적으로 허락을 구한 뒤 시스템 버스를 이용한다.

=> Cycle Stealing이라고 부른다.

 

 

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

(불필요한 시스템 버스 점유를 줄이는 것이 좋음)

입출력 버스라고 하는 입출력 전용 버스에 연결한다.

 

입출력 버스 사용

 

Copyright 2024. GRAVITY all rights reserved