操作系統(tǒng)設(shè)計(jì)的7個(gè)主題:
1. 進(jìn)程描述和控制
2. 內(nèi)存管理
3. 調(diào)度
4. I/O和文件管理
5. 并發(fā)和分布式系統(tǒng)
6. 嵌入式系統(tǒng)
7. 安全
創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的南山網(wǎng)站建設(shè)公司,南山接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行南山網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
操作系統(tǒng)利用一個(gè)或多個(gè)處理器的硬件資源,為系統(tǒng)用戶提供一組服務(wù),還代表用戶來(lái)管理輔助存儲(chǔ)器和I/O設(shè)備。
CPU中斷的分類(lèi):
1. 程序中斷
2. 時(shí)鐘中斷
3. I/O中斷
4. 硬件失效中斷
DMA:直接內(nèi)存存取
典型計(jì)算機(jī)系統(tǒng)的三個(gè)重要接口:
1. 指令系統(tǒng)體系結(jié)構(gòu)ISA
2. 應(yīng)用程序二進(jìn)制接口ABI
3. 應(yīng)用程序編程接口API
三個(gè)部分:
1. 一段可執(zhí)行的程序,
2. 程序所需要的相關(guān)數(shù)據(jù)(變量,工作空間,緩沖區(qū)等),
3. 程序的執(zhí)行上下文,又稱(chēng)進(jìn)程狀態(tài)。上下文包括操作系統(tǒng)管理進(jìn)程和處理器正確執(zhí)行進(jìn)程所需要的所有信息,包括:
1. 處理器寄存器的內(nèi)容,2. 進(jìn)程的優(yōu)先級(jí)
把執(zhí)行一個(gè)應(yīng)用程序的進(jìn)程劃分成可以同時(shí)運(yùn)行的多個(gè)線程。
線程:
可分派的工作單元,他包括處理器上下文環(huán)境和棧中自己的數(shù)據(jù)區(qū)域。順序執(zhí)行,并且可中斷。
進(jìn)程:
一個(gè)或多個(gè)線程和 相關(guān)系統(tǒng)資源的集合。
多線程切換涉及的處理器開(kāi)銷(xiāo)比不同進(jìn)程間切換開(kāi)銷(xiāo)少。
81年基于MS-DOS開(kāi)發(fā)的window 3.0, 雇傭戴夫.卡特勒89年基于VAX/VMS操作系統(tǒng)開(kāi)發(fā)NT內(nèi)核。
主要的內(nèi)核組件的簡(jiǎn)要介紹:
信號(hào)(Signal):內(nèi)核通過(guò)信號(hào)通知進(jìn)程。
系統(tǒng)調(diào)用(System Call):進(jìn)程通過(guò)系統(tǒng)調(diào)用來(lái)請(qǐng)求系統(tǒng)服務(wù)。一共有幾百個(gè)系統(tǒng)調(diào)用,可以粗略的分為6類(lèi):文件系統(tǒng),進(jìn)程,調(diào)度,進(jìn)程間通信,套接字和其他。
進(jìn)程和調(diào)度器:創(chuàng)建、管理、調(diào)度進(jìn)程。
虛擬內(nèi)存
文件系統(tǒng)
網(wǎng)絡(luò)協(xié)議
字符設(shè)備驅(qū)動(dòng)
塊設(shè)備驅(qū)動(dòng)
網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)
陷阱和錯(cuò)誤
物理內(nèi)存
中斷
chroot提供文件系統(tǒng)隔離。
chcontext分配一個(gè)新的安全上下文,提供進(jìn)程隔離
chbind把產(chǎn)生的進(jìn)程及其子進(jìn)程鎖定到一個(gè)特定的IP地址,提供網(wǎng)絡(luò)隔離。
capability,提供根的隔離。
進(jìn)程可以唯一的表征為以下元素:
標(biāo)識(shí)符
狀態(tài)
優(yōu)先級(jí)
程序計(jì)數(shù)器
內(nèi)存指針
上下文數(shù)據(jù)
I/O狀態(tài)信息
記賬信息
一個(gè)處理器在任何時(shí)間最多只有一個(gè)進(jìn)程在執(zhí)行。
進(jìn)程的五個(gè)狀態(tài):
- 新建,環(huán)境準(zhǔn)備,但未進(jìn)入內(nèi)存
- 就緒
- 運(yùn)行
- 阻塞/等待,I/O阻塞,等待資源或另一個(gè)進(jìn)程信息
- 退出
- 針對(duì)虛擬內(nèi)存的:掛起態(tài)
操作系統(tǒng)維護(hù)四種不同類(lèi)型的表:
內(nèi)存 :跟蹤內(nèi)外存
I/O: I/O狀態(tài)
文件:文件狀態(tài),大部分狀態(tài)可能由文件管理系統(tǒng)維護(hù)和使用
進(jìn)程:
用戶態(tài)運(yùn)行
內(nèi)核態(tài)運(yùn)行
就緒,駐留在內(nèi)存
睡眠,駐留在內(nèi)存,等待某時(shí)間,一種阻塞態(tài)
就緒,被交換
睡眠,被交換
被搶占 進(jìn)程從內(nèi)核態(tài)返回到用戶態(tài),但是被內(nèi)核搶占
創(chuàng)建
僵死
Unix中有兩個(gè)獨(dú)特進(jìn)程,進(jìn)程0是系統(tǒng)啟動(dòng)時(shí)創(chuàng)建,預(yù)定義的數(shù)據(jù)結(jié)構(gòu),是交換進(jìn)程,啟動(dòng)時(shí)進(jìn)程0產(chǎn)生進(jìn)程1,進(jìn)程1稱(chēng)為初始進(jìn)程。
Unix中創(chuàng)建進(jìn)程是通過(guò)內(nèi)核系統(tǒng)調(diào)用fork()實(shí)現(xiàn)的,fork請(qǐng)求時(shí),系統(tǒng)執(zhí)行以下功能:
1. 為新進(jìn)程在進(jìn)程表中分配一個(gè)空項(xiàng)。
2. 為紫禁城賦一個(gè)唯一的進(jìn)程標(biāo)識(shí)符
3. 聲場(chǎng)一個(gè)父進(jìn)程上下文的邏輯副本,不包括共享內(nèi)存區(qū)
4. 增加父進(jìn)程所有的文件的計(jì)數(shù)器
5. 把子進(jìn)程置為就緒態(tài)
6. 向父進(jìn)程返回子進(jìn)程的進(jìn)程號(hào),對(duì)子進(jìn)程返回零。
所有操作在父進(jìn)程的內(nèi)核態(tài)下完成。
在之前提出的進(jìn)程概念包含兩個(gè)特點(diǎn):
資源所有權(quán):一個(gè)進(jìn)程包括一個(gè)存放進(jìn)程映像的虛擬地址空間。
調(diào)度/執(zhí)行:一個(gè)進(jìn)程沿著可以通過(guò)一個(gè)或多個(gè)程序的執(zhí)行路徑執(zhí)行。一個(gè)進(jìn)程具有一個(gè)執(zhí)行狀態(tài)和一個(gè)被分配的優(yōu)先級(jí)。它是一個(gè)可被操作系統(tǒng)調(diào)度和分派的實(shí)體。
為了區(qū)分這兩個(gè)特點(diǎn),分派的單位成為線程或輕量級(jí)進(jìn)程,而擁有資源所有權(quán)的單位稱(chēng)為進(jìn)程process或task。
指在單個(gè)進(jìn)程內(nèi)支持多個(gè)并發(fā)執(zhí)行路徑的能力。
進(jìn)程是操作系統(tǒng)的最小調(diào)度單位,線程是CPU的最小調(diào)度單位。
線程的優(yōu)點(diǎn):
線程創(chuàng)建比Unix中進(jìn)程創(chuàng)建快10倍。
終止線程比進(jìn)程快
線程切換比進(jìn)程塊
縣城提高了不同執(zhí)行程序間通信的效率。進(jìn)程間通信需要內(nèi)核的介入,同進(jìn)程中的線程共享內(nèi)存和文件。
多線程的特性在多處理器機(jī)器上才能生效,單處理器中主要簡(jiǎn)化在邏輯上完成若干項(xiàng)不同功能的程序的結(jié)構(gòu)。
線程可以分為兩大類(lèi):
1. 用戶級(jí)線程
2. 內(nèi)核級(jí)縣城
有關(guān)線程管理都有應(yīng)用程序完成,內(nèi)核意識(shí)不到。任何應(yīng)用程序都可以使用線程庫(kù)pthread設(shè)計(jì)多線程程序。該程序在執(zhí)行時(shí)從但縣城開(kāi)始運(yùn)行被分配給一內(nèi)核管理的進(jìn)程。該程序的線程狀態(tài)受限于內(nèi)核進(jìn)程狀態(tài)。由此其線程狀態(tài)也將影響進(jìn)程狀態(tài)。
優(yōu)點(diǎn):
1. 該程序所有線程在用戶地址空間中,無(wú)需內(nèi)核態(tài)特權(quán),不需切換狀態(tài)。
2. 自定義調(diào)度算法
3. 跨系統(tǒng),可移植
缺點(diǎn):
1. 線程阻塞導(dǎo)致進(jìn)程阻塞
2. 無(wú)法使用多核性能,內(nèi)核一次只把一個(gè)進(jìn)程分配給一個(gè)處理器
所有線程管理都有內(nèi)核完成。
優(yōu)點(diǎn):
1. 同時(shí)調(diào)度線程到多核處理器
2. 進(jìn)程中一個(gè)線程堵塞時(shí),內(nèi)核可以調(diào)度該進(jìn)程中另外一個(gè)線程
缺點(diǎn):
1. 把控制從一個(gè)線程傳到同一個(gè)進(jìn)程的另外一個(gè)線程時(shí),需要內(nèi)核的狀態(tài)切換。
多處理器系統(tǒng)中使用線程的例子:
前臺(tái)和后臺(tái)工作:電子表格處理,一個(gè)線程顯示并讀取輸入,一個(gè)線程執(zhí)行命令更新表格。
異步處理:
執(zhí)行速度:在一個(gè)線程I/O被阻塞時(shí),另外一個(gè)線程可以繼續(xù)運(yùn)行。
Linux的進(jìn)程或任務(wù)有一個(gè)task_struct數(shù)據(jù)結(jié)構(gòu)表示。包含了以下信息:
狀態(tài)
調(diào)度信息
標(biāo)識(shí)符
進(jìn)程間通信
鏈接
時(shí)間和計(jì)時(shí)器
文件系統(tǒng)
地址空間
處理器專(zhuān)用上下文
進(jìn)程的執(zhí)行狀態(tài)有:
運(yùn)行
可中斷,阻塞狀態(tài),此狀態(tài)等待一個(gè)事件(如I/O操作的結(jié)束),一個(gè)可用資源或另一個(gè)進(jìn)程的信號(hào)
不可中斷,阻塞狀態(tài),此狀態(tài)等待一個(gè)硬件條件,不接受任何信號(hào)
停止
僵死
Linux中復(fù)制當(dāng)前進(jìn)程的屬性創(chuàng)建一個(gè)新進(jìn)程。使用clone命令代替fork命令創(chuàng)建進(jìn)程。沒(méi)有為線程單獨(dú)定義數(shù)據(jù)結(jié)構(gòu),當(dāng)兩個(gè)進(jìn)程共享相同的虛擬內(nèi)存時(shí),它們可以當(dāng)作是一個(gè)進(jìn)程中的線程。clone()調(diào)用為每個(gè)進(jìn)程創(chuàng)建獨(dú)立的??臻g,共享同一內(nèi)存空間。
當(dāng)Linux內(nèi)核執(zhí)行進(jìn)程切換時(shí),它將檢查當(dāng)前進(jìn)程的頁(yè)目錄地址是否和將被調(diào)度的進(jìn)程相同,如果相同,此時(shí)上下文切換僅僅是從代碼的一處跳到代碼的另外一處。
某些操作系統(tǒng)區(qū)分進(jìn)程和線程的概念,前者涉及資源的所有權(quán),后者涉及程序執(zhí)行。
用戶級(jí)的線程對(duì)操作系統(tǒng)是未知的,它們?cè)谟脩艨臻g的線程庫(kù)創(chuàng)建并管理,此時(shí)線程的切換不需要狀態(tài)轉(zhuǎn)換,非常高效,但一個(gè)進(jìn)程一次只有一個(gè)用戶級(jí)線程可以執(zhí)行,如果某一個(gè)線程阻塞,整個(gè)進(jìn)程都被阻塞。
內(nèi)核級(jí)線程由內(nèi)核維護(hù),由此同一個(gè)進(jìn)程中的線程可以在多個(gè)處理器上并發(fā)執(zhí)行,不會(huì)被某一個(gè)線程阻塞而阻塞整個(gè)進(jìn)程,但當(dāng)線程切換時(shí)需要進(jìn)行模式轉(zhuǎn)換。