作業系統(一):作業系統概述
好好學習,天天向上
本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star
前言
之前一直沒有系統地學過作業系統,感覺自己在平時的學習過程中對於某些概念理解得一塌糊塗,比如中斷、記憶體、進程和執行緒等。所以打算系統的學習一下作業系統。一開始我是在B站看哈工大的李治軍老師講的,但是一上來就開始從彙編程式碼去分析開機的過程,雖然講得挺好的,但是可能是我太笨了吧,理解不了。於是我又在中國大學MOOC上看蘇州大學的《作業系統》。
怎麼說這也是個國家精品,雖然講得也沒多好,但挺容易接受的。我看的書是《作業系統概念第七版》
這個系列的文章就當作我學習作業系統的筆記,也希望能夠幫助到那些想學和正在學作業系統的小夥伴們。不多逼逼,下面開始正式的內容。
什麼是作業系統
這是一張電腦系統組成部分的邏輯圖,從圖中可以看出,用戶想讓軟體運行在電腦硬體上,就得藉助作業系統。作業系統是電腦最底層的軟體,是應用程式運行的基本支撐環境,不可或缺。但作業系統也並不一定是必須的,比如一些小型的電腦像單片機就算沒有作業系統也可以運行程式。
那作業系統的意義何在呢?我覺得對於普通用戶和開發者而言就是 「方便」。printf("hello world!");
大家都寫過吧,為什麼這樣一行程式碼就能在螢幕上輸出一句話呢?是因為運行了這行程式碼後,就去調用作業系統的介面了,然後作業系統再去控制底層硬體進行相關操作,對於我們而言,這些都是無感的,只不過是寫了一行程式碼而已。
所以我對於作業系統的理解就是:作業系統就是管家,而電腦硬體就是大宅子,用戶是大宅子的主人。比如當我們想吃飯的時候,告訴管家可以燒飯了,然後管家就去調度了,去安排人買菜,做飯,而我們只需要等待飯菜上桌就可以了。如果沒有管家,那麼這些事情都得自己干。所以有了作業系統,我們才可以很舒適,高效地使用電腦。
多道程式設計和分時
現在的作業系統這麼牛掰並不是一開始就這樣,而是經過了多個階段的進化。
無作業系統(手工操作)
最早期的電腦是沒有作業系統的,比如ENIAC就是手動操作線纜來執行任務,效率極低。
批處理系統
當出現電晶體後,第二代電腦也隨之誕生,體積,可靠性都大幅提高。為了能夠更好地發揮電腦的性能,批處理系統也就出現了。批處理系統就是將一批作業交給作業系統,然後由常駐監控程式(Monitor)去控制作業的運行及調度,不需要人工的干預,極大地提高了電腦的工作效率。
有點類似於工廠的流水線,CPU就是工人。一批待加工的產品從傳送帶上傳送過來,然後工人依次加工產品。
多道程式系統
批處理系統有個缺點就是沒有考慮到程式運行的並行性,比如一個程式得等待I/O操作才能進行接著運行,等待的時候CPU也跟著在那乾耗著,浪費時間。比如流水線上突然停了一會,工人就在那兒歇著。為了能夠更好地榨乾CPU的性能,多道程式系統就出現了。
就是在記憶體中同時存在多個作業,在管理程式控制下相互穿插運行。當一個程式需要等待時,馬上切換到另一個作業,提高了CPU的利用率。
從對比圖中可以看出,多道程式系統中CPU運行的時間明顯比單道程式系統的運行時間要多,幾乎沒得休息。所以說,多道程式系統就是黑心老闆,充分榨乾了CPU的勞動力,使得CPU苦不堪言。
分時系統
雖說多道程式系統相對於批處理系統而言已經提高了CPU的利用率,但一次只能運行一個程式,還是被老闆嫌棄。多道程式系統便退出江湖,潛心修鍊。待出山之時,世人早已忘卻了多道程式系統的名號,被人熟知的只有那將無影手打得出神入化的分時系統。
沒錯,分時系統就是多道程式系統的進階版,本質上還是作業的切換。但作業系統卻給每個程式分配了一定時間的CPU時間片,當一個程式的時間結束後馬上切換到另一個程式。因為CPU的時間片足夠短,切換的時間也足夠快,使得用戶感覺不到程式的切換,誤以為是多個程式同時在運行。
作業系統操作
開發者在寫程式碼的時候,可能是無心之舉,也可能是有意而為之導致了程式出錯,有的錯誤嚴重的會破壞其它程式或作業系統。所以作業系統在設計的時候就要確保錯誤程式或惡意程式不會影響到其它程式和作業系統的正常運行。
雙重模式操作
雙重模式將用戶程式和系統程式分開,用戶程式運行在用戶模式下,系統程式則運行在內核模式下。如果用戶程式出現了異常,就會立即切換到內核模式,交給作業系統去處理。那些可能會引起損害的指令被稱作特權指令,用戶模式下是執行不了特權指令的。當用戶程式需要調用系統服務的時候,就必須要從用戶模式切換到內核模式來運行。
這個模式位是在電腦硬體中的,有了它就可以區分用戶程式和系統程式了。
I/O和記憶體保護
為了防止用戶程式去執行非法的I/O操作,所有的I/O指令都是特權指令,用戶模式下是執行不了I/O操作的,只能切換到內核模式下去執行,這樣由作業系統去控制I/O就可以有效地減少非法I/O的出現。
在多道程式系統下,多個程式在記憶體中運行,為了保證應用程式不能非法訪問其它應用程式的記憶體空間,就出現了記憶體保護機制。這需要有硬體的支援,比如基址暫存器和限長暫存器。
在這張圖中,兩個暫存器合作,限制了該程式只能訪問300040~420940的記憶體空間。
定時器
如果現在有個程式發生了死循環,長時間霸佔著CPU怎麼辦?這樣控制權不就一直在用戶程式手上么,這可不行。為了能確保CPU控制權在作業系統手上,可以採用定時器。定時器有固定定時器和可變定時器,在到達指定的時間後,產生中斷,就從用戶模式切換到內核模式,這樣控制權就回到了作業系統手上,確保了系統的正常運行。
作業系統功能
進程管理
作業系統的核心目標就是運行程式,也就是如何管理CPU,一個運行中的程式被稱之為進程。進程管理解決了程式的運行問題,作業系統負責的與進程管理相關的活動有以下幾個:
- 創建和刪除用戶和系統進程
- 暫停和恢復進程
- 提供進程同步機制
- 提供進程通訊機制
- 提供死鎖處理機制
記憶體管理
只有進程是滿足不了程式運行的需要,還需要記憶體。因為CPU只能直接訪問暫存器、高速快取和記憶體這三類存儲設備,一個進程處理前和處理後的所有數據,執行的指令都在記憶體。作業系統負責的有關記憶體管理的活動有:
- 記錄記憶體的哪部分正在被使用及被誰使用
- 當有記憶體空間時,決定哪些進程可以裝入記憶體
- 根據需要分配和釋放記憶體空間
總結一下:記憶體管理提供了記憶體的分配、回收、地址轉換、共享和保護等功能。提高了記憶體利用率和訪問速度,從而提高電腦運行效率。
文件管理
進程管理和記憶體管理解決了程式的運行問題,但是記憶體並不能長時間保存數據,所以就有了文件,文件既然要存儲就得把文件管理起來,所以文件管理解決了電腦的存儲問題。現代操縱系統主要是以目錄這種樹形結構去進行文件管理的,作業系統主要負責以下和文件管理有關的活動:
- 創建和刪除文件
- 創建和刪除目錄來組織文件
- 提供操作文件和目錄的原語(由若干條指令組成的程式段)
- 將文件映射到磁碟等二級存儲設備上
- 在穩定存儲介質上備份文件
I/O設備管理
作業系統的目的之一在於對用戶隱藏具體硬體設備的特性。I/O設備管理負責管理種類繁多的各種I/O設備,解決電腦中資訊
的輸入和輸出問題。
總結
這篇文章主要是簡單介紹了一下作業系統,總共分為四個小節,前面兩個小節探討了什麼是作業系統,介紹了作業系統的發展。後面兩個小節介紹了作業系統的操作和功能,從宏觀角度上了解作業系統可以做什麼。
碼字不易,可以的話,給我來個
點贊
,收藏
,關注