입출력 구조와 방식
입출력 구조
- 운영체제는 입출력 장치에 입출력에 관련된 각종 명령어를 입력하고 인터럽트를 발견하고 오류를 처리함
- 또한, 단순하고 편리한 형태로 입출력 장치와 컴퓨터 시스템의 다른 부분간의 인터페이스 기능도 아울러 제공함
- 다양한 주변 장치들을 관리할 때 유지되어야 할 기능들
- 블록 단위의 데이터 전송 기능
- 컴퓨터 본체나 디스크, 테이프 등의 2차 기억장치와 외부 환경과의 인터페이스 기능
- 하드웨어와 독립적인 관리가 가능한 자원과의 독립성 유지 기능
- 프로세스 개념을 사용한 쉽고 편리한 입출력 수행 기능
입출력 하드웨어 장치
<블록 장치>
- 자신의 주소를 갖고 있으면서 고정된 크기의 블록으로 정보를 저장하는 장치
- 기본적인 속성은 다른 블록과는 독립적으로 각 블록을 읽거나 쓸 수 있음
<문자 장치>
- 어떤 블록 구조와도 상관없이 문자 스트림(stream)으로 송수신 가능
- 디스크처럼 주소 지정이나 탐색 동작이 필요 없음
- 터미널, 라인 프린터, 자기 테이프, 펀치 카드, 네트워크 인터페이스, 마우스
<장치 제어기(device controller)>
- 시스템의 모듈화와 일반적인 설계를 제공하기 위한 전형적인 입출력 장치의 전기적인 구성 요소
- 운영체제의 입출력 프로그래밍은 항상 장치가 아닌 장치 제어기와 연관되어 처리되기 때문에 장치 제어기와 장치의 명확한 구분 필요
- 컴퓨터는 CPU와 장치 제어기 사이의 통신을 위해서 단일 버스 사용
입출력 소프트웨어 설계시 고려사항
입출력 방식
직접 입출력 방식
<개념>
- CPU가 프로그램을 수행 중 입출력 명령을 만나면 직접 CPU가 나서서 입출력을 수행하는 방식
<수행 방식>
- CPU가 장치 플래그(flag)의 상태를 검사하여 장치 플래그가 0일 때 입출력 명령을 수행
- 데이터 입력시에는 장치 플래그가 0이 되면 입출력 장치의 데이터를 주기억 장치에 넣은 다음 장치 플래그를 1로 설정한 후, 입출력 장치 초기화
- 데이터 출력시에는 장치 플래그가 0이 되면 주기억 장치의 데이터를 입출력 장치에 보낸 다음 장치 플래그를 1로 설정한 후, 입출력 장치 초기화
간접 입출력 방식
<개념>
- 다중 프로그래밍을 구현하기 위해 이용하는 방식
- CPU가 직접 입출력 명령을 담당하지 않고 전용 입출력 프로세서인 DMA나 채널을 사용하는 방식
<수행 방식>
- 어떤 프로그램이 수행되는 도중에 입출력 명령이 발생하면 CPU에게 입출력명령의 종류, 장치 이름, 입출력 프로그램의 등과 같은 정보 전달
- CPU는 입출력 프로세서에게 입출력 명령을 수행토록 하고,입출력 프로세서로부터 입출력 완료 신호가 올 때까지 CPU 자신은 작업을 중단 하지 않고 다른 프로그램을 수행
- 이후에, 입출력 프로세서로부터 입출력 완료 신호가 인터럽트 방식에 의해CPU에게 보고되면,CPU는 현재 수행 중이던 프로그램을 멈추고 입출력이 발생했던 최초의 프로그램으로 복귀하여 중단되었던 프로그램의 수행을 재개
<DMA 방식>
- 입출력 장치로부터 데이터를 직접 기억장치로 전송하는 것
- 직접 입출력 방식과의 차이는 CPU 레지스터를 이용하지 않고 CPU의 사이클을 훔쳐(cycle steal) 입출력을 수행한다는 점
- 사이클 스틸 : CPU와 DMA가 각각 연산과 입출력을 위해 동시에 기억장치를 접근하는 경우, CPU는 기억장치 참조 사이클을 수행하여 입출력을 수행하는 것
- 데이터 전송은 기억장치 버스를 통하여 수행되도록 함으로써 빠르게 데이터전송을 수행
<입출력 채널 방식>
- 입출력 명령은 독립된 입출력 프로세서인 채널이 대신하는 것
- 입출력 명령을 수행하는 동안 CPU는 다른 프로그램을 수행함으로써 CPU의 효율을 향상시킴
- 입출력 프로세서 : PPU 또는 채널이라 불리는 프로세서 그 자체가 하나의 CPU와 유사한 성능을 갖는 프로세서
- 선택 채널(selector channel)
- 멀티플렉서 채널(multiplexor channel)
- 블록 멀티플렉서 채널(block multiplexor channel)