CH08_ 입출력장치

Jobmania·2023년 5월 14일
0

컴퓨터 구조

목록 보기
8/8
post-thumbnail

08-1강 장치 컨트롤러와 장치 드라이버

입출력장치는 스피커, 모니터, 키보드, 마우스와 보조기억장치도 역시 포함된다.

장치 컨트롤러

입출력장치는 CPU, 메모리보다 다루기 까다롭다. 왜 WHY?

1. 입출력장치에는 종류가 너무나도 많다.

장치가 다양하면 장치마다 속도, 데이터 전송형식등도 다양하다.
-> 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다.

2. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮습니다.

(이전 cpu 인터셉터에서 사용하는 이유)

그래서 입출력장치는 컴퓨터에 직접연결되지 않고 장치 컨트롤러(device controller)를 통해 컴퓨터와 연결된다.

장치 컨트롤러의 역할

  1. CPU와 입출력장치간의 통신중개
    통신을 중개해줌으로서 입출력 장치와 컴퓨터간의 언어를 규격화해준다.
  2. 오류 검출
    말 그대로 오류 발생시 검출
  3. 데이터 버퍼링
  • 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법

    자바의 Buffered 생각하면 편하다!. 사용하는 이유 : CPU와 성능갭을 고려 자바 BufferedReader/Writer

예시


장치 컨트롤러의 구조

  • 장치 컨트롤러는 버스에 연결되서 정보를 주고 받는다.
  • 데이터, 상태, 제어 레지스터의 구조로 되어이 ㅆ다.

데이터 레지스터

  • CPU와 입출력장치 사이에 주고 받을 데이터가 담기는 레지스터(버퍼)
  • 주고 받는 데이터가 많은 입출력장치에서는 레지스터 대신 RAM을 사용하기도 한다.

상태 레지스터

  • 상태정보저장
    - 입출력장치가 입출력 작업을 할 준비가 되었는지
    • 입출력 작업이 완료 되었는지
    • 입출력장치에 오류는 없는지등의 상태 정보

제어 레지스터

  • 입출력장치가 수행할 내용에 대한 제어 정보

장치 드라이버

  • 장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적 통로라면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로.

동작 과정

장치드라이버를 인식하고 실행하는 주체
윈도우 MAC과 같은 운영체제이다. 즉, 운영체제가 장치 드라이버를 인식하고 실행할 수 있다면 그 장치는 컴퓨터(운영체제) 내부와 정보를 주고 받을 수 있다. 운영체제가 기본적으로 장치 드라이버를 제공하는 것도 있지만, 장치 제작자가 따로 제공하기도 한다. 이럴 경우 직접 사용하는 설치를 해야한다.

08-2강 다양한 입출력 방법

CPU와 장치 컨트롤러 간의 정보를 입출력하는 방식에는 3가지가 있음
1. 프로그램 입출력
2. 인터럽트 기반 입출력
3. DMA 입출력

프로그램 입출력 방식 : CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.

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

메모리에 저장된 정보를 하드디스크에 백업하는경우 ( =하드 디스크에 새로운 정보 쓰기)

1. 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령 입력!

2. 하드 디스크 컨트롤러는 하드 디스크 상태 확인

  • 상태 레지스터에 준비 완료가 되면 '준비 완료' 라고 표시한다.

3. CPU 상태확인 및 데이터 쓰기

  • cpu는 상태 레지스터를 주기적으로 읽어보며 상태를 확인
  • 준비 확인시 쓰기작업할 정보를 데이터 레지스터에 쓴다.

이전 백업작업(쓰기 작업)이 끝나지 않았다면 1번부터 반복을 하고 쓰기가 끝났으면 작업을 종료한다.

CPU는 여러 장치 컨트롤러 속 레지스터들을 어떻게 알고 있을까??

  • CPU가 이 레지스터의 (입출력장치의 주소)를 알기위해서는 2가지 방식이 있따.

메모리 맵 출력(Memory-mapped I/O)

  • 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주 하는 방법.
  • 1024개의 주소를 표현할 수 있는 컴퓨터가 있을 때 512개는 메모리 주소공간, 512개는 입출력 장치를 위한 주소공간(장치 컨트롤러의 레지스터)으로 사용.

예로들어
516번지 : 프린터 컨트롤러의 데이터 레지스터
517번지 : 프린터 컨트롤러의 상태 레지스터
518번지 : 하드 디스크 컨트롤러의 데이터 레지스터
519번지 : 하드 디스크 컨트롤러의 상태 레지스터

  • 입출력장치 접근방식이 메모리를 읽고 쓰는 방식과 동일하다 -> 주소공간을 하나로 간주했기 때문

고립형 입출력(isolated I/O)

  • 메모리를 위한 주소공간과 입출력장치를 위한 주소 공간을 분리하는 방법
  • (입출력 읽기/ 쓰기 선을 활성화시키는) 입출력 전용 명령어를 사용해야한다.

인터럽트 기반 입출력 방식

인터럽트 종류들

  • (하드웨어) 인터럽트의 개념
  • 플래그 레지스터 속의 인터럽트 비트
  • 인터럽트 요청신호
  • 인터럽트 서비스 루틴

하드웨어 인터럽트 - 장치 컨트롤러에 의해 발생

  • 하드웨어 입출력장치가 처리하는 동안 CPU는 다른 작업을 수행하고 작업이 끝나면 장치컨트롤러는 CPU에게 인터럽트 요청신호를 보낸다.

    폴링(Polling) : 입출력장치의 상태는 어떤지, 처리할 데이터가 있는지 주기적으로 확인하는 방식 = 프로그램 입출력 방식
    당연하게 cpu에게 부담이 크다. 인터럽트는 CPU를 조금 더 효율적으로 사용가능.

동시 다발적인 인터럽트 : 입출력장치가 많을 때

인터럽트 발생 순서대로. (순차적)

  • 서비스 루틴 A 먼저 수행하고 루틴 B를 실행하는 과정
  • 플래그 레지스터 속 인터럽트 비트를 비활성화 한채 인터럽트를 처리한다.

🎆 하지만 현실적으로 모든 인터럽트를 순차적으로 해결할 수는 없다.
인터럽트에도 우선 처리 순위가 있기 때문.

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

  • 인터럽트 우선순위가 낮으면 처리중이더라도 우선순위 높은 인터럽트를 수행한다.
  • NMI(Non-maskable interrupt) : 막을 수 없는 인터럽트(정전, 하드웨어 고장)
  • NMI가 발생한 경우 플래그 레지스터 속 인터럽트를 비트를 활성화한채 인터럽트를 처리하는 경우 이렇게 처리한다.

PIC(Programmable Interrupt Controller)

1.PIC가 장치 컨트롤러에서 인터럽트 요청신호(들)을 받는다.
2.PIC는 인터럽트 우선순위를 판단한 뒤 CPU에 처리해야할 인터럽트 요청신호를 보낸다.
3.CPU는 PIC에 인터럽트 확인 신호를 보낸다.
4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 보낸다.
5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해장 장치의 인터럽트 서비스 루틴을 실핸한다.
🎆 다만 NMI 우선순위까지는 판단하지는 않는다.

일반적으로 더 많고 복잡한 장치들의 인터럽트를 관리하기 위해서 여러개의 PIC를 계층적으로 구성하면 더 많은 하드웨어 인터럽트를 관리할 수 있다.

DMA 입출력 방식

위의 두방식의 공통점은 CPU가 주도하고 CPU를 거친다.

  • 모든 데이터가 CPU를 거쳐야 한다면 CPU 부하가 심함. 그랫거 나온 것이
    (하드 디스크 백업과 같이 대용량 데이터가 이동한다면??)

DMA(Direct Memory Access) 정의

  • cpu를 거치지 않고 입출력장치가 메모리에 직접 접근하는 기능
  • DMA 입출력을 하기 위해선 DMA 컨트롤러라고 하는 하드웨어가 필요함.

DMA 입출력 과정

  1. CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할연산(읽기/쓰기), 읽거나 쓸 메모리의 주소 등과 같은 정보로 입출력 작업을 명령.

  2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행, 이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 전근하여 정보를 읽거나 쓴다.

  3. 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림. -> 🎆CPU는 시작과 끝에만 관여함.

시스템 버스는 공용 자원이기때문에 동시 사용 불가

  • 그래서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을때 마다 조금씩 시스템 버스를 이용
  • CPU가 일시적으로 시스템버스를 이용하지 않도록 허락을 구하고 시스템 버스를 이용

    cpu 입장에서는 버스에 접근하는 주기를 도둑맞는 기분 -> 이를 사이클 스틸링(cycle stealing)이라고함

입출력 버스(INPUT/OUTPUT BUS)

  • 시스템 버스를 (불필요하게) 두번 이용하는 DMA 컨트롤러
  • 이만큼 시스템 버스를 많이 이용하면 CPU가 시스템 버스를 이용하지 못함.

  • 그래서 입출력 버스라는 별도의 버스에 연결하여 해결할 수 있다.
  • 시스템 버스의 이용 빈도를 낮출 수 있다.
  • 그래서 현대의 대부분 컴퓨터는 입출력 버스가 있음.
  • 입출력버스는 입출력장치와 컴퓨터 내부를 연결짓는 통로이다.

    입출력 버스 종류.
    PCI버스, PCI express(PCIe) 버스와 입출력 장치를 연결짓는 슬롯
    슬롯 -> 입출력 버스 -> 시스템버스

최근에는 더욱 발전한 DMA, 입출력 프로세서(입출력 채널)

  • 입출 명령어를 직접 인출,해석,실행까지하는 입출력 전용 CPU(입출력 프로세서(IOP), 혹은 입출력 채널(Inpu/Output Channel)이라고 한다.
  • 입출력 채널이 잇는 컴퓨터에서는 cpu가 입출력 명령어를 실행하지 않고 cpu가 입출력 채널에게 메모리에 저장된 특정 입출력 명령어를 수행하라고 지시하면, 입출력 채널은 해당 입출력 명령어를 인출, 해석, 실행한뒤 인터럽트를 통해 결과를 cpu에게 알려준다.
profile
HelloWorld에서 RealWorld로

0개의 댓글