<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=THE_multiprogramming_system</id>
	<title>THE multiprogramming system - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=THE_multiprogramming_system"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=THE_multiprogramming_system&amp;action=history"/>
	<updated>2026-05-04T23:39:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=THE_multiprogramming_system&amp;diff=6172923&amp;oldid=prev</id>
		<title>imported&gt;Ecourter: v2.05 - Fix errors for CW project (External link with two brackets)</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=THE_multiprogramming_system&amp;diff=6172923&amp;oldid=prev"/>
		<updated>2025-11-24T20:07:17Z</updated>

		<summary type="html">&lt;p&gt;v2.05 - Fix errors for &lt;a href=&quot;/wiki143/index.php?title=WP:WCW&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:WCW (page does not exist)&quot;&gt;CW project&lt;/a&gt; (External link with two brackets)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:07, 24 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| website = &amp;lt;!-- {{URL|www.example.com}} --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| website = &amp;lt;!-- {{URL|www.example.com}} --&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &#039;&#039;&#039;THE multiprogramming system&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;or &lt;/del&gt;&#039;&#039;&#039;THE OS&#039;&#039;&#039; was a computer [[operating system]] designed by a team led &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;by [[Edsger W. Dijkstra]], described in monographs in 1965-66&amp;lt;ref name=&quot;ewd196&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &#039;&#039;&#039;THE multiprogramming system&#039;&#039;&#039; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/ins&gt;&#039;&#039;&#039;THE OS&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) &lt;/ins&gt;was a computer [[operating system]] designed by a team led by [[Edsger W. Dijkstra]], described in monographs in 1965-66&amp;lt;ref name=&quot;ewd196&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Cite EWD|196|The structure of the &amp;#039;THE&amp;#039;-multiprogramming system}} (Jun 14, 1965)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Cite EWD|196|The structure of the &amp;#039;THE&amp;#039;-multiprogramming system}} (Jun 14, 1965)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/ref&amp;gt; and published in 1968.&amp;lt;ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/ref&amp;gt; and published in 1968.&amp;lt;ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l56&quot;&gt;Line 56:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 56:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|date=May 1988&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|date=May 1988&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| page = 512&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| page = 512&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&amp;lt;/ref&amp;gt; that supported [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Computer &lt;/del&gt;multitasking|multitasking]]; it was not designed as a [[multi-user]] operating system. It was much like the [[SDS 940]], but &quot;the set of [[process (computing)|process]]es in the THE system was static&quot;.&amp;lt;ref name=&quot;osc&quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&amp;lt;/ref&amp;gt; that supported [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;computer &lt;/ins&gt;multitasking|multitasking]]; it was not designed as a [[multi-user]] operating system. It was much like the [[SDS 940]], but &quot;the set of [[process (computing)|process]]es in the THE system was static&quot;.&amp;lt;ref name=&quot;osc&quot;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The THE system apparently introduced the first forms of software-based [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Memory &lt;/del&gt;page|paged]] [[virtual memory]] (the [[Electrologica X8]] did not support [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Memory &lt;/del&gt;management unit|hardware-based]] [[memory management]]),&amp;lt;ref name=&quot;osc&quot;/&amp;gt; freeing programs from being forced to use physical locations on the [[drum memory]]. It did this by using a modified [[ALGOL]] [[compiler]] (the only [[programming language]] supported by Dijkstra&#039;s system) to &quot;automatically generate [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;System &lt;/del&gt;call|calls to system routines]], which made sure the requested information was in memory, [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Swap &lt;/del&gt;memory|swapping]] if necessary&quot;.&amp;lt;ref name=&quot;osc&quot;/&amp;gt; Paged virtual memory was also used for [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Data &lt;/del&gt;buffer|buffering]] [[input/output]] (I/O) device data, and for a significant portion of the operating system code, and nearly all the [[ALGOL 60]] compiler. In this system, [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Semaphore &lt;/del&gt;(programming)|semaphores]] were used as a programming construct for the first time.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The THE system apparently introduced the first forms of software-based [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;memory &lt;/ins&gt;page|paged]] [[virtual memory]] (the [[Electrologica X8]] did not support [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;memory &lt;/ins&gt;management unit|hardware-based]] [[memory management]]),&amp;lt;ref name=&quot;osc&quot;/&amp;gt; freeing programs from being forced to use physical locations on the [[drum memory]]. It did this by using a modified [[ALGOL]] [[compiler]] (the only [[programming language]] supported by Dijkstra&#039;s system) to &quot;automatically generate [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;system &lt;/ins&gt;call|calls to system routines]], which made sure the requested information was in memory, [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;swap &lt;/ins&gt;memory|swapping]] if necessary&quot;.&amp;lt;ref name=&quot;osc&quot;/&amp;gt; Paged virtual memory was also used for [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;data &lt;/ins&gt;buffer|buffering]] [[input/output]] (I/O) device data, and for a significant portion of the operating system code, and nearly all the [[ALGOL 60]] compiler. In this system, [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;semaphore &lt;/ins&gt;(programming)|semaphores]] were used as a programming construct for the first time.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Design==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Design==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The design of the THE multiprogramming system is significant for its use of a [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Abstraction&lt;/del&gt;|layered structure]], in which &quot;higher&quot; layers depend on &quot;lower&quot; layers only:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The design of the THE multiprogramming system is significant for its use of a [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;abstraction&lt;/ins&gt;|layered structure]], in which &quot;higher&quot; layers depend on &quot;lower&quot; layers only:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 0&#039;&#039;&#039; was responsible for the multiprogramming aspects of the operating system. It decided which process was allocated to the [[central processing unit]] (CPU), and accounted for processes that were blocked on &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Semaphore (programming)|&lt;/del&gt;semaphores&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/del&gt;. It dealt with [[interrupt]]s and performed the [[context switch]]es when a process change was needed. This is the lowest level. In modern terms, this was the [[scheduler]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 0&#039;&#039;&#039; was responsible for the multiprogramming aspects of the operating system. It decided which process was allocated to the [[central processing unit]] (CPU), and accounted for processes that were blocked on semaphores. It dealt with [[interrupt]]s and performed the [[context switch]]es when a process change was needed. This is the lowest level. In modern terms, this was the [[scheduler]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 1&#039;&#039;&#039; was concerned with [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Memory &lt;/del&gt;management|allocating memory]] to processes. In modern terms, this was the pager.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 1&#039;&#039;&#039; was concerned with [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;memory &lt;/ins&gt;management|allocating memory]] to processes. In modern terms, this was the pager.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 2&amp;#039;&amp;#039;&amp;#039; dealt with communication between the operating system and the [[system console]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 2&amp;#039;&amp;#039;&amp;#039; dealt with communication between the operating system and the [[system console]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 3&amp;#039;&amp;#039;&amp;#039; managed all I/O between the devices attached to the computer. This included buffering information from the various devices.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 3&amp;#039;&amp;#039;&amp;#039; managed all I/O between the devices attached to the computer. This included buffering information from the various devices.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 4&#039;&#039;&#039; consisted of [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;User &lt;/del&gt;space|user programs]]. There were 5 processes: in total, they handled the [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Compiler&lt;/del&gt;|compiling]], [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Execution &lt;/del&gt;(computing)|executing]], and [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Printer &lt;/del&gt;(computing)|printing]] of user programs. When finished, they [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Control &lt;/del&gt;flow|passed control]] back to the schedule [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Queue &lt;/del&gt;(abstract data type)|queue]], which was [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Priority &lt;/del&gt;queue|priority-based]], favoring recently started processes and ones that blocked because of I/O.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Layer 4&#039;&#039;&#039; consisted of [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;user &lt;/ins&gt;space|user programs]]. There were 5 processes: in total, they handled the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;compiler&lt;/ins&gt;|compiling]], [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;execution &lt;/ins&gt;(computing)|executing]], and [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;printer &lt;/ins&gt;(computing)|printing]] of user programs. When finished, they [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;control &lt;/ins&gt;flow|passed control]] back to the schedule [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;queue &lt;/ins&gt;(abstract data type)|queue]], which was [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;priority &lt;/ins&gt;queue|priority-based]], favoring recently started processes and ones that blocked because of I/O.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 5&amp;#039;&amp;#039;&amp;#039; was the user; as Dijkstra notes, &amp;quot;not implemented by us&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Layer 5&amp;#039;&amp;#039;&amp;#039; was the user; as Dijkstra notes, &amp;quot;not implemented by us&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The constraint that higher layers can only depend on lower layers was imposed by the designers in order to make reasoning about the system (using quasi-[[formal methods]]) more tractable, and also to facilitate building and testing the system incrementally. The layers were implemented in order, layer 0 first, with thorough testing of the abstractions provided by each layer in turn. This division of the [[kernel (operating system)|kernel]] into layers was similar in some ways to [[Multics]]&amp;#039; later [[protection ring|ring-segmentation]] model. Several subsequent operating systems have used layering to some extent, including [[Windows NT]] and [[macOS]], although usually with fewer layers.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The constraint that higher layers can only depend on lower layers was imposed by the designers in order to make reasoning about the system (using quasi-[[formal methods]]) more tractable, and also to facilitate building and testing the system incrementally. The layers were implemented in order, layer 0 first, with thorough testing of the abstractions provided by each layer in turn. This division of the [[kernel (operating system)|kernel]] into layers was similar in some ways to [[Multics]]&amp;#039; later [[protection ring|ring-segmentation]] model. Several subsequent operating systems have used layering to some extent, including [[Windows NT]] and [[macOS]], although usually with fewer layers.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The code of the system was written in [[assembly language]] for the Dutch [[Electrologica X8]] computer. This computer had a [[word (computer architecture)|word]] size of 27 bits, 48 [[kiloword]]s of [[core memory]],&amp;lt;ref name=&quot;osc&quot;/&amp;gt; 512 kilowords of [[drum memory]] providing [[cache (computing)|backing store]] for the [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cache &lt;/del&gt;replacement policies|LRU cache algorithm]], paper tape readers, paper tape punches, plotters, and printers.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The code of the system was written in [[assembly language]] for the Dutch [[Electrologica X8]] computer. This computer had a [[word (computer architecture)|word]] size of 27 bits, 48 [[kiloword]]s of [[core memory]],&amp;lt;ref name=&quot;osc&quot;/&amp;gt; 512 kilowords of [[drum memory]] providing [[cache (computing)|backing store]] for the [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cache &lt;/ins&gt;replacement policies|LRU cache algorithm]], paper tape readers, paper tape punches, plotters, and printers.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==See also==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l77&quot;&gt;Line 77:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 77:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Ring (computer security)]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Ring (computer security)]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Timeline of operating systems]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Timeline of operating systems]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Source code is available at http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-1-pdf/k-1-C1063.6-source-THE-os.pdf&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==References==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==References==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Reflist}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Reflist}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;==External links==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-1-pdf/k-1-C1063.6-source-THE-os.pdf Source code is available]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Edsger Dijkstra}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Edsger Dijkstra}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;Ecourter</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=THE_multiprogramming_system&amp;diff=1156375&amp;oldid=prev</id>
		<title>2600:1700:5450:BF70:C68:2EDE:2970:C259: /* See also */</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=THE_multiprogramming_system&amp;diff=1156375&amp;oldid=prev"/>
		<updated>2023-11-08T17:19:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;See also&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|First implementation of paged virtual memory}}&lt;br /&gt;
{{Infobox OS&lt;br /&gt;
| name = THE multiprogramming system&lt;br /&gt;
| logo = &amp;lt;!-- Filename only: no wikilink, Image: or File: --&amp;gt;&lt;br /&gt;
| logo size = &lt;br /&gt;
| logo caption = &lt;br /&gt;
| logo alt = &lt;br /&gt;
| screenshot = &amp;lt;!-- Filename only: no wikilink, Image: or File: --&amp;gt;&lt;br /&gt;
| caption = &lt;br /&gt;
| developer = [[Eindhoven University of Technology]] (Technische Hogeschool Eindhoven);&amp;lt;br/&amp;gt;[[Edsger Dijkstra]], &amp;#039;&amp;#039;et al.&amp;#039;&amp;#039;&lt;br /&gt;
| family = &lt;br /&gt;
| working state = Discontinued&lt;br /&gt;
| source model = &lt;br /&gt;
| released = {{Start date and age|1965}}&amp;lt;!-- If known, add |mm|dd|df=yes --&amp;gt;&lt;br /&gt;
| discontinued = Yes&lt;br /&gt;
| latest release version = Final&lt;br /&gt;
| latest release date = {{Start date and age|1968}}&amp;lt;!-- If known, add |mm|dd|df=yes --&amp;gt;&lt;br /&gt;
| marketing target = [[Research]]&lt;br /&gt;
| programmed in = [[Electrologica X8]] [[assembly language]]&lt;br /&gt;
| language = English&lt;br /&gt;
| update model = Compile from [[source code]]&lt;br /&gt;
| supported platforms = [[Electrologica X8]]&lt;br /&gt;
| kernel type = [[Operating system abstraction layer|Layered]]&lt;br /&gt;
| userland = &lt;br /&gt;
| ui = [[Paper tape]]&lt;br /&gt;
| license = &lt;br /&gt;
| preceded by = &lt;br /&gt;
| succeeded by = &lt;br /&gt;
| website = &amp;lt;!-- {{URL|www.example.com}} --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;THE multiprogramming system&amp;#039;&amp;#039;&amp;#039; or &amp;#039;&amp;#039;&amp;#039;THE OS&amp;#039;&amp;#039;&amp;#039; was a computer [[operating system]] designed by a team led  by [[Edsger W. Dijkstra]], described in monographs in 1965-66&amp;lt;ref name=&amp;quot;ewd196&amp;quot;&amp;gt;&lt;br /&gt;
{{Cite EWD|196|The structure of the &amp;#039;THE&amp;#039;-multiprogramming system}} (Jun 14, 1965)&lt;br /&gt;
&amp;lt;/ref&amp;gt; and published in 1968.&amp;lt;ref&amp;gt;&lt;br /&gt;
{{Citation&lt;br /&gt;
|last=Dijkstra&lt;br /&gt;
|first=E.W.&lt;br /&gt;
|author-link=Edsger W. Dijkstra&lt;br /&gt;
|title=The structure of the &amp;#039;THE&amp;#039;-multiprogramming system&lt;br /&gt;
|journal=Communications of the ACM&lt;br /&gt;
|volume=11&lt;br /&gt;
|issue=5&lt;br /&gt;
|pages=341–346&lt;br /&gt;
|year=1968&lt;br /&gt;
|doi=10.1145/363095.363143&lt;br /&gt;
|s2cid=2021311&lt;br /&gt;
|doi-access=free&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
Dijkstra never named the system; &amp;quot;THE&amp;quot; is simply the abbreviation of &amp;quot;Technische Hogeschool Eindhoven&amp;quot;, then the name (in [[Dutch language|Dutch]]) of the [[Eindhoven University of Technology]] of the [[Netherlands]]. The THE system was primarily a [[batch system]]&amp;lt;ref name=&amp;quot;osc&amp;quot;&amp;gt;{{Citation&lt;br /&gt;
| title = Operating System Concepts&lt;br /&gt;
| last1 = Silberschatz &lt;br /&gt;
| first1 = Abraham&lt;br /&gt;
| last2 = Peterson&lt;br /&gt;
| first2 = James L.&lt;br /&gt;
| chapter = 13: Historical Perspective&lt;br /&gt;
|date=May 1988&lt;br /&gt;
| page = 512&lt;br /&gt;
}}&amp;lt;/ref&amp;gt; that supported [[Computer multitasking|multitasking]]; it was not designed as a [[multi-user]] operating system. It was much like the [[SDS 940]], but &amp;quot;the set of [[process (computing)|process]]es in the THE system was static&amp;quot;.&amp;lt;ref name=&amp;quot;osc&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The THE system apparently introduced the first forms of software-based [[Memory page|paged]] [[virtual memory]] (the [[Electrologica X8]] did not support [[Memory management unit|hardware-based]] [[memory management]]),&amp;lt;ref name=&amp;quot;osc&amp;quot;/&amp;gt; freeing programs from being forced to use physical locations on the [[drum memory]]. It did this by using a modified [[ALGOL]] [[compiler]] (the only [[programming language]] supported by Dijkstra&amp;#039;s system) to &amp;quot;automatically generate [[System call|calls to system routines]], which made sure the requested information was in memory, [[Swap memory|swapping]] if necessary&amp;quot;.&amp;lt;ref name=&amp;quot;osc&amp;quot;/&amp;gt; Paged virtual memory was also used for [[Data buffer|buffering]] [[input/output]] (I/O) device data, and for a significant portion of the operating system code, and nearly all the [[ALGOL 60]] compiler. In this system, [[Semaphore (programming)|semaphores]] were used as a programming construct for the first time.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
The design of the THE multiprogramming system is significant for its use of a [[Abstraction|layered structure]], in which &amp;quot;higher&amp;quot; layers depend on &amp;quot;lower&amp;quot; layers only:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 0&amp;#039;&amp;#039;&amp;#039; was responsible for the multiprogramming aspects of the operating system. It decided which process was allocated to the [[central processing unit]] (CPU), and accounted for processes that were blocked on [[Semaphore (programming)|semaphores]]. It dealt with [[interrupt]]s and performed the [[context switch]]es when a process change was needed. This is the lowest level. In modern terms, this was the [[scheduler]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 1&amp;#039;&amp;#039;&amp;#039; was concerned with [[Memory management|allocating memory]] to processes. In modern terms, this was the pager.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 2&amp;#039;&amp;#039;&amp;#039; dealt with communication between the operating system and the [[system console]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 3&amp;#039;&amp;#039;&amp;#039; managed all I/O between the devices attached to the computer. This included buffering information from the various devices.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 4&amp;#039;&amp;#039;&amp;#039; consisted of [[User space|user programs]]. There were 5 processes: in total, they handled the [[Compiler|compiling]], [[Execution (computing)|executing]], and [[Printer (computing)|printing]] of user programs. When finished, they [[Control flow|passed control]] back to the schedule [[Queue (abstract data type)|queue]], which was [[Priority queue|priority-based]], favoring recently started processes and ones that blocked because of I/O.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Layer 5&amp;#039;&amp;#039;&amp;#039; was the user; as Dijkstra notes, &amp;quot;not implemented by us&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The constraint that higher layers can only depend on lower layers was imposed by the designers in order to make reasoning about the system (using quasi-[[formal methods]]) more tractable, and also to facilitate building and testing the system incrementally. The layers were implemented in order, layer 0 first, with thorough testing of the abstractions provided by each layer in turn. This division of the [[kernel (operating system)|kernel]] into layers was similar in some ways to [[Multics]]&amp;#039; later [[protection ring|ring-segmentation]] model. Several subsequent operating systems have used layering to some extent, including [[Windows NT]] and [[macOS]], although usually with fewer layers.&lt;br /&gt;
&lt;br /&gt;
The code of the system was written in [[assembly language]] for the Dutch [[Electrologica X8]] computer. This computer had a [[word (computer architecture)|word]] size of 27 bits, 48 [[kiloword]]s of [[core memory]],&amp;lt;ref name=&amp;quot;osc&amp;quot;/&amp;gt; 512 kilowords of [[drum memory]] providing [[cache (computing)|backing store]] for the [[Cache replacement policies|LRU cache algorithm]], paper tape readers, paper tape punches, plotters, and printers.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[RC 4000 Multiprogramming System]]&lt;br /&gt;
* [[Ring (computer security)]]&lt;br /&gt;
* [[Timeline of operating systems]]&lt;br /&gt;
* Source code is available at http://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-1-pdf/k-1-C1063.6-source-THE-os.pdf&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Edsger Dijkstra}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Assembly language software]]&lt;br /&gt;
[[Category:Discontinued operating systems]]&lt;br /&gt;
[[Category:Dutch inventions]]&lt;br /&gt;
[[Category:Computer science in the Netherlands]] &lt;br /&gt;
[[Category:Information technology in the Netherlands]]&lt;br /&gt;
[[Category:Edsger W. Dijkstra]]&lt;br /&gt;
[[Category:1968 software]]&lt;/div&gt;</summary>
		<author><name>2600:1700:5450:BF70:C68:2EDE:2970:C259</name></author>
	</entry>
</feed>