# Spooling

O Spooling ou simplesmente Spool (do acrônimo Simultaneous Peripheral Operations On-line) refere-se a um processo de transferência de dados colocando-os em uma área de trabalho temporária onde outro programa pode acessá-lo para processá-lo em um tempo futuro. A técnica de Spooling consiste em colocar jobs em um buffer, uma área da memória ou de um disco onde um dispositivo pode acessá-la quando estiver preparada. O Spooling é útil porque os dispositivos acessam dados em diferentes velocidades, o buffer provê uma estação de espera onde o dado pode ficar armazenado enquanto o dispositivo mais lento fica carregando. O mais comum exemplo de spooling é o da primeira impressão.
Como a impressora é um periférico muito mais lento que o computador, este teria de ficar esperando a impressão terminar para, então, executar uma nova tarefa. Para resolver esse problema, a maioria das impressoras tem um buffer, ou seja, uma memória interna utilizada para armazenar temporariamente os dados que estão vindo do computador. Com isso, os dados são transferidos do computador para o buffer, liberando-o mais rapidamente. Quanto maior o buffer da impressora, mais cedo esta liberará o computador.
No entanto, mesmo existindo esse recurso, o tamanho do buffer da impressora não é o suficiente para armazenar documentos grandes de uma só vez. Em outras palavras, na impressão de documentos pequenos, o aplicativo transfere os dados para o buffer da impressora, ficando livre para executar outra tarefa. No caso de documentos grandes, mesmo com o buffer, a impressora "prende" a atenção do aplicativo.
A solução adaptada por todos os sistemas operacionais (com exceção do DOS) chama-se spooler. O aplicativo gera a impressão e transfere os dados a serem impressos para o spooler, um programa que ficará sendo executado em segundo plano. Esse programa ficará gerenciando a impressão, enquanto o aplicativo ficará livre para executar outra tarefa ou trabalhar com outro documento. É possível, inclusive, fechar o aplicativo que gerou a impressão.

## História

Os dispositivos periféricos sempre foram muito mais lentos do que as unidades centrais de processamento. Este foi um problema especialmente grave para os mainframes antigos. Por exemplo, um job que le cartões perfurados ou gera uma saída impressa era forçado a executar à velocidade dos dispositivos mecânicos lentos. Os primeiros programas de spooling copiavam todos os dados de cartões perfurados para a fita magnética, e da fita de volta para cartões perfurados e impressoras. Os discos rígidos, que são mais rápidos e apoiam o acesso aleatório, começaram a substituir este uso da fita magnética no meio dos anos 60, e pelos anos 70 tinham eliminado o uso da fita para esse propósito..
Porque o equipamento de registro de unidade em mainframes da IBM do início dos anos 60 era tão lento, era comum usar uma pequena máquina fora da rede como uma 1401 em vez de spooling.

## Spooling de Impressão

Hoje em dia, o uso mais comum do spooling é a impressão: os documentos formatados para impressão são armazenados em uma fila à velocidade do computador, depois recuperados e impressos à velocidade da impressora. Múltiplos processos podem escrever documentos no spool sem esperar, e podem então realizar outras tarefas, enquanto o processo "spooler" opera a impressora.
Por exemplo, quando uma grande organização prepara cheques de folha de pagamento, o cálculo leva apenas alguns minutos ou apenas alguns segundos, mas o processo de impressão pode levar horas. Se o programa da folha de pagamento imprimiu cheques diretamente, seria incapaz de proceder a outros cálculos até que todos os cheques fossem impressos. Similarmente, antes que o spooling fosse adicionados aos sistemas operacionais, os editores de textos eram incapazes de fazer qualquer outra ação, incluindo interagir com o usuário, ao imprimir.
O spooler ou software de gestão de impressão inclui frequentemente uma variedade de características relacionadas, tais como permitir a atribuição de prioridades a trabalhos de impressão, notificar os usuários quando os seus documentos foram impressos, distribuir trabalhos de impressão entre várias impressoras, selecionar o papel apropriado para cada documento, etc.
Um servidor de impressão aplica técnicas de spooling para permitir que muitos computadores compartilhem a mesma impressora ou grupo de impressoras.

## Banner page

Os spoolers de impressão podem ser configurados para adicionar uma página de banner (também chamada de página de ruptura, folha de trabalho ou separador de impressora) à frente de cada documento. Estes documentos separados uns dos outros, identificam cada documento (por exemplo, com seu título) e muitas vezes indicam quem o imprimiu (por exemplo, por nome de usuário ou nome do job). As páginas de banners são valiosas em ambientes de escritório onde muitas pessoas compartilham de um número pequeno de impressoras. Dependendo da configuração, as páginas de banner podem ser geradas em cada computador cliente, ou num servidor de impressão centralizado, ou pela própria impressora.
Em impressoras que utilizam formulários contínuos uma banner page principal seria frequentemente impressa duas vezes, de modo que uma cópia seria sempre virada para cima quando os trabalhos fossem separados. A página pode incluir linhas impressas sobre a dobra, que seria visível ao longo da borda de uma pilha de folhas recém impressas, permitindo ao usuário separar facilmente os trabalhos. Alguns sistemas também imprimiriam uma página de banner no final de cada trabalho, assegurando aos usuários que eles tenham coletado toda a sua impressão.

## Outras aplicações

O spooling também é usado para mediar acesso a leitores de cartões perfurados, unidades de fita magnética e outros dispositivos de E/S lentos e sequenciais. Ele permite que a aplicação funciona na velocidade da CPU enquanto os dispositivos periféricos são operados em sua velocidade completa.
Um sistema de processamento de lote usa o spooling para manter uma fila de tarefas prontas para executar, que podem ser começadas assim que o sistema tem os recursos para processá-los.
Alguns armazenam e envia sistemas de mensagens, como o uucp, usava "spool" para se referir às suas filas de entrada e saída de mensagens, e esta terminologia ainda é encontrada na documentação para e-mail e software usenet, mesmo que as mensagens sejam entregues imediatamente hoje em dia.