操做系統(一):操做系統概述

好好學習,每天向上git

本文已收錄至個人Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Stargithub

前言

以前一直沒有系統地學過操做系統,感受本身在平時的學習過程當中對於某些概念理解得一塌糊塗,好比中斷、內存、進程和線程等。因此打算系統的學習一下操做系統。一開始我是在B站看哈工大的李治軍老師講的,可是一上來就開始從彙編代碼去分析開機的過程,雖然講得挺好的,可是多是我太笨了吧,理解不了。因而我又在中國大學MOOC上看蘇州大學的《操做系統》緩存

怎麼說這也是個國家精品,雖然講得也沒多好,但挺容易接受的。我看的書是《操做系統概念第七版》性能

這個系列的文章就看成我學習操做系統的筆記,也但願可以幫助到那些想學和正在學操做系統的小夥伴們。很少逼逼,下面開始正式的內容。學習

什麼是操做系統

這是一張計算機系統組成部分的邏輯圖,從圖中能夠看出,用戶想讓軟件運行在計算機硬件上,就得藉助操做系統。操做系統是計算機最底層的軟件,是應用程序運行的基本支撐環境,不可或缺。但操做系統也並不必定是必須的,好比一些小型的計算機像單片機就算沒有操做系統也能夠運行程序。操作系統

那操做系統的意義何在呢?我以爲對於普通用戶和開發者而言就是 「方便」。printf("hello world!"); 你們都寫過吧,爲何這樣一行代碼就能在屏幕上輸出一句話呢?是由於運行了這行代碼後,就去調用操做系統的接口了,而後操做系統再去控制底層硬件進行相關操做,對於咱們而言,這些都是無感的,只不過是寫了一行代碼而已。線程

因此我對於操做系統的理解就是:操做系統就是管家,而計算機硬件就是大宅子,用戶是大宅子的主人。好比當咱們想吃飯的時候,告訴管家能夠燒飯了,而後管家就去調度了,去安排人買菜,作飯,而咱們只須要等待飯菜上桌就能夠了。若是沒有管家,那麼這些事情都得本身幹。因此有了操做系統,咱們才能夠很溫馨,高效地使用計算機。設計

多道程序設計和分時

如今的操做系統這麼牛掰並非一開始就這樣,而是通過了多個階段的進化。code

無操做系統(手工操做)

最先期的計算機是沒有操做系統的,好比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設備,解決計算機中信息
的輸入和輸出問題。

總結

這篇文章主要是簡單介紹了一下操做系統,總共分爲四個小節,前面兩個小節探討了什麼是操做系統,介紹了操做系統的發展。後面兩個小節介紹了操做系統的操做和功能,從宏觀角度上了解操做系統能夠作什麼。

碼字不易,能夠的話,給我來個點贊收藏關注

相關文章
相關標籤/搜索