커널 입출력 서브 시스템
커널 입출력 구조
- 커널(운영체제)이 제공하는 입출력 서비스와 입출력 인터페이스를 입출력 장치들이 정의한 방법에 따라 실행하려면 먼저 인터페이스를 구성해야 함
- 커널 입출력 구조
커널이 제공하는 입출력 관련 서비스 (컴퓨터의 효율성 증진)
- 입출력 스케줄링
- 입출력 요구를 스케줄링 한다는 것은 요구들의 실행 순서를 결정한다는 의미
- 버퍼링
- 버퍼링은 입출력장치와 응용 프로그램 사이에 전송되는 데이터를 버퍼에 임시로 저장하는 방법
- 버퍼링은 송신자와 수신자의 전송속도 차이로 발생하는 시스템의 데이터 전송 문제를 해결
캐싱
- 캐싱은 명령어와 데이터를 캐시에 일시적으로 저장하여 프로세서와 메모리 간의 액세스 속도 차이를 줄여서 컴퓨터 성능 향상 방법
- 캐시는 버퍼와 달리 자주 사용할 자료를 미리 복사하여 저장하는 빠른 메모리 영역 데이터가 위치하는 유일한 장소가 버퍼라고 한다면, 다른 곳에 저장된 데이터의 복사본을 저장하는 장소는 캐시
스풀링
- 많은 응용 프로그램이 동시에 출력 데이터를 프린터로 전송하면 커널(운영체제)은 각 출력이 다른 프로그램의 출력과 섞이지 않고 프린터로 출력할 수 있도록 관리
- 각 응용 프로그램의 출력은 각각 대응되는 디스크 파일에 스풀링한다
- 스풀링 시스템은 응용 프로그램이 출력 데이터 작업을 종료하면 그때까지 모아 놓은 출력 데이터를 프린터 출력용 준비 큐에 삽입하여 스풀 파일을 한 번에 하나씩 프린터에 내보낸다
직접메모리 접근
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(): 유닉스 명령)라고 함
'전공 > 운영체제' 카테고리의 다른 글
Ch10. 입출력 시스템과 저장장치_02)디스크 장치(2) (0) | 2023.06.15 |
---|---|
Ch10. 입출력 시스템과 저장장치_02)디스크 장치(1) (0) | 2023.06.15 |
Ch10. 입출력 시스템과 저장장치_01)입출력 시스템(1) (0) | 2023.06.15 |
Ch09. 가상 메모리 관리_04)스레싱과 프레임 할당 (0) | 2023.06.13 |
Ch09. 가상 메모리 관리_03)페이지 교체 알고리즘 (0) | 2023.06.13 |
댓글