天天看點

作業系統

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

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

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

  1. 可移植性,這是十分重要的,讓作業系統适應更多的平台,而這方面也提出了posix标準。
  2. 安全性和公正性,安全自然不用說,你必須讓使用者的資料不被别人偷走,也不能輕易的崩潰,公正性的話,對于每個程序,你都必須維護好公平,不能讓一個程序一直霸占導緻其他程序過于饑餓!
  3. 強壯,類似安全
  4. 有效,兩方面,一個是提高資源使用率,一個是提高吞吐量。
  5. 接口統一,類似可移植。

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

因為是複習,這裡還要提一下一些作業系統的概念:

  1. 程序與作業,程序本質上是正在執行的一個程式,與每個程序相關的是程序的位址空間,你現在打開的wps可能就是一個程序(實際有很多程序),而你再打開wps又是一個新的程序,雖然東西都是一樣的,但是程序是一個執行個體,而代碼是一個模闆,而作業是一個大的概念,可能需要好幾個程序去做,而對于程序的位址空間,想一想,一個爸爸生了好多兒子,每個兒子是不是要有自己的房子,程序也一樣,程序就是一個人,他有自己的特性,代碼是它的外貌,而資料是它的精神,各種各樣的特性封裝在軀殼或者獨立的空間裡,(這裡我倒想到一個有意思的東西,虛拟記憶體,和人一樣,如果我們都把自己的所有财富都拿出來,街道肯定空間不夠,是以我們隻能看今天要幹嘛帶什麼東西出門,看到人太多了隻能窩在家裡(對應窩在硬碟),而其實最開始不需要虛拟記憶體的概念,為什麼,因為大家都窮的要死,要帶的東西太少了,而現在大家富裕了,财富多(需要的記憶體越來愈大),是以我們不可能為你提供這麼大的實體記憶體,隻能看需求帶東西)。
  2. 檔案的一二三,我們說過,在很多作業系統裡面,一切皆檔案,硬體被抽象為檔案,我們就像讀書一樣去操作硬體,檔案可以定義為檔案名下的一組資訊的集合,這倒是很貼切,當然檔案最後都要對應硬體,或是硬碟之類的,檔案名相當于一個ID,我們知道它是什麼東西,但是檔案要對應到實體上去,還得有一個inode(也就是一個實體定位),我們為什麼不直接操作實體定位,因為我們使用者不想喝這些複雜的底層打交道,我們隻需要拿到檔案名就夠了,我們隻需要知道這個人叫某某,至于它住哪住的怎麼樣,我們并不是很想關注,是以,在實際的作業系統來講,檔案對應的兩個必不可少的東西就是檔案名和inode節點。
  3. 核心态和使用者态以及所謂系統調用:

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

繼續閱讀