Studying/Roadmap

입출력 관리

aoaa 2022. 3. 30. 21:52

 

 컴퓨터의 주요 작업에는 연산과 입출력 작업 2가지가 있습니다. 그 중 입출력 작업은 컴퓨터에 연결된 다양한 입출력 하드웨어 장치들과 어떤 식으로 소통이 이루어지는지에 관한 내용입니다.

 예를 들어 마우스, 키보드, 모니터 등 다양한 장치들이 컴퓨터와 잘 동작하게 하려면 둘 사이에 공통된 인터페이스가 존재해야합니다. 바로 컴퓨터와 하드웨어 장치 사이의 공통된 인터페이스 역할을 수행하는 것이 입출력 관리의 핵심이죠.

1. 입출력 하드웨어의 구성

 먼저 하드웨어 장치는 케이블 혹은 무선으로 신호를 보내 컴퓨터와 통신합니다. 이 때, 포트를 통해 컴퓨터에 접속하고, 컴퓨터에 내장된 *제어기를 통해 포트나 입출력 장치를 제어합니다. 모든 제어기는 레지스터를 가지며, 프로세서는 제어기 레지스터에 bit pattern을 쓰거니 읽음으로써 입출력을 실행합니다. 

(제어기 : 포트 혹은 입출력 장치를 제어하는 전자회로의 집합체)

 

2. 입출력 하드웨어의 동작

1) 폴링

 장치 제어기의 레지스터에는 busy bit라는 것이 존재합니다. busy bits는 장치가 사용 가능한 상태인지, 다른 작업을 처리하느라 사용 불가능한지 나타내는 bit입니다. 1이면 작업중인 것이고, 0이면 준비중인 상태입니다. 컴퓨터는 장치의 상태를 알기 위해 정기적으로 busy bit를 검사해야하는데 이를 폴링이라 합니다. 

 폴링 자체는 컴퓨터 자원이 많이 소요되지 않지만 장치가 준비하는 시간이 길어질 경우 비효율적이라는 단점이 있습니다. 이런 경우 제어기가 상태가 바뀔 때 컴퓨터에 통보해주는 방식으로 비효율을 막을 수 있습니다. 이를 인터럽트라고 합니다.

 

2) 인터럽트

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

 CPU는 인터럽트 발생 시 직전 작업 상태를 저장해두고 인터럽트를 처리합니다. 처리 후에는 인터럽트 발생 전 상태를 복구시켜 중단됐던 작업을 재개하게 됩니다.

 

3. 데이터 접근

  CPU를 사용해 디스크와 같은 대용량 입출력 장치의 데이터를 읽으면 CPU 사용량이 높아져 컴퓨터 성능이 저하되는 문제가 발생하여 매번 바이트 전송을 제어하는 것은 심한 낭비입니다. 많은 컴퓨터들의 CPU 낭비를 막기 위해 PIO(CPU가 1바이트씩 옮기는 입출력 방식)를 DMA(Direct Memory Access)제어기라고 불리는 특수 프로세서에게 위임해 CPU의 일을 줄여줍니다. 

 

1) 직접 메모리 접근 (DMA)

 

 DMA 명령 블록에는 전송할 데이터가 있는 곳의 포인터와 전송할 장소에 대한 포인터, 전송될 바이트 수가 기록됩니다. CPU는 DMA 명령블록의 주소를 DMA에게 알려주고 자신은 다른일을 처리합니다. 

 

DMA 입출력 방식의 작동 과정
1. CPU가 입출력 요청을 보낸다.
2. DMA제어기의 레지스터에 주소와 전송 길이가 저장된다.
3. DMA 제어기는 한 블록의 입출력 동작을 수행하고 그동안 CPU는 다른 작업을 한다.
4. 입출력 동작이 완료되면 DMA제어기는 CPU에게 완료했다는 인터럽트를 보낸다.

 

 

 

 

 

 

 

출처

https://velog.io/@yonii/OS-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EA%B4%80%EB%A6%AC

 

OS - 입출력 관리

운영체제 입출력 관리

velog.io

 

'Studying > Roadmap' 카테고리의 다른 글

네트워크 기초 개념  (0) 2022.04.01
POSIX 기초  (0) 2022.04.01
프로세스 간 통신  (0) 2022.03.21
메모리 관리  (0) 2022.03.17
스레드와 동시성  (0) 2022.03.14