一、操作系統(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)桦踊。
- 命令行CLI(Command-Line)
程序執(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)卸載