Sistemi operativi: evoluzione

Nei primi computer, dalla fine degli anni 40 alla metà degli anni 50, il programmatore interagiva direttamente con l’hardware, non esisteva alcun sistema operativo. Questi computer erano gestiti da una console costituita da luci, switch, elementari sistemi di input ed una stampante.

I programmi scritti in linguaggio macchina venivano caricati attraverso una periferica di input (ad es. un lettore di schede). Eventuali errori nel programma venivano segnalati dalle luci. Se il programma procedeva fino al completamento, l’output veniva indirizzato alla stampante.

Questi primi sistemi presentavano due problemi:

  • la schedulazione: nella maggioranza dei casi il tempo di calcolo veniva riservato attraverso un modulo da compilare a mano. Tipicamente un utente poteva prenotare blocchi di tempo multipli di 30 minuti circa. Un utente poteva prenotare un’ora e finire in 45 minuti, sprecando così prezioso tempo macchina. D’altra parte un utente avrebbe invece potuto incorrere in molti errori e quindi non finire nel tempo da lui prenotato: era così costretto ad abbandonare prima di aver portato a termine il suo programma.
  • il tempo di setup: un singolo programma, chiamato job, poteva richiedere il caricamento del compilatore e del programma sorgente in memoria, il salvataggio del programma compilato ed infine il caricamento ed il linkaggio del programma oggetto con altre funzioni esterne. Ognuno di questi passi poteva richiedere il montaggio e lo smontaggio di nastri o la predisposizione di diversi pacchi di schede. Se si verificava un errore, l’utente doveva ricominciare tutto il processo di setup. Quindi una parte considerevole di tempo veniva speso nelle operazioni preliminari alla esecuzione vera e propria del programma.

Questa modalità di operare può essere chiamata “processamento seriale”, in quanto gli utenti avevano accesso alle risorse di calcolo in serie. Nel tempo, diversi sistemi software furono sviluppati per rendere questo processo più efficiente. Ad esempio, librerie di funzioni comuni, linkers, loaders, debuggers e drivers I/O, che venivano messi a disposizione degli utenti come software comune.