본문 바로가기
Computer Science/Operating System

[Operating System] I/O Systems

by __K.Jun__ 2024. 9. 1.

I/O Hardware

I/O 디바이스는 다음으로 구성되어 있다.

- Port : 레지스터로 구성된 연결점

- Bus : 데이터 이동 통로

- Controller : 포트, 버스 또는 장치를 작동할 수 있는 전자장치 집합체

 

CPU는 Memory-Mapped I/O를 통해 컨트롤러에 명령어 또는 데이터를 전달한다.

- Memory-Mapped I/O : 디바이스 제어 레지스터가 CPU 주소 공간에 매핑되어 있어, CPU가 일반적으로 데이터를 읽거나 Instruction을 수행하듯 I/O를 요청을 수행하는 것

 

I/O Port는 네 가지 레지스터로 구성되어 있다.

- Status register : 디바이스의 상태를 나타내는 레지스터

- Control register : 디바이스의 모드를 변경하거나 명령어를 시작하려는 호스트에 의해 쓰여질(Write) 수 있는 레지스터

- Data-in register : 어느 디바이스로 부터 데이터를 읽어 오는 레지스터

- Data-out register : 어느 디바이스로 데이터를 보내는 레지스터

 

Polling

 

- Port의 Status register에 있는 Busy bit로 디바이스가 I/O를 Busy-waiting 하고 있는지 여부를 판단하는 기법

- Busy-waiting을 계속하면 CPU를 불필요하게 사용해야 해서 비효율적이다. -> I/O Interrupt가 효율적.

 

Interrupt

- CPU는 Interrupt-request line이라는 wire를 가지고 있는데, 이는 I/O 디바이스에 의해 작동된다.

- Interrupt signal을 감지하면, CPU는 현재 상태를 저장하고 Interrupt handler 루틴으로 점프한다.

- Interrupt handler는 Interrupt를 적절히 처리 하고 Interrupt handler 루틴으로 점프하기 직전에 수행하던 곳으로 돌아간다.

- Nonmaskable line : 반드시 처리해줘야 하는 Interrupt Signal을 받기 위한 line

- Maskable line : CPU에 의해 disable 가능한 Interrupt Signal을 받기 위한 line

 

 

Kernel I/O Structure

Driver : 디바이스를 구동시키는 소프트웨어, OS자체의 부족한 지원을 보충하는 용도

 

Block and Character Devices

- Block devices : 디스크 드라이브같이 블럭 단위로 I/O가 발생하는 디바이스

- Character devices : 키보드, 마우스 처럼 linear stream of bytes를 I/O하는 디바이스

 

Blocking and Nonblocking I/O

- Blocking I/O : I/O가 끝날 때 까지 해당 프로세스는 일시 중단되어 다른 작업을 할 수 없다. 실행 큐 -> 대기 큐로 이동한다.

- Nonblocking I/O : 키보드 또는 마우스 입력을 받아들이는 경우와 같이, 프로세스의 큐 사이의 이동 없이 I/O 호출에 대한 반환을 가능한 자주, 빠르게 하는 것. 프로세스는 I/O 작업이 완료될 때 까지 기다리지 않고 계속 실행된다.

- Asynchronous I/O : I/O 실행 중에 프로세스가 실행되는 것. 매우 복잡하다.

 

Kernel I/O Subsystem

- Scheduling : 디바이스 당 큐를 통해 I/O 요청 순서 짓기

- Buffering : 디바이스 간 데이터 전송 시 데이터를 메모리에 임시 저장하는 것이다. 장치 간 데이터를 읽고 쓰는 데 속도 차이, 전달량 차이를 맞추기 위해 사용되는 기법이다. 그리고, 디스크에 기록되는 데이터 버전과 애플리케이션 시스템 콜 호출 시점의 버전의 일치를 보장하기 위한 Copy Semantics를 유지하기 위해 사용된다. 애플리케이션 데이터를 커널 버퍼로 복사한 후, 애플리케이션에 제어를 반환한다. 디스크에 Writing은 애플리케이션 버퍼가 아닌 커널 버퍼로부터 발생한다.

- Caching : 보다 빠른 I/O를 위해서 재사용될 데이터의 복사본을 캐시 메모리 저장하는 것.

- Spooling : 디바이스에 보내는 output 데이터를 임시 저장하는 메모리 영역, 메모리의 스풀영역에 데이터를 저장하면 스풀러가 처리해준다.

- Error Handling : 디스크 I/O 실패, 디바이스 사용 불가능 등 에러에 대해 Error number/code 를 return하여 error log에 남긴다.

- Kernel Data Structures : open file tables, network connections 등과 같은 자료구조를 가지고 있다. Dirty block을 이용해서 변경을 감지할 수 있다.

728x90