본문 바로가기

OS

[OS] 장치 관리 _ 방통대 교재 정리

728x90

#####. 장치 관리

###. 장치의 개념

#.컴퓨터 시스템에는 CPU, 메모리 외에도 디스크 드라이브, 키보드, 마우스, 프린터, 네트워크 카드 등 다양한 장치가 존재한다. 이들을 프로세스 관점에서 보면 CPU와 메모리는 프로세스를 실행시키기 위한 필수 요소인 반면, 나머지 장치들은 모두 프로세스 실행 시 데이터 입력이나 출력에 사용되는 입출력 장치로 볼 수 있다.

#. 키보드나 마우스를 통한 사용자의 행위를 프로세스의 입력 데이터로 쓰고, 프로세스가 출력한 데이터를 비디오 디스플레이나 프린터를 통해 사용자에게 보여준다.

#. 네트워크 카드는 네트워크상의 통신 데이터를 프로세스의 입력으로 쓸 수 있게하거나 프로세스의 출력을 네트워크 상으로 보내준다.

 

#. 입출력장치의 일반적인 3가지 범주

 - 전용장치 (dedicated devices)

 - 공용장치 (shared devices)

 - 가상장치 (virtual devices)

 

#. 전용장치

 - 한 번에 단지 하나의 프로세스에만 할당

 - 활성화 시 전체 시간 할당

 - 테이프 드라이브, 프린터, 플로터

 - 단점 : 작업이 이루어지는 동안 오직 하나의 사용자에게만 할당, 다른 유저의 대기시간이 길어짐

 

#. 공용장치

 - 디스크 팩의 경우 여러 프로세스 접근 가능

 - 프로세스 A, B가 각각 접근할 경우 어느쪽이 먼저 처리될 것인가 (read, write) 결정

 

#. 가상장치

 - 첫번째, 두번째 조합

 - 디스크 등 공유 가능한 장치를 이용하여 전용장치를 공용장치처럼 보이게하여 여러 프로세스에 할당하는 것

 - 플로터에 디스크를 이용한 스풀링을 적용하여 공유 가능한 가상 플로터로 변화 가능

 

###. 장치의 구성

#. 논리적 구성

 - 하드웨어 (장치 < = > 장치 제어기) < = > (장치 드라이버) 운영체제 < = > 응용 프로그램 < = > 사용자

 - 장치 제어기 ( device controller )

 : 장치를 직접적으로 다루는 전자장치

 : 장치 안에 포함 되어 있기도 하고 독집적으로 존재하기도 함

 :  장치에서 발생하는 각종 데이터를 전자신호로 변환하여 운영체제로 보내고 운영체제가 요청하는 명령을 받아 장치를 구동, 운영체제가 보내는 출력을 장치에 맞게 변환

 - 장치 드라이버 ( device driver)

 : 운영체제에 장치 드라이버가 설치 된다.

 : 장치 드라이버는 응용 프로그램이 요청한 일반적인 입출력 요청을 해장 장치에 맞도록 변환

 : 장치의 종류나 제조사에 따라 장치제어기가 이해하는 명령이 다르고 종류도 다르다.

 : 장치 제조사에서 장치 드라이버를 제공한다.

 

#. 물리적 구성

 - CPU, 메모리, 그리고 나머지 장치들이 버스(bus)로 연결되어 있어 CPU는 장치제어기에 명령을 보낼 수 있다.

 - 장치 제어기에는 몇 개의 레지스터가 있어서 CPU는 이 레지스터의 값을 보고 장치의 상태를 확인하며 이 레지스터들에게 값을 써서 장치에 명령 할 수 있다.

 - 이때 CPU가 장치 제어기와 통신하는 또다른 방법으로 메모리 매핑 입출력 (memory-apped I/O)가 있다.

 - 메모리 매핑 입출력은 메모리의 특정 영역을 장치제어기의 레지스터와  대응시켜 CPU는 메모리에서 일고 쓰는 일반적인 명령을 수행하는 것으로 장치 제어기의 레지스터를 일고 쓰는 것과 동일한 효과를 얻는다.

 - 입출력 장치의 물리적 구성

 

###. 입출력 처리 유형

#. 프로세스가 진행하며 입출력하는 3가지 유형

 

#. 프로그램 방법

 - CPU만 이용하여 입출력을 처리하는 것

 - 폴링 (polling) : CPU가 입출력장치의 상태를 지속적으로 확인하여 CPU가 원하는 상태가 될떄까지 대기

 - 예로 프린터를 사용하려면 CPU가 먼저 프린터가 가용상태인지 확인하는데, 프린터가 작업중이라면 사용중 상태로 확인됨

 - 10줄로 가정하고 1줄 씩 출력하면 CPU는 계속 상태 체크를 해야하기 때문에 낭비가 심해 비효율

 

#. 인터럽트 방법

 - 이름 그대로 입출력 처리에 인터럽트를 이용

 - 인터럽트 (interrupt) : 어떤 장치가 다른 장치의 작업을 잠시 중단시키고 자신의 상태를 알리는 기능

 - 프로그램 방법처럼 CPU가 장치의 상태를 측정하여 확인하는 것이 아니라 장치가 특정 상태가 되었을 때 CPU에게 자신의 상태를 알려주는 것

 - CPU는 인터럽트가 올때까지 다른 작업을 하면 되고 인터럽트가 발생하면 그떄 작업을 하면 된다.

 - 인터럽트 방법 좀 더 자세히

 : 입출력장치가 가용상태가 되었다고 인터럽트를 담당하는 인터럽트 제어기에 신호를 보내면

 : 인터럽트 제어기는 CPU에 인터럽트 신호를 보냄

 : 그럼 CPU는 현재 실행 중이던 명령만 마치고 즉시 인터럽트에 응답

 : 인터럽트 제어기는 이벤트 대상에 대한 정보를 CPU에게 전송

 : CPU는 현재 상태를 보관하고 필요한 입출력 처리를 한 후 원래 프로세스 실행사태로 복귀

 

 

###. DMA 방법

#. Direct Memory Access 제어기를 이용하여  CPU를 통하지 않고 메모리에 직접 접근하여 데이터를 전송하는 방법

#. CPU는 입출력에 필요한 정보, 소스의 위치와 양 그리고 목적에 대한 정보도 DMA 제어기에 넘김

#. 이때 소스와 목적지 중 하나는 메모리가 된다.

#. DMA제어기는 인터럽트 제어기에 신호를 보내 인터럽트를 발생시켜 CPU에 입출력 작업이 모두 끝났음을 알림

 

#. DMA 방법은 CPU단에서 처리하는게 아니라 Controller 단에서 처리하기 때문에 그 동안 CPU는 프로세스들을 컨트롤 하면서 DMA가 인터럽트를 발생 시키면 그 때 한번만 일하면 되기 때문에 효율이 커진다.

#. CPU와 DMA 제어기 모두 메모리를 액세스 하리 때문에 동시에 액세스를 시도하면 충돌을 유발한다. 그래서 CPU보다 DMA제어기에 우선권을 주는데 이를 cycle stealing이라고 한다.

 

###. 입출력 관리

#. 버퍼링

 - 버퍼(buffer)란 입출력 데이터 등의 정보를 전송할 떄 일시적인 데이터 자장장소로 사용되는 메모리의 일부이다.

 - CPU의 데이터 처리속도와 데이터 전송 속도의 차이로 인한 문제를 이 버퍼를 통해 해결

 - 버퍼를 이용하는 가장 단순한 방법인 단일 버퍼링은 입력장치가 데이터를 버퍼에 저장하면 CPU는 그 데이터를 처리하고, 다시 입력 장치가 다음 데이터를 저장하면 CPU가 또 처리하는 방식으로 진행

 - 버퍼링의 종류로는 단일버퍼, 이중버퍼, 순환버퍼가 있다.

 

#. 스풀링

 - spooling은 입출력 프로세스와 저속 입출력 장치 사이의 데이터 전송을 자기 디스크와 같은 고속 장치를 통하도록 하는 것으로 일종의 버퍼링

 - 프린터에 스풀링을 적용하면 프로세스는 프린터에 직접 대량의 데이터를 쓰는 대신 디스크에 저장하고, 추후 프린터가 가용상태가 되면 디스크에 저장된 내용을 프린터로 인쇄하는 방식

 - 스풀링틀 통하면 프로세스 입장에서는 입출력 작업이 빨리 끝남

 - SPOOL : Simultaneous Peripheral Operation On Line

728x90