一、前言
上一篇博文作業系統與作業系統核心整理並分析了作業系統與作業系統核心區別,通過對作業系統核心的解釋:核心是作業系統的一組子程式,主要用於與電腦硬體組件打交道。同時也通過引用另一篇博文說明了作業系統的發展曆史,但這沒有具體說明作業系統與核心的具體發展過程,這篇文章做進一步闡述。
二、作業系統的發展
總的說來,作業系統的發展經曆了串列處理系統、簡單批處理系統、多道程式設計批處理系統、分時系統。 1、串列處理系統
串列處理系統在電腦時期扮演者重要的作用,在串列處理系統時期,程式員都是直接與電腦硬體打交道的,也就是說這個時期還沒有作業系統這個概念,在那個時候,沒有程式員都是一個作業系統。串列處理系統中給每個程式(作業)分配一個(預計的)固定作業時間,在這個時間內,這個程式可以使用這台電腦,完成從代碼輸入、運行和結構列印的過程,但由於I/O操作的時間比較慢,這就影響了串列處理系統的效率,也就是在整個程式的運行過程中,真正的執行代碼的時間是比較短的。
特點:沒有提到作業系統的概念、同一時間處理一個程式(作業)、有人工完成專業調度、程式準備時間(即I/O時間)長。
2、簡單批處理系統
為瞭解決串列處理系統的低效率問題,發明了簡單的批處理作業系統,所謂“批處理”是指當作業數量達到一定程度之後再集中處理,把所有作業放進一個作業隊列,依次順序執行,在批處理系統中有一個程式專門用來調度作業並執行,也就是說作業隊列中一個作業執行完成之後,就由該程式載入下一個作業並執行,這就是作業系統的基本雛形。但是儘管批處理系統簡化了在串列處理系統中的作業調度問題,但是它其實並沒有提高處理的效率,因為處理的執行速度相比I/O是快很多的,所以就算是批處理,處理器在大多數情況下還是處於空閑狀態下的。
特點:具有簡單作業系統模組(完成作業調度)、執行效率任然低下
3、多道程式設計批處理系統
多道程式設計結構的出現,在本質上解決了簡單批次程式效率低下的瓶頸,同時多道程式設計也是現代作業系統設計的核心思想。所謂多道程式設計是允許多個程式(部分或整個程式)同時駐留在記憶體中並運行,不管是串列處理系統還是簡單批處理系統,他們的記憶體中一般只有一個程式,就算是簡單批處理系統中可以允許記憶體中多個程式,它在一個程式的執行期間是不允許另外的程式插隊允許的,必須等到當前允許的程式運行完成,才有可能運行下一個程式,即使當前程式一直等待I/O輸入。而多道程式設計的批處理系統核心是允許多個程式同時在記憶體中同步運行,所謂“同步運行”指的是“協同”運行,舉個簡單的例子,比如現在記憶體中同時有兩個程式A和B駐留,當前啟動並執行程式是A,而現在A在等待I/O操作,也就是說現在處理器是閒置,那麼程式A你就等待好了,我(處理器)可以去執行程式B,等你(A)好了再來通知我,然後我再去執行你剩下的代碼。如果把程式A和程式B看做是兩個進程,那這個過程就是一個簡單的進程切換的過程。
特點:多個程式在記憶體中同時駐留、多個程式同步協同執行、提高處理器運行效率
4、分時系統
通過使用多道程式設計,可以使批處理變得更加有效,但是這種有效代價是使用者(即我們這些使用電腦的人)還是需要把整個程式交付給作業系統,由作業系統完成整個程式,中途我們不能進行過多的幹預(除了需要我們進行I/O操作等),所以為了提供一種使用者可以直接與電腦互動的工作模式,人們有發明了分時作業系統。分時系統的核心是將處理器操作時間進行固定時間分區,給每個使用者指派一個同樣大小的時間片,某一個使用者使用完自己的時間片,就得等待處理器分配給他的下一個時間片。如有n個使用者同時向一台電腦請求服務,則這台電腦就將其處理器時間分為n等分,所以每個使用者就得到了1/n的操作時間,所以這n個使用者輪流佔有一次處理器就成為一個周期,注意這裡說的是輪流佔有,也就是說儘管作業系統進行了時間分區處理,但是在一個處理周期內,任一時刻,處理器還是只能為某一個使用者服務,只是在這整個處理周期內完成所有使用者請求之間的切換,這種切換是很快的,使用者根本感覺不到,所以使用者就感覺自己是獨佔的在使用這台電腦,其實不是。
特點:提供使用者與電腦的互動、同時保證處理器的執行效率
三、作業系統基本理論 1、進程
對進程進行概念性的總結為:
(1)進程是正在執行的程式;
(2)正在電腦上執行的程式實體;
(3)能分配處理器並由處理器執行的實體;
(4)進程是一個具有:一組指令序列的執行、一個目前狀態和相關的系統資源集等特徵的活動單元。
上述概念可以說明進程由3部分組成:一段可執行檔程式、程式所需要的相關資料、程式的執行內容。在這三部分中,第三點程式的執行內容又稱作進程狀態,是作業系統用來管理和控制進程所需的內部資料,而這種內部資料是和進程本身分開的,因為作業系統不允許進程直接存取其內部資料,也就是說上述三部分中第一、第二部分與第三部分是分開的。同時,又作業系統管理的進程的執行內容是一個固定的資料結構,裡麵包括了進程的一些必須屬性,具體這些屬性主要包括:進程ID、進程優先順序、進程狀態(是否正在運行)、程式計數器、記憶體指標、上下文資料、I/O狀態資訊、記賬資訊等。
2、記憶體管理
作業系統的主要作用就是進程管理和資源分派,而對於資源來說,最常用的有處理器、記憶體、I/O裝置。而其中記憶體資源是作業系統要管理的另外一個重要資源。記憶體管理需要達到兩個目標:一是地址保護,即一個程式(進程)不能訪問另一個程式(進程)的地址空間(這是進程管理的工作,不屬於記憶體資源分派的工作)。二是地址獨立,即程式發出的地址應該與物理主存地址無關(虛擬位址映射)。關於記憶體管理的相關知識可以轉至這篇博文,個人感覺寫的非常好的作業系統核心原理-5.記憶體管理(上):基本記憶體管理
3、資訊保護和安全
資訊保護與安全是指對電腦系統的控制訪問和其中儲存的資訊,大多是與作業系統相關的安全和保護問題可以分為4類:可用性、保密性、資料完整性、認證。
4、調度和資源管理
在記憶體管理中已經說明了,作業系統的主要作用就是進程管理和資源分派,也就是進程的調度的電腦各種資源的管理,而關於資源分派和調度策略都必須考慮三個因素:
(1)公平性:即對於多個進程進行競爭的同一資源的分配要提供幾乎相等和公平的訪問機會,當然這可以根據一些特權機制如進程優先順序來打破這種公平性
(2)有差別的響應性:即在保證公平性的同時也需要進行動態決策與調整,保證所有進程對資源申請的響應即時性
(3)有效性:即需要報賬作業系統能儘可能多的響應經常請求。
5、系統結構
一個功能完善的作業系統的大小和它所能處理的任務的困難性,導致了4個讓人遺憾但又普遍存在的問題。第一、正式發布的作業系統表現出習慣性的落後;第二、需要不斷進行補丁修複;第三、總是無法滿足預期的要求;第四、不可能開發出真正完整和安全的作業系統。綜上所述,所以要儘可能追求作業系統結構上的完整性。