반응형

56_입/출력 시스템 (I/O System)

 

컴퓨터에서 주로 하는 작업이 연산작업과 I/O 작업 이다. 간단한 웹서핑 등의 작업은 연산보다는 I/O 작업이 더 많이 발생하기도 한다. 이처럼 다양한 입출력 장치들은 각각의 특성을 보이기 때문에 각각의 특성에 맞는 제어가 필요하다.

 

이처럼 다양한 제어 방법들이 커널의 입/출력 서브시스템(I/O Subsystem)을 형성하며 이들은 커널의 다른 부분이 입/출력 장치를 관리하는 복잡한 일에 신경을 쓰지 않게 해준다.

 

장치 드라이버는 모든 하드웨어를 일관된 인터페이스로 표현해 주며 이러한 인터페이스를 그보다 상위층인 커널의 입/출력 서브시스템에게 제공해 준다. 이는 시스템 호출이 응용과 운영체제간에 표준적인 인터페이스를 제공하는 것과 유사하다.

 

하드웨어 장치는 케이블을 통하거나 무선으로 신호를 보냄으로써 컴퓨터 시스템과 통신한다. 이들 장치는 포트(Port)라 불리는 연결점을 통해 컴퓨터와 접속한다. 하나 이상의 장치들이 공동으로 여러 선(wire)들을 사용한다면 이러한 선을 버스(bus)라 부른다. 버스는 회선의 집합으로 메시지를 주고 받을 수 있는 정한 프로토콜(protocol)까지를 포함한다.

 

장치 A->B, B->C, C->컴퓨터의 포트에까지 연결되어 있으면 데이지 체인(daisy chain)이라고 부른다. 데이지 체인은 통상 하나의 버스처럼 동작 한다.

 

버스는 컴퓨터 구조에서 널리 사용되며 제어기(controller)는 포트나, 버스나, 입출력 장치를 제어하는 전자 회로의 집합체이다. 모든 제어기는 레지스터를 가지고 있다. 본체의 처리기는 이들 제어기의 레지스터에 비트 패턴을 쓰거나 읽음으로써 입/출력을 수행 한다.

 

 

입/출력 명령은 한 바이트나 워드를 어떤 입/출력 포트 주소로 전달 하도록 지정한다. 입출력 명령은 해당 장치에 맞는 버스 회선을 선택하여 장치 레지스터로 비트들을 보내거나 읽어오도록 한다. 또 다른 방법으로는 장치 제어기 레지스터를 처리기의 주소 공간으로 매핑하여 사용한다. 이러한 방식을 memory mapped I/O 라고 한다. 이 경우 각 주변 장치 레지스터들은 메모리 주소와 일대일 대응 된다. CPU가 이 주소에 단순히 읽거나 쓰는 것은 곧 이 장치들에 대한 입/출력 요청을 의미하게 된다.

 

입/출력 포트는 보통 4개의 레지스터로 구성되는데 상태( status), 제어(control), 입력(data in), 출력(data out) 레지스터 들이다.

  • 상태 레지스터 : 호스트가 읽는 용도이며 이 비트들은 현재의 명령이 완료 되었는지, 입력 레지스터로부터 한 바이트를 읽어도 되는지, 그리고 에러가 있었는가와 같은 상태들을 보고 한다.
  • 제어 레지스터 : 호스트가 주변 장치에게 입/출력 명령을 내리거나 장치의 모드를 변경하기 위해 쓰기를 수행하는 대상
  • 데이터 입력 레지스터 : 호스트가 입력을 얻기 위해 읽기를 수행한다.
  • 데이터 출력 레지스터 ; 호스트가 자료를 출력하기 위해 쓰기를 수행 한다.

 

입력 및 출력 레지스터 등의 자료 레지스터들은 보통 1~4 바이트 이다. 어떤 제어기들은 이러한 자료 레지스터의 크기를 확장하기 위해 FIFO 칩들을 제공 한다. FIFO칩들은 자료의 발생이 돌발적으로 많이 지는 상황이 발생하더라도 대응 할 수 있다.

 

[PC에서 장치 입/출력 포트 위치]

입/출력 주소 범위(16진수)

장치

000 - 00F

DMA 제어기

020 – 021

인터럽트 제어기

040 – 043

타이머

200 – 20F

게임 제어기

2F8 – 2FF

직렬 포트(2차)

320 – 32F

하드 디스크 제어기

378 – 37F

병렬 포트

3D0 – 3DF

그래픽 제어기

3F0 – 3F7

디스켓 드라이브 제어기

3F8 – 3FF

직렬 포트 (메인)

 

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

 

반응형

+ Recent posts