作業系統設計演變/什麼是作業系統?
計算機作業系統是管理計算機硬體並透過 API 嚮應用程式提供這些資源的軟體和/或韌體。它也可以被定義為負責控制計算機或相關可程式設計電子裝置的硬體功能的程式(一組邏輯指令)。(Martin Muduva 2014)。
透過處理硬體的需求和限制,應用程式和應用程式程式設計師無需額外工作量和額外知識來處理硬體。這使得為該計算機編寫應用程式變得更加容易。它還使維護檔案系統完整且正常執行變得更容易,因為對檔案系統的所有更改都透過作業系統進行,而不是由每個應用程式程式設計師自己完成。(Tischeritz 和 Bernstein)。第一臺計算機沒有作業系統,並且一次只能執行一個程式。第一個電子計算電路只是分離的功能,甚至不需要程式語言來測試。大約在 1945 年,像 Eniac 這樣的計算機誕生了,它佔地 4 個街區,其處理能力與您今天可能在鑰匙扣上獲得的四功能計算器相當。這些龐然大物的程式設計是透過插接板完成的,這些插接板安裝在一個類似電話交換機的裝置上。由於它們是當時執行在真空管上的實驗性引擎,而且維護是一個問題,因此幾乎沒有實際的生產力,而且只有少數人知道如何執行它們。程式設計是在每臺機器自己的機器語言中完成的,因此不需要作業系統。到了 1950 年代,打孔卡片機的發明使得更容易讀取一個小程式,但系統執行所需的一切只是按下幾個按鈕,一個將卡片載入到記憶體中,另一個執行程式。
在 1950 年代中期,電晶體使計算機電路成為固態,從而消除了不斷巡視計算機內部以尋找燒燬的管子和清潔電氣觸點中的錯誤的需要。第一批固態計算機佔用了大型空調計算機房,裡面擺滿了機架,主要用於政府處理表格,例如瞄準軍事武器所需的彈道表格。這導致需要更多地控制每次操作所花費的時間,從而導致維護和運營組與程式設計師分離。最初,程式設計師在紙上寫出他們的程式,然後將其打孔成卡片,操作員將這些卡片按順序載入到機器中,一次一疊。後來,設計了一種作業控制語言,允許程式設計師將作業資訊本身宣告為其卡片堆疊的一部分,並且可以執行一個名為監視器的程式,該程式讀取堆疊並將堆疊儲存在稱為輸入磁帶的磁帶上。然後,輸入磁帶可以在單獨的計算機(“主機”)上執行,並將它的輸出轉儲到第二盤磁帶上,稱為輸出磁帶,該磁帶稍後會安裝在印表機上以輸出對程式的響應。批處理監視器是這種早期形式的計算機最接近作業系統的元件。它的工作是從卡片中讀取資訊並設定作業,自動釋放操作員。大約在同一時間,Fortran 被髮明,一個“編譯器”轉儲可以載入到主機上,允許程式設計師用人類可讀的形式編寫,而計算機仍然使用機器語言執行。
到 1965 年,第一個類似作業系統的程式開始出現,例如 Fortran 監控系統,該系統必須處理三種類型的程式的載入:Fortran 程式、編譯器和機器語言程式,這是編譯的結果。這需要該程式能夠以某種方式識別它正在磁帶上讀取的檔案型別。類似的系統,IBSYS 是 IBM 為 7094 開發的作業系統。載入作業系統需要首先載入一個包含作業系統的磁帶,以便啟動作業系統。早期的作業系統沒有所有現代作業系統都使用的引導機制來初始化計算機,因此計算機的啟動是一個漫長而複雜的過程。
到 1960 年代初,很明顯,計算機公司必須支援兩種完全不同的計算機:1401 這樣的字元型計算機和 7094 這樣的字型科學計算機。在這些完全不同的系統上進行維護和培訓很成問題,因此 IBM 發明了 System/360 並建立了一系列使用這種通用架構的產品。IBM 360 是第一條使用小規模積體電路的計算機系列,因此與之前的固態機器相比,價格大幅下降。這極大地擴充套件了市場和機器的效能。
OS360 被編寫為在所有 System360 機器上執行,從最小的輸入處理器到最大的數值計算型別處理器。它是由數百名程式設計師編寫的數千行程式碼組成的,維護很成問題,因為幾乎每次修復一個 bug 時都會產生一個新的 bug。儘管如此龐大的單體程式不可能維護,但它與之前的第二代作業系統相比,仍是一個明顯的改進,並獲得了相當的流行。
它普及的概念之一是多工處理的概念,即計算機可以同時執行多個作業,而不是等待單個作業完成。這消除了操作員裝卸磁帶時的等待時間,因為計算機可以在等待時處理另一個程式。將業務計算機作業系統與數值計算系統作業系統結合起來的一個問題是,涉及的作業規模需要不同的策略。業務作業很簡單,每個作業所需的時間更短,因此裝卸磁帶佔用了 80% 到 90% 的處理時間。而大型數值計算器仍然足夠昂貴,以至於小型作業並不經濟,因此裝卸磁帶只佔作業的 10%,並不是一個嚴重的問題。解決此問題的一種方法是劃分記憶體,以便每個作業都可以擁有自己的分割槽。這與多工處理的概念相一致,因為它意味著多個作業可以在同一臺計算機上同時執行,而不會干擾其他作業的記憶體。
隨著這個概念的出現,出現了從一個分割槽執行讀卡器、從另一個分割槽執行數值計算、從第三個分割槽執行輸出到印表機的想法,消除了類似 1401 的衛星計算機,並減少了磁帶由於安裝應力造成的磨損。雖然第三代裝置非常適合大型執行,但它們本質上仍然是批處理系統,隨著程式變得越來越複雜,管理程式的卡片堆疊變得笨拙。這為分時系統鋪平了道路,在分時系統中,每個使用者都有自己的終端,並且他們共享一箇中央主機。
直到第三代後期,用於保護機制的硬體開始普及後,分時系統才變得流行。當時,人們開始研究計算效用這一概念,即一個單一主機將為整個波士頓地區提供分時機會。從這個概念中誕生了第一個第四代作業系統 MULTICS。當然,這個想法是基於小規模整合,以及 LSI 然後是 VLSI(超大規模整合)的發展最終用小型桌上型電腦取代了整個房間的計算機。由於 LSI(大規模整合)的發展,在單架機架上構建整個計算機系統成為可能。這些小型計算機開始與 IBM 在小型企業中競爭,並且由於它們的融資條款不像 IBM 那樣嚴格,因此它們有競爭力,取代了小型和中型 System360 元件。到了 80 年代,人們發現分時系統使用小型計算機作為前端來處理終端多路複用,並以主機作為主要的計算機制,這並不奇怪。
在 1970 年代,Ken Thompson 設計了 UNIX,它是基於 PDP-7 小型機的 MULTICS 的一個簡化的單使用者版本。由於他釋出了原始碼,它成為一個流行的作業系統,被大學和小型企業廣泛使用。到了 1990 年代,它已經如此流行,以至於第三方為它編寫的軟體比當時擁有其許可證的 ATT 公司編寫的軟體還要多。ATT 與大學之間關於誰擁有 Unix V5 中新軟體權利的法律糾紛導致了兩件事:將作業系統出售給 SCO 和 Linus Torvalds 開發了一個替代核心,它可以運行當時由大學制作的公共領域軟體,因為它符合 IEEE 開發的 POSIX 標準。
正是對作業系統核心的這種對抗性重寫,催生了推動網際網路革命的開源軟體運動。如今,大多數作業系統都從開源軟體運動中獲益,因為它們的網際網路軟體的複雜性依賴於透過自由軟體開創和傳播的想法。
在今天的大多數情況下,作業系統最好定義為作業系統安裝 CD 或 DVD 上提供的軟體。這個定義對使用者和作業系統供應商來說都很好用。它甚至在法庭上被爭論過。
現在,作業系統的定義可能看起來像這樣
- 一個系統
- 一組原則和概念以及所有服從這些原則的元件。
- 作業系統
- 一個軟體系統,它管理系統的硬體資源,為使用者提供一個基礎來滿足他們的程式計算需求。
程式化是指軟體主要由程式使用,而不是由使用者直接互動使用。
例如,C++ 不是 作業系統,因為它無法提供許多關鍵的計算功能。如果沒有程式執行、程序排程以及系統軟體為 C++ 提供的許多其他功能,C++ 就無法在裸硬體上執行。相反,Basic、Lisp、Smalltalk 和 Java 有時可以被認為是作業系統。雖然它們通常執行在其他作業系統之上,但有時它們直接執行在特殊的硬體之上。
談到原則,例如 UNIX 的原則就是“一切皆檔案,透過描述符引用”和“程式充當過濾器”。所有遵循這些原則的小程式和實用程式都是作業系統不可或缺的一部分,而 X Window System 則不遵循這些原則,因此它不是作業系統。
相比之下,Plan 9 是 Unix 的衍生系統,其原則為“一切皆檔案系統”,並且 Plan 9 中的作業系統功能比 Unix 多得多。特別是,Plan 9 的視窗系統是作業系統不可或缺的一部分。按鈕,一個用於將卡片載入到記憶體中,另一個用於執行程式。
在 1950 年代中期,電晶體使計算機電路成為固態,從而消除了不斷巡視計算機內部以尋找燒燬的管子和清潔電氣觸點中的錯誤的需要。第一批固態計算機佔用了大型空調計算機房,裡面擺滿了機架,主要用於政府處理表格,例如瞄準軍事武器所需的彈道表格。這導致需要更多地控制每次操作所花費的時間,從而導致維護和運營組與程式設計師分離。最初,程式設計師在紙上寫出他們的程式,然後將其打孔成卡片,操作員將這些卡片按順序載入到機器中,一次一疊。後來,設計了一種作業控制語言,允許程式設計師將作業資訊本身宣告為其卡片堆疊的一部分,並且可以執行一個名為監視器的程式,該程式讀取堆疊並將堆疊儲存在稱為輸入磁帶的磁帶上。然後,輸入磁帶可以在單獨的計算機(“主機”)上執行,並將它的輸出轉儲到第二盤磁帶上,稱為輸出磁帶,該磁帶稍後會安裝在印表機上以輸出對程式的響應。批處理監視器是這種早期形式的計算機最接近作業系統的元件。它的工作是從卡片中讀取資訊並設定作業,自動釋放操作員。大約在同一時間,Fortran 被髮明,一個“編譯器”轉儲可以載入到主機上,允許程式設計師用人類可讀的形式編寫,而計算機仍然使用機器語言執行。
到 1965 年,第一個類似作業系統的程式開始出現,例如 Fortran 監控系統,該系統必須處理三種類型的程式的載入:Fortran 程式、編譯器和機器語言程式,這是編譯的結果。這需要該程式能夠以某種方式識別它正在磁帶上讀取的檔案型別。類似的系統,IBSYS 是 IBM 為 7094 開發的作業系統。載入作業系統需要首先載入一個包含作業系統的磁帶,以便啟動作業系統。早期的作業系統沒有所有現代作業系統都使用的引導機制來初始化計算機,因此計算機的啟動是一個漫長而複雜的過程。
到 1960 年代初,很明顯,計算機公司必須支援兩種完全不同的計算機:1401 這樣的字元型計算機和 7094 這樣的字型科學計算機。在這些完全不同的系統上進行維護和培訓很成問題,因此 IBM 發明了 System/360 並建立了一系列使用這種通用架構的產品。IBM 360 是第一條使用小規模積體電路的計算機系列,因此與之前的固態機器相比,價格大幅下降。這極大地擴充套件了市場和機器的效能。
OS360 被編寫為在所有 System360 機器上執行,從最小的輸入處理器到最大的數值計算型別處理器。它是由數百名程式設計師編寫的數千行程式碼組成的,維護很成問題,因為幾乎每次修復一個 bug 時都會產生一個新的 bug。儘管如此龐大的單體程式不可能維護,但它與之前的第二代作業系統相比,仍是一個明顯的改進,並獲得了相當的流行。
它普及的概念之一是多工處理的概念,即計算機可以同時執行多個作業,而不是等待單個作業完成。這消除了操作員裝卸磁帶時的等待時間,因為計算機可以在等待時處理另一個程式。將業務計算機作業系統與數值計算系統作業系統結合起來的一個問題是,涉及的作業規模需要不同的策略。業務作業很簡單,每個作業所需的時間更短,因此裝卸磁帶佔用了 80% 到 90% 的處理時間。而大型數值計算器仍然足夠昂貴,以至於小型作業並不經濟,因此裝卸磁帶只佔作業的 10%,並不是一個嚴重的問題。解決此問題的一種方法是劃分記憶體,以便每個作業都可以擁有自己的分割槽。這與多工處理的概念相一致,因為它意味著多個作業可以在同一臺計算機上同時執行,而不會干擾其他作業的記憶體。
隨著這個概念的出現,出現了從一個分割槽執行讀卡器、從另一個分割槽執行數值計算、從第三個分割槽執行輸出到印表機的想法,消除了類似 1401 的衛星計算機,並減少了磁帶由於安裝應力造成的磨損。雖然第三代裝置非常適合大型執行,但它們本質上仍然是批處理系統,隨著程式變得越來越複雜,管理程式的卡片堆疊變得笨拙。這為分時系統鋪平了道路,在分時系統中,每個使用者都有自己的終端,並且他們共享一箇中央主機。
直到第三代後期,用於保護機制的硬體開始普及後,分時系統才變得流行。當時,人們開始研究計算效用這一概念,即一個單一主機將為整個波士頓地區提供分時機會。從這個概念中誕生了第一個第四代作業系統 MULTICS。當然,這個想法是基於小規模整合,以及 LSI 然後是 VLSI(超大規模整合)的發展最終用小型桌上型電腦取代了整個房間的計算機。由於 LSI(大規模整合)的發展,在單架機架上構建整個計算機系統成為可能。這些小型計算機開始與 IBM 在小型企業中競爭,並且由於它們的融資條款不像 IBM 那樣嚴格,因此它們有競爭力,取代了小型和中型 System360 元件。到了 80 年代,人們發現分時系統使用小型計算機作為前端來處理終端多路複用,並以主機作為主要的計算機制,這並不奇怪。
在 1970 年代,Ken Thompson 設計了 UNIX,它是基於 PDP-7 小型機的 MULTICS 的一個簡化的單使用者版本。由於他釋出了原始碼,它成為一個流行的作業系統,被大學和小型企業廣泛使用。到了 1990 年代,它已經如此流行,以至於第三方為它編寫的軟體比當時擁有其許可證的 ATT 公司編寫的軟體還要多。ATT 與大學之間關於誰擁有 Unix V5 中新軟體權利的法律糾紛導致了兩件事:將作業系統出售給 SCO 和 Linus Torvalds 開發了一個替代核心,它可以運行當時由大學制作的公共領域軟體,因為它符合 IEEE 開發的 POSIX 標準。
正是對作業系統核心的這種對抗性重寫,催生了推動網際網路革命的開源軟體運動。如今,大多數作業系統都從開源軟體運動中獲益,因為它們的網際網路軟體的複雜性依賴於透過自由軟體開創和傳播的想法。
在今天的大多數情況下,作業系統最好定義為作業系統安裝 CD 或 DVD 上提供的軟體。這個定義對使用者和作業系統供應商來說都很好用。它甚至在法庭上被爭論過。
現在,作業系統的定義可能看起來像這樣
- 一個系統
- 一組原則和概念以及所有服從這些原則的元件。
- 作業系統
- 一個軟體系統,它管理系統的硬體資源,為使用者提供一個基礎來滿足他們的程式計算需求。
程式化是指軟體主要由程式使用,而不是由使用者直接互動使用。
例如,C++ 不是 作業系統,因為它無法提供許多關鍵的計算功能。如果沒有程式執行、程序排程以及系統軟體為 C++ 提供的許多其他功能,C++ 就無法在裸硬體上執行。相反,Basic、Lisp、Smalltalk 和 Java 有時可以被認為是作業系統。雖然它們通常執行在其他作業系統之上,但有時它們直接執行在特殊的硬體之上。
談到原則,例如 UNIX 的原則就是“一切皆檔案,透過描述符引用”和“程式充當過濾器”。所有遵循這些原則的小程式和實用程式都是作業系統不可或缺的一部分,而 X Window System 則不遵循這些原則,因此它不是作業系統。
相比之下,Plan 9 是 Unix 的衍生系統,其原則為“一切皆檔案系統”,並且 Plan 9 中的作業系統功能比 Unix 多得多。特別是,Plan 9 的視窗系統是作業系統不可或缺的一部分。
雖然作業系統是一套原則及其遵循這些原則的軟體,但通常情況下,作業系統的一部分不遵循這些原則。當原則表達不清或不足時,就會出現這種情況。
在 Unix 和 Plan 9 的情況下,程序既不是檔案流也不是檔案系統。例如,不可能透過複製來複制一個程序。因此,我們看到“一切皆檔案流/檔案系統”的原則是不夠的。請注意,即使某些東西是過濾器,也不妨礙它成為檔案流;檔案流的概念只是不夠完善。
原則不足的結果是開發過程隨機進行,遵循阻力最小的路徑。這種開發的結果根本無法用任何設計原則來描述,並且已經廢除了系統開始時遵循的任何原則。這解釋了現代 Unix 和 C++。這些系統之所以被認為是凝聚的,僅僅是因為它們的不連貫性與其他系統截然不同。
出於學術目的,測試兩個作業系統之間差異的一個好方法是軟體移植的難易程度。如果兩個作業系統使得從一個作業系統移植軟體到另一個作業系統變得困難,因為概念不同,那麼這兩個作業系統就相對不相似。另一方面,如果兩個平臺使得不需要任何努力就可以從一個平臺“移植”到另一個平臺,那麼這兩個平臺就相對相似。由於存在法律原因,我們不能將兩個由不同製造商生產的不同產品稱為同一個產品,因此我們稱它們為相容。
通常,兩個相容的系統之所以相容,是因為它們遵循一個稱為標準的單一協議。像 IEEE 和 ISO 這樣的組織釋出這些標準,不同的公司可以根據標準構建自己的專案,即使它們在較低級別擁有專有元素。例如,Linux 和 Unix 共享 IEEE POSIX 標準,因此它們在該標準定義的介面級別上是相容的。
根據這種定義,許多常見的作業系統可以歸為一類,並被認為是相似或相容的。OS/2 和 Windows 是相似的。UNIX 和 BSD 是相似的,Linux 是相容的。
兩個不同作業系統之間的最小距離可能是 Plan 9 和 Unix 之間的距離。儘管它們存在差異,但它們都是由同一個人建立的,旨在實現相同的目標。儘管 Unix 和 Plan 9 之間存在時間間隔,但很明顯,設計人員認為許多 UNIX 設計決策仍然有效。這一切都表明,Plan 9 和 Unix 是兩個作業系統之間可以達到的最接近的距離,同時仍然保持不同。
請注意,這種測試作業系統區別性的方法在生物學中也有類似的應用,用於確定物種的區別性。生物學認為,當物種無法再自由交配時,它們就是不同的物種。就我們而言,當作業系統無法再自由共享程式碼時,它們就是不同的作業系統。