본문 바로가기
전공/운영체제

Ch10. 입출력 시스템과 저장장치_01)입출력 시스템(2)

by 임 낭 만 2023. 6. 15.

커널 입출력 서브 시스템

커널 입출력 구조

  • 커널(운영체제)이 제공하는 입출력 서비스와 입출력 인터페이스를 입출력 장치들이 정의한 방법에 따라 실행하려면 먼저 인터페이스를 구성해야 함
  • 커널 입출력 구조

커널 입출력 구조

커널이 제공하는 입출력 관련 서비스 (컴퓨터의 효율성 증진)

  • 입출력 스케줄링
    • 입출력 요구를 스케줄링 한다는 것은 요구들의 실행 순서를 결정한다는 의미
  • 버퍼링
    • 버퍼링은 입출력장치와 응용 프로그램 사이에 전송되는 데이터를 버퍼에 임시로 저장하는 방법
    • 버퍼링은 송신자와 수신자의 전송속도 차이로 발생하는 시스템의 데이터 전송 문제를 해결

버퍼링 사용 예

캐싱

  • 캐싱은 명령어와 데이터를 캐시에 일시적으로 저장하여 프로세서와 메모리 간의 액세스 속도 차이를 줄여서 컴퓨터 성능 향상 방법
  • 캐시는 버퍼와 달리 자주 사용할 자료를 미리 복사하여 저장하는 빠른 메모리 영역 데이터가 위치하는 유일한 장소가 버퍼라고 한다면, 다른 곳에 저장된 데이터의 복사본을 저장하는 장소는 캐시

스풀링

  • 많은 응용 프로그램이 동시에 출력 데이터를 프린터로 전송하면 커널(운영체제)은 각 출력이 다른 프로그램의 출력과 섞이지 않고 프린터로 출력할 수 있도록 관리
  • 각 응용 프로그램의 출력은 각각 대응되는 디스크 파일에 스풀링한다
  • 스풀링 시스템은 응용 프로그램이 출력 데이터 작업을 종료하면 그때까지 모아 놓은 출력 데이터를 프린터 출력용 준비 큐에 삽입하여 스풀 파일을 한 번에 하나씩 프린터에 내보낸다

직접메모리 접근

DMA

  • CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한
  • 입출력 제어기에는 직접 메모리에 접근하기 위한 DMA 제어기가 마련되어 있음
  • 입출력 제어기는 여러 채널에 연결된 주변 장치로부터 전송된 데이터를 적절히 배분하여 하나의 데이터 흐름을 만듦
  • 채널 선택기는 여러 채널에서 전송된 데이터 중 어떤 것을 메모리로 보낼지 결정
  • 주변장치에서 전송된 데이터는 DMA 제어기를 거쳐 메모리에 올라감
  • 메모리에서 주변장치로 데이터를 전송할 때는 DMA 제어기가 메모리에서 데이터를 가져오면 채널 선택기에서 적당한 채널로 전송

입출력 제어기

메모리 공간분할

  • CPU의 작업 공간과 DMA의 작업 공간이 겹치는 것을 방지하기 위해 과거에는 DMA 제어기가 전송하는 데이터를 ‘입출력 메모리’라는 별도의 메모리에 보관
  • 현재는 CPU가 작업하는 공간과 DMA 제어기가 데이터를 옮기는 공간을 분리하여 메인 메모리를 운영하는데, 이를 메모리 맵 입출력memory mapped I/O이라고 부름

메모리 공간 분할


인터럽트

입출력과 인터럽트

  • 인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 역할을 하는 신호
  • 예) CPU가 요청한 작업을 완료했을 때, 키보드로 데이터를 입력 받았을 때, 네트워크 카드에 새로운 데이터가 도착했을 때, 하드웨어에 이상이 발생 했을 때 등
  • 각 장치에는 (IRQ:Interrupt ReQuest)라는고유의 인터럽트 번호가 부여되어 있음
  • 인터럽트가 발생하면 CPU는 IRQ를 보고 어떤 장치에서 인터럽트가 발생했는지 파악

인터럽트 종류

  • 외부 인터럽트: 입출력 장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류때문에 발생하는 인터럽트를 포함
  • 내부 인터럽트: 프로세스의 잘못이나 예상치 못한 문제 때문에 발생하는 인터럽트
  • 숫자를 0으로 나누거나, 자신의 주소공간을 벗어나서 작업하는 것(세그먼데이션 오류)
  • 시그널: 사용자가 직접 발생시키는 인터럽트(예: 작동중인 프로세스를 끝내려고 [Ctrl+C] 키를 누름)

인터럽트 벡터

  • 여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하기 위해 사용하는 자료 구조
  • 인터럽트 벡터의 값이 1이면 인터럽트가 발생했다는 의미

인터럽트 벡터와 인터럽트 핸들러

인터럽트 핸들러

  • 인터럽트의 처리 방법을 함수 형태로 만들어놓은 것
  • 운영체제는 인터럽트가 발생하면 인터럽트 핸들러를 호출하여 작업함
  • 인터럽트 벡터에는 해당 인터럽트 핸들러를 호출할 수 있도록 인터럽트 핸들러가 저장된 메모리의 주소가 포인터 형태로 등록되어 있음
  • 사용자 인터럽트인 시그널의 경우 자신이 만든 인터럽트 핸들러를 등록할 수도 있음
  • 예) [Ctrl+C] 키를 누르면 해당 프로세스를 종료하는 것이 아니라 종료여부를 물어보거나 지금까지 작업한 내용을 저장하도록 인터럽트 핸들러를 바꿀 수 있음

인터럽트 벡터와 인터럽트 핸들러


버퍼링

버퍼

단일 버퍼와 이중 버퍼

  • 속도가 다른 두 장치 속도 차이를 완화하는 역할을 하는 저장 공간
  • 하드디스크나 CD-ROM 등 대부분의 입출력장치는 버퍼를 사용해 느린 속도를 보완함
  • 주변 장치뿐 아니라 커널에서도 버퍼를 사용함, 커널이 입출력장치로 보내야 할 데이터를 버퍼에 담아 놓으면 입출력 제어기가 커널 버퍼에서 입출력장치로 데이터를 보냄
  • 스풀러를 사용하는 프린터도 동일한 경우임. 응용프로그램은 스풀러가 없으면 출력이 완료될때까지 다른 작업을 못함
  • 스풀러를 사용하면 출력할 데이터를 스풀러로 보낸 후 바로 다음작업을 할 수 있음
  • 이중 버퍼를 사용하면 한 버퍼는 데이터를 담는 용도로 쓰고 또 한 버퍼는 데이터를 가져가는 용도로 쓸 수 있어 유용

버퍼운용시 주의점

하드웨어 안전 제거

  • 시스템의 효율성을 위해 운영체제는 버퍼가 Full일 때 입출력장치로 데이터를 전송하도록 설계
  • 만약 버퍼에 데이터가 Full이 아니면 일정시간 경과 후 데이터를 전송함
  • 이런 방법이 종종 문제를 일으킴. USB 사용하는 경우, 사용자가 파일복사 명령을 내리면 입출력제어기는 버퍼에 파일을 복사한 다음 입출력이 완료되었다고 알려줌
  • 그러나 버퍼가 Full이 아니면 버퍼가 Full이 될 때까지 입출력장치에 자료가 전송되지 않음
  • 이 상태에서 저장장치를 제거하면 버퍼 안의 데이터가 저장되지 않는 문제가 발생함
  • 버퍼의 이런 특성 때문에 윈도우에서는 외부저장 장치를 제거할 때 “하드웨어 안전 제거”를 권고함
  • 하드웨어 안전제거를 사용하면 버퍼가 다 차지 않아도 강제로 버퍼의 내용이 저장장치로 이동함, 이를 플러시(flush: fflush(): 유닉스 명령)라고 함

댓글