ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Computer Science] 입출력 장치 : 다양한 입출력방법
    Computer Science 2024. 5. 17. 11:31

    입출력 장치의 세 가지 입출력 방식
    : 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력에 대해 정리하였습니다.



    참조 : 인프런 '개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제'


    < 프로그램 입출력 >

    프로그램 명령어를 이용해 입출력장치 속 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 제어하는 방법입니다.

     

    Ex : 메모리에 저장된 정보를 하드 디스크에 백업하는 과정

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

     

    2. 하드 디스크 컨트롤러는 하드 디스크 상태 확인 -> 상태 레지스터준비 완료 표시

     

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

    3-2. 하드 디스크가 준비되었다면 백업할 메모리의 저오를 데이터 레지스터에 쓰기

     

     


    < 프로그램 입출력 방식 : 메모리 맵 입출력 & 고립형 입출력 >

    CPU가 장치 컨트롤러의 레지스터 값을 알기 위한 방법으로써 메모리 맵 입출력 방식과 고립형 입출력 방식이 있습니다.

     


     

    [ 메모리 맵 입출력 ]

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

    : 메모리 접근 명령어와 입출력장치 접근 명령어를 구분하지 않습니다.

     

     

    Ex)

    516번지 : 프린터 컨트롤러의 데이터 레지스터

    517번지 : 프린터 컨트롤러의 상태 레지스터

    518번지 : 하드 디스크 컨트롤러의 데이터 레지스터

    519번지 : 하드 디스크 컨트롤러의 상태 레지스터

     

    프린터 상태 읽기 명령어 === '517번지를 읽어 들여라'

    하드 디스크에 a쓰기 명령어 === '518번지에 a를 써라'

     

    => 메모리 접근 명령어와 입출력장치 접근 명령어가 똑같이 생겼습니다.

     

     


     

    [ 고립형 입출력 ]

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

    : 입출력 전용 명령어를 사용합니다.

     

     

     

     


    < 입터럽트 기반 입출력 >

    입출력 장치의 장치 컨트롤러에 의해 발생한 하드웨어 인터럽트를 기반으로 제어하는 방법입니다.

     

    입터럽트 기반 입출력 동작 과정

     

     


    < 동시다발적인 인터럽트 >

    동시다발적인 인터럽트가 발생했을 때는 인터럽트 간의 우선순위를 고려하느냐에 따라 처리 순서가 달라집니다.

     

    동시다발적인 인터럽트

     

     


    [ 인터럽트 우선순위를 고려하지 않을 경우 ]

    : CPU 속 플래그 레지스터의 인터럽트 비트를 비활성화한 채 인터럽트를 처리하는 경우

    => 순차적으로 인터럽트 실행

     

     


    [ 인터럽트 우선순위를 고려할 경우 ]

    : CPU 속 플래그 레지스터의 인터럽트 비트를 활성화한 채 인터럽트를 처리하는 경우

    => 우선순위 높은 인터럽트 먼저 실행

     

     

    +. 우선순위를 반영한 인터럽트 처리 시 PIC(Programmable Interrupt Controller)를 이용하여 처리합니다.

    PIC Image

    PIC는 여러 장치 컨트롤러에 연결되어 인터럽트 우선순위 판단 후 CPU에게 처리해야 하는 인터럽트를 전달하는 하드웨어 입니다.

    (PIC가 Non-Maskable-Interrupt 까지 감지하지는 않습니다.)

     


    < DMA(Direct Memory Access) 입출력 >

    입출력장치와 메모리 간의 데이터 이동 시 반드시 CPU를 거치게 됩니다. 데이터가 커질수록 CPU의 부담이 커지게 되는데 CPU의 부하를 줄이기 위해 DMA 입출력 방식이 탄생했습니다.

    DMA 입출력 방식은 CPU를 거치지 않고 메모리와 입출력장치 간의 데이터를 주고받는 방식입니다

     

     

    [ DMA 입출력 과정 ]

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

     

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

     

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

     

     


    [ Cycle Stealing ]

    DMA 컨트롤러가 다음과 같이 시스템 버스 이용하는 방식을 Cycle Stealing이라고 합니다.

    1. CPU가 시스템 버스를 이용하지 않을 대마다 조금씩 시스템 버스 이용
    2. CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스 이용

    DMA의 시스템 버스 이용 방법

     

     


    [ 입출력 버스 ]

    : 입출력 버스를 통해 DMA 컨트롤러의 시스템 버스 이용 빈도를 낮출 수 있습니다.

    시스템 버스를 불필요하게 두 번 이용하는 DMA 컨트롤러

     

    입출력 버스를 이용하는 DMA 컨트롤러

     

     

     

     

     

     

     

     

     

     

    댓글

Designed by Tistory.