好好學習,天天向上本文已收錄至我的github倉庫daydayup:之前一直沒有系統地學過作業系統,感覺自己在平時的學習過程中對於某些概念理解得一塌糊塗,比如中斷、記憶體、程序和執行緒等。所以打算系統的學習一下作業系統。一開始我是在b站看哈工大的李治軍老師講的,但是一上來就開始從彙編**去分析開機的過程,雖然講得挺好的,但是可能是我太笨了吧,理解不了。於是我又在中國大學mooc上看蘇州大學的《作業系統》。,歡迎star
怎麼說這也是個國家精品,雖然講得也沒多好,但挺容易接受的。我看的書是《作業系統概念第七版》
這個系列的文章就當作我學習作業系統的筆記,也希望能夠幫助到那些想學和正在學作業系統的小夥伴們。不多逼逼,下面開始正式的內容。
這是一張計算機系統組成部分的邏輯圖,從圖中可以看出,使用者想讓軟體執行在計算機硬體上,就得借助作業系統。作業系統是計算機最底層的軟體,是應用程式執行的基本支撐環境,不可或缺。但作業系統也並不一定是必須的,比如一些小型的計算機像微控制器就算沒有作業系統也可以執行程式。
那作業系統的意義何在呢?我覺得對於普通使用者和開發者而言就是 「方便」。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的出現。
在多道程式系統下,多個程式在記憶體中執行,為了保證應用程式不能非法訪問其它應用程式的記憶體空間,就出現了記憶體保護機制。這需要有硬體的支援,比如基址暫存器和限長暫存器。
在這張圖中,兩個暫存器合作,限制了該程式只能訪問300040~420940的記憶體空間。
如果現在有個程式發生了死迴圈,長時間霸佔著cpu怎麼辦?這樣控制權不就一直在使用者程式手上麼,這可不行。為了能確保cpu控制權在作業系統手上,可以採用定時器。定時器有固定定時器和可變定時器,在到達指定的時間後,產生中斷,就從使用者模式切換到核心模式,這樣控制權就回到了作業系統手上,確保了系統的正常執行。
只有程序是滿足不了程式執行的需要,還需要記憶體。因為cpu只能直接訪問暫存器、快取記憶體和記憶體這三類儲存裝置,乙個程序處理前和處理後的所有資料,執行的指令都在記憶體。作業系統負責的有關記憶體管理的活動有:
程序管理和記憶體管理解決了程式的執行問題,但是記憶體並不能長時間儲存資料,所以就有了檔案,檔案既然要儲存就得把檔案管理起來,所以檔案管理解決了計算機的儲存問題。現代操縱系統主要是以目錄這種樹形結構去進行檔案管理的,作業系統主要負責以下和檔案管理有關的活動:
作業系統的目的之一在於對使用者隱藏具體硬體裝置的特性。i/o裝置管理負責管理種類繁多的各種i/o裝置,解決計算機中資訊 的輸入和輸出問題。
這篇文章主要是簡單介紹了一下作業系統,總共分為四個小節,前面兩個小節**了什麼是作業系統,介紹了作業系統的發展。後面兩個小節介紹了作業系統的操作和功能,從巨集觀角度上了解作業系統可以做什麼。
碼字不易,可以的話,給我來個點讚
,收藏
,關注
本文已收錄至我的github倉庫歡迎star
作業系統(一) 作業系統概述 1
計算機系統自下而上分為 硬體 作業系統 應用程式 使用者。硬體 cpu 記憶體 i o裝置等資源 作業系統 軟體系統的核心,計算機中最基本的系統軟體 控制和管理整個計算機系統的硬體資源 合理組織和排程計算機的工作和排程 應用程式 字處理軟體 瀏覽器 編譯器等 作業系統區別於其他系統軟體和應用程式。基...
作業系統筆記一(作業系統概述)
1.1作業系統是什麼?作業系統是管理計算機硬體和軟體資源的計算機程式,管理配置記憶體 決定資源供需順序 控制輸入輸出裝置等,作業系統提供讓使用者和系統互動的操作介面。1.2作業系統有什麼用?作業系統統一管理計算機資源!計算機資源包括處理器資源 io資源 儲存器資源 檔案資源 作業系統實現了對計算機資...
作業系統原理 作業系統概述
1.2 作業系統的定義和作用 1.3 作業系統的主要特性 1.4典型作業系統的架構 1.5 作業系統的分類 假設有乙個簡單的c語言程式 helloworld,我們通過這個簡單程式的執行過程來看一下作業系統對這個程式的過程有哪些支援!include intmain int argc,char ar 這...