I primi calcolatori (prima generazione) (Anni ’50) erano provvisti di valvole termoioniche, in particolare di diodi, e avevano come prerogativa il fatto di poter essere programmati attraverso il linguaggio macchina. Il sistema operativo era assente, pertanto  era l’uomo a gestire direttamente la macchina, attraverso un controllo manuale.

I calcolatori della seconda generazione (Anni ’55-’65) presentavano un’architettura basata su transistor, pertanto l’ingombro, rispetto alle valvole termoioniche diminuisce. Erano programmabili attraverso un linguaggio di alto livello, il primo fu Fortran. Per questo scopo veniva utilizzata una macchina da scrivere evoluta, attraverso la quale le istruzioni venivano “scritte” su delle schede, perforandole. Ogni istruzione era rappresentata su una scheda perforata, dunque un programma  (job) era costituito da un insieme di schede.

I programmi iniziavano ad essere aggregati in lotti, i batch. Questi ultimi erano insiemi di item, di job…pacchi di schede perforate, contenenti il codice del programma.

Da ciò nasceva l’esigenza di sviluppare i primi sistemi operativi,  chiamati monitor, e risiedevano nella memoria del computer. Si trattava di sistemi a batch semplici, che eseguivano i programmi con assoluta sequenzialità. Il loro compito era quello di passare da un job ad un altro. Il controllo poteva essere passato al job successivo solo se quello precedente aveva terminato la propria esecuzione.

C’era totale assenza di interazione tra utente e macchina e inoltre il sistema presentava poca efficienza in quanto durante l’I/O di un programma la CPU rimaneva totalmente inattiva.