[컴퓨터 공학] 캐싱, 버퍼링, 스풀링

박재현·2022년 3월 21일
0

1. 캐싱(Caching)

캐싱(Caching)은 캐시(Cache)라고 하는 좀 더 빠른 메모리 영역으로 데이터를 가져와서 접근하는 방식을 말한다.
예를 들어 속도가 느린 하드디스크의 데이터를 메모리로 가지고 와서 메모리 상에서 읽기, 쓰기를 수행하는 것을 '데이터에 메모리를 캐싱한다'라고 표현현다.
마찬가지로 메모리 상에 있는 데이터에 연산을 수행하기 위해서 더 빠른 메모리니 CPU 메모리 캐시로 데이터를 가져 와서 연산을 수행하는 동작도 캐싱을 한다고 표현한다.

캐싱은 데이터의 지역성(Locality)이라는 특성을 이용해서 성능 개선을 달성한다. 지역성에는 공간 지역성과 시간 지역성이 존재하는데,
공간 지역성은 한 번 접근한 데이터의 인근에 저장되어 있는 데이터가 다시 접근될 가능성이 높은 특성을 의미한다.
시간 지역성은 한 번 접근된 데이터가 가까운 시간내에 다시 접근될 가능성이 높다는 의미다.

이러한 데이터 접근의 지역성이라는 특성을 이용해 자주 접근될 데이터를 더 빠른 속도의 메모리상에 가지고 와서 연산을 수행하여 성능을 높이는 것이 캐싱의 목표이다.

캐시 서버 또는 캐시 메모리 등 캐시가 붙은 기능에 저장된 데이터는 지워질 수 있다는 것을 전제로 한다. 영구적 메모리 공간이 아니다. 언제든 지워질 수 있고, 그것을 당연시 생각하고 프로그램 또는 서버를 개발해야 한다.

2. 버퍼링(Buffering)

버퍼링은 버퍼(Buffer)라고 하는 메모리 영역에 데이터를 모았다가 사용하는 동작을 의미한다.
버퍼를 이용하는 이유는 크게 3가지를 꼽을 수 있다.

1. 생산자와 소비자 사이 속도차이에서 오는 비효율을 극복하기 위함
CPU를 통해 데이터를 다루다가 다시 디스크로 쓰기 연산을 하려 할 때, 매번 디스크 드라이브로 데이터를 넘기고 디스크로 쓰여지기를 기다린다면 CPU는 메모리에 비해 속도가 매우 느린 디스크의 동작을 항상 기다리게 된다.
버퍼링을 하게 되면, 디스크로의 작업을 버퍼에 모아서 한 번에 수행하기 때문에 보다 효율적으로 수행할 수 있다.
이런 동작은 메모리와 디스크, 네트워크 디스크 사이에서도 찾아볼 수 있다.

2. 서로 다른 자료 전송 사이즈가 다른 상황을 극복하기 위함
이 역시 데이터를 모아서 서로 다른 유닛 사이즈로 다시 만드는 과정을 거치게 된다. 데이터를 모아서 디스크에 써주는 DBMS 같은 경우 블록 사이즈 단위로 데이터를 쓰게 된다.
이 때, 블록 사이즈가 4KB라고 하면, 수 십 바이트씩 들어오기 쓰기 요청을 모아서(버퍼링) 하나의 블록으로 쓰게 된다.

3. 데이터 입출력의 의미를 명확하게 하기 위함
예를 들어, UNIX 프로세스가 write() 시스템 콜을 사용하여 디스크 쓰기 요청을 했다고 가정해 보자.
write() 시스템 콜은 애플리케이션에서 데이터를 저장하고 있는 버퍼의 내용을 커널의 버퍼로 복사해 준다.
그리고 커널의 버퍼에 복사된 데이터는 디스크로 쓰여지게 된다. 마일 커널 버퍼를 두지 않는다면 커널은 넘겨 받은 애플리케이션의 버퍼 주소를 읽어서 디스크로 쓰려 할 것이다. 커널이 디스크로 데이터를 쓰기 전에 에플리케이션이 버퍼의 내용을 바꾼다면, 커널은 애플리케이션이 마지막에 바꾼 데이터를 디스크로 써야할지 write() 시스템 콜이 호출된 시점의 데이터를 디스크로 내려야 할 지 명확하지 않다.
즉 커널에 버퍼를 두는 방식을 채택하면서 이런 데이터 입출력의 copy semantic을 명확히 해줄 수 있다. 커널은 커널 버퍼에 복사된 내용을 기준으로 입출력을 수행하면 된고, 애플리케이션은 자신의 버퍼를 수정하면 된다.

3. 스풀링(Spooling)

스풀링은 디바이스를 독점적으로 사용해야하는 경우에 많이 사용된다.
대표적으로 프린터를 예로 들 수 잇는데, 프린터는 하나의 프로세스가 프린팅을 수행하는 동안 다른 프로세스의 요청을 처리할 수 없다.
이 경우 프린팅해야하는 작업은 대기를 해야하는데, 이 때 추가로 프린팅해야하는 데이터를 디스크의 공간을 잡아서 버퍼링을 해놓게 되는데 이를 스풀링이라 한다.

MS Word에서 프린터를 사용해서 10page 가량을 인쇄하고 있는 동안 MS PowerPoint에서 프린터 사용을 요청했을 경우, 프린팅 요청은 디바이스 드라이버에서 스케줄링을 기다리며 프린팅해야 하는 데이터는 디스크에 저장해야 하는데 이 디스크 공간을 스풀 이라 한다.

이전에 수행중이던 MS Word의 프린팅 작업이 끝나면 스풀에 저장된 작업인 MS PowerPoint의 프린팅 작업이 시작되며 프린팅할 데이터를 스풀에서 읽어 수행하게 된다.

0개의 댓글