UNIX SVR4의 입출력
UNIX에서는 각 개별 입출력 장치는 각각의 특수 파일과 관련됨
- 장치에 대한 읽고 쓰기 → 장치와 연결된 특수 파일에 읽기 및 쓰기 요청
- 파일 서브 시스템 → 보조기억장치의 파일들 관리 + 장치를 파일처럼 다루기 때문에 프로세스가 장치를 사용할 수 있는 인터페이스 역할
- UNIX의 입출력
- 버퍼 방식
- 시스템 버퍼 캐시
- 문자 큐
- 버퍼를 사용하지 않는 입출력 방식
- DMA 장치를 이용한 입출력 모듈과 프로세스 입출력 영역 간의 직접적인 데이터 전송
- 버퍼 방식
버퍼 캐시
- 디스크 캐시로 디스크의 입출력 연산들을 버퍼 캐시를 통해 처리
- 버퍼 캐시와 사용자 프로세스 공간 사이의 데이터 전송은 DMA 활용
- 블록 교체에는 LRU 알고리즘 사용
버퍼 캐시를 관리하기 위한 리스트
- 가용 리스트
- 할당 가능한 모든 캐시 슬롯의 리스트
- 장치 리스트
- 현재 각 디스크와 연관되어 있는 모든 버퍼들의 리스트
- 드라이버 입출력 큐
- 특정 장치에서 입출력이 실행되기를 기다리거나 현재 입출력이 진행 중인 버퍼들의 리스트
작동 과정
특정 장치 상에 있는 물리적 번호가 참조되면 운영체제는 그 블록이 버퍼 캐시에 있는지 검사 → 해시테이블로 구성된 장치 리스트에서 각각의 참조가 해시테이블의 특정한 항목으로 매핑됨 → 각 버퍼와 존재하는 해시 포인터는 그 해시 테이블 항목을 위한 체인의 다음 버퍼를 가리킴
문자 큐
단말기나 프린터와 같은 문자형 장치 → 다른 유형의 버퍼링이 적절 문자 큐는 입출력 장치가 쓰고 프로세스가 읽거나 프로세스가 쓰고 장치가 읽음 ⇒ 문자 큐들은 오직 한 번만 읽혀질 수 있음
버퍼를 사용하지 않는 입출력
단순히 장치와 프로세스 공간 사이의 DMA를 의미 프로세스가 쓸 수 있는 가장 빠른 입출력 방법 버퍼를 사용하지 않는 입출력을 수행하는 프로세스는 주기억장치에 잠겨 스왑될 수 있음 ⇒ 주기억장치 일부를 고착시켜 스와핑 기회를 줄임.
UNIX 장치
| 구분 | 버퍼를 사용하지 않는 입출력 | 버퍼 캐시 | 문자 큐 |
|---|---|---|---|
| 디스크 장치 (블록형) | X | X | |
| 테이프 장치 (블록형) | X | X | |
| 단말기 (문자형) | X | ||
| 통신 라인 (문자형) | X | ||
| 프린터 (문자형) | X | X |