1. Process Controlled Memory Access
- 프로세서가 제어하는 메모리 접근 방식
- Polling
- 프로세서가 주기적으로 입출력장치의 상태를 확인
- 송수신할 데이터가 있는 경우 I/O 실행
- 단순하고 구현이 쉬움
- 입출력장치의 처리속도는 프로세서에 비해 훨씬 느리기 때문에 프로세서의 낭비가 심함
- Interrupt
- 프로세스가 입출력 요청시 프로세서는 입출력장치에 요청을 전달하고 프로세스를 sleep 상태로 전환
- 입출력장치는 입출력 작업 완료시 프로세스에게 작업이 완료되었음을 알림
- 프로세스는 I/O 작업이 완료된 프로세스를 깨우고 ready queue에 다시 삽입
- I/O 요청시 또는 작업 완료시에만 프로세서가 관여하기에 Pooling에 비해 프로세서의 부담이 훨씬 적음
- 인터럽트 처리를 위한 오버헤드가 존재
- 실제 OS들은 대부분 이 방식을 사용
2. Direct Memory Access(DMA)
- 프로세서가 모든 입출력 요청을 직접 제어할 경우 오버헤드가 심함
- 입출력 장치와 메모리를 직접 연결시켜두고 프로세서를 거치지 않아도 입출력장치와
메모리간의 데이터 전송이 가능하도록 하는 방식 - 프로세서는 DMA 컨트롤러에 전송방향(메모리 -> 입출력장치 or 입출력장치 -> 메모리)과
전송 데이터 크기, 메모리 주소 등 작업 수행에 필요한 데이터를 전달하는 역할만을 하고
실제로 데이터를 전송하는 작업은 DMA 컨트롤러가 수행하도록 함
3. 운영체제가 지원하는 입출력 서비스
- I/O 스케줄링
- 입출력 요청에 대한 처리 순서 결정
- 보다 효율적이고 공평한 입출력 처리 지원
- 오류 처리
- 입출력 도중 에러가 발생할 경우의 처리
- 디스크 접근 오류, 네트워크 통신 오류 등
- 입출력장치 관리
- 입출력장치의 상태나 정보를 관리
- 입출력장치의 상태나 정보를 관리
- 버퍼링(Buffering)
- I/O 장치와 프로세스 사이에 전송되는 데이터를 Buffer에 임시로 저장해두는 방식
- 전송속도 차이를 해소할 수 있음
- 캐싱(Caching)
- 자주 사용되는 데이터를 캐싱해두고 접근하려는 데이터가 캐시메모리에 존재할 경우
I/O를 건너뛰고 바로 작업을 수행할 수 있음
- 자주 사용되는 데이터를 캐싱해두고 접근하려는 데이터가 캐시메모리에 존재할 경우
- 스풀링(Spooling)
- 각 프로세스의 입출력 요청을 디스크상에 파일의 형태로 기록 => Spool 생성
- 입출력장치는 기록해둔 파일(Spool)을 순차적으로 전송받아 작업을 처리
- 디스크를 입출력 요청의 버퍼처럼 사용하는 방식
'CS > 운영체제' 카테고리의 다른 글
#25 RAID(Redundant Array of Inexpensive Disk) (0) | 2022.02.07 |
---|---|
#24 디스크 스케줄링(Disk Scheduling) (0) | 2022.02.07 |
#22 파일 시스템 구현(File System Implementation) (0) | 2022.02.04 |
#21 파일 보호(File Protection) (0) | 2022.02.02 |
#20 디렉토리(Directory) (0) | 2022.01.31 |