ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8장. 입출력장치
    CS/컴퓨터구조 2023. 9. 5. 21:09

     

    ※ 입출력장치와 컴퓨터 내부의 정보 전달 방식은 보조기억장치의 정보 전달 방식과 다르지 않음. 따라서 이번 장에서 입출력장치는 보조기억장치까지 포함함.

     

    8-1. 장치 컨트롤러와 장치 드라이버

    입출력장치는 종류가 다양하므로 컴퓨터 내부(=CPU)와 정보 전달 방식을 규격화하기 어려움. 이를 위해 장치 컨트롤러장치 드라이버를 사용.

    장치 컨트롤러

    모든 입출력장치는 자신만의 장치 컨트롤러가 있고 이를 통해 CPU와 통신한다.

    역할

    • CPU와 입출력장치 간 데이터 전송 중개를 하기 위한 HW 장치. (규격화되어 있지 않은 다양한 입출력장치의 데이터 전송 방식에 대해 번역 기능을 수행한다고 보면 됨.)
    • 입출력장치의 오류 검출.
    • 버퍼링: 데이터 전송률이 다른 두 장치 사이에서 데이터 전송률을 맞춰주는 동작. (일반적으로 ‘입출력장치의 데이터 전송률’ < ‘CPU의 데이터 전송률’)

           ex) 입출력장치 ← CPU: 데이터를 모아서 조금씩(=입출력장치의 데이터 전송률만큼) 입출력장치로 전송.

                입출력장치 → CPU: 데이터를 모았다가 한 번에 CPU로 전송

    구성

    • 데이터 레지스터: 데이터를 임시 저장하는 버퍼의 역할 수행.
    • 상태/제어 레지스터: 입출력장치의 상태(입출력 가능한 상태인가? 입출력 수행 중인가? 등…)를 저장하고, 수행해야 하는 명령어를 저장

     

    장치 드라이버

    장치 컨트롤러의 동작을 감지/제어 하여 ‘장치 컨트롤러 ↔ CPU’ 간 정보 전송을 가능하게 하는 프로그램(SW) → 운영체제에 의해 실행되어 메모리에 올라감.

    모든 컴퓨터는 장치 드라이버를 인식해야만 해당 장치 드라이버가 관리하는 장치 컨트롤러와 데이터를 주고 받을 수 있음.

     

     

    8-2. 다양한 입출력 방법

    입출력장치와 CPU가 상호작용하여 입/출력 동작을 수행하는 방식은 크게 프로그램 기반의 입출력과 인터럽트 기반의 입출력이 있다.

     

    프로그램 입출력 programmed I/O

    프로그램 입출력 방식이란, CPU가 프로그램을 실행하던 도중, 입출력 명령어를 만나 해당 입출력 명령어를 수행하는 방식을 의미한다.

    CPU가 입출력 명령어를 수행할 때에는 장치 컨트롤러의 상태 레지스터 값을 주기적으로 확인(=polling)하고 상태 값에 따라 장치 컨트롤러의 데이터 레지스터에 메모리로부터 가져온 데이터를 저장하거나 읽어온다.

    위 동작으로 위해 CPU는 장치 컨트롤러 레지스터의 주소를 알아야 하는데, 이 정보를 관리하는 방식은 메모리 맵 방식과 고립형 방식으로 나뉜다.

     

    메모리 맵 방식 memory-mapped I/O

    메모리에 주소를 저장하는 공간을 메모리 주소 영역과 입출력장치 주소 영역으로 나눔. → 그만큼 메모리 주소를 저장할 공간 축소됨.

    ex) 주소 공간 0 ~1023번지 중, 0 ~ 511 은 메모리 주소를, 512~1023에는 입출력장치의 주소를 저장한다.

    → 같은 주소 공간을 공유하므로 메모리 주소를 사용하는 명령어와 동일한 명령어로 입출력장치 주소를 사용하여 입출력장치에 접근 가능.

     

    고립형 방식 isolated I/O

    메모리 주소 영역과 입출력 장치 주소 영역을 별개의 공간으로 각각 분리하여 관리

    명령어 수행을 위해 접근해야 하는 주소 공간이 다르므로 메모리 주소를 찾는 명령어를 그대로 사용할 수 없음. → 입출력장치 주소를 찾는 별도의 명령어 필요.

    책曰 제어버스에 ‘메모리 읽기/쓰기’ 선과 ‘입출력장치 읽기/쓰기’ 선이 분리되어 있음. 각 선을 활성화하는 두 개의 다른 명령어 사용해야 함. ('선'이라는 개념의 실재 여부는 아직 미확인)

     

    인터럽트 기반 입출력

    polling은 CPU에 부하가 많이 걸리는 방식. (CPU가 다른 일 대신 장치 컨트롤러의 상태 레지스터를 확인하는 작업을 계속 해주어야 하므로)

    인터럽트 기반 입출력은 장치 컨트롤러가 CPU로부터 명령을 받고 입출력 작업을 수행(그동안 CPU는 다른 작업을 수행할 수 있게 된다.)한 후 작업이 완료되면 CPU로 인터럽트를 날리는 방식. 즉 CPU는 입출력 과정의 시작과 종료 지점에만 관여하면 된다.

    PIC(Programmable Interrupt Controller): 동시 발생한 인터럽트 간 우선순위 판단

    PIC가 먼저 인터럽트 요청들을 받고 → 우선순위 파악 후 → CPU로 우선순위가 높은 인터럽트 요청을 전달 → CPU가 PIC로 인터럽트 확인 신호 전송 → PIC는 데이터 버스를 통해 CPU로 인터럽트 벡터 전달 → CPU는 인터럽트 벡터로 인터럽트 요청을 보낸 장치 파악, 그 장치의 인터럽트 서비스 루틴 실행

    PIC는 **NMI(**Non-maskable Inturrupt)를 제외한 일반적인 인터럽트에 한하여 우선순위를 계산한다. 이 때, 일반적인 인터럽트란 인터럽트 플래그가 비활성화 상태일 때 막을 수 있는 인터럽트를 의미한다.

     

    DMA (Direct Menory Access) 입출력

    CPU와 입출력장치 간 전달되어야 하는 데이터의 크기가 크면 CPU가 여러 번에 걸쳐 메모리로부터 데이터를 읽거나 쓰는 작업을 반복해야 한다 → CPU 부하 증가

    CPU와 메모리 간 접근 횟수를 줄이기 위한 하드웨어가 DMA 컨트롤러이다. DMA는 CPU 대신 메모리로부터 필요한 데이터를 읽어 자신의 레지스터에 쓰거나 반대로 자신의 레지스터에 저장되어 있는 데이터를 메모리에 쓰는 기능. → CPU는 입출력 명령어를 만났을 때 DMA 컨트롤러가 입출력 동작을 수행하도록 하게 하면 된다.

     

    입출력버스

    과거에는 DMA 컨트롤러와 입출력 장치 간 데이터 전달은 시스템 버스를 통해 이루어졌다. 그러나 시스템버스는 한 번에 하나의 통신만 가능했으므로 DMA 컨트롤러가 메모리 읽고/쓰기 위해 시스템 버스를 점유하는 시간이 길면 CPU의 시스템 버스 사용권은 그만큼 박탈당하게 되었다.(=cycle stealing)

    이를 보완하기 위해 현대에는 시스템 버스와는 별도의 입출력 버스를 만들어 DMA와 입출력장치들을 연결하였다. 즉, DMA는 메모리와 통신할 때에만 시스템버스를 사용하고 입출력장치와 통신할 때에는 입출력버스를 사용하여 시스템버스 점유율을 축소하게 된다.

    종류: PCI(Peripheral Component Interconnect) 버스, PCIe(PCI Express) 버스

     

    'CS > 컴퓨터구조' 카테고리의 다른 글

    7장. 보조기억장치  (1) 2023.09.03
    6장. 메모리와 캐시메모리  (0) 2023.08.31
    5장. CPU 성능 향상 기법  (0) 2023.08.26
    4장. CPU  (0) 2023.08.26
    3장. 명령어  (0) 2023.08.24

    댓글

Designed by Tistory.