페이지

2014. 7. 8.

입출력 버퍼링

버퍼링(buffering)


<개념>

  • 한 작업의 연산과 함께 입출력을 동시에 수행하는 방법
  • 데이터를 입력한 후, CPU가 이를 연산하려고 하는 순간 입력장치는 바로 다음  입력을 시작
  • CPU와 입력장치는 동시에 동작하며, 양쪽의 속도가 비슷하다면 버퍼 이용이  효율적
  • 실질적으로 버퍼링은 CPU와 입출력 장치의 둘 중에서 어느 하나가 먼저 종료  할 수 있기 때문에 항상 CPU와 입출력 장치가 동시에 동작할 수 없음






<버퍼를 이용하는 이유>

  • CPU가 문자나 데이터 하나 하나를 읽을 때마다 입출력 채널에게 명령을 수행  하도록 한다면 매우 복잡하고 많은 작업량이 필요함
  • 버퍼를 사용하여 문자나 데이터를 미리 읽어온 후 필요할 때마다 사용하게 한  다면 훨씬 효율적이기 때문



<유형>

  • 단일 버퍼링(single buffering)
  • 이중 버퍼링(dual buffering)
  • 환형 버퍼링(circular buffering)





단일 버퍼링


<개념> 

  • 1개의 버퍼를 사용하는 경우
  • CPU는 채널이 버퍼를 채울 동안 기다리거나 혹은 다른 프로그램을 실행
  • 버퍼를 CPU와 채널이 동시에 사용할 수 없으며, 상호간에 통신이 필요함
  • CPU : 버퍼가 비어 있을 때만 버퍼에 데이터를 채울 수 있고, 
  • 채널 : 버퍼가 채워져 있을 때만 버퍼의 데이터를 비울 수 있음







이중 버퍼링



<개념>

  • 2개의 버퍼를 사용하는 경우
  • 단일 버퍼링의 단점을 보완하고 CPU간의 처리 성능을 향상시키는 방법
  • 입출력 작업과 처리 작업이 동시에 진행될 수 있는 반면, 기억장치의 낭비를  초래할 수도 있음


<특징>

  • 버퍼를 채우는 CPU 속도와 비우는 채널 속도가 비슷하면 최적의 효율
  • 둘 중에 하나의 속도가 빠르다면 버퍼가 항상 비어 있거나 혹은 꽉 차 있   을 수 있음  
  • CPU는 채널에게 하나의 버퍼에 대한 입출력을 명령하면, 채널은 CPU의 명령  을 받고 독자적으로 입출력 수행
  • CPU는 더 이상 입출력에 관여하지 않고 다른 버퍼를 채우거나 또 다른 작업을  수행할 수 있으므로 CPU의 효율 증대








환형 버퍼링


<개념>
  • 환형 큐를 사용하여 여러 개의 버퍼를 원형으로 구성하여 입출력을 수행하는  방법
  • CPU와 채널이 동시에 버퍼를 채우거나 비우는 각 작업을 독립적으로 수행
  • 다수 개의 버퍼를 사용하므로 상당량의 기억장치를 차지하기 때문에 자칫 기  억장치의 낭비 요인이 될 수 있음
  • 버퍼의 수 고려


    1. 버퍼 수 많음 : 기억장치 낭비
    2. 버퍼 수 적음 : 버퍼를 기다리는 프로세스의 수 증가
  • 버퍼의 수를 결정하는 일은 시스템 성능에 매우 중요한 요소
  • CPU 바운드와 채널 바운드

    1. CPU bound : CPU에 의한 연산이 많고 입출력 횟수가 적어, 버퍼 사용 비율이 적은 연산 위주의 프로세스
    2. channel bound : CPU에 의한 연산지 적고 입출력 횟수가 많아, 버퍼 사용 비율이 많은 입출력 위주의 프로세스





스풀링



<개념>

  • SPOOL : Simultaneous Peripheral Operation On-Line
  • 디스크의 일부를 스풀 공간이라고 부르는 매우 큰 버퍼처럼 사용하는 방식
  • 사용 이유 : 입출력장치와 CPU간의 처리 속도 차이 해소
  • 방식


    1. 미리 입력 장치로부터 디스크로 레코드나 블록을 읽어 들이고,
    2. 출력 장치로 레코드나 블록을 직접 출력하기 보다는 디스크 상에 출력 파일로 저장하여 나중에 출력






<특징>

  • 다중 프로그래밍 환경에서 사용되는 개념
  • 가상 기억장치인 디스크를 입출력 매체로 이용



<버퍼링과 스풀링의 차이점 비교>