[백엔드 로드맵 - OS] 입출력 관리

Sierra·2022년 7월 27일
1

Backend-Roadmap

목록 보기
16/43
post-thumbnail

Intro

이번 포스팅의 주제는 입출력 관리.
전산병으로 근무하던 시절 풀링, 인터럽트 등의 용어들을 정말 많이 들어보았다.
그런 용어들이 왜 나왔는 지 알게 되었 던 주제.

왜 입출력 관리를 하는가?

컴퓨터는 소프트웨어로만 이루어 져 있지 않다는 것은 너무나 자명한 사실이다. 우리는 마우스든 키보드든 컴퓨터에 입력을 넣을 것이고 모니터를 통해 출력 되는 값 들을 확인 할 수 있다.

이러한 장치들에 대한 인터페이스의 역할을 운영체제가 해 주어야 한다.

입출력 장치들의 입력 전달 방식

유선이든 무선이든 신호를 보냄으로써 컴퓨터와 통신한다. 특정한 포트를 통해 컴퓨터에 접속 할 수 있는데 제어기를 통해 이러한 포트나 입출력 장치들을 제어 할 수 있다.

모든 제어기는 레지스터를 가진다. 컴퓨터는 제어기 레지스터에 bit pattern을 읽고 씀으로 써 입출력을 실행 할 수 있다.

입출력 하드웨어의 동작

1. 풀링

장치 제어기의 레지스터에 존재하는 busy bit을 주기적으로 검사하는 과정을 말한다.
하드웨어 장치가 명령을 받을 수 있는 상태인 지 수시로 확인하는 것이다.

만약 하드웨어 장치가 준비하는 시간이 길어진다면 풀링은 비효율적일 수 있다. 그 때 인터럽트를 사용한다.

2. 인터럽트

인터럽트는 영어 단어 그대로 생각해보면, CPU가 프로그램을 실행하고 있을 떄 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려 처리할 수 있도록 하는 것을 말한다.

CPU는 인터럽트 요청 라인 선을 가진다. CPU는 명령어가 끝나는 대로 다음 명령어를 수행하기 전 이 선을 검사한다.

만약 선에서 신호를 발견하면 CPU는 인터럽트 핸들러를 실행한다. 그 후 직전 작업 상태를 저장해두고 인터럽트를 처리한다.

DMA

CPU를 사용하여 대용량 입출력 장치의 데이터를 읽어들인다면 CPU의 사용량이 매우 높아지고 컴퓨터 성능이 저하 될 것이다. CPU가 매번 바이트 전송을 제어하는 것은 큰 낭비고 이렇게 CPU가 1바이트씩 옮기는 입출력 방식을 PIO라고 부른다.

이런 낭비를 막기 위해 PIO를 DMA 제어기라고 부르는 특수 프로세서에 위임함으로써 CPU의 일을 줄여준다.

DMA는 다음과 같이 진행된다. 먼저, 컴퓨터(호스트)는 메모리에 DMA 명령 블록을 쓴다. 이 블록에는 전송할 데이터가 있는 곳의 포인터와 전송할 장소에 대한 포인터 그리고 전송될 바이트 수를 기록해 놓는다. 그러면 CPU는 DMA 명령 블록의 주소를 DMA에게 알려주고 자신은 다른 일을 처리한다. DMA는 CPU의 도움 없이 자신이 직접 버스를 통해 DMA 명령 블록을 액세스하여 입출력을 실행한다.

Outro

지금까지 OS의 입출력 관리에 대해 알아보았다. 다음 포스팅은 OS 파트의 마지막 POSIX 에 대해서 써 보도록 하겠다.

Reference

http://itnovice1.blogspot.com/2019/08/blog-post_41.html
https://frontalnh.github.io/2018/04/03/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%8B%9C%EC%8A%A4%ED%85%9C/

profile
블로그 이전합니다 : https://swj-techblog.vercel.app/

0개의 댓글