Backend/OS

[OS] I/O Management

lakelight 2022. 9. 3. 11:43
728x90
반응형

입출력 관리

컴퓨터에서 연산 작업과 함께 입출력 작업중요합니다. 예를 들면 컴퓨터 화면을 보는 작업, 문서를 작성하는 작업 등 대부분이 입출력 작업이기 때문입니다.

마우스, 키보드, 모니터와 같은 다양한 장치들이 컴퓨터에서 잘 동작하도록 하려면 입출력 장치와 컴퓨터 사이에 공통된 인터페이스가 존재해야 합니다.

아래와 같이 입출력 제어기를 통해 메인 메모리와 프로세서와의 상호작용을 위해 시스템 버스에 연결되어 있는 것을 볼 수 있습니다.

이미지 출처: https://velog.io/@ragi/Back-end-%EC%9E%85%EC%B6%9C%EB%A0%A5IO-%EA%B4%80%EB%A6%AC

 

입출력 하드웨어의 구성

하드웨어 장치는 케이블을 통하거나, 무선으로 신호를 보내 컴퓨터와 통신을 합니다. 이때 포트를 통해 컴퓨터에 접속하는데 하드웨어 장치의 또 다른 구성요소는 제어기 입니다.

제어기는 포트나 입출력 장치를 제어하는 전자 회로의 집합체이며 많은 입출력 장치는 제어기를 내장하고 있습니다. 또한 모든 제어기는 레지스터를 가지며 컴퓨터 프로세스는 제어기 레지스터에 bit pattern을 쓰거나 읽음으로써 입출력을 실행합니다.

 

입출력 하드웨어 동작

폴링

장치 제어기의 레지스터에는 busy bit가 있습니다. busy bit는 현재 장치가 사용가능한 상태인지 다른 작업을 처리하는 중이어서 사용이 불가능한 상태인지 나타내는 bit입니다. (1: 제어기가 바쁜 경우 / 0: 제어기가 준비 중인 경우)

컴퓨터는 장치가 사용중인지를 알기위해 주기적으로 busy bit을 검사해야하는데 이 과정을 폴링이라고 합니다. 폴링 자체는 컴퓨터 자원이 많이 소요되지 않지만 장치가 준비하는 시간이 길어질 경우 매우 비효율적이라는 단점이 있습니다. 이런 경우 제어기가 자신의 상태가 바뀔 때 컴퓨터에 통보해주는 방식으로 단점을 보완할 수 있습니다. 이때 발생시키는 신호를 인터럽트 라고 합니다.

인터럽트

CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치나 예외상황발생하여 처리필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것을 말합니다.

CPU는 인터럽트 요청 라인이라는 선을 가지는데 CPU는 매번 명령어을 끝내고 다음 명령어를 수행하기 전에 이 선을 검사합니다. 만약 입출력 장치의 준비가 완료되어 인터럽트 요청 라인에 신호를 보내면, CPU는 인터럽트를 확인하고 인터럽트 핸들러를 실행합니다.

CPU는 인터럽트 발생시 직전 작업 상태를 저장해두고 인터럽트를 처리합니다. 그리고 인터럽트 처리가 완료된 이후에는 인터럽트가 발생하기 전의 상태로 복구시켜 중단되었던 작업을 재개합니다.

이미지 출처: https://vitolavecchia.altervista.org/differenza-tra-polling-e-interrupt-in-informatica/

 

입출력 하드웨어 동작 전체 흐름

  1.  사용자가 입력을 하게 되면 인터럽트가 발생합니다.
  2. CPU는 현재 수행중이던 작업의 상태를 저장하고 해당 요청에 대한 처리 루틴을 찾고, 인터럽트 요청을 처리합니다.
  3. 인터럽트 처리 루틴을 실행을 합니다.
  4. 인터럽트 처리가 끝나면 인터럽트가 발생하기 직전 상태로 복구시켜 중단되었던 작업을 재개합니다.

 

직접 메모리 접근 (DMA: Direct Memory Access)

CPU를 사용하여 디스크와 같은 대용량 입출력 장치의 데이터를 읽으면 CPU 사용량이 매우 높아져 컴퓨터 성능이 심각하게 저하되는 문제가 있습니다. CPU가 매번 바이트 전송을 제어하는 것은 엄청난 낭비입니다.

많은 컴퓨터들의 CPU의 낭비를 막기 위해 PIO(CPU가 1바이트씩 옮기는 입출력 방식)를 DMA 제어기라고 불리는 특수 프로세서에게 위임하여 CPU의 일을 줄여줍니다.

컴퓨터는 메모리에 DMA 명령 블록을 씁니다. 이 블록에는 전송할 데이터가 있는 곳의 포인터와 전송할 장소에 대한 포인터, 전송될 바이트 수가 기록됩니다. C

PU는 DMA 명령 블록의 주소를 DMA에게 알려주고 자신의 다른 일을 처리합니다. DMA는 CPU의 도움없이 자신이 직접 버스를 통해 DMA 명령 블록에 접근하여 입출력을 실행합니다.

 

직접 메모리 접근의 작업 순서

  1. CPU가 입출력 요청을 보냅니다.
  2. DMA 제어기의 레지스터에 주소와 전송 길이가 저장됩니다.
  3. DMA 제어기는 한 블록의 입출력 동작을 수행합니다. 그동안 CPU는 다른 작업을 수행합니다.
  4. 입출력 동작 완료시 DMA 제어기는 CPU에게 완료했다는 인터럽트를 보냅니다.

 

[참고]

1. 입출력 시스템

2. [운영체제] 입출력시스템

3. 입출력 관리

 

728x90
반응형