操作系統(tǒng)結(jié)構(gòu)

一、操作系統(tǒng)做什么族扰?

1.操作系統(tǒng)定義

A program that acts as an intermediary between a user
and the comupter hardware.
計算機(jī)硬件和用戶(人和程序)之間的一個中介

2.操作系統(tǒng)目標(biāo)
  • 使用戶方便使用計算機(jī)
  • 是計算機(jī)硬件高效率運(yùn)行

二懂更、硬件系統(tǒng)組成

  • cpu(s) + 設(shè)備控制器 通過總線(控制(用來通信的碴卧,一些狀態(tài))攻旦、數(shù)據(jù)和地址三個內(nèi)部總線和外部總線)連接在一起鄙陡,它們共享內(nèi)存
  • 這些cpus和設(shè)備并行執(zhí)行冕房,并且競爭使用內(nèi)存。


三趁矾、4個層次

操作系統(tǒng)把硬件包起來了耙册,所有的對硬件的操作必須經(jīng)過操作系統(tǒng)。

  • 用戶
  • 應(yīng)用程序
  • 操作系統(tǒng)
  • 硬件

四愈魏、現(xiàn)代操作系統(tǒng)的特征

1.多程序 Mutiprogramming

這是為了提高CPU的使用效率觅玻。

一個簡單的例子
如果系統(tǒng)上只能有一個用戶想际。一個用戶程序的操作需要CPU執(zhí)行它的指令培漏,還需要I/O來作它的輸入輸出。只有CPU指令胡本,沒有I/O牌柄,這有什么意義hhh,而只有I/O沒有CPU更不可能侧甫,因為I/O就是CPU控制的珊佣。所以有一個很明顯的問題就是CPU執(zhí)行指令時候,I/O就停了披粟,而I/O時候咒锻,CPU又停了不執(zhí)行指令了。
為了解決這種低效問題守屉,一個基本想法就是惑艇,可不可以在系統(tǒng)里面裝兩個程序,當(dāng)一個在I/O時候拇泛,它沒有使用CPU滨巴,能不能啟動另一個程序讓它使用CPU?這樣不就是讓CPU使用率提高了嗎俺叭?

嗯就是這樣恭取,有兩個以上程序可以駐留內(nèi)存,這種狀態(tài)就叫Mutiprogramming

  • 單用戶系統(tǒng)有缺陷熄守,無法讓CPU和I/O同時處于運(yùn)轉(zhuǎn)狀態(tài)
  • 多程序思想讓多個程序競爭CPU蜈垮,提高了CPU的使用效率
  • 作業(yè)調(diào)度器每次選擇一個作業(yè)耗跛,交給CPU執(zhí)行
  • 當(dāng)前作業(yè)需要等待時候(例如有I/O操作),CPU轉(zhuǎn)向另一個作業(yè)
2.多任務(wù) Multitasking 分時系統(tǒng) Timesharing

在多程序思想的基礎(chǔ)上擴(kuò)展窃款,Multiprogramming只要求多個程序駐留在內(nèi)存中课兄,CPU有空時候給程序分配資源就可以,而Multitasking則要求不但是駐留在內(nèi)存晨继,還要求在程序需要CPU時候烟阐,CPU能及時給它!響應(yīng)用戶的交互操作紊扬。稱為交互式計算蜒茄。

一個簡單的例子
如果不具備這樣的及時性,會有什么后果餐屎?一臺計算機(jī)檀葛,能播放PPT還能接收郵件,這算是有多程序思想了腹缩。此時如果你在這里瘋狂讀PPT屿聋,而永遠(yuǎn)不去理睬e-mail,接收e-mail的程序永遠(yuǎn)得不到CPU資源藏鹊,那么e-mail發(fā)過來了不響應(yīng)就丟失了润讥。郵件是什么,郵件給誰的盘寡,這并不重要楚殿,但是必須要先及時的響應(yīng),把它接收過來竿痰,不然就丟失在茫茫網(wǎng)海中了hhh脆粥。所以讀PPT時候,要讓郵件程序有收郵件的機(jī)會影涉。而反過來一樣变隔,如果在接受一個很大的郵件,需要一定的時間接收蟹倾,PPT此時得不到CPU匣缘,不動了,那還怎么學(xué)習(xí)喊式,會給用戶造成機(jī)器死機(jī)的感覺孵户。

這就是Multiprogramming的重要性。必須要支持這樣的需求岔留!由此引出了操作系統(tǒng)的各種概念夏哭。

  • 響應(yīng)時間 Response time 在一秒內(nèi)
  • 每個用戶至少有一道作業(yè)在內(nèi)存中執(zhí)行——進(jìn)程
  • 存在兩個以上的進(jìn)程等待CPU執(zhí)行——CPU調(diào)度
  • 內(nèi)存空間裝不下進(jìn)程——需要換入、換出操作
  • 虛擬內(nèi)存管理技術(shù)献联,是的小內(nèi)存也能運(yùn)行大進(jìn)程
3.CPU提供Dual-mode機(jī)制
  • 用戶態(tài)(user mode)和內(nèi)核態(tài)(kernel mode)
    這樣是為了OS的自我保護(hù)竖配。從硬件層解決這個問題何址,CPU有個Mode bit模式位,可以在內(nèi)核態(tài)(1)和用戶態(tài)(0)之間切換进胯。
    • 以Mode bit區(qū)分系統(tǒng)在執(zhí)行用戶代碼還是內(nèi)核代碼
    • CPU帶有特權(quán)指令用爪,這些指令只能在內(nèi)核態(tài)執(zhí)行。特權(quán)指令一般是可能引起損害的機(jī)器指令胁镐。
    • 用戶態(tài)下需要操作系統(tǒng)服務(wù)偎血,那么系統(tǒng)調(diào)用此時就會從用戶態(tài)切換至內(nèi)核態(tài),系統(tǒng)調(diào)用返回指令自動從內(nèi)核態(tài)切換到用戶態(tài)盯漂。


4.其他特征
  • 中斷驅(qū)動的硬件操作:什么任務(wù)到了颇玷,引發(fā)一個中斷,沒有中斷就休息了就缆。有任務(wù)才去搞帖渠。
  • 軟件申請,軟件操作錯誤等竭宰,將產(chǎn)生異晨战迹或陷入
  • 面臨
    • “無限循環(huán)”問題
    • 進(jìn)程干擾其它進(jìn)程問題
    • 進(jìn)程干擾OS問題
      ......

五、操作系統(tǒng)的服務(wù)類別

一共有兩類服務(wù)切揭。

1.一類服務(wù)直接幫助用戶
  • 用戶界面(UI user interface)
    用戶通過用戶界面向操作系統(tǒng)下達(dá)命令狞甚。

    • 命令行CLI(Command-Line)
      文本命令,用戶直接輸入讓操作系統(tǒng)執(zhí)行的命令伴箩。如shell入愧。
    • 圖形用戶界面GUI(Graphics User Interface)
      提供了視圖鄙漏,有定位設(shè)備指揮I/O嗤谚,從菜單選擇,選中部分并用鍵盤輸入文本等等 怔蚌。這個最常見不過了巩步。
    • 批處理(Batch)
      這是個啥我也沒見過具體例子Hhh,控制命令和命令的指令被輸入文件中,通過執(zhí)行文件來實(shí)現(xiàn)桦踊。
  • 程序執(zhí)行
    是OS能夠裝入程序到內(nèi)存椅野,執(zhí)行駐留在內(nèi)存的程序,結(jié)束程序的而執(zhí)行籍胯,以及出錯時候的異常處理竟闪。

  • I/O操作

  • 文件系統(tǒng)相關(guān)操作

  • 進(jìn)程間通信

    • 通過共享內(nèi)存實(shí)現(xiàn)通信
    • 通過消息傳遞實(shí)現(xiàn)通信
  • 出錯檢測
    要能隨時應(yīng)對系統(tǒng)出錯,對各種各樣的來自CPU杖狼、內(nèi)存或I/O設(shè)備等地方的錯誤提供調(diào)試炼蛤、查錯工具。

2.另一類服務(wù)確保系統(tǒng)共享資源的高效運(yùn)作

就是我們在上面舉例中的PPT和e-mail按個實(shí)例

  • 資源分配

  • 記賬——跟蹤記錄那些用戶使用了多少資源蝶涩,使用了哪些資源

  • 保護(hù)和安全

    • 保護(hù)——確保對資源的訪問是受控的
    • 安全——外來訪問需要通過身份認(rèn)證理朋,不允許非法訪問

六絮识、操作系統(tǒng)的服務(wù)功能

進(jìn)程管理
內(nèi)存管理
存儲設(shè)備管理
大容量存儲器管理
I/O子系統(tǒng)管理

七、系統(tǒng)調(diào)用 System Calls

用戶程序和系統(tǒng)軟件與操作系統(tǒng)之間的界面嗽上。提供了操作系統(tǒng)的有效服務(wù)界面次舌。

一個簡單例子

這是進(jìn)行文件復(fù)制時候的一個示例,用到了各種系統(tǒng)調(diào)用兽愤,文件管理的這些操作的實(shí)現(xiàn)都是要通過操作系統(tǒng)的系統(tǒng)調(diào)用來幫忙:
1.通常用高級語言C/C++實(shí)現(xiàn)
2.程序通常以API(Application Program Interface)使用彼念,而不是直接使用系統(tǒng)調(diào)用。
3.三種流行的APIs
  • Win32 API for Windows
  • POSIX API for POSIX-based systems(UNIX\Linux和Mac OS X版本)
  • JAVA API for the JVM
4.為什么要用API浅萧,而不是直接系統(tǒng)調(diào)用国拇?

因為太菜了hhhh,開個玩笑惯殊。
普通用戶不懂啊酱吝,普通的用戶要理解系統(tǒng)調(diào)用的概念是有困難的,編程序的人可能不懂這個啊土思,也要讓他去寫程序务热。比如linux系統(tǒng)調(diào)用都是使用int 0x80號中斷來實(shí)現(xiàn)的,普通用戶根本不懂這些中斷什么的己儒。所以O(shè)S提供API崎岂,用戶可以調(diào)用比較容易一點(diǎn)的API來實(shí)現(xiàn)系統(tǒng)調(diào)用。而不是把系統(tǒng)調(diào)用扔給你闪湾。

一個簡單示例
下面就是調(diào)用標(biāo)準(zhǔn)C庫里面的printf冲甘,用戶調(diào)用printf,C程序攔截了這個調(diào)用來調(diào)用必要的操作系統(tǒng)調(diào)用(這里是write())途样,真正實(shí)現(xiàn)寫字符輸出的是系統(tǒng)調(diào)用的write()江醇,用戶程序只需要調(diào)用C庫中的API就可以了。這個printf則是專業(yè)人士寫的何暇,為了用戶的方便陶夜,他不用去用中斷去實(shí)現(xiàn)打印,而只需要調(diào)用printf裆站,printf幫助它做更底層的東西——引起int 0x80条辟,進(jìn)入內(nèi)核態(tài),調(diào)用write()宏胯,write()完成任務(wù)之后羽嫡,又跳回到用戶態(tài),printf的代碼中肩袍,printf再return到用戶程序杭棵。


API和System Call和操作系統(tǒng)之間的關(guān)聯(lián)如下所示


八、系統(tǒng)程序 System Programs

系統(tǒng)程序提供了一個方便的環(huán)境以開發(fā)程序和執(zhí)行程序了牛,其中一小部分知識系統(tǒng)調(diào)用的簡單接口颜屠,其他可能是相當(dāng)復(fù)雜的辰妙。

系統(tǒng)程序分類

  • 文件操作
  • 狀態(tài)信息展示
  • 文件內(nèi)容修改
  • 編程語言支持
  • 程序裝入和執(zhí)行
  • 用戶間通信

以用戶考察OS的視角,OS是以系統(tǒng)程序描述的甫窟,而不是系統(tǒng)調(diào)用密浑。

九、操作系統(tǒng)結(jié)構(gòu)

簡單結(jié)構(gòu)

層次化結(jié)構(gòu)


從低到高:
硬件——硬件設(shè)備控制器——內(nèi)核驅(qū)動程序——內(nèi)核里的管理子系統(tǒng)——內(nèi)核提供的系統(tǒng)調(diào)用——用戶程序

微內(nèi)核 microkernel

基本思想:盡量把內(nèi)核中的所有非基本部分移出到用戶態(tài)空間粗井,將它們實(shí)現(xiàn)為系統(tǒng)程序或用戶程序尔破。剩下的就是微內(nèi)核(通常包含最小的進(jìn)程、內(nèi)存管理以及通信功能)浇衬。處于用戶態(tài)空間的功能模塊通過消息傳遞機(jī)制進(jìn)行通信懒构。

  • 有利因素
    • 容易升級微內(nèi)核
    • 容易移植OS到不同類型的CPU、體系結(jié)構(gòu)
    • 更可靠
    • 更安全
  • 不利因素
    -被移出之后耘擂,用戶態(tài)空間的程序增多胆剧,它們之間通信都要借助操作系統(tǒng)幫忙,每次通信都要從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)醉冤,不停的切換秩霍,那么用戶態(tài)和內(nèi)核態(tài)空間通信頻繁,性能開銷大蚁阳,這是很致命的铃绒!


模塊 modules

現(xiàn)代操作系統(tǒng)大多實(shí)現(xiàn)了內(nèi)核模塊機(jī)制。

  • 應(yīng)用面向?qū)ο笏枷敕椒?/li>
  • 核心組件相對獨(dú)立螺捐、分離
  • 模塊之間通過預(yù)知的界面對話
  • 可動態(tài)裝入內(nèi)核
  • 可動態(tài)卸載
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颠悬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子定血,更是在濱河造成了極大的恐慌赔癌,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠悼,死亡現(xiàn)場離奇詭異届榄,居然都是意外死亡浅乔,警方通過查閱死者的電腦和手機(jī)倔喂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靖苇,“玉大人席噩,你說我怎么就攤上這事∠捅冢” “怎么了悼枢?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脾拆。 經(jīng)常有香客問我馒索,道長莹妒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任绰上,我火速辦了婚禮旨怠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜈块。我一直安慰自己鉴腻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布百揭。 她就那樣靜靜地躺著爽哎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪器一。 梳的紋絲不亂的頭發(fā)上课锌,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機(jī)與錄音祈秕,去河邊找鬼产镐。 笑死,一個胖子當(dāng)著我的面吹牛踢步,可吹牛的內(nèi)容都是我干的癣亚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼获印,長吁一口氣:“原來是場噩夢啊……” “哼述雾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兼丰,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤玻孟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳍征,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黍翎,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年艳丛,在試婚紗的時候發(fā)現(xiàn)自己被綠了匣掸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡氮双,死狀恐怖碰酝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情戴差,我是刑警寧澤送爸,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響袭厂,放射性物質(zhì)發(fā)生泄漏墨吓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一纹磺、第九天 我趴在偏房一處隱蔽的房頂上張望肛真。 院中可真熱鬧,春花似錦爽航、人聲如沸蚓让。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽历极。三九已至,卻和暖如春衷佃,著一層夾襖步出監(jiān)牢的瞬間趟卸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工氏义, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锄列,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓惯悠,卻偏偏與公主長得像邻邮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子克婶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容