Os sistemas operacionais evoluíram através de uma série de fases distintas ou gerações que corresponde aproximadamente às décadas
A mais antiga eletrônico digital. computadores não tinham sistemas operacionais. Máquinas da época eram tão primitivo que os programas foram muitas vezes entrou um pouco no tempo em filas de chaves mecânicas (placas de plug).
As linguagens de programação eram desconhecidos (nem mesmo de montagem línguas). Sistemas operacionais eram desconhecidos
No início de 1950, a rotina tinha melhorado um pouco com a introdução de cartões perfurados. A General Motors Research Laboratories implementados os primeiros sistemas operacionais no início de 1950 para o seu IBM 701. O sistema dos anos 50 geralmente correu uma tarefa de cada vez.
Estes foram chamados sistemas de processamento em lote de fluxo único, porque os programas e os dados foram apresentados em grupos ou lotes
Os sistemas da década de 1960 foram também sistemas de processamento em lote, mas eles foram capazes de aproveitar melhor os recursos do computador, executando várias tarefas ao mesmo tempo.
Então, os projetistas de sistemas operacionais desenvolveu o conceito de multiprogramação em que diversos trabalhos estão em memória principal de uma só vez; um processador é alternado de um emprego para outro conforme necessário para manter vários empregos avançando, mantendo os dispositivos periféricos em uso.
Por exemplo, no sistema sem multiprogramação, quando o trabalho atual fez uma pausa para esperar por outro I /O operação para completar, a CPU simplesmente ficou parado até que a E /S concluída.
A solução para este problema que evoluiu foi a partição de memória em vários pedaços, com um trabalho diferente em cada partição. Enquanto um trabalho estava à espera de I /O para completar, um outro trabalho poderia estar usando a CPU.
Outra característica importante no sistema operacional de terceira geração foi a técnica chamada de spool (operações periféricas simultâneas em linha). Em spool, um dispositivo de alta velocidade como um disco interposto entre um programa em execução e um dispositivo de baixa velocidade envolvido com o programa em entrada /saída.
Em vez de escrever diretamen