Negli anni ’50 i computer sono enormi mainframe realizzati con transistor (dopo l’epoca delle valvole) che li rendono più affidabili e vendibili in serie.
Il contesto tecnologico è quello dei calcolatori a valvole termoioniche, poco affidabili e difficili da gestire: basti pensare che macchine come l’ENIAC occupano intere stanze e consumano così tanta energia da causare blackout locali al momento dell’accensione. In questo scenario pionieristico nasce però l’idea di automatizzare alcune operazioni di gestione, gettando le basi per i primi sistemi operativi rudimentali.
ENIAC, M. Weik, Public domain, via Wikimedia Commons
La programmazione avviene ancora con linguaggio macchina o linguaggi di alto livello emergenti (per esempio Fortran dagli anni fine ’50), ma il caricamento del codice è un’operazione manuale e lenta. Il programmatore prepara il programma su carta, lo trasferisce su schede perforate e lo invia all’elaboratore: dopo ore di elaborazione il risultato viene stampato su carta. In mancanza di DMA (accesso diretto in memoria) la CPU rimane occupata nel controllare la lettura delle schede e le operazioni di output, impedendo qualsiasi altro calcolo.
Ogni fase, dal caricamento del programma all’elaborazione fino alla stampa dell’output, richiede l’intervento umano e tempi lunghissimi. Questo metodo “monolitico” di esecuzione seriale è estremamente inefficiente: ad esempio, un job che legge schede perforate o genera stampe procedeva alla sola velocità delle unità meccaniche (lettori e stampanti), molto più lente della CPU.
Per migliorare l’occupazione della CPU, si introducono allora le tecniche di spooling e batch processing. Lo spooling (Simultaneous Peripheral Operations On-Line) prevede che i dati delle schede siano copiati prima su nastri o dischi veloci, in modo da mantenere la CPU occupata con altri task mentre l’I/O fisico avviene in background. Nei grandi impianti, le operazioni di I/O vengono talvolta gestite da un computer satellite dedicato (ad esempio un IBMIBM 1401) che legge e scrive le schede o le stampe, alleggerendo il mainframe. In questo modo i programmi vengono messi in coda e l’elaborazione può procedere continuamente, riducendo i tempi di attesa complessivi.
Non si tratta quindi ancora veri e propri sistemi operativi moderni, ma di “monitor” o “monitor di sistema”, ovvero di piccoli programmi residenti che gestivano l’I/O e sequenziavano i job. Per questo compito compaiono i primi software di controllo di job, spesso realizzati in Fortran o Assembler. Tra i pionieri c'è il GM-NAA I/O (1956) sviluppato da General Motors/North American Aviation per l’IBM 704: considerato il primo sistema operativo mai creato.
Dopo di esso, altri sistemi simili vengono utilizzati sui computer IBM. Per esempio:
- GM-NAA I/O (1956, IBM 704): prima implementazione di un “job control”, che automatizza il caricamento dei programmi e delle routine su nastro.
- Fortran Monitor System (FMS) (IBM 709, fine anni ’50): un monitor leggero ottimizzato per programmi in Fortran e Assembler, che automatizza la gestione di lettura delle schede e avvio del compilatore/assemblatore.
- IBSYS (IBM 7090/7094, inizi anni ’60): un sistema operativo più “pesante” da produzione, con molti sottosistemi e supporto a vari linguaggi (FORTRAN, COBOL, assembler MAP, utility di sort, ecc.).
Questi programmi gestiscono principalmente pochi servizi fondamentali: controllo degli input/output, interpretazione dei comandi sulle schede di controllo e avvio dei job in sequenza. La CPU esegue automaticamente i job uno dopo l’altro (batch processing), applicando semplici politiche di scheduling nell’ordine di arrivo.
Verso la fine del decennio, con l’invenzione del transistor che rende i calcolatori più compatti e affidabili, iniziano a diffondersi i cosiddetti mainframe (elaboratori centralizzati di grandi dimensioni). Per sfruttarli al meglio si adotta il concetto di elaborazione a lotti (batch processing): invece di eseguire un solo job per volta con la CPU spesso inattiva durante le operazioni di I/O, si preparano lotti di lavori da eseguire in sequenza automatica.
I primi sistemi operativi batch compiono funzioni molto semplici ma cruciali: gestiscono l’input/output delle periferiche (come lettori di schede e stampanti), interpretano i comandi di controllo e avviano i programmi uno dopo l’altro senza intervento manuale per ogni job. Software come il Fortran Monitor System o l’IBSYS (sviluppati in Assembly e Fortran) rientrano tra i prototipi di sistemi operativi di questo periodo.
Dal punto di vista sociale, l’impatto di queste innovazioni è inizialmente limitato a pochi esperti: i computer degli anni Cinquanta sono strumenti esoterici, accessibili solo a scienziati e tecnici in ambienti istituzionali, ma mettono le fondamenta della futura rivoluzione informatica.