操作系統

接着上面所講,操作系統的設計目標和一些基本要求是什麼?

首先講這個設計目標,設計目標,即是我要幹什麼,很清晰,我要把硬件抽象爲用戶提供一個接口,另外一方面,我得管理好不多的硬件資源,所以設計目標就是提供服務和管理資源!

第二方面,作爲一個操作系統,它應該要滿足哪些原則?

  1. 可移植性,這是十分重要的,讓操作系統適應更多的平臺,而這方面也提出了posix標準。

  2. 安全性和公正性,安全自然不用說,你必須讓用戶的數據不被別人偷走,也不能輕易的崩潰,公正性的話,對於每個進程,你都必須維護好公平,不能讓一個進程一直霸佔導致其他進程過於飢餓!

  3. 強壯,類似安全

  4. 有效,兩方面,一個是提高資源利用率,一個是提高吞吐量。

  5. 接口統一,類似可移植。

(另外,對上次的虛擬機做一個補充,虛擬機有一個廣義的概念,就是操作系統,在裸機上加載一層軟件,來管理整個計算機系統,形成一個虛擬的計算機,(另外的就是我們現在用的軟件))

因爲是複習,這裏還要提一下一些操作系統的概念:

  1. 進程與作業,進程本質上是正在執行的一個程序,與每個進程相關的是進程的地址空間,你現在打開的wps可能就是一個進程(實際有很多進程),而你再打開wps又是一個新的進程,雖然東西都是一樣的,但是進程是一個實例,而代碼是一個模板,而作業是一個大的概念,可能需要好幾個進程去做,而對於進程的地址空間,想一想,一個爸爸生了好多兒子,每個兒子是不是要有自己的房子,進程也一樣,進程就是一個人,他有自己的特性,代碼是它的外貌,而數據是它的精神,各種各樣的特性封裝在軀殼或者獨立的空間裏,(這裏我倒想到一個有意思的東西,虛擬內存,和人一樣,如果我們都把自己的所有財富都拿出來,街道肯定空間不夠,所以我們只能看今天要幹嘛帶什麼東西出門,看到人太多了只能窩在家裏(對應窩在硬盤),而其實最開始不需要虛擬內存的概念,爲什麼,因爲大家都窮的要死,要帶的東西太少了,而現在大家富裕了,財富多(需要的內存越來愈大),所以我們不可能爲你提供這麼大的物理內存,只能看需求帶東西)。

  2. 文件的一二三,我們說過,在很多操作系統裏面,一切皆文件,硬件被抽象爲文件,我們就像讀書一樣去操作硬件,文件可以定義爲文件名下的一組信息的集合,這倒是很貼切,當然文件最後都要對應硬件,或是硬盤之類的,文件名相當於一個ID,我們知道它是什麼東西,但是文件要對應到物理上去,還得有一個inode(也就是一個物理定位),我們爲什麼不直接操作物理定位,因爲我們用戶不想喝這些複雜的底層打交道,我們只需要拿到文件名就夠了,我們只需要知道這個人叫某某,至於它住哪住的怎麼樣,我們並不是很想關注,所以,在實際的操作系統來講,文件對應的兩個必不可少的東西就是文件名和inode節點。

  3. 內核態和用戶態以及所謂系統調用:

    我們說操作系統的作用是封裝硬件,用戶可以幹嘛,用戶可以使用系統給的api(就是系統調用)去做我們想做的事情,但是具體的實現我們不知道,我們也無法直接操作硬件,我們想做什麼,都得向內核請求,靠內核來實現,或者說內核態和用戶態處在兩個不同的級別上,一個是boss,一個是小職員,我們要幹嘛最後都要靠內核來做,這些系統調用是系統給我們的接口,而爲了提高代碼的可移植性,unix下有一個posix標準,就是對應這些系統調用,比如fork之類的。

    系統調用是操作系統很重要的一個概念,有的題目也會涉及到,事實上,系統調用是操作系統必須提供的一個功能,因爲它是我們編程的接口或者說工具,沒這些函數編個屁!

    系統調用有很多種,涉及到了各個方面,通過這些函數,我們可以覆蓋對硬件的訪問和管理,當然這裏要區分系統調用和庫函數還有內核調用,系統調用準確來講是一個過程,我們使用庫函數一步步陷入到內核完成我們的功能的過程,另外一個說法是庫函數包裝了系統調用,而內核調用和系統調用對於大內核來講應該是沒有區別的,都是直接切入到內核,而對於minix的這種微內核來講,存在這樣一個區別,系統調用一般是用戶切入到內核,而內核調用往往是服務器和驅動切入內核,而且事實上minix還有任務調用的概念,服務器之間切換,這都不是很重要。

    到這裏,操作系統的一些小東西差不多介紹完了,下面開始介紹一個很重要的概念,進程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章