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)을 순차적으로 전송받아 작업을 처리
    • 디스크를 입출력 요청의 버퍼처럼 사용하는 방식

+ Recent posts