操作系統(tǒng)試題一
(1)愕撰、CLOCK算法的關(guān)鍵是:每一次進(jìn)行替換指針的位置就從替換數(shù)移到下一個(gè)位置,每一次進(jìn)行訪問(wèn)時(shí)篡撵,則指針保持不動(dòng)拴孤。
eg:在某請(qǐng)求分頁(yè)管理系統(tǒng)中逃顶,一個(gè)作業(yè)共5頁(yè)讨便,作業(yè)執(zhí)行時(shí)一次訪問(wèn)如下頁(yè)面:1,4以政,3霸褒,1,2盈蛮,5废菱,1,4,2殊轴,1衰倦,4,5梳凛,若分配給該作業(yè)的主存塊數(shù)為3耿币,采用Clock頁(yè)面置換算法梳杏,試求出缺頁(yè)中斷的次數(shù)及缺頁(yè)率韧拒。
(2).在請(qǐng)求分頁(yè)管理系統(tǒng)中,若采用FIFO頁(yè)面淘汰算法十性,則當(dāng)分配的頁(yè)面數(shù)增加時(shí)叛溢,缺頁(yè)中斷次數(shù)可能增加或減少:
隨著內(nèi)存的增大:缺頁(yè)次數(shù)增加的現(xiàn)象:稱之為 Belady 現(xiàn)象(異常現(xiàn)象)劲适;
我們都知道常用的頁(yè)面淘汰算法有五種:
1 : FIFO: 先進(jìn)先出
2 :最近最久未用置換算法 LRU
3 : LFU 最近訪問(wèn)頻率最低的
4 : NUR 最近沒(méi)有使用頁(yè)面淘汰算法( clock )
5: 最佳置換算法:( OPT )
這五種算法可見(jiàn)簡(jiǎn)單的將其分為兩類楷掉,堆棧型算法和非堆棧型算法;
注意:堆棧型算法:最新壓入到堆棧中的永遠(yuǎn)在棧頂霞势;棧頂是剛剛訪問(wèn)過(guò)的烹植,棧底是最久沒(méi)有訪問(wèn)過(guò)的;
LRU和LFU愕贡、OPT都 是堆棧型算法草雕,
但是 FIFO非堆棧型算法 ;
非堆棧式算法可能出現(xiàn) Belady 問(wèn)題固以,是棧式算法不會(huì)出現(xiàn)類似問(wèn)題墩虹;所謂Belady現(xiàn)象是指:管理中,發(fā)生缺頁(yè)時(shí)的置換算法采用FIFO( 先進(jìn)先出 )算法時(shí)憨琳,如果對(duì)-個(gè)進(jìn)程未分配它所要求的全部頁(yè)面诫钓,有時(shí)就會(huì)出現(xiàn)分配的頁(yè)面數(shù)增多但缺頁(yè)率反而提高的異常現(xiàn)象篙螟。
缺頁(yè)中斷的次數(shù)是由頁(yè)面數(shù)量菌湃,頁(yè)面置換算法與頁(yè)面走向三個(gè)因素決定的,題目中采用FIFO遍略,頁(yè)面數(shù)增大惧所,但是頁(yè)面走向不確定,所以缺頁(yè)次數(shù)可能增大頁(yè)可能減小墅冷,比如Belady異常纯路。
(3). spooling技術(shù)是空間換取時(shí)間的技術(shù):(假脫機(jī)技術(shù)):
(白話:申請(qǐng)打印機(jī)的一個(gè)進(jìn)程現(xiàn)在輸出井上申請(qǐng)一個(gè)空閑盤(pán)塊區(qū),將打印的數(shù)據(jù)送人其中寞忿,若該打印機(jī)空閑驰唬,則占用打印,否則加入等待隊(duì)列。這樣叫编,對(duì)每一個(gè)進(jìn)程而言辖佣,打印機(jī)是獨(dú)享的,對(duì)于打印機(jī)而言搓逾,是被共享的)
(1)提高了I/O速度.從對(duì)低速I/O設(shè)備進(jìn)行的I/O操作變?yōu)閷?duì)輸入井或輸出井的操作,如同脫機(jī)操作一樣,提高了I/O速度,緩和了CPU與低速I/O設(shè)備速度不匹配的矛盾.
(2)設(shè)備并沒(méi)有分配給任何進(jìn)程.在輸入井或輸出井中,分配給進(jìn)程的是一存儲(chǔ)區(qū)和建立一張I/O請(qǐng)求表.
(3)實(shí)現(xiàn)了虛擬設(shè)備功能.多個(gè)進(jìn)程同時(shí)使用一獨(dú)享設(shè)備,而對(duì)每一進(jìn)程而言,都認(rèn)為自己獨(dú)占這一設(shè)備,不過(guò),該設(shè)備是邏輯上的設(shè)備.
SPOOLing技術(shù)如何使一臺(tái)打印機(jī)虛擬成多臺(tái)打印機(jī)卷谈? 答:將一臺(tái)獨(dú)享打印機(jī)改造為可供多個(gè)用戶共享的打印機(jī),是應(yīng)用SPOOLing技術(shù)的典型實(shí)例霞篡。具體做法是:系統(tǒng)對(duì)于用戶的打印輸出世蔗,但并不真正把打印機(jī)分配給該用戶進(jìn)程,而是先在輸出井中申請(qǐng)一個(gè)空閑盤(pán)塊區(qū)朗兵,并將要打印的數(shù)據(jù)送入其中污淋;然后為用戶申請(qǐng)并填寫(xiě)請(qǐng)求打印表,將該表掛到請(qǐng)求打印隊(duì)列上余掖。若打印機(jī)空閑寸爆,輸出程序從請(qǐng)求打印隊(duì)首取表,將要打印的數(shù)據(jù)從輸出井傳送到內(nèi)存緩沖區(qū)盐欺,再進(jìn)行打印赁豆,直到打印隊(duì)列為空。
(4)臨界資源:多道程序系統(tǒng)中存在許多進(jìn)程冗美,它們共享各種資源魔种,然而有很多資源一次只能供一個(gè)進(jìn)程使用况脆。一次僅允許一個(gè)進(jìn)程使用的資源稱為臨界資源案铺。許多物理設(shè)備都屬于臨界資源,如輸入機(jī)钥星、打印機(jī)漆改、磁帶機(jī)等心铃。如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU挫剑,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象去扣。
進(jìn)程同步:進(jìn)程同步機(jī)制的主要任務(wù),是對(duì)多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào)樊破,使并發(fā)執(zhí)行的諸進(jìn)程之間能按照一定的規(guī)則或時(shí)序共享系統(tǒng)資源愉棱,并能很好地相互合作,從而使進(jìn)程的執(zhí)行具有可再現(xiàn)性哲戚。
進(jìn)程的異步性:在多道程序環(huán)境下奔滑,由于存在著間接相互制約關(guān)系與直接相互制約關(guān)系,進(jìn)程在運(yùn)行過(guò)程中是否能獲得處理機(jī)運(yùn)行顺少、以及以怎樣的速度運(yùn)行朋其,并不能由進(jìn)程自身所控制王浴,由此會(huì)產(chǎn)生對(duì)共享變量或數(shù)據(jù)結(jié)構(gòu)等資源不正確的訪問(wèn)次序,從而造成進(jìn)程每次執(zhí)行結(jié)果的不一致--->進(jìn)程的異步性梅猿。這種差錯(cuò)往往與時(shí)間有關(guān)氓辣,為了杜絕這種差錯(cuò),必須對(duì)進(jìn)程的執(zhí)行次序進(jìn)行協(xié)調(diào)袱蚓,保證諸進(jìn)程能按序執(zhí)行钞啸。
(5).提出分頁(yè)管理的目的是為了提高內(nèi)存空間的利用率;提出分段管理的目的除了可以提高內(nèi)存空間的利用率(相對(duì)分區(qū)管理而言)外喇潘,主要是為了更好的實(shí)現(xiàn)程序的共享和動(dòng)態(tài)鏈接体斩,方便用戶編程。p158
磁盤(pán)是塊設(shè)備响蓉,打印機(jī)與鍵盤(pán)是字符設(shè)備硕勿。I/O設(shè)備大致分為兩類:塊設(shè)備和字符設(shè)備哨毁。塊設(shè)備將信息存儲(chǔ)在固定大小的塊中枫甲,每個(gè)塊都有自己的地址。數(shù)據(jù)塊的大小通常在512字節(jié)到32768字節(jié)之間扼褪。塊設(shè)備的基本特征是每個(gè)塊都能獨(dú)立于其它塊而讀寫(xiě)想幻。磁盤(pán)是最常見(jiàn)的塊設(shè)備。字符設(shè)備是指在I/O傳輸過(guò)程中以字符為單位進(jìn)行傳輸?shù)脑O(shè)備
進(jìn)程同步(pv操作):
信號(hào)量S是一個(gè)特殊變量,包含一個(gè)整數(shù)值幔崖,在信號(hào)量上可以執(zhí)行兩個(gè)原子操作:
wait(S)用來(lái)接收信號(hào)(P操作)
signal(S)用來(lái)發(fā)送信號(hào)(V操作)食店,
這兩個(gè)操作僅能對(duì)信號(hào)量處于加1或減一操作,意味著每次只能對(duì)某類臨界資源進(jìn)行一個(gè)單位的申請(qǐng)或釋放赏寇。
吃蘋(píng)果例子q
設(shè)信號(hào)量的當(dāng)前值為x:
信號(hào)量的值如果為負(fù)數(shù)(不為空)吉嫩, 那么等待的進(jìn)程數(shù)為 -x個(gè);;信號(hào)量的值如果為正數(shù), 那么空閑的資源數(shù)為x個(gè)嗅定。
批處理系統(tǒng)(Batch OS)
多道程序系統(tǒng)(Multiprogramming System)
分時(shí)系統(tǒng)(Time-sharing System)
實(shí)時(shí)系統(tǒng)(Real-time System)
操作系統(tǒng)操作(Operatin-system Operations)
批處理系統(tǒng)
批處理系統(tǒng)主要用于大型系統(tǒng),用于提高作業(yè)吞吐量(Throughout梅誓,單位時(shí)間內(nèi)執(zhí)行作業(yè)的數(shù)量)的系統(tǒng)恰梢。
批處理中基本無(wú)交互晨川,存在兩種調(diào)度:
- Job Schedule(作業(yè)調(diào)度),即將所要做的作業(yè)放到內(nèi)存上删豺,主要負(fù)責(zé)工作的道數(shù)共虑,屬于高級(jí)調(diào)度。
- CPU Schedule(進(jìn)程調(diào)度)呀页,即在內(nèi)存中CPU選擇執(zhí)行某個(gè)工作妈拌,屬于低級(jí)調(diào)度。
多道程序系統(tǒng)
優(yōu)點(diǎn):1. Improve CPU utilization 2% –> 100%(in theory)
注:但程序道數(shù)越多蓬蝶,系統(tǒng)消耗(overhead)越高尘分,會(huì)造成CPU有效利用率降低
- Improve memory and I/O device utilization.
- Increase system throughout.
特點(diǎn): - 多道
- 無(wú)序(unordered),執(zhí)行是無(wú)序的丸氛,即用戶不知道進(jìn)程狀態(tài)培愁,但系統(tǒng)知道當(dāng)前進(jìn)程的狀態(tài)
- 調(diào)度性(scheduling)
缺點(diǎn):交互性低
分時(shí)系統(tǒng)
定義:將CPU的執(zhí)行時(shí)間分成一個(gè)個(gè)的時(shí)間片(time slice),多用戶中的每個(gè)用戶輪轉(zhuǎn)時(shí)間片缓窜,非常適合交互型作業(yè)定续。
Memory sharing(儲(chǔ)存共享) + time sharing(時(shí)間共享) –> multiprogramming(多道系統(tǒng)) + interaction(交互)
時(shí)間片的選擇必須大雨系統(tǒng)內(nèi)的中斷切換時(shí)間,且時(shí)間段切換需要有度:檀浮K焦伞!
分時(shí)系統(tǒng)特點(diǎn):
- 交互性強(qiáng)恩掷,因其主要為交互型作業(yè)設(shè)計(jì)倡鲸;
- 多道(路)性;
- 及時(shí)性黄娘;
- 獨(dú)占性峭状。
影響分時(shí)操作系統(tǒng)性能的因素: - 用戶數(shù)目;
- 時(shí)間片大斜普优床;
- 每次時(shí)間片切換是對(duì)換的數(shù)據(jù)量。
分時(shí)系統(tǒng)是一個(gè)通用系統(tǒng)氮凝,即不限制任務(wù)的數(shù)目和狀態(tài)羔巢。
實(shí)時(shí)系統(tǒng):
定義:實(shí)時(shí)系統(tǒng)主要用于專用系統(tǒng)(used in dedicated application),有著非常嚴(yán)格的固定時(shí)間要求(well-defined fixed-time constraints)罩阵。
按照deadline不同可分為硬實(shí)時(shí)(hard real-time)和軟實(shí)時(shí)(soft real-time):
硬實(shí)時(shí)操作系統(tǒng): deadline要求高竿秆,即要求在很短的時(shí)間片內(nèi)處理
- Secondary storage (disk) limited or absent;
- Data stored in memory, or read-only memory(ROM).
軟實(shí)時(shí)操作系統(tǒng):deadline要求較低,即可在較長(zhǎng)時(shí)間片內(nèi)處理稿壁,但是幽钢,還是需要在一個(gè)時(shí)間片內(nèi)處理 - Limited utility in industrial control of robotics;
- Useful in multimedia, virtual reality, etc.
實(shí)時(shí)系統(tǒng)特性: - 及時(shí)性;
- 獨(dú)占性(雙工:兩端都有計(jì)算機(jī)做相同操作以防一端計(jì)算機(jī)出現(xiàn)故障傅是,用于火箭和導(dǎo)彈控制)
- 多路性匪燕;
- 交互性(略有限)蕾羊。
操作系統(tǒng)操作:
Dual-mode operations(雙模式操作):User mode(用戶模式/目標(biāo)態(tài)) && kernel mode(內(nèi)核模式/管理態(tài))
相應(yīng)的,操作系統(tǒng)指令分為特權(quán)指令(privileged instruction)和非特權(quán)指令帽驯。
特權(quán)指令:clear memory, set time, I/O instruction.
非特權(quán)指令:read time
對(duì)于將數(shù)據(jù)輸出到顯示屏的操作龟再,就通過(guò)了系統(tǒng)調(diào)用(system call)產(chǎn)生了一次自陷(trap)從而從用戶模式切換到了內(nèi)核模式。
在IO的讀寫(xiě)操作中尼变,操作系統(tǒng)如何判斷是否在該進(jìn)程指定的內(nèi)存空間進(jìn)行讀寫(xiě)操作利凑?
CPU中配置了一組寄存器(base register & length register),在每次進(jìn)行I/O操作時(shí)即可判斷該進(jìn)程是否越界(< base || > base + length)嫌术。當(dāng)出現(xiàn)以上兩種狀態(tài)時(shí)CPU即產(chǎn)生越界中斷哀澈。每個(gè)進(jìn)程的base register & length register均存儲(chǔ)在操作系統(tǒng)區(qū)的進(jìn)程控制塊(PCB: Process Control Block)中,當(dāng)每個(gè)進(jìn)程被創(chuàng)建之初度气,該進(jìn)程控制塊就被創(chuàng)建與操作系統(tǒng)區(qū)割按,里面記錄了該進(jìn)程的相關(guān)信息,類似于一種數(shù)據(jù)結(jié)構(gòu)磷籍。
批處理系統(tǒng)常用調(diào)度算法:
①适荣、先來(lái)先服務(wù):FCFS
②、最短作業(yè)優(yōu)先
③择示、最短剩余時(shí)間優(yōu)先
④束凑、響應(yīng)比最高者優(yōu)先
分時(shí)系統(tǒng)調(diào)度算法:
①、輪轉(zhuǎn)調(diào)度
②栅盲、優(yōu)先級(jí)調(diào)度
③、多級(jí)隊(duì)列調(diào)度
④废恋、彩票調(diào)度
實(shí)時(shí)系統(tǒng)調(diào)度算法:
①谈秫、單比率調(diào)度
②、限期調(diào)度
③鱼鼓、最少裕度法
第四章
王道:
第一章:計(jì)算機(jī)系統(tǒng)概述
- 操作系統(tǒng)的并發(fā)性是通過(guò)分時(shí)實(shí)現(xiàn)的拟烫;并行性需要有相關(guān)硬件的支持,如多流水線或多處理機(jī)硬件環(huán)境迄本。
異步:多道程序環(huán)境允許多個(gè)程序并發(fā)執(zhí)行硕淑,但由于資源有限,進(jìn)程的執(zhí)行不是一貫到底嘉赎,而是走走停停的置媳,它以不可預(yù)知的速度向前推進(jìn),這就是程序的異步性公条;異步性使得操作系統(tǒng)運(yùn)行在一種隨機(jī)的環(huán)境下拇囊,可能導(dǎo)致進(jìn)程產(chǎn)生與時(shí)間有關(guān)的錯(cuò)誤(就像對(duì)全局變量的訪問(wèn)順序不當(dāng)會(huì)導(dǎo)致程序出錯(cuò)一樣),然而靶橱,只要運(yùn)行環(huán)境相同寥袭,操作系統(tǒng)就需保證多次運(yùn)行進(jìn)程后都能獲得相同的結(jié)果路捧。
第二章: 進(jìn)程管理
2.1 進(jìn)程、線程
- PCB是進(jìn)程存在的唯一標(biāo)志传黄。從結(jié)構(gòu)上看杰扫,進(jìn)程實(shí)體是由程序段、數(shù)據(jù)段膘掰、PCB三部分組成涉波。進(jìn)程需要結(jié)束運(yùn)行時(shí),系統(tǒng)首先置該進(jìn)程為結(jié)束態(tài)炭序,然后再進(jìn)一步處理資源釋放與回收等工作啤覆。一個(gè)進(jìn)程從運(yùn)行態(tài)變成阻塞態(tài)是主動(dòng)的行為,從阻塞態(tài)變成就緒態(tài)是被動(dòng)行為惭聂,需要其他相關(guān)進(jìn)程的協(xié)助窗声。任何進(jìn)程都是在操作系統(tǒng)的內(nèi)核支持運(yùn)行的,是與內(nèi)核緊密相關(guān)的辜纲。
- 把進(jìn)程控制用的程序段稱為原語(yǔ)笨觅,原語(yǔ)的特點(diǎn)是在執(zhí)行過(guò)程中不允許中斷,它是一個(gè)不可分割的基本單位耕腾。(p31)见剩。。先有資源的調(diào)度扫俺,然后才有進(jìn)程的切換苍苞。
進(jìn)程的最大數(shù)目取決于系統(tǒng)內(nèi)存的大小,因?yàn)檫M(jìn)程創(chuàng)建需要占用系統(tǒng)內(nèi)存來(lái)存放PCB的數(shù)據(jù)結(jié)構(gòu)狼纬。
p(33):
處理機(jī)中各寄存器值羹呵,當(dāng)進(jìn)程被切換時(shí),處理機(jī)狀態(tài)信息 都必須保存在相應(yīng)的PCB中疗琉,以便在該進(jìn)程重新執(zhí)行時(shí)冈欢,能再?gòu)臄帱c(diǎn)繼續(xù)執(zhí)行。
在一個(gè)系統(tǒng)中盈简,通常存在著許多進(jìn)程凑耻,有的處于就緒狀態(tài),有的處于阻塞狀態(tài)柠贤,而且阻塞的原因各不相同香浩。為了方便進(jìn)程的調(diào)度和管理,需要將各進(jìn)程的PCB用適當(dāng)?shù)姆椒ńM織起來(lái)种吸。目前弃衍,常用的組織方式有鏈接方式和索引方式兩種。鏈接方式將同一狀態(tài)的PCB鏈接成一個(gè)隊(duì)列坚俗,不同狀態(tài)對(duì)應(yīng)不同的隊(duì)列镜盯,也可以把處于阻塞狀態(tài)的進(jìn)程的PCB岸裙,根據(jù)其阻塞原因的不同,排成多個(gè)阻塞隊(duì)列速缆。索引方式是將同一狀態(tài)的進(jìn)程組織在一個(gè)索引表中降允,索引表的表項(xiàng)指向相應(yīng)的PCB,不同狀態(tài)對(duì)應(yīng)不同的索引表艺糜,如就緒索引表和阻塞索引表等剧董。
程序段 就是能被進(jìn)程調(diào)度程序調(diào)度到CPU執(zhí)行的程序代碼段。注意破停,程序可以被多個(gè)進(jìn)程共享翅楼,就是說(shuō)多個(gè)進(jìn)程可以運(yùn)行同一個(gè)程序。
一個(gè)進(jìn)程的 數(shù)據(jù)段真慢,可以是進(jìn)程對(duì)應(yīng)的程序加工處理的原始數(shù)據(jù)毅臊,也可以是程序執(zhí)行時(shí)產(chǎn)生的中間或最終結(jié)果。
內(nèi)核態(tài):
CPU可以訪問(wèn)內(nèi)存所有數(shù)據(jù), 包括外圍設(shè)備, 例如硬盤(pán), 網(wǎng)卡. CPU也可以將自己從一個(gè)程序切換到另一個(gè)程序黑界。
用戶態(tài):
只能受限的訪問(wèn)內(nèi)存, 且不允許訪問(wèn)外圍設(shè)備. 占用CPU的能力被剝奪, CPU資源可以被其他程序獲取管嬉。
為什么要有用戶態(tài)和內(nèi)核態(tài):
由于需要限制不同的程序之間的訪問(wèn)能力, 防止他們獲取別的程序的內(nèi)存數(shù)據(jù), 或者獲取外圍設(shè)備的數(shù)據(jù), 并發(fā)送到網(wǎng)絡(luò), CPU劃分出兩個(gè)權(quán)限等級(jí) – 用戶態(tài) 和 內(nèi)核態(tài)。
用戶態(tài)與內(nèi)核態(tài)的切換:
所有用戶程序都是運(yùn)行在用戶態(tài)的, 但是有時(shí)候程序確實(shí)需要做一些內(nèi)核態(tài)的事情, 例如從硬盤(pán)讀取數(shù)據(jù), 或者從鍵盤(pán)獲取輸入等. 而唯一可以做這些事情的就是操作系統(tǒng), 所以此時(shí)程序就需要先操作系統(tǒng)請(qǐng)求以程序的名義來(lái)執(zhí)行這些操作.
這時(shí)需要一個(gè)這樣的機(jī)制: 用戶態(tài)程序切換到內(nèi)核態(tài), 但是不能控制在內(nèi)核態(tài)中執(zhí)行的指令
這種機(jī)制叫系統(tǒng)調(diào)用, 在CPU中的實(shí)現(xiàn)稱之為陷阱指令(Trap Instruction)
切換的工作流程如下:
① 用戶態(tài)程序?qū)⒁恍?shù)據(jù)值放在寄存器中, 或者使用參數(shù)創(chuàng)建一個(gè)堆棧(stack frame), 以此表明需要操作系統(tǒng)提供的服務(wù).
② 用戶態(tài)程序執(zhí)行陷阱指令
③ CPU切換到內(nèi)核態(tài), 并跳到位于內(nèi)存指定位置的指令, 這些指令是操作系統(tǒng)的一部分, 他們具有內(nèi)存保護(hù), 不可被用戶態(tài)程序訪問(wèn)
④ 這些指令稱之為陷阱(trap)或者系統(tǒng)調(diào)用處理器(system call handler).
他們會(huì)讀取程序放入內(nèi)存的數(shù)據(jù)參數(shù), 并執(zhí)行程序請(qǐng)求的服務(wù)
⑤ 系統(tǒng)調(diào)用完成后, 操作系統(tǒng)會(huì)重置CPU為用戶態(tài)并返回系統(tǒng)調(diào)用的結(jié)果
- 進(jìn)程通信是指進(jìn)程之間的信息交換朗鸠,PV操作是低級(jí)操作方式蚯撩,高級(jí)通信方式是指以較高的效率傳輸大量數(shù)據(jù)的通信方式,高級(jí)通信方式有三種:共享存儲(chǔ)烛占,消息傳遞胎挎,管道通信,再加:文件映射扰楼,套接字呀癣。
① 共享存儲(chǔ)
在通信的進(jìn)程之間存在一塊可直接訪問(wèn)的共享空間,通過(guò)對(duì)這片共享空間進(jìn)行寫(xiě)/讀操作實(shí)現(xiàn)進(jìn)程之間的信息交換弦赖。在對(duì)共享空間進(jìn)行寫(xiě)/讀操作時(shí),需要使用同步互斥工具(如 P操作浦辨、V操作)蹬竖,對(duì)共享空間的寫(xiě)/讀進(jìn)行控制。共享存儲(chǔ)又分為兩種:低級(jí)方式的共享是基于數(shù)據(jù)結(jié)構(gòu)的共享流酬;高級(jí)方式則是基于存儲(chǔ)區(qū)的共享币厕。操作系統(tǒng)只負(fù)責(zé)為通信進(jìn)程提供可共享使用的存儲(chǔ)空間和同步互斥工具,而數(shù)據(jù)交換則由用戶自己安排讀/寫(xiě)指令完成芽腾。
需要注意的是旦装,用戶進(jìn)程空間一般都是獨(dú)立的,要想讓兩個(gè)用戶進(jìn)程共享空間必須通過(guò)特殊的系統(tǒng)調(diào)用實(shí)現(xiàn)摊滔,而進(jìn)程內(nèi)的線程是自然共享進(jìn)程空間的阴绢。
共享內(nèi)存就是允許兩個(gè)不相關(guān)的進(jìn)程訪問(wèn)同一個(gè)邏輯內(nèi)存店乐。共享內(nèi)存是在兩個(gè)正在運(yùn)行的進(jìn)程之間共享和傳遞數(shù)據(jù)的一種最有效的方式,不同進(jìn)程之間共享的內(nèi)存通常安排為同一段物理內(nèi)存呻袭。進(jìn)程可以將同一段共享內(nèi)存連接到它們自己的地址空間中眨八,所有進(jìn)程都可以訪問(wèn)共享內(nèi)存中的地址,就好像它們是由用C語(yǔ)言函數(shù)malloc分配的內(nèi)存一樣左电。而如果某個(gè)進(jìn)程向共享內(nèi)存寫(xiě)入數(shù)據(jù)廉侧,所做的改動(dòng)將立即影響到可以訪問(wèn)同一段共享內(nèi)存的任何其他進(jìn)程。
注意共享內(nèi)存并未提供同步機(jī)制篓足,也就是說(shuō)段誊,在第一個(gè)進(jìn)程結(jié)束對(duì)共享內(nèi)存的寫(xiě)操作之前,并無(wú)自動(dòng)機(jī)制可以阻止第二個(gè)進(jìn)程開(kāi)始對(duì)它進(jìn)行讀取栈拖。所以通常需要用其他的機(jī)制來(lái)同步對(duì)共享內(nèi)存的訪問(wèn)连舍,例如前面說(shuō)到的信號(hào)量。
采用共享內(nèi)存通信的一個(gè)顯而易見(jiàn)的好處是效率高辱魁,因?yàn)檫M(jìn)程可以直接讀寫(xiě)內(nèi)存烟瞧,而不需要任何數(shù)據(jù)的拷貝。對(duì)于像管道和消息隊(duì)列等通信方式染簇,則需要在內(nèi)核和用戶空間進(jìn)行四次的數(shù)據(jù)拷貝参滴,而共享內(nèi)存則只拷貝兩次數(shù)據(jù):一次從輸入文件到共享內(nèi)存區(qū),另一次從共享內(nèi)存區(qū)到輸出文件.
② 消息傳遞
在消息傳遞系統(tǒng)中锻弓,進(jìn)程間的數(shù)據(jù)交換是以格式化的消息(Message)為單位的砾赔。若通信的進(jìn)程之間不存在可直接訪問(wèn)的共享空間,則必須利用操作系統(tǒng)提供的消息傳遞方法實(shí)現(xiàn)進(jìn)程通信青灼。進(jìn)程通過(guò)系統(tǒng)提供的發(fā)送消息和接收消息兩個(gè)原語(yǔ)進(jìn)行數(shù)據(jù)交換暴心。
直接通信方式:發(fā)送進(jìn)程直接把消息發(fā)送給接收進(jìn)程,并將它掛在接收進(jìn)程的消息緩沖隊(duì)列上杂拨,接收進(jìn)程從消息緩沖隊(duì)列中取得消息专普。
間接通信方式:發(fā)送進(jìn)程把消息發(fā)送到某個(gè)中間實(shí)體中,接收進(jìn)程從中間實(shí)體中取得消息弹沽。這種中間實(shí)體一般稱為信箱檀夹,這種通信方式又稱為信箱通信方式。該通信方式廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)中策橘,相應(yīng)的通信系統(tǒng)稱為電子郵件系統(tǒng)坠韩。
③ 管道通信
管道實(shí)際上是一種固定大小的緩沖區(qū)最铁,管道對(duì)于管道兩端的進(jìn)程而言,就是一個(gè)文件,但它不是普通的文件骚亿,它不屬于某種文件系統(tǒng)惯疙,而是自立門戶,單獨(dú)構(gòu)成一種文件系統(tǒng),并且只存在于內(nèi)存中督赤。它類似于通信中半雙工信道的進(jìn)程通信機(jī)制,一個(gè)管道可以實(shí)現(xiàn)雙向 的數(shù)據(jù)傳輸宫仗,而同一個(gè)時(shí)刻只能最多有一個(gè)方向的傳輸够挂,不能兩個(gè)方向同時(shí)進(jìn)行。管道的容 量大小通常為內(nèi)存上的一頁(yè)藕夫,它的大小并不是受磁盤(pán)容量大小的限制孽糖。當(dāng)管道滿時(shí),進(jìn)程在 寫(xiě)管道會(huì)被阻塞毅贮,而當(dāng)管道空時(shí)办悟,進(jìn)程讀管道會(huì)被阻塞。
管道通信是消息傳遞的一種特殊方式滩褥。所謂“管道”病蛉,是指用于連接一個(gè)讀進(jìn)程和一個(gè)寫(xiě)進(jìn)程以實(shí)現(xiàn)它們之間通信的一個(gè)共享文件,又名pipe文件瑰煎。向管道(共享文件)提供輸入的發(fā)送進(jìn)程(即寫(xiě)進(jìn)程)铺然,以字符流形式將大量的數(shù)據(jù)送入(寫(xiě))管道;而接收管道輸出的接收進(jìn)程(即讀進(jìn)程)酒甸,則從管道中接收(讀)數(shù)據(jù)魄健。為了協(xié)調(diào)雙方的通信,管道機(jī)制必須提供以下三方面的協(xié)調(diào)能力:互斥插勤、同步和確定對(duì)方的存在沽瘦。
管道是一種文件。
-
線程
引入進(jìn)程的目的是為了更好地使多道程序并發(fā)執(zhí)行农尖,提高資源利用率和系統(tǒng)吞吐量析恋,增加并發(fā)程度;
引入線程的目的是為了減少程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開(kāi)銷盛卡,提高操作系統(tǒng)的并發(fā)性能助隧。線程最直接的理解是“輕量級(jí)進(jìn)程”,它是一個(gè)基本的CPU執(zhí)行單元滑沧,也是程序執(zhí)行流的最小單元喇颁,由線程ID、程序計(jì)數(shù)器嚎货、寄存器集合、堆棧 組成蔫浆。線程是進(jìn)程中的一個(gè)實(shí)體殖属,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單元,線程自己不擁有系統(tǒng)資源瓦盛,只擁有一點(diǎn)兒在運(yùn)行中不可少的資源洗显,但它可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源外潜。一個(gè)線程可以創(chuàng)建于撤銷另一個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行挠唆。由于線程之間的相互制約处窥,致使線程在運(yùn)行中呈現(xiàn)出間斷性。線程也有就緒阻塞運(yùn)行三種基本狀態(tài)玄组。
引入線程后滔驾,進(jìn)程的內(nèi)涵發(fā)生改變,進(jìn)程只作為除CPU外系統(tǒng)資源的分配單元俄讹,線程則作為處理機(jī)的分配單元哆致。----->線程是獨(dú)立調(diào)度的基本單位,進(jìn)程是擁有資源的基本單位患膛。
線程不能創(chuàng)建進(jìn)程摊阀。
2.1.8 習(xí)題
一.3、進(jìn)程之間交換數(shù)據(jù)不能通過(guò) 訪問(wèn)進(jìn)程地址空間 的途徑進(jìn)行踪蹬。因?yàn)椋?/strong>每個(gè)進(jìn)程包含獨(dú)立的地址空間胞此,進(jìn)程各自的地址空間是私有的,只能執(zhí)行自己地址空間中的程序跃捣,且只能訪問(wèn)自己地址空間中的數(shù)據(jù)漱牵,相互訪問(wèn)會(huì)導(dǎo)致指針的越界錯(cuò)誤。因此進(jìn)程之間不能直接交換數(shù)據(jù)枝缔,但可以利用OS提供的共享文件布疙、消息傳遞、共享存儲(chǔ)區(qū)等進(jìn)行通信愿卸。
一.4灵临、 OS 引入進(jìn)程的概念,是為了從變化的角度動(dòng)態(tài)地分析和研究程序的執(zhí)行趴荸。儒溉。進(jìn)程不一定需要用戶顯式地撤銷,進(jìn)程可在完成時(shí)撤銷或在出現(xiàn)內(nèi)存錯(cuò)誤時(shí)撤銷发钝。
一.7顿涣、一個(gè)進(jìn)程的狀態(tài)變化可能會(huì)引起另一個(gè)進(jìn)程的狀態(tài)變化:eg:一個(gè)進(jìn)程的時(shí)間片用完,就會(huì)引起另一個(gè)就緒狀態(tài)進(jìn)程的運(yùn)行酝豪;可能不會(huì)的情況:eg:一個(gè)進(jìn)程有阻塞態(tài)轉(zhuǎn)為就緒態(tài)就不會(huì)引起其他進(jìn)程的狀態(tài)變化涛碑。
一.12、并發(fā)進(jìn)程失去封閉性孵淘,是指并發(fā)進(jìn)程共享變量蒲障,其執(zhí)行結(jié)果與速度有關(guān):程序封閉性是指進(jìn)程執(zhí)行的結(jié)果只取決于進(jìn)程本身,不受外界影響,也就是說(shuō)揉阎,進(jìn)程在執(zhí)行過(guò)程中不管是不是停頓地執(zhí)行庄撮、還是走走停停,進(jìn)程的執(zhí)行速度都不會(huì)改變它的執(zhí)行結(jié)果毙籽,失去封閉性后洞斯,不同速度下的執(zhí)行結(jié)果不同。
一.15坑赡、不論是系統(tǒng)支持的線程還是用戶級(jí)線程烙如,其切換不一定需要內(nèi)核的支持。eg:若有一個(gè)內(nèi)核進(jìn)程垮衷,它映射到用戶級(jí)后有多個(gè)線程厅翔,那么這些線程之間的切換不需要在內(nèi)核級(jí)切換進(jìn)程,也就不需要內(nèi)核的支持搀突。在用戶級(jí)線程中刀闷,有關(guān)線程管理的所有工作都由應(yīng)用程序完成,無(wú)需內(nèi)核的干預(yù)仰迁,內(nèi)核意識(shí)不到線程的存在甸昏。
用信箱實(shí)現(xiàn)進(jìn)程間互通信息的通信機(jī)制有兩個(gè)通信原語(yǔ):發(fā)送原語(yǔ)、接受原語(yǔ)徐许。
一.20施蜜、C語(yǔ)言編寫(xiě)的程序在使用內(nèi)存時(shí)一般分為三個(gè)段:正文段(即代碼和賦值數(shù)據(jù)段)、數(shù)據(jù)堆段雌隅、數(shù)據(jù)棧段翻默;二進(jìn)制代碼和常量存放在正文段,動(dòng)態(tài)分配的存儲(chǔ)區(qū)在數(shù)據(jù)堆段恰起,臨時(shí)使用的變量在數(shù)據(jù)棧段修械;由此可以確定全局賦值變量在正文段賦值數(shù)據(jù)段,未賦值的局部變量和實(shí)參傳遞在棧段检盼,動(dòng)態(tài)內(nèi)存分配在堆段肯污,常量在正文段,進(jìn)程的優(yōu)先級(jí)在PCB內(nèi)吨枉。
一.30蹦渣、 用戶登錄成功會(huì)導(dǎo)致創(chuàng)建新進(jìn)程:因?yàn)?用戶登錄成功后,系統(tǒng)要為此創(chuàng)建一個(gè)用戶管理的進(jìn)程貌亭,包括用戶桌面柬唯、環(huán)境等等,所有用戶進(jìn)程都會(huì)在該進(jìn)程下創(chuàng)建和管理圃庭。
設(shè)備分配不會(huì)創(chuàng)建新進(jìn)程:因?yàn)?設(shè)備分配是通過(guò)在系統(tǒng)中設(shè)置相應(yīng)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的权逗,不需要?jiǎng)?chuàng)建進(jìn)程美尸,這是操作系統(tǒng)中I/O核心子系統(tǒng)的內(nèi)容。
————————————————————————
2.2 處理機(jī)調(diào)度
處理機(jī)調(diào)度是對(duì)處理機(jī)進(jìn)行分配斟薇,即從就緒隊(duì)列中按照一定的算法(公平、高效)選擇一個(gè)進(jìn)程并將處理機(jī)分配給它運(yùn)行恕酸,以實(shí)現(xiàn)進(jìn)程并發(fā)地執(zhí)行堪滨。
操作系統(tǒng)視頻課
教學(xué)內(nèi)容:
① 操作系統(tǒng)結(jié)構(gòu)
② 中斷及系統(tǒng)調(diào)用
③ 內(nèi)存管理
④ 進(jìn)程及線程
⑤ 處理機(jī)調(diào)度
⑥ 同步互斥
⑦ 文件系統(tǒng)
⑧ I/O子系統(tǒng)
實(shí)驗(yàn):
① 系統(tǒng)啟動(dòng)及中斷
② 物理內(nèi)存管理
③ 虛擬內(nèi)存管理
④ 內(nèi)核線程管理
⑤ 用戶進(jìn)程管理
⑥ CPU調(diào)度
⑦ 同步與互斥
⑧ 文件系統(tǒng)
- 計(jì)算機(jī)系統(tǒng):包括 硬件子系統(tǒng) 與 軟件子系統(tǒng)
硬件:cpu、主存儲(chǔ)器蕊温、I/O控制系統(tǒng)袱箱,外圍設(shè)備
軟件:包括系統(tǒng)軟件(關(guān)鍵系統(tǒng)軟件:操作系統(tǒng) 與 語(yǔ)言處理程序)、支撐軟件义矛、應(yīng)用軟件发笔。
一、進(jìn)程:
進(jìn)程包含了正在運(yùn)行的一個(gè)程序的所有狀態(tài)信息:包括(代碼凉翻、數(shù)據(jù)了讨、狀態(tài)寄存器{CPU狀態(tài)CRO、指令指針I(yè)P}制轰、通用寄存器{AX前计、BX...}進(jìn)程占用系統(tǒng)資源{打開(kāi)文件、已分配文件...})---->這些內(nèi)容構(gòu)成進(jìn)程控制塊
1. 進(jìn)程
1.進(jìn)程與程序的區(qū)別:
進(jìn)程是動(dòng)態(tài)的垃杖,程序是靜態(tài)的男杈,進(jìn)程是程序的執(zhí)行,進(jìn)程有用戶態(tài)调俘;進(jìn)程是一個(gè)狀態(tài)變化的過(guò)程伶棒,程序可長(zhǎng)久保存;進(jìn)程的組成包括程序彩库、數(shù)據(jù)肤无、進(jìn)程控制塊
2. 進(jìn)程控制塊(PCB):管理和運(yùn)行進(jìn)程所用的信息集合。對(duì)進(jìn)程的所有操作都是對(duì)進(jìn)程操作塊操作的(PCB)侧巨。
操作系統(tǒng)用PCB描述進(jìn)程的基本情況以及運(yùn)行變化的過(guò)程舅锄;PCB是進(jìn)程存在的唯一標(biāo)志,每個(gè)進(jìn)程在OS中有一個(gè)對(duì)應(yīng)的PCB司忱;
2. 進(jìn)程控制塊(PCB)
1.> 進(jìn)程控制塊包含:①進(jìn)程標(biāo)識(shí)信息 ② 處理機(jī)現(xiàn)場(chǎng)保存 ③ 進(jìn)程控制信息
皇忿、進(jìn)程控制信息:包括① 調(diào)度和狀態(tài)信息:調(diào)度進(jìn)程和處理機(jī)使用情況;② 進(jìn)程間通信信息:進(jìn)程間通信相關(guān)的各種標(biāo)識(shí)坦仍;③ 存儲(chǔ)管理信息:指向進(jìn)程映像存儲(chǔ)空間數(shù)據(jù)結(jié)構(gòu) ④ 進(jìn)程所用資源:進(jìn)程使用的系統(tǒng)資源鳍烁,如打開(kāi)文件等; ⑤ 有關(guān)數(shù)據(jù)結(jié)構(gòu)連接信息:與PCB相關(guān)的進(jìn)程隊(duì)列繁扎。
- 進(jìn)程控制塊的組織:
① 鏈表:同一狀態(tài)的進(jìn)程其PCB成一鏈表幔荒,多個(gè)狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表糊闽;
② 索引表:指針
3. 進(jìn)程的狀態(tài)
- 進(jìn)程的生命周期劃分:進(jìn)程創(chuàng)建、執(zhí)行爹梁、等待右犹、搶占、喚醒姚垃、結(jié)束
進(jìn)程創(chuàng)建:
1>. 系統(tǒng)初始化時(shí)
2>. 用戶請(qǐng)求創(chuàng)建一個(gè)新進(jìn)程
3>. 正在運(yùn)行的進(jìn)程執(zhí)行了創(chuàng)建進(jìn)程的系統(tǒng)的調(diào)用
進(jìn)程阻塞(等待):當(dāng)一個(gè)進(jìn)程在邏輯上不能繼續(xù)運(yùn)行時(shí)念链,它就會(huì)被阻塞,典型的例子①它在等待可以使用的輸入②能夠運(yùn)行的進(jìn)程被迫停止积糯,因?yàn)椴僮飨到y(tǒng)調(diào)度另一個(gè)進(jìn)程占用了CPU掂墓。(在第一種情況下,進(jìn)程掛起是程序自身固有的原因(在鍵入用戶命令行之前看成,無(wú)法執(zhí)行命令)君编;第二種情況則是由系統(tǒng)技術(shù)上的原因引起的(由于沒(méi)有足夠的cpu,所以不能使每個(gè)進(jìn)程都有一臺(tái)它私用的處理器))只有進(jìn)程自身才能知道何時(shí)需要等待某種事件的發(fā)生川慌。
進(jìn)程搶占:
1>. 高優(yōu)先級(jí)進(jìn)程就緒
2>. 進(jìn)程執(zhí)行當(dāng)前時(shí)間用完
喚醒進(jìn)程:
1>. 被阻塞進(jìn)程需要的資源可被滿足
2>. 被阻塞進(jìn)程等待的事件到達(dá)
進(jìn)程只能被其他進(jìn)程或操作系統(tǒng)喚醒吃嘿。 -
進(jìn)程的三種狀態(tài):
① 運(yùn)行態(tài)(該時(shí)刻進(jìn)程實(shí)際占用CPU)
② 就緒態(tài)(可運(yùn)行,但因?yàn)槠渌M(jìn)程正在運(yùn)行而暫時(shí)停止)
③ 阻塞態(tài)(除非某種外部事件發(fā)生窘游,否則進(jìn)程不能運(yùn)行 )
調(diào)度程序的主要工作就是決定應(yīng)當(dāng)運(yùn)行哪個(gè)進(jìn)程唠椭、何時(shí)運(yùn)行及它應(yīng)該運(yùn)行多長(zhǎng)時(shí)間 。
運(yùn)行--->就緒:處于運(yùn)行狀態(tài)的進(jìn)程在其運(yùn)行過(guò)程中忍饰,由于分配給它的CPU時(shí)間片用完而讓出CPU贪嫂。圖4 三狀態(tài)進(jìn)程模型.png
4. 進(jìn)程掛起
三狀態(tài)進(jìn)程模型主要討論與CPU相關(guān)的這些狀態(tài),實(shí)際上在進(jìn)程當(dāng)中還有一類與存儲(chǔ)有關(guān)艾蓝,也就是說(shuō)進(jìn)程一部分放在外存里的力崇,與虛擬存儲(chǔ)相關(guān)聯(lián)的,這就是掛起進(jìn)程模型赢织。
處于掛起狀態(tài)的進(jìn)程映像在磁盤(pán)上亮靴,目的是減少進(jìn)程占用內(nèi)存,那么更多的內(nèi)存可以給其他進(jìn)程使用于置。
(新加的兩種狀態(tài)茧吊,是描述在外存中的進(jìn)程狀態(tài),其他的狀態(tài)是不會(huì)在外存里的):
等待(阻塞)掛起:進(jìn)程在外存并等待某事件的出現(xiàn)(相當(dāng)于加一個(gè)關(guān)于進(jìn)程位置的信息八毯。)
就緒掛起:進(jìn)程在外存搓侄,但只要進(jìn)入內(nèi)存,即可運(yùn)行话速。
1. 掛起:把一個(gè)進(jìn)程從內(nèi)存轉(zhuǎn)到外存
①等待到等待掛起:沒(méi)有進(jìn)程處于就緒狀態(tài)或就緒進(jìn)程要求更多內(nèi)存資源讶踪。
②就緒到就緒掛起:當(dāng)有高優(yōu)先級(jí)等待(系統(tǒng)認(rèn)為很快就緒的)進(jìn)程和低優(yōu)先級(jí)就緒進(jìn)程。
③運(yùn)行到就緒掛起:對(duì)搶先式分時(shí)系統(tǒng)泊交,當(dāng)有高優(yōu)先級(jí)等待掛起進(jìn)程因事件出現(xiàn)而進(jìn)入就緒掛起乳讥,而這時(shí)沒(méi)有足夠空間柱查,就把正在運(yùn)行的這個(gè)進(jìn)程就緒掛起。
在外存時(shí)的狀態(tài)轉(zhuǎn)換:
① 等待掛起到就緒掛起:當(dāng)有等待掛起進(jìn)程因相關(guān)事件出現(xiàn)云石。
2.激活:把一個(gè)進(jìn)程從外存轉(zhuǎn)到內(nèi)存:
① 就緒掛起到就緒:沒(méi)有就緒進(jìn)程或掛起的就緒進(jìn)程優(yōu)先級(jí)高于就緒進(jìn)程唉工。
② 等待掛起到等待: 當(dāng)一個(gè)進(jìn)程釋放足夠內(nèi)存,并有高優(yōu)先級(jí)等待掛起進(jìn)程留晚。
5. 狀態(tài)隊(duì)列
根據(jù)進(jìn)程狀態(tài)不同酵紫,PCB加入相應(yīng)隊(duì)列,進(jìn)程狀態(tài)變化時(shí)错维,它所在的PCB會(huì)從一個(gè)隊(duì)列換到另一個(gè) 。(不同隊(duì)列表示不同狀態(tài)(就緒隊(duì)列橄唬、各種等待隊(duì)列))
二赋焕、線程
線程是進(jìn)程的一部分,描述指令流執(zhí)行狀態(tài)仰楚,它是進(jìn)程中的指令執(zhí)行流的最小單位隆判,是CPU調(diào)度的基本單位。 一個(gè)進(jìn)程里有多個(gè)線程僧界,線程并發(fā) 侨嘀。
原來(lái)的進(jìn)程變成是資源分配的角色,與指令流相關(guān)的東西就不放在進(jìn)程里了捂襟,每個(gè)指令流調(diào)用函數(shù)時(shí)咬腕,它必須有自己獨(dú)立的堆棧,把它剝離出來(lái)葬荷,變成這里的線程的組成部分涨共,線程是負(fù)責(zé)處理機(jī)調(diào)度的對(duì)象,宠漩,把關(guān)于執(zhí)行流的狀態(tài)信息變成是線程控制塊举反,線程控制塊從屬于進(jìn)程控制塊(PCB),用指針指向PCB扒吁,火鼻,因此可以在一個(gè)進(jìn)程里提高并發(fā)程度。