OS 는 프로세스, 주소공간, 파일들에 대한 추상을 제공할 뿐만 아니라, 컴퓨터의 입출력 장치들을 관리한다.
여기에서는 OS 가 입출력을 어떻게 관리하는지 알아보겠다.
I/O 장치의 유형
블록 장치
문자 장치
기타 장치
I/O 장치 구성 요소
장치 컨트롤러
분리된 I/O 및 메모리 공간
I/O와 메모리에 서로 다른 주소 공간 할당
각 제어 레지스터에 I/O 포트 번호 를 할당
특수 I/O 명령어를 사용함
IN REG, PORT, OUT PORT, REG메모리 매핑된 I/O
각 제어 레지스터에 고유 메모리 주소 할당
일반 메모리 참조 명령어를 사용하여 제어 레지스터에 접근
store REG, Ether_Control_REG1하이브리드 방식
메모리 매핑된 I/O의 장점
특수 명령어가 필요하지 않음
사용자 프로세스가 I/O 수행을 제한하는 특별한 보호 메커니즘 불필요
메모리를 참조할 수 있는 모든 명령어가 제어 레지스터를 참조 가능
LOOP: TEST PORT_4
BEQ READY
BRANCH LOOP
READY:캐시를 선택적으로 비활성화할 하드웨어 필요
모든 메모리 모듈과 I/O 장치는 모든 메모리 참조를 검사해야 함
메모리 버스와 I/O 버스가 분리된 경우 세 가지 선택사항:
DMA (직접 메모리 접근)
특정 하드웨어 장치가 CPU의 개입 없이 메모리를 읽거나 씀
CPU가 데이터 전송에 전체적으로 관여해야 하는 기존 방식에서 벗어남
CPU는 전송을 시작하고 다른 작업을 수행하다가 전송 완료 시 DMA 컨트롤러로부터 인터럽트 를 받음
DMA 전송 모드
Cycle Stealing (사이클 훔치기)
Burst Mode (버스트 모드)

(중요!) 대부분의 DMA 컨트롤러는 물리적 주소 를 사용물리적 주소 만 전송함
인터럽트 벡터
하드웨어 상태 정보 저장 위치 (스택을 어디에 만들 것인가)
현재 유저 스택
페이지 폴트 발생 가능커널 스택
context switch 필요정확한(interrupt 정확도) 인터럽트와 부정확한 인터럽트
정확한 경우, 시스템 상태가 잘 정의된 상태로 유지
부정확한 경우, 운영체제가 많은 내부 상태 정보를 처리해야 함
과거에는 운영체제가 실린더 번호, 섹터 번호, 표면 번호, 전송 크기를 지정해야 했음
현대 디스크는 더 복잡함
모든 섹터가 동일 크기가 아니며, 섹터가 재배치됨
디스크는 더 높은 수준의 인터페이스 제공 (예: SCSI)
[0 ... N] 범위의 논리 블록 배열로 제공IBM Ultrastar 36XP 드라이브:
탐색(Seek): 디스크 암을 올바른 실린더로 이동
디스크 암 이동 속도에 따라 달라짐
탐색 시간은 점차 줄어들고 있음
회전(Rotation): 헤드 아래 섹터가 오기를 기다림
디스크 회전 속도에 따라 달라짐
속도가 점차 증가하고 있음
전송(Transfer): 데이터를 디스크 표면에서 디스크 컨트롤러로 전송한 뒤 호스트로 전달
디스크의 데이터 밀도에 따라 달라짐
데이터 밀도는 빠르게 증가하고 있음
데이터 조각을 여러 디스크에 라운드 로빈 방식으로 분배
대용량 요청 시 성능이 뛰어남
데이터가 한 섹터씩 요청되는 경우 성능 이득 없음
중복 데이터가 없어 신뢰성이 단일 디스크보다 낮음
플래시 메모리를 사용하여 데이터를 영구 저장
플래시 메모리 구조:
페이지: 데이터 저장의 기본 단위, 읽기/쓰기 작업 단위
블록: 페이지의 집합, 지우기 작업의 최소 단위
HDD와 달리 덮어쓰기가 불가능하며, 삭제 후 쓰기가 필요