OS

입출력 시스템

Debin 2021. 12. 2.
반응형

입력 장치에는 마우스, 키보드, 게임 패드 등이 있다. 출력 장치는 모니터, 그래픽 카드, 프린터 등이 있다. 입출력 장치는 Lan 카드, 하드 디스크, USB 등이 있다.

입출력 장치는 CPU를 통해 입출력 정보가 들어가고 나오며 메모리에 이 정보들이 저장된다. 

입출력 시스템은 입출력 장치 + 입출력 모듈이다. 입출력 장치를 제어하는 데 사용되는 것이 입출력 모듈이다. 이런 입출력 장치에서는 메인 메모리와 CPU 간의 데이터가 주고받는데 이 데이터가 돌아다니는 통로가 버스다. 버스는 데이터 버스, 어드레스 버스, 컨트롤 버스가 있다. 입출력 시스템에는 상태를 저장하는 상태, 제어 레지스터와 데이터를 저장하는 데이터 레지스터가 있다. 만약 키보드가 눌렸다면 이 상태는 상태, 제어 레지스터에 저장된다. 눌린 값은 데이터 레지스터에 저장된다. 이런 정보들은 모두 CPU로 간다.

 

다음은 입출력 방식이다.

먼저 입출력 방식이다. Programmed I/O라고도 하며, 폴링 방식이라고도 한다. 순서를 살펴보자.

 

  1. 먼저 상태 레지스터를 체크한다. 예를 들어 해당하는 키보드가 눌렸다면 상태는 1이다.
  2. 상태 레지스터 값이 1이면 데이터 레지스터에서 CPU로 데이터를 가져온다.
  3. 그리고 이제 상태 레지스터의 값을 0으로 변경한다.

 

이 방식은 상태 레지스터 체크를 주기적으로 많이 검사해야 한다. 즉 바쁜 대기가 존재한다. 체크하는 액션을 폴링이라고 한다. 폴링의 간격이 길어지면 성능은 올라가지만 상태 레지스터에서 데이터 분실이 가능하다. 체크 간격이 짧으면 성능은 낮아지나 데이터 분실 가능성이 적어진다.

 

다음은 인터럽트 기반 입출력 Interrupt I/O 방식이다. CPU가 큰 관여를 하지 않는다. 순서를 알아보자.

 

  1. 인터럽트 핸들러를 등록해야한다. 말 그대로 인터럽트가 발생하면 이를 처리하는 함수 같은 개념이다.
  2. 이후 입출력 제어기를 초기화한다. (이 방식을 통해 우리는 바쁜 대기를 할 필요가 없다.)
  3. 이제 자판이 눌리면 인터럽트가 발생한다.
  4. 그러면 인터럽트 핸들러가 실행되며 데이터를 가지고 와서 CPU로 전달한다.

이 방식은 인터럽트 처리기가 필요하며, 스택 공간이 필요하다. 프로세서가 대기하지 않아서 효율성이 증가한다.

 

마지막으로 직접메모리접근 DMA 입출력 방식이다.

 

  1. 프로세서는 전송방향, 전송 바이트 수, 데이터 블록의 메모리 주소를 DMA 제어기에 보낸다.
  2. DMA 제어기는 프로세스의 도움 없이 데이터를 메인 메모리로 전송할 것을 요청한다.
  3. 디스크 제어기는 메인 메모리에 데이터를 직접 전송한다.
  4. 전송이 완료되면 디스크 제어기는 DMA 제어기에 완료 메시지를 전달한다.
  5. DMA 제어기는 프로세서에 인터럽트 신호를 보낸다.

 

프로세서는 오직 데이터의 전송 시작, 종료에만 관여한다. 데이터는 버스를 통해 운반되는데 버스 권한은 CPU가 가지고 있다. 따라서 디스크 제어기는 CPU 눈치를 보면서 버스를 사용한다. 사용하는 방법은 2가지가 있는데 CPU가 버스를 사용하지 않을 때만 사용하는 것과 우선순위를 부여해 사용하는 것이다. 이런 연유로 사이클 스틸링이라고도 불린다.

 

디스크는 HDD와 SSD가 존재한다.

자기 디스크의 구조는 디스크 원판, 헤더, 트랙, 섹터, 실린더, 블록 등으로 구성된다.

트랙마다 각각의 헤드가 있으며, 헤드 아래에 데이터를 저장/읽기 한다. 섹터는 32 ~4096Byte, 트랙당 4 ~32 섹터, 디스크 표면 당 20 ~ 1500 트랙으로 구성된다.

 

디스크의 성능은 접근 시간으로 판단한다. 접근 시간은 3가지로 구성된다.

액세스 시간, 즉 접근시간은 전송 시간, 탐색 시간, 회전 지연 시간으로 구성된다.

탐색 시간은 원하는 트랙을 찾아 이동하는데 시간이다.

디스크를 돌려서 원하는 섹터까지 걸리는 시간이 회전 지연 시간이다.

전송 시간은 데이터를 읽어서 보내는데 걸리는 시간이다.

 

대신 고정헤드일 때, 이동 헤드일 때 차이가 있다. 고정 헤드는 디스크를 다 감싸는 헤드다. 이때는 탐색 타임을 없앨 수 있다.

 

다음은 디크스 인터리빙 기법이다. 성능 개선을 위해 등장했다. (시간적 측면)

디스크에서 읽은 데이터를 프로세서를 전송하는 동안에 디스크 헤드는 다음에 읽을 섹터를 지나쳐 버리는 문제가 생긴다. 이를 디스크 인터리빙으로 해결한다. 인터리빙 간격에 맞게 데이터 저장과 읽기는 성능 향상을 가져다준다. 즉 데이터를 분산하여 저장하는 기법이다.

 

디스크 스케줄링에 대해 알아보겠다.

디스크 스케줄링이란 디스크에서 찾고자 하는 데이터가 여러 곳에 흩어져 있을 때 헤드를 어떻게 움직이느냐를 결정하는 것이다. 헤드의 방향과 움직인 정도에 따라 시간이 많이 걸릴 수 있으므로 성능을 높이는 효율적인 스케줄링 알고리즘이 필요하다.

 

먼저 탐색시간을 줄이는 알고리즘들이다.

FCFS 선입선처리 디스크 스케줄링이다. 가장 간단한 알고리즘으로 요청이 도착한 순서에 따라 처리한다.

어떠한 경우에도 무기한 연기가 되는 경우가 없이 공평하다. 디스크 요청이 흩어져 있는 경우에는 탐색 시간이 오래 걸려 처리량이 감소한다.

 

SSTF 최소탐색시간 우선 스케줄링이다.

탐색 시간이 최소인 요청부터 스케줄링한다.

헤드의 현재 위치에서 가까운 모든 요구를 먼저 처리하는 방법이다.

디스크 처리시간은 감소, 기아상태가 일어날 수 있다. 

 

SCAN 스케줄링이다. 엘리베이터 알고리즘이라고 한다.

입출력 헤드가 디스크의 한 끝에서 다른 끝으로 이동한다. 완전 끝까지 도달시킨다.

한쪽 끝에 도달했을 때는 역방향으로 이동하면서 요청한 트랙을 처리한다. 현재 헤드의 위치와 이동방향을 파악해야 한다.

 

C-SCAN 스케줄링은 SCAN 스케줄링을 보완한 스케줄링이다.

대기시간을 균등하게 했다. 헤드는 한쪽 방향으로 이동하면서 요청을 처리하지만, 한쪽 끝에 다다르면 다시 처음부터 요청을 처리해야 한다.

 

룩(Look) 스케줄링이다. Circular LOOK 알고리즘이라고도 한다.

스캔 알고리즘의 변형버전이다. 맨 끝까지 가지 않고, 마지막 요청까지만 헤드를 이동시킨다.

헤드는 요청에 따라 각 방향으로 이동한다. 현재 방향에 더 이상의 요청이 없을 때 이동 방향을 바꾼다.

 

다음으로 나올 알고리즘은 회전 지연시간을 최소화하기 위한 알고리즘이다.

 

SLFT 최소지연시간 우선 스케줄링이다. (Shortest-Latency-Time-First)

모든 요청 중 회전지연시간이 가장 짧은 요청을 먼저 처리한다.

헤드가 특정 실린더에 도달했을 때, 해당 실린더의 트랙들에 대한 요청이 대기 중이면, 헤드는 더 이상 움직이지 않고 도착 순서와 관계없이 요청을 우선 처리한다. 섹터 별로 Queue를 생성하여 관리한다. (섹터 큐잉 알고리즘)

고정 헤드에 적합하다.

 

 

 

 

 

 

반응형

댓글