운영체제(12), I/O Systems

2022. 12. 19. 22:15강의 내용 정리/운영체제

728x90
반응형

I/O Systems

I/O 디바이스의 일반적인 동작

1. Computer System Operation

1) I/O operation

I/O 요청이 오면 이를 수행하고, 이를 모두 수행하면 인터럽트를 보내서 수행이 끝났다는 것을 전달한다. I/O컨트롤러도 작은 컴퓨터이기에 CPU가 IR에 명령어를 적재하고, DR에 데이터를 적재하면 이후 I/O가 명령어를 수행한다. 

 

CPU가 주기적으로 체크하면서 읽어오는 것을 폴링이라 한다. 실제로 I/O 디바이스가 수행한 결과를 CPU에 전달하는데 이 크기가 작으면 CPU 레지스터로 I/O가 전달하는데 이를 programmed I/O라고 한다. 아니면 디스크와 같이 CPU에 알려줄 수 없는 경우에는 DMA를 사용한다.

 

CPU가 명령을 내리지 않은 상태에서 인터럽트가 걸릴 수도 있다.(네트워크 패킷 도착, 키보드 입력 등)

 

(1) Direct I/O

메모리 주소와 I/O 주소가 별도로 존재한다. 각각의 명령어 주소도 별도로 존재한다. 이런 하드웨어 연결방식을 direct I/O라고 한다. I/O 장치가 사용하는 주소와 메모리가 사용하는 주소가 별도로 있어서 I/O read, I/O write, 메모리 리드, 메모리 write를 따로 각각 사용한다. 이를 사용하는 방식이 인텔 cpu이다.

 

(2) Memory Mapped I/O

CPU가 보기에는 어차피 둘 다 다른 값이기에 이를 따로 두지 않고 동일하게 둔다. 명령어도 메모리 read, write하는 명령어로 I/O read write하되 주소를 분할해서 I/O와 메모리를 구별한다. 

다이렉트 I/O 방식이 더 복잡하다. arm cpu에서는 Memory Mapped I/O를 사용한다. 

 

 

2. I/O Device Controller (host adapter)

컨트롤러는 작은 컴퓨터라고 생각하면 된다. 또한 이는 호스트 어댑터라고 생각해도 된다. CPU에게 명령을 받으면 그 명령대로 I/O 디바이스를 제어해서 동작하게 된다. 혹은 CPU가 명령하지 않더라도 I/O 디바이스에서 발생한 이벤트를 처리하고 인터럽트하는 동작도 한다.

 

ex) 디스크 컨트롤러, 키보드 컨트롤러

 

I/O 컨트롤러의 성능

캐시가 성능이 제일 우수하다. 스토리지는 성능이 별로다.

 

Kernel I/O Structure

하드웨어는 컨트롤러와 디바이스로 나눈다. 디바이스별로 컨트롤러가 존재한다. 이 컨트롤러를 동작시키는 소프트웨어는 디바이스 드라이버이다. 이는 디바이스마다 있어야한다. 예를 들어 키보드나 마우스를 사면 이에 해당하는 디바이스 드라이버를 설치해야한다. 이는 운영체제와의 인터페이스를 맞추기 위한 표준이 존재한다. 리눅스와 윈도우 나름대로의 각각 디바이스 드라이버 표준이 있다.

 

device controller 동작과정

시스템콜로 I/O 요청을 하면 커널 I/O 서브시스템이 디바이스 드라이버에게 요청하고 디바이스 드라이버는 컨트롤러에게 명령을 내리고 컨트롤러가 I/O를 제어하면서 수행한다. 그 뒤 인터럽트를 걸면 디바이스 드라이버의 일부분인 인터럽트 핸들러가 동작하고 인터럽트 핸들러가 수행된 뒤 어플리케이션에게 수행된 결과가 전달된다. 

 

Life Cycle of An I/O Request

마름모 부분은 버퍼 캐쉬를 의미한다. 이미 요청했던 데이터가 버퍼 캐쉬에 있다면 이를 바로 리턴한다.

 

커널에서 device driver로 데이터를 보낼 때에는 각 OS의 표준에 따른 device driver의 함수를 호출한다. device driver는 소프트웨어이지만 실제 device controller는 하드웨어이다. 따라서 device driver에서 device controller내의 IR와 data register가 있어서 해당 부분에 내용을 작성해서 명령어를 전달한다. 그러면 device driver가 수행된다. 이는 CPU와 유사하다. 이때 Direct I/O, Memmory Mapped I/O와 같은 방법을 사용한다.(out, in과 같은 명령어를 수행한다.)

 

cf) device driver와 device controller는 디바이스를 제공하는 회사가 만든다.

 

Intercomputer Communication

클라이언트와 서버의 동작이다.

키보드 입력이면 키보드 컨트롤러부터 수행된다. 이에 따라 윗 페이지의 아래 단에서부터 시작한다.

디바이스 드라이버가 지난 이후에는 터미널 에뮬레이터가 입력된 값을 전달받는다. 이후 write를 해서 윗 페이지의 동작이 다시 수행된다.

 

Device-Functionally Progression

새로운 알고리즘을 적용할 때 어디에서 할지 정하는 것이다. 소프트웨어로 할지, 하드웨어로 할지 이런 차이가 적혀있다.

 

 

Goals of I/O software

해당 목표에 따라 잘 만들어야한다.

 

Interrupt handler

인터럽트를 처리하는 핸들러가 critical action의 짧은 인터럽트를 처리하는 부분과 그 뒤의 Noncritical action을 처리하는 부분으로 나눠서 처리한다. 인터럽트가 끝난 뒤, 운영체제가 처리하는 부분이 존재한다. 리눅스의 경우에는 bottom half가 된다.

 

Device Independent I/O Software

유닉스나 리눅스에서는 I/O 소프트웨어를 스페셜 파일이라는 형태로 이를 개발한다. 이는 운영체제라기 보단 어플리케이션 개발에 더 적합하다. 

 

Buffering

CPU는 빠르고 I/O는 느리다. 따라서 I/O 장치에서 들어온 데이터를 한 곳에 모아두고 CPU가 사용하는 형태가 일반적이다. 이때 이를 저장하는 공간을 Buffer라고 한다. 데이터를 일시적으로 저장하는 공간을 버퍼, 이러한 작업을 버퍼링이라 한다. 버퍼가 없이 동작하는 방식도 있고, 어플리케이션에서 혹은 어플리케이션과 커널에서 혹은 커널에서 더블 버퍼링을 하는 경우도 있다. 

 

성능은 어플리케이션에서 버퍼를 가지고 있는 경우가 더 우수하지만 I/O 디바이스는 커널에서 관리하기에 C와 D 케이스가 더 일반적이다.

 

Error reporting

커널과 관련이 있기에 잘해야한다.

 

Spooling

프린터를 생각하면 된다. 프린터 디바이스는 매우 느리다. 어플리케이션에서 프린터로 내보낼 데이터 전체와 이를 제어하는 명령어를 하나의 파일로 만들어 놓는다. 커널에서는 스풀링된 데이터를 속도에 맞춰서 천천히 동작한다. 일반적인 I/O는 버퍼로 이를 처리한다. 메모리는 부족하기에 파일로 이를 처리한다. 

 

 

728x90
반응형