Scatch note
[운영체제] I/O장치 접근방법
10.16.20242 Min Read — In tech

I/O 장치와 접근방법

앞선 가상화, 동시성 파트에서는 CPU,메모리 자원을 여러 프로세스가 함께 사용하는 방법과 자원을 안전하게 공 유하는 방법에 대해 알아봤습니다. 가상화, 동시성 파트에서는 메모리, CPU를 여러 프로세스가 함께 사용한다는 개념이었던 반면, 파일시스템에서는 파일의 소유권이 명확히 정해져 있습니다.

또한, 영속성 파트에서는 전원이 꺼지면 데이터가 사라져버리는 휘발성 저장장치인 메모리와 레지스터와 달리, 비휘발성인 저장소 하드 디스크를 공부하며, 이를 사용자가 관리할 수 있도록 제공되는 인터페이스인 파일 시스템에 대한 내용도 다룹니다.

System Bus.drawio (1).png

그림: 컴퓨터의 하드웨어 장비와 연결구조. 제작하는 벤더와 시대별로 다를 수 있습니다.

노스브릿지와 사우스브릿지

메모리, GPU와 같은 고성능 처리장치들은 CPU와의 버스 거리를 최대한 짧게 유지해 공간 차지를 줄이고, 전송 속도를 높힙니다. 이를 메인보드 상에서, 윗쪽에 위치한 CPU와 가까이 있어, 노스브릿지 라고 합니다.

반면 디스크나 주변장치(키보드, 프린터 등 I/O 장치)들은 거리가 길어져, 접근 속도가 느립니다. 노스브릿지에 위치한 기기들보다 처리속도가 느리기 때문에, 상대적으로 더 먼 곳에 위치시켰습니다. 이를 사우스브릿지 라고 합니다.

I/O 장치 효율 개선

키보드,프린터, 디스크 등 CPU와 처리속도의 차이가 존재하는 장치에 대해, 데이터 입/출력의 효율을 어떻게 개선해야 하는지에 대해서는 여러 논의와 함께 꾸준히 발전되어 왔습니다.

아래에서 설명할 I/O방법들은 기본적으로 I/O장치의 처리속도가 CPU에 비해 매우매우 느리다는 사실을 바탕으로 합니다. 이에 I/O작업에 의해 떨어지는 CPU의 처리량을 어떻게 개선할 것인가에 관한 논의입니다.

Processor Controlled I/O

PIO는 I/O작업에 프로세서가 직접적으로 관여하는 방법을 말합니다.

Polling

Processor가 주기적으로 I/O장치 상태 확인하며, I/O가 끝났는지 확인합니다. 가장 오래된 방법입니다.

CPU의 속도와 I/O장치의 처리속도가 클 수록 CPU가 I/O장치의 상태를 확인하는데 소요되는 시간이 늘어나, 처리량이 낭비됩니다.

Interrupt: 폴링의 대기시간 문제 해결

I/O가 시작된 프로세스는 Wait 상태로 들어가고, 다른 프로세스가 실행됩니다. I/O가 완료되면 하드웨어 인터럽트를 통해 원래 실행되던 프로세스를 깨워줍니다.

  • Polling이 I/O가 끝날때까지 상태확인을 하는 반면, 다른 프로세스 실행 가능합니다. CPU 처리량이 낭비되지 않습니다.
  • 입출력이 잦고, I/O장치의 처리속도가 빠른 경우, Contex Switch Overhead가 발생합니다.

처리장치의 속도가 빠르면 Polling이 유리하고, 그렇지 않다면 Interrupt 방법이 유리합니다. 따라서 디바이스에 맞는 인터럽트 처리 방법을 선택해 적용해야 CPU의 처리량 낭비를 줄일 수 있습니다.

DMA:

프로세서 개입 없이 메모리-디스크 사이 데이터 I/O를 가능하도록 합니다.

그렇다면, 프로세서가 개입하는 I/O(인터럽트, 폴링)는 어떤 문제가 있었는가?

바로, 버퍼를 이용한 대량 쓰기/읽기 시 발생하는 비효율 문제입니다.

버퍼란? 데이터를 다루는 두 장치 간 속도 차이가 존재해도, 더 빠른 장치가 다른 작업을 수행해 줄 수 있도록 제공하는 임시 저장공간.

스크린샷 2023-05-01 오전 4.43.33.png

위 그림에서 C는, CPU가 메모리의 데이터를 디스크 버퍼로 복사하는 과정입니다. 버퍼가 가득 차면 디스크에 저장하면서 2번 프로세스가 스케줄링 되어 효율적인것처럼 보이지만, C과정이 커지게 되면, CPU의 낭비가 더해집니다.

이에, I/O장치와 CPU 사이에 DMA를 두고 메모리에 접근하는 I/O장치들의 처리를 전담합니다.

DMA.drawio.png

수행 과정

  • DMA Request: 프로세서는 DMA 제어기에게 받거나 보내야 할 데이터를 알려준다.
  • DMA 제어기는 메모리/디스크 내에서 CPU가 지정해준 영역을 디스크로부터 읽거나 쓴다.
  • DMA Response: (1) 디스크제어기 → DMA제어기 인터럽트, (2) DMA제어기 → 프로세서 인터럽트를 통해 I/O작업의 종료를 프로세서에게 전달한다.

결과적으로 프로세서는 DMA 제어기에게 I/O요청에 대한 요청과 응답만 할 뿐, I/O작업에 직접적으로 개입하지 않아 다른 작업을 수행할 수 있습니다.

DMA Mode

Cycle Stealing Mode: Word(32~64 bit)단위 데이터 전송 시 사용하며, 데이터 버스 우선순위를 CPU보다 DMA에게 주어 빠르게 데이터 전송할 수 있도록 합니다.

Burst Mode: Block(2~32Kb)단위의 데이터 전송 시 사용되며, 우선순위를 갖지는 않지만 한번 데이터 버스를 사용하면, 블록 전송이 끝날때 까지 데이터 버스를 점유합니다.

Reference

OSTEP: Operating Systems: Three Easy Pieces

[HPC Lab. KOREATECH, OS Lecture](https://www.youtube.com/watch?v=es3WGii_7mc&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN)

https://en.wikipedia.org/wiki/Direct_memory_access

https://blackinkgj.github.io/IO/