📚장치의 개념

컴퓨터 시스템에서 CPU와 메모리는 프로세스를 실행시키기 위한 필수 요소이지만 나머지 장치들은 모두 데이터 입력이나 출력에 사용되는 입출력 장치로 볼 수 있다. 입출력 장치는 세 가지 범주로 구분된다.

  • 전용장치(dedicated devices)
    전용 장치는 한번에 하나의 프로세스에만 할당된다. 그리고 할당될 때 전체 시간이 할당된다. 테이프 드라이브, 프린터 등이 여기에 해당한다.

  • 공용장치(shared devices)
    공용 장치는 여러 프로세스에 할당될 수 있다. 직접접근 저장장치는 여러 프로세스에 의해 동시에 공유될 수 있다. 여기서 프로세스들의 요구는 스케줄링 기법을 통해 효율적으로 처리되어야 한다.

  • 가상장치(virtual devices)
    가상장치는 위 둘의 조합으로 공유 가능한 장치를 이용하여 전용장치를 공용장치처럼 보이게 한다. 그래서 여러 프로세스에 할당된다. 플로터에 디스크를 이용한 스풀링을 적용하여 가상의 플로터로 만드는 것이 여기에 해당한다.


📚장치의 구성

📄논리적 구성

하드웨어 부분에 장치와 장치 제어기가 있다. 장치제어기는 장치를 직접적으로 다루는 전자장치이다. 장치제어기는 장치에서 발생하는 여러 데이터를 전자신호로 변환하여 운영체제로 보내고 운영체제가 요청하는 명령을 받아 장치를 구동시키며 운영체제가 보내는 출력을 장치에 맞게 변환한다.

운영체제 부분에는 장치 드라이버가 있는데 이것은 응용 프로그램이 요청한 일반적인 입출력 요청을 해당 장치에 맞게 변환해준다. 장치의 종류가 다 다르고 제조사 마다 장치를 만들 때 사용하는 명령이 다를 수 있기 때문이다.

IOStructure
https://www.tutorialspoint.com/operating_system/os_io_software.htm


📄물리적 구성

CPU와 메모리, 나머지 장치들이 버스(bus)로 연결되어 있어 CPU는 장치제어기에 명령을 보낼 수 있다. 장치제어기에 레지스터가 있어서 CPU는 이 레지스터들을 이용해 장치 제어기와 통신한다. 또한 CPU와 장치제어기는 메모리 사상 입출력을 이용해 통신한다.

DeviceController
https://www.geeksforgeeks.org/device-controllers-in-operating-system/



📚입출력 처리 유형

📄프로그램 방법

프로그램 방법은 CPU만 이용하여 입출력을 처리하며 폴링을 이용한다. 폴링(polling)은 CPU가 입출력장치의 상태를 지속적으로 확인하여 CPU가 원하는 상태가 될 때까지 기다리는 것이다. 이 방법은 CPU의 낭비가 심해 비효율적이다.


📄인터럽트 방법

인터럽트 방법은 입출력 처리에 인터럽트를 이용한다. 인터럽트(interrupt)는 어떤 장치가 다른 장치의 작업을 잠시 중단시키고 자신의 상태를 알리는 기능이다.


📄DMA 방법

DMA(Direct Memory Access)는 DMA 제어기를 이용해 CPU를 거치지 않고 메모리에 직접 접근하여 데이터를 전송하는 방법이다. 이 방법은 한번에 입출력량이 많은 경우 인터럽트 발생 횟수를 한번으로 줄여주기 때문에 CPU의 효율을 더 증대시켜 준다.

CPU와 DMA가 동시에 메모리를 액세스할 때 CPU보다 DMA 제어기에 우선권을 준다. CPU로부터 메모리 사이클을 훔쳐 냈다고 해서 사이클 스틸링(cycle stealing)이라고 한다.



📚입출력 관리

📄버퍼링

버퍼는 데이터를 전송할 때 일시적인 데이터 저장 장소로 사용되는 메모리의 일부이다. CPU의 데이터 처리 속도와 데이터 전송 속도 차이로 인한 문제를 버퍼를 통해 해결한다.

  • 단일 버퍼링
    입력 장치가 데이터를 버퍼에 저장하면 CPU가 해당 데이터를 처리하는 방식이다. 버퍼에 데이터를 저장하는 동안에 데이터에 대한 처리가 이뤄지지 않고 데이터가 처리되는 중에 다른 데이터가 저장될 수 없어 비효율적이다.

  • 이중 버퍼링
    데이터의 저장과 처리가 동시에 일어날 수 있는 방식이다.

  • 순환 버퍼링
    이중 버퍼링 방식에서 확장하여 여러 개의 버퍼를 돌아가면서 사용한다.


📄스풀링

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

스풀링을 사용하면 프로세스 입장에서는 입출력 작업이 빨리 끝나게 된다. 프로세스는 스풀링을 통하여 저속 입력장치의 작업이 완료될 때까지 대기하지 않아도 된다. 고속의 공용장치인 디스크라는 스풀에 작업할 데이터를 저장함으로써 저속 입출력장치의 작업이 끝나기 때문이다.

스풀링은 독립적으로 사용해야 하는 장치를 다른 프로세스가 동시에 사용할 수 있는 것처럼 보이게 하는 가상장치로 변화시켜 준다.



Leave a comment