입출력 시스템
- 모니터나 프린터 같은 물리적 입출력장치가 실제로 입출력을 수행
- 중간에 입출력 모듈을 두어 메모리나 프로세서, 레지스터 등 내부 저장장치와 물리적 입출력 장치 사이의 이진 정보를 전송
시스템 버스의 종류
- 주소 버스
- 단방향의 전자회로
- 주기억장치에서 MAR이 주소를 읽어옴
- MAR: 현재 접근할 메모리의 주소를 기억하는 레지스터
- 데이터 버스
- MBR로 읽어온 주소의 데이터나 명령을 가져옴
- MBR: 데이터를 메모리와 주변 장치 사이에서 송수신하여 저장하는 버퍼
- 제어 버스
입출력 모듈
- 입출력장치의 늦은 속도로 따로 입출력만을 위한 프로그램
- 프로세서를 대신하여 입출력 모듈이 입출력과 관련된 복잡한 일을 처리(입출력 채널 or 입출력 프로세서)
- 단순히 프로세서의 입출력과 관련된 일을 담당하면 입출력 제어기(장치 제어기)
입출력 모듈의 구성
- 입출력장치의 수와 구조에 따라 다양하게 구성 가능
- 입출력 모듈로 들어가거나 나오는 데이터는 데이터 레지스터에 일시 저장
- 현재의 상태 정보를 저장하는 상태 레지스터는 제어 레지스터로 동작
- 상태 레지스터에는 프로세서의 명령에 따라 입출력 모듈을 제어하는 장치와 인터페이스를 제어하는 입출력 논리회로가 있음
- 입출력 논리회로: 상태 레지스터가 제어하는 장치의 주소를 인식하고 주소도 발생할 수 있어야 하므로 연결된 각 장치와 인터페이스를 제어하려고 장치 인터페이스를 포함, 제어 버스로 프로세서와 교신
컴퓨터 입출력 방식
- 직접 입출력
- 간접 입출력
- 직접기억장치 액세스(DMA)
- 입출력 채널(I/O Channel)
폴링 방식 직접 입출력
- CPU가 프로그램 수행 중 입출력 명령을 만나면, 직접 CPU가 나서서 입출력을 실행하는 방법
- 입출력 연산의 종료 시점을 결정하고 주기억장치와 장치 제어기 간의 데이터 전송을 CPU가 책임지는 방법
- 입출력장치가 연산을 종료하는 시점을 결정하기 위해 장치구동기 소프트웨어가 장치 제어기 상태 레지스터를 끊임없이 폴링(polling)
- 읽기 연산 과정
- 응용 프로세스가 읽기 연산 요청
- 장치 구동기는 장치가 쉬고 있는지를 알아내기 위해 상태 레지스터 검사
- 장치 구동기는 읽기 명령을 장치 제어기의 명령 레지스터에 저장하여 장치를 시작시킴
- 장치 구동기는 장치가 읽기 연산을 완료하기를 기다리는 동안 반복적으로 상태 레지스터 검사 → polling
- 장치 구동기는 장치 제어기 데이터 레지스터의 내용을 사용자 프로세스 공간으로 복사
- 데이터 출력 과정
- 응용 프로세스가 쓰기 연산을 요청
- 장치 구동기는 장치가 쉬고 있는지를 알아내기 위해 상태 레지스터 검사
- 장치 구동기는 사용자 기억장치 공간에서 장치 제어기의 데이터 레지스터로 데이터를 복사
- 장치 구동기는 쓰기 명령을 제어기 명령 레지스터에 저장하여 장치를 시작시킴
- 장치 구동기는 장치가 쓰기 연산을 완료하기를 기다리는 동안 반복적으로 상태 레지스터 검사 → polling
인터럽트 방식 직접 입출력
- 인터럽트를 컴퓨터 하드웨어에 도입하는 이유
- 장치 구동기 소프트웨어가 제어기 상태 레지스터를 계속 polling 할 필요성을 제거
- 연산이 완료되었을 때 장치제어기가 자동으로 장치 관리자에게 완료 사실을 통보
- 인터럽트를 이용한 입출력에서 장치관리자의 4가지 기능
- 장치 구동기의 연산 초기화
- 장치상태 테이블 관리
- 인터럽트 처리기 관리
- 장치 처리기(device handler) 관리
- 인터럽트 방식 직접 입출력
- 응용 프로세스가 읽기 연산 요청
- 장치 구동기는 상태 레지스터 검사
- 장치 구동기는 읽기 명령을 장치 제어기의 명령 레지스터에 저장하여 장치를 시작시킴
- 장치 구동기는 연산 초기화가 종료할 때 장치 구동기가 시작시킨 연산과 관련된 정보를 장치상태 테이블에 저장
- 장치 관리자는 프로세스 관리자의 스케줄러를 호출하여 스케줄링된 다른 프로세스에 CPU를 사용하게 하고 이후 장치관리자는 종료
- 입력연산을 종료하면 CPU에 인터럽트를 걸어 인터럽트 처리기 실행
- 인터럽트 처리기는 어떤 장치가 인터럽트를 걸었는지 알아내고 해당 장치의 장치 처리기로 분기
- 장치 처리기는 장치 상태 테이블에서 보류된 입출력 상태정보를 추출
- 장치 처리기는 제어기의 데이터 레지스터 내용을 사용자 프로세스 공간으로 복사
- 장치 처리기는 응용 프로세스에게 제어를 반환
DMA 간접 입출력
- DMA 제어기에 I/O 장치 제어기를 직접 연결하고 I/O 버스를 사용
- DMA는 CPU가 개입하지 않고 입출력 장치와 주기억장치 사이에 데이터를 전송
- DMA 제어기: 주소 레지스터, 데이터 레지스터, 카운트(계수) 3개의 레지스터 및 버스 요구(BUS REQ), 버스 승인(BUS GRANT), 인터럽트(INTR), 읽기(RD), 쓰기(WR) 신호로 구성된 제어회로
- DMA에 의한 데이터 입출력 수행 단계
- 프로그램 수행 도중 CPU가 입출력 명령을 만남
- CPU는 DMA에게 정보 전송
- I/O 장치 주소, I/O 명령의 종류, 기억장치 내의 데이터의 위치, 전송될 양 등 입출력 명령
- CPU와 독립적으로 DMA는 기억장치의 데이터를 직접 입출력
- 이때, CPU는 입출력 명령을 내린 후 다른 프로그램을 수행
- 주기억장치와 주변장치 사이에 실제의 데이터 전송, 전송 데이터가 남아 있으면 1~4의 과정 반복
- DMA는 입출력 완료 시 CPU에게 인터럽트로 완료 사실 보고
- 사이클 스틸: CPU와 DMA가 각각 연산과 입출력을 하려고 동시에 기억 장치를 접근할 때, CPU는 기억장치 참조 사이클을 멈추게 하고 DMA가 우선적으로 기억장치 참조 사이클을 수행하여 입출력을 수행하는 것
입출력 채널
- 전용 입출력 프로세서 (I/O Processor)
- 입출력은 독립된 입출력 프로세서인 채널이 대신하고, 입출력을 수행하는 동안 CPU는 다른 프로그램 실행
- 채널: 그 자체가 하나의 CPU와 비슷한 성능을 가지는 프로세서
- CPU와 기억장치 공유
- 범용 레지스터는 없고 명령어 주소 레지스터, 데이터 카운터 등 내부에 몇 개의 레지스터 사용
- 한 컴퓨터 시스템에는 최대 8대의 채널을 둘 수 있고, 채널당 최대 8대의 주변장치들을 연결 가능
- 입출력 채널의 종류
- 선택(selector) 채널
- 한 순간에 하나의 주변장치만을 선택하여 연결하여 처리
- 주로 디스크나 드럼과 같이 고속인 장치들을 연결
- 멀티플렉서(multiplexor) 채널
- 일시에 여러 장치들을 연결하여 처리하고 주로 터미널, 프린터 같은 저속의 장치들을 연결
- 블록 멀티플렉서(block multiplexor) 채널
- 주로 블록 단위로 입출력하는 테이프 같은 장치와 연결하여 처리
- 다수의 주변장치들을 멀티플렉싱하며 동시에 처리
커널 입출력
- 커널 입출력 서브 시스템: 운영체제의 커널은 컴퓨터의 효율성을 높이기 위해 주기억장치나 디스크 등과 같은 기억 장소를 이용하여 입출력과 관련된 많은 서비스를 제공
- 입출력 스케줄링, 버퍼링, 캐싱, 스풀링, 장치 예약, 에러 처리 등
- 커널 입출력 스케줄링: 커널의 일련의 입출력 요구 스케줄링은 전반적인 시스템 성능을 향상시키면서 프로세스들의 요구를 공평하게 처리할 수 있도록 입출력 요구의 실행 순서를 결정함으로써, 입출력 완료까지의 평균 대기시간을 줄임
- 오류 처리: 커널(OS)은 입출력장치나 네트워크 전송의 원인으로 발생되는 일시적인 고장을 효과적으로 극복 가능
- 자료 관리: 커널 입출력 서브 시스템은 광범위한 서비스를 조정, 다음 사항을 관리
- 장치의 이름 및 장치에 대한 액세스 제어 관리
- 장치 할당과 입출력 스케줄링 관리
- 버퍼링, 캐싱 및 스풀링 관리
- 장치 상태 모니터링과 오류 처리 및 고장 복구 관리
커널 입출력 캐싱
- 캐시의 위치: 온 칩(on chip), 주기억장치, I/O 프로세서 보드 혹은 제어기 보드
- 디스크 캐시(disk cache): 디스크와 주기억장치의 접근 속도 차이를 줄이기 위해 그 사이에 설치하는 반도체 기억장치
- 주기억장치로부터 디스크로 읽혀 나갈(swap-out) 정보들을 일시적으로 저장하는 버퍼 역할