입출력 버퍼링
버퍼링(buffering)
<개념>
- 한 작업의 연산과 함께 입출력을 동시에 수행하는 방법
- 데이터를 입력한 후, CPU가 이를 연산하려고 하는 순간 입력장치는 바로 다음 입력을 시작
- CPU와 입력장치는 동시에 동작하며, 양쪽의 속도가 비슷하다면 버퍼 이용이 효율적
- 실질적으로 버퍼링은 CPU와 입출력 장치의 둘 중에서 어느 하나가 먼저 종료 할 수 있기 때문에 항상 CPU와 입출력 장치가 동시에 동작할 수 없음
<버퍼를 이용하는 이유>
- CPU가 문자나 데이터 하나 하나를 읽을 때마다 입출력 채널에게 명령을 수행 하도록 한다면 매우 복잡하고 많은 작업량이 필요함
- 버퍼를 사용하여 문자나 데이터를 미리 읽어온 후 필요할 때마다 사용하게 한 다면 훨씬 효율적이기 때문
<유형>
- 환형 버퍼링(circular buffering)
단일 버퍼링
<개념>
- CPU는 채널이 버퍼를 채울 동안 기다리거나 혹은 다른 프로그램을 실행
- 버퍼를 CPU와 채널이 동시에 사용할 수 없으며, 상호간에 통신이 필요함
- CPU : 버퍼가 비어 있을 때만 버퍼에 데이터를 채울 수 있고,
- 채널 : 버퍼가 채워져 있을 때만 버퍼의 데이터를 비울 수 있음
이중 버퍼링
<개념>
- 단일 버퍼링의 단점을 보완하고 CPU간의 처리 성능을 향상시키는 방법
- 입출력 작업과 처리 작업이 동시에 진행될 수 있는 반면, 기억장치의 낭비를 초래할 수도 있음
<특징>
- 버퍼를 채우는 CPU 속도와 비우는 채널 속도가 비슷하면 최적의 효율
- 둘 중에 하나의 속도가 빠르다면 버퍼가 항상 비어 있거나 혹은 꽉 차 있 을 수 있음
- CPU는 채널에게 하나의 버퍼에 대한 입출력을 명령하면, 채널은 CPU의 명령 을 받고 독자적으로 입출력 수행
- CPU는 더 이상 입출력에 관여하지 않고 다른 버퍼를 채우거나 또 다른 작업을 수행할 수 있으므로 CPU의 효율 증대
환형 버퍼링
<개념>
- 환형 큐를 사용하여 여러 개의 버퍼를 원형으로 구성하여 입출력을 수행하는 방법
- CPU와 채널이 동시에 버퍼를 채우거나 비우는 각 작업을 독립적으로 수행
- 다수 개의 버퍼를 사용하므로 상당량의 기억장치를 차지하기 때문에 자칫 기 억장치의 낭비 요인이 될 수 있음
- 버퍼 수 많음 : 기억장치 낭비
- 버퍼 수 적음 : 버퍼를 기다리는 프로세스의 수 증가
- 버퍼의 수를 결정하는 일은 시스템 성능에 매우 중요한 요소
- CPU bound : CPU에 의한 연산이 많고 입출력 횟수가 적어, 버퍼 사용 비율이 적은 연산 위주의 프로세스
- channel bound : CPU에 의한 연산지 적고 입출력 횟수가 많아, 버퍼 사용 비율이 많은 입출력 위주의 프로세스
스풀링
<개념>
- SPOOL : Simultaneous Peripheral Operation On-Line
- 디스크의 일부를 스풀 공간이라고 부르는 매우 큰 버퍼처럼 사용하는 방식
- 사용 이유 : 입출력장치와 CPU간의 처리 속도 차이 해소
- 미리 입력 장치로부터 디스크로 레코드나 블록을 읽어 들이고,
- 출력 장치로 레코드나 블록을 직접 출력하기 보다는 디스크 상에 출력 파일로 저장하여 나중에 출력
<특징>
<버퍼링과 스풀링의 차이점 비교>