# THE multiprogramming system

El sistema de multiprogramació THE o THE OS va ser un sistema operatiu d'ordinador dissenyat per un equip dirigit per Edsger W. Dijkstra, descrit en monografies el 1965-66 i publicat el 1968. Dijkstra mai va anomenar el sistema; "THE" és simplement l'abreviatura de "Technische Hogeschool Eindhoven", després el nom (en holandès) de la Universitat de Tecnologia d'Eindhoven dels Països Baixos. El sistema THE era principalment un sistema per lots que admetia la multitasca; no va ser dissenyat com un sistema operatiu multiusuari. S'assemblava molt a l'SDS 940, però "el conjunt de processos del sistema THE era estàtic".
El sistema THE aparentment va introduir les primeres formes de memòria virtual paginada basada en programari (l'Electrologica X8 no admetia la gestió de memòria basada en maquinari), alliberant els programes de ser obligats a utilitzar ubicacions físiques a la memòria del tambor. Ho va fer utilitzant un compilador ALGOL modificat (l'únic llenguatge de programació suportat pel sistema de Dijkstra) per "generar automàticament crides a les rutines del sistema, que s'assegurava que la informació sol·licitada estigués a la memòria, canviant si fos necessari". La memòria virtual paginada també es va utilitzar per a la memòria intermèdia de dades del dispositiu d'entrada/sortida (I/O), i per a una part important del codi del sistema operatiu, i gairebé tot el compilador ALGOL 60. En aquest sistema, els semàfors es van utilitzar com a constructe de programació per primera vegada.

## Disseny

El disseny del sistema de multiprogramació THE és significatiu pel seu ús d'una estructura en capes, en la qual les capes "superiors" només depenen de les capes "inferiores":
* La capa 0 era responsable dels aspectes de multiprogramació del sistema operatiu. Va decidir quin procés s'assignava a la unitat central de processament (CPU) i va comptabilitzar els processos bloquejats als semàfors. Va tractar les interrupcions i va realitzar els canvis de context quan es necessitava un canvi de procés. Aquest és el nivell més baix. En termes moderns, aquest era el planificador.
* La capa 1 es va ocupar d'assignar memòria als processos. En termes moderns, aquest era el cercapersones.
* La capa 2 tractava de la comunicació entre el sistema operatiu i la consola del sistema.
* La capa 3 gestionava totes les E/S entre els dispositius connectats a l'ordinador. Això incloïa la informació de memòria intermèdia dels diferents dispositius.
* La capa 4 constava de programes d'usuari. Hi havia 5 processos: en total, s'encarregaven de la compilació, l'execució i la impressió de programes d'usuari. Quan van acabar, van tornar el control a la cua de programació, que estava basada en prioritats, afavorint els processos iniciats recentment i els que es van bloquejar a causa d'E/S.
* La capa 5 era l'usuari; com assenyala Dijkstra, "no implementat per nosaltres".
La restricció que les capes superiors només poden dependre de les capes inferiors va ser imposada pels dissenyadors per tal de fer més manejable el raonament sobre el sistema (utilitzant mètodes quasi formals) i també per facilitar la construcció i prova del sistema de manera incremental. Les capes es van implementar en ordre, la capa 0 primer, amb proves exhaustives de les abstraccions proporcionades per cada capa al seu torn. Aquesta divisió del nucli en capes era similar d'alguna manera al model de segmentació d'anell posterior de Multics. Diversos sistemes operatius posteriors han utilitzat fins a cert punt les capes, inclosos Windows NT i macOS, encara que normalment amb menys capes.
El codi del sistema es va escriure en llenguatge ensamblador per a l'ordinador Dutch Electrologica X8. Aquest ordinador tenia una mida de paraula de 27 bits, 48 kiloparaules de memòria bàsica, 512 kiloparaules de memòria de tambor que proporcionaven un magatzem de suport per a l'algorisme de memòria cau LRU, lectors de cintes de paper, perforadores de cinta de paper, traçadors i impressores.

## Referències

* ↑ «The Structure of the "THE"-Multiprogramming» (en anglès). [Consulta: 27 desembre 2023].
* ↑ Dijkstra, Edsger W. «The structure of the “THE”-multiprogramming system». Communications of the ACM, 11, 5, 01-05-1968, pàg. 341–346. DOI: 10.1145/363095.363143. ISSN: 0001-0782.
* ↑ Dijkstra, Edsger W. «The structure of the “THE”-multiprogramming system» (en anglès). Communications of the ACM, 11, 5, 01-05-1968, pàg. 341–346. DOI: 10.1145/363095.363143. ISSN: 0001-0782.
* ↑ Dijkstra, Edsger W. The Structure of the “THE” Multiprogramming System (en anglès). New York, NY: Springer, 2001, p. 223–236. DOI 10.1007/978-1-4757-3510-9_12. ISBN 978-1-4757-3510-9.