#####. 장치 관리
###. 장치의 개념
#.컴퓨터 시스템에는 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
'OS' 카테고리의 다른 글
[OS] 분산 운영체제_방통대 교재 정리 (0) | 2023.06.14 |
---|---|
[OS] 저장장치 및 파일 관리_방통대 교재 정리 (2) | 2023.06.14 |
[OS] 페이지 교체 알고리즘 _ 방통대 교재 정리 (0) | 2023.06.13 |
[OS] 가상 메모리_ 방통대 교재 정리 (1) | 2023.06.13 |
[OS] 메모리 관리_방통대 교재 정리 (0) | 2023.06.13 |