스풀링(Spooling)은 컴퓨팅 분야에서 서로 다른 장치 간에 데이터를 복사할 목적으로 사용하는 특수한 형태의 다중 작업(Multitasking) 기법이다. "Spool"이라는 용어는 Simultaneous Peripheral Operations On-Line(SPOOL) 소프트웨어에서 유래했을 가능성이 있으나, 이는 역두문자어(backronym)일 가능성이 있어 정확한 기원은 불확실하다. 다른 설명으로는 자기 테이프의 '얼레(reel)' 또는 '스풀(spool)'에서 유래했다는 설이 있다.
스풀링은 데이터 버퍼(buffer)와 대기열(queue)의 결합으로 볼 수 있다. 현대 시스템에서 스풀링은 일반적으로 컴퓨터 애플리케이션과 프린터와 같은 저속 주변기기 사이를 중재하는 데 사용된다. 스풀러(spooler)라 불리는 전용 프로그램이 주변기기를 위한 작업 순서를 유지하고 자체 속도에 맞춰 데이터를 공급한다. 스풀(spool) 자체는 작업의 순서, 또는 작업이 보관되는 저장 영역을 의미한다.
동작 원리
스풀링은 프로그램이 주변기기가 처리할 작업을 넘겨주고 다른 작업을 진행하도록 허용한다. 즉, CPU 속도로 빠르게 생성된 데이터를 디스크(보조 기억 장치)에 임시 저장한 뒤, 저속 주변기기가 처리할 수 있는 속도에 맞춰 순차적으로 전달한다. 반대로 천공 카드 판독기와 같은 저속 입력 주변기기의 경우, 스풀러는 데이터가 준비될 때까지 대기하는 연산 작업 순서를 유지하며 관련 입력이 모두 가용해지면 각 작업을 시작한다. 이는 다중 프로그래밍 환경에서 입출력(I/O) 작업을 효율적으로 처리하는 방식이다.
인쇄 스풀링
오늘날 스풀링이 가장 흔하게 사용되는 분야는 인쇄(printing)이다. 인쇄를 위해 서식이 지정된 문서는 컴퓨터의 속도로 대기열에 저장된 뒤, 프린터의 속도에 맞춰 불러와져 인쇄된다. 여러 프로세스는 기다릴 필요 없이 스풀에 문서를 작성할 수 있으며, 스풀러 프로세스가 프린터를 작동하는 동안 다른 작업을 수행할 수 있다.
스풀러 또는 인쇄 관리 소프트웨어는 종종 다음과 같은 부가 기능을 포함한다:
- 인쇄 작업에 우선순위 할당
- 문서 인쇄 완료 시 사용자 알림
- 여러 프린터 간 인쇄 작업 분산
- 문서별 적절한 용지 선택
- 배너 페이지(burst page, job sheet, printer separator) 추가 기능
인쇄 서버는 스풀링 기술을 적용하여 여러 컴퓨터가 동일한 프린터나 프린터 그룹을 공유할 수 있도록 한다.
기타 응용 분야
스풀링은 천공 카드 판독기 및 천공기, 자기 테이프 드라이브 및 기타 저속 순차 입출력 장치에 대한 접근을 중재하는 데에도 사용된다. 일괄 처리(batch processing) 시스템은 스풀링을 사용하여 실행 준비가 된 작업의 대기열을 유지하며, 시스템이 작업을 처리할 자원을 확보하는 즉시 시작될 수 있도록 한다. 또한 UUCP와 같은 스토어 앤드 포워드(store and forward) 메시징 시스템이나 전자우편 및 유즈넷 소프트웨어에서도 스풀이라는 용어가 사용된다.
버퍼링(Buffering)과의 차이
버퍼링이 메모리(RAM)에 데이터를 임시 저장하여 속도 차이를 완충하는 기법인 반면, 스풀링은 디스크와 같은 보조 기억 장치를 활용하여 더 많은 양의 데이터를 저장할 수 있으며, 한 작업이 입출력을 수행하는 동안 CPU가 다른 작업을 처리할 수 있도록 한다.
역사
초기 메인프레임 시대에는 주변기기가 코어 처리 장치보다 훨씬 느려 성능 병목이 심각했다. IBM의 "SPOOL System"(7070-IO-076)과 같은 최초의 스풀링 프로그램은 천공 카드의 데이터를 자기 테이프로 복사하고, 테이프에서 다시 천공 카드와 프린터로 복사하는 방식으로 동작했다. 더 빠른 입출력 속도와 임의 접근을 지원하는 하드 디스크 드라이브는 1960년대 중반부터 스풀링을 위해 자기 테이프를 대체하기 시작했고, 1970년대에는 거의 완전히 대체했다.
대표적인 스풀링 시스템으로는 HASP(Houston Automatic Spooling Priority), JES(Job Entry Subsystem), CUPS(Common Unix Printing System), Berkeley printing system(lpr/lpd) 등이 있다.