最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

王道計(jì)算機(jī)考研 操作系統(tǒng)

2023-01-11 20:55 作者:maxateng  | 我要投稿

P2 操作系統(tǒng)的功能和目標(biāo)

用戶和操作系統(tǒng)是相接的,也是可以直接交互的:因?yàn)榧词箾]有安裝軟件也可以用操作系統(tǒng)干很多事情。

此處的定義劃分有三個(gè)維度:

①由中間到兩邊

②由下到上

③由上到下

下面根據(jù)三個(gè)維度來介紹操作系統(tǒng)的功能和目標(biāo):

①作為系統(tǒng)資源的管理者

②作為用戶和計(jì)算機(jī)硬件之間的接口


兩種命令接口:

程序接口:

GUI

③作為最接近硬件的層次

總結(jié):

P3操作系統(tǒng)的特征

①并發(fā)

并行:

②共享

  • 互斥共享
  • 同時(shí)共享

但是微觀上,可能真的是在并行(比如打游戲時(shí)聽歌,游戲的聲音和歌的聲音在聲音輸出設(shè)備微觀上也是同時(shí)進(jìn)行)

并發(fā)VS共享

③虛擬

兩個(gè)關(guān)鍵詞:(第三章)

  • 虛擬存儲(chǔ)技術(shù)
  • “空分復(fù)用技術(shù)”and“時(shí)分復(fù)用技術(shù)”

④異步

總結(jié):

P3操作系統(tǒng)的發(fā)展和分類

每一個(gè)階段的優(yōu)點(diǎn)都是上一個(gè)階段的缺點(diǎn)

①手工操作階段

②批處理階段——單道批處理系統(tǒng)

③批處理階段——多道批處理系統(tǒng)

多道批處理階段需要多道程序并發(fā)進(jìn)行,需要錯(cuò)做系統(tǒng)來進(jìn)行管理,標(biāo)志著操作系統(tǒng)正式形成

為什么多道批處理系統(tǒng)可以增加效率?

④分時(shí)操作系統(tǒng)

⑤實(shí)時(shí)操作系統(tǒng)

⑦其他操作系統(tǒng)

總結(jié)

P5 OS運(yùn)行機(jī)制和體系結(jié)構(gòu)

①運(yùn)行機(jī)制

兩種指令

代碼和指令有什么區(qū)別?

指令:CPU能夠識(shí)別、執(zhí)行的做基本的命令。

兩種處理器狀態(tài)

CPU的兩種狀態(tài)是由程序狀態(tài)字寄存器(PSW)某個(gè)標(biāo)志位來表示當(dāng)前處理器處于什么狀態(tài)。

兩種程序

根據(jù)程序是否能使用非特權(quán)指令,計(jì)算機(jī)系統(tǒng)把程序分為兩種

小總結(jié)

②操作系統(tǒng)的內(nèi)核

所有的進(jìn)程切換和調(diào)度都是要基于計(jì)時(shí)功能實(shí)現(xiàn)

原子性:程序要么不執(zhí)行,要么執(zhí)行完畢

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

總結(jié):

P6中斷和異常


多道批處理階段:

引入中斷機(jī)制,實(shí)現(xiàn)多道程序并發(fā)執(zhí)行

本質(zhì):發(fā)生中斷就意味著需要操作系統(tǒng)接入,開展管理工作

【動(dòng)態(tài)過程看視頻】

進(jìn)程1在用戶態(tài)進(jìn)行,當(dāng)CPU收到計(jì)時(shí)器部件發(fā)送的中斷信號(hào),切換為核心態(tài)進(jìn)行處理。

將CPU的使用權(quán)限交給操作系統(tǒng),操作系統(tǒng)的內(nèi)核對(duì)中斷信號(hào)進(jìn)行處理,OS決定進(jìn)程1的時(shí)間片已經(jīng)用完,換為進(jìn)程2運(yùn)行,然后OS會(huì)把CPU的使用權(quán)交還給用戶進(jìn)程,進(jìn)程2就會(huì)在用戶態(tài)下開始進(jìn)行

★★重要★★

中斷的分類:

總結(jié):

P7系統(tǒng)調(diào)用

OS是硬件和用戶之間的接口,向上層提供服簡單易用的服務(wù)。

有兩種接口:

  • 命令接口——允許用戶直接使用
  • 程序接口(由一組系統(tǒng)調(diào)用組成)——允許用戶通過程序間接使用

用戶進(jìn)程要使用共享資源,只能通過系統(tǒng)調(diào)用對(duì)操作系統(tǒng)發(fā)出請(qǐng)求,操作系統(tǒng)會(huì)對(duì)各個(gè)請(qǐng)求進(jìn)行協(xié)調(diào)管理。

作用:保證系統(tǒng)的穩(wěn)定性和安全性。

系統(tǒng)調(diào)用可以理解為供程序使用的特殊的函數(shù)。和我們編程常見的庫函數(shù)有什么區(qū)別呢?

  • 應(yīng)用程序可以通過匯編語言的形式直接使用系統(tǒng)調(diào)用。
  • 高級(jí)語言提供的庫函數(shù)底層會(huì)為我們相應(yīng)封裝一些系統(tǒng)調(diào)用的功能,隱藏一些細(xì)節(jié),使上層進(jìn)行系統(tǒng)調(diào)用更加方便。

總結(jié):

陷入指令=trap指令=訪管指令

P8 進(jìn)程

程序段存在內(nèi)存的低地址位置,數(shù)據(jù)段存在內(nèi)存的高地址位置

P12進(jìn)程



OS為每一個(gè)進(jìn)程分配一個(gè)PID

OS在背后還記錄了進(jìn)程的其他信息:

  • 記錄了為進(jìn)程分配了哪些資源(分配多少內(nèi)存、正在使用哪些IO設(shè)備)
  • 記錄了進(jìn)程運(yùn)行的情況(CPU使用時(shí)間、磁盤使用狀況)

這些信息會(huì)被保存在一個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)程控制塊PCB

PCB中存在很多字段

我們只需知道,PCB中存儲(chǔ)的都是操作系統(tǒng)對(duì)進(jìn)程進(jìn)行管理工作所需要的信息


一系列的指令序列就是以.exe格式的文件儲(chǔ)存在計(jì)算機(jī)硬盤中

進(jìn)程實(shí)體可以理解為進(jìn)程某一時(shí)刻的快照,進(jìn)程實(shí)體反映進(jìn)程某一時(shí)刻的狀態(tài)

進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。

比如,OS就是為每一個(gè)進(jìn)程分配內(nèi)存等資源,這就是以進(jìn)程為單位。

PCB是給操作系統(tǒng)的,程序段、數(shù)據(jù)段是給進(jìn)程自己用的,與進(jìn)程自身的運(yùn)行邏輯有關(guān)。


進(jìn)程的特征

進(jìn)程是程序的一次執(zhí)行過程

總結(jié):

在引入線程以后,進(jìn)程就不再是接收調(diào)度的基本單位了,但是進(jìn)程依然是獲得資源的基本單位

P13進(jìn)程的狀態(tài)和狀態(tài)的轉(zhuǎn)換

本小節(jié)介紹進(jìn)程所擁有的的各種狀態(tài)以及它們?cè)谑裁辞闆r下進(jìn)行轉(zhuǎn)換;以及探究進(jìn)程的組織方式

既然進(jìn)程2接下來的指令無法繼續(xù)進(jìn)行下去,顯然我們不應(yīng)該讓進(jìn)程2一直占用CPU資源。

進(jìn)程運(yùn)行過程中可能需要等待某個(gè)時(shí)間發(fā)生的過程,比如:

  • 某種系統(tǒng)資源的分配
  • 等待其他進(jìn)程的響應(yīng)

在這個(gè)事件發(fā)生之前,進(jìn)程無法繼續(xù)執(zhí)行下去,操作系統(tǒng)會(huì)讓這個(gè)進(jìn)程下CPU,進(jìn)入“阻塞態(tài)

當(dāng)進(jìn)程等待的資源獲得時(shí),操作系統(tǒng)就會(huì)讓被阻塞的進(jìn)程回到就緒態(tài),這個(gè)進(jìn)程就再次擁有了處理機(jī)運(yùn)行的條件。

進(jìn)程的結(jié)束:進(jìn)行可以執(zhí)行exit系統(tǒng)調(diào)用請(qǐng)求OS終止該進(jìn)程。此時(shí)進(jìn)程會(huì)進(jìn)入“終止態(tài)”。

終止態(tài)產(chǎn)生的響應(yīng)的行為:

  • OS會(huì)讓進(jìn)程下CPU
  • OS回收內(nèi)存空間等資源,最后還要回收PCB

當(dāng)終止進(jìn)程的工作完成以后,進(jìn)程就徹底消失了

總結(jié)一下進(jìn)程狀態(tài)轉(zhuǎn)換的過程:

  1. 創(chuàng)建態(tài)
  2. 就緒態(tài)
  3. 運(yùn)行態(tài)
  4. 阻塞態(tài)
  5. 終止態(tài)

進(jìn)程五狀態(tài)模型:

有的時(shí)候可以直接由運(yùn)行態(tài)轉(zhuǎn)換到就緒態(tài),比如:

  • 操作系統(tǒng)給運(yùn)行態(tài)分配的時(shí)間片用完以后(時(shí)鐘中斷,進(jìn)程本來在CPU上運(yùn)行,CPU突然收到一個(gè)時(shí)鐘中斷的信號(hào),進(jìn)程就會(huì)被剝奪CPU的使用權(quán))
  • 處理機(jī)被搶斷

OS 是如何記錄進(jìn)程的狀態(tài)呢?

PCB中有一個(gè)狀態(tài)字state

為了對(duì)同一個(gè)狀態(tài)下進(jìn)程進(jìn)行統(tǒng)一管理,OS會(huì)將各個(gè)進(jìn)程的PCB組織起來。

接下來探討的就是進(jìn)程的組織的問題。

鏈?zhǔn)椒绞?/p>

OS會(huì)管理一系列的隊(duì)列,每個(gè)隊(duì)列都會(huì)指向相應(yīng)狀態(tài)的進(jìn)程PCB

索引方式

OS會(huì)給各種狀態(tài)的進(jìn)程建立相應(yīng)的索引表,每一個(gè)索引表項(xiàng)又會(huì)指向相應(yīng)的PCB

但是,大部分的OS都是使用的鏈?zhǔn)椒绞?/p>

P14進(jìn)程控制

簡單來說,進(jìn)程控制就是實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換

如何實(shí)現(xiàn)進(jìn)程控制?

用原語來實(shí)現(xiàn)。

原語要求一氣呵成,進(jìn)程的控制通過原語來實(shí)現(xiàn),也需要一氣呵成。那為什么進(jìn)程的控制要一氣呵成呢?

如果不能一氣呵成,就有可能出現(xiàn)OS中某些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)信息不統(tǒng)一的情況,這會(huì)影響OS進(jìn)行別的管理工作。

剛好原語這種特殊的程序具有一氣呵成,不能被中斷的性質(zhì),所以就可以用原語這樣的程序來實(shí)現(xiàn)一氣呵成的功能。

那為什么原語不可中斷呢?這是如何實(shí)現(xiàn)的呢?

通過“開中斷指令”和“關(guān)中斷指令”

CPU每進(jìn)行完一條指令,都會(huì)檢查是否有中斷信號(hào)要進(jìn)行處理。如果有,則暫停當(dāng)前這段程序,轉(zhuǎn)而執(zhí)行相應(yīng)的中斷處理程序。

“開中斷”和“關(guān)中斷”都是特權(quán)指令,不允許普通的用戶程序使用,只能讓內(nèi)核程序使用。

接下來討論進(jìn)程控制相關(guān)的原語。

①創(chuàng)建原語:創(chuàng)建一個(gè)進(jìn)程時(shí)使用的原語。

首先,申請(qǐng)空白PCB(PCB是進(jìn)程存在的唯一標(biāo)志)。

為新進(jìn)程分配所需資源。

初始化PCB。

將PCB插入就緒隊(duì)列。

至此,進(jìn)程由創(chuàng)建態(tài)進(jìn)入到就緒態(tài)。

下面是一些典型的會(huì)創(chuàng)建進(jìn)程的事件。

下面是將進(jìn)程轉(zhuǎn)換到終止態(tài)的撤銷原語。

關(guān)于父進(jìn)程與子進(jìn)程:

常見的引起進(jìn)程中止的事件:

P15進(jìn)程通信

進(jìn)程間通信(Inter-Process Communication,IPC)是指兩個(gè)進(jìn)程之間產(chǎn)生數(shù)據(jù)交互。

為什么進(jìn)程通信需要操作系統(tǒng)的支持?

各個(gè)進(jìn)程的地址空間是相互獨(dú)立的,各個(gè)進(jìn)程只能訪問自己的內(nèi)存地址空間(這么做是出于安全的考慮)。

方式一:共享存儲(chǔ)

如果使用共享存儲(chǔ)的方式,必須要保證對(duì)共享存儲(chǔ)的訪問是互斥的。

基于數(shù)據(jù)結(jié)構(gòu)的共享:

基于存儲(chǔ)區(qū)的共享:OS只是在內(nèi)存中劃出共享區(qū)域。數(shù)據(jù)的組織形式、存放位置都是由通信進(jìn)程控制。

方式二:消息傳遞

直接消息傳遞

進(jìn)程Q有一個(gè)消息隊(duì)列

P進(jìn)程在自己的空間構(gòu)造

間接消息傳遞




P16線程

傳統(tǒng)意義上,進(jìn)程是程序的一次執(zhí)行,無法實(shí)現(xiàn)一個(gè)進(jìn)程同時(shí)處理很多事情。

?
2.1_5_線程的概念 P16 - 02:06
?

傳統(tǒng)的進(jìn)程是程序執(zhí)行流的最小單位。

人們有引入線程機(jī)制增加系統(tǒng)的并發(fā)度。

沒有引入線程之前,一個(gè)進(jìn)程對(duì)應(yīng)一份代碼,只能順序地依次往下執(zhí)行。

引入線程之后,每個(gè)進(jìn)程可以有多個(gè)線程,各個(gè)線程有各自不同或者相同的代碼。這些代碼都會(huì)并發(fā)地被CPU處理,也會(huì)并發(fā)地依次處理下去。

引入線程以后,進(jìn)程不再是CPU調(diào)度的基本單位。進(jìn)程只作為除CPU之外的系統(tǒng)資源的分配單元。

引入線程機(jī)制以后,有什么變化?

線程有哪些屬性?

線程只是處理機(jī)調(diào)度的基本單位

線程基本不擁有系統(tǒng)資源,而是共享進(jìn)程的資源(包括內(nèi)存地址空間)。也正是共享內(nèi)存地址空間,同一進(jìn)程中的線程間的通信甚至無需系統(tǒng)干預(yù),系統(tǒng)開銷也很小。同一進(jìn)程中線程切換不會(huì)引起進(jìn)程切換,不同進(jìn)程線程切換會(huì)引起進(jìn)程切換。切換線程系統(tǒng)開銷很小,切換進(jìn)程系統(tǒng)開銷很大。

P17線程的實(shí)現(xiàn)方式和多線程模型

進(jìn)程是資源分配的基本單位

從線程的角度看,線程其實(shí)就是一段代碼邏輯。


1、線程的管理工作是由誰來完成的?

應(yīng)用級(jí)線程的管理是由線程庫來完成的,并不是操作系統(tǒng)來完成的。

2、線程切換是否需要CPU變態(tài)?

從代碼上看,并不涉及請(qǐng)求操作系統(tǒng)服務(wù),切成切換的管理是由線程庫這樣的應(yīng)用程序自己完成的,在用戶態(tài)下就能實(shí)現(xiàn)。

3、操作系統(tǒng)是否能意識(shí)到用戶級(jí)線程的存在?

OS只能意識(shí)到進(jìn)程的存在,意識(shí)不到進(jìn)程內(nèi)部的線程的。

4、優(yōu)缺點(diǎn)

優(yōu)點(diǎn):用戶級(jí)線程的切換在用戶空間即可完

成,不需要切換到核心態(tài),線程管理的系統(tǒng)

開銷小,效率高

缺點(diǎn):當(dāng)一個(gè)用戶級(jí)線程被阻塞后,整個(gè)進(jìn)

程都會(huì)被阻塞,并發(fā)度不高。多個(gè)線程不可

在多核處理機(jī)上并行運(yùn)行。

在用戶級(jí)線程的條件下,CPU調(diào)度的基本單位依然是進(jìn)程。進(jìn)程只能被分配一個(gè)核心,因此這些線程并不能并行運(yùn)行。

內(nèi)核級(jí)線程:OS層面也可以看到線程

根據(jù)用戶級(jí)線程和內(nèi)核級(jí)線程的映射關(guān)系,可以劃分為幾種多線程模型

OS只是看得見內(nèi)核級(jí)線程。因此,只有內(nèi)核級(jí)線程超市處理機(jī)分配的單位。

回顧

P18線程的狀態(tài)與轉(zhuǎn)換

程序計(jì)數(shù)器:指明線程執(zhí)行到哪里了

線程狀態(tài)切換的時(shí)候,

下處理機(jī):將線程的PC存入TCB中

上處理機(jī):從PCB中取出PC的值放回PC寄存器中

線程表:將多個(gè)線程的TCB組織起來形成線程表

P19調(diào)度的概念和層次


調(diào)度

一堆任務(wù)要處理,資源有限,確定某種規(guī)則來決定處理這些任務(wù)的順序。

作業(yè):一個(gè)具體的任務(wù)

用戶向操作系統(tǒng)提交一個(gè)作業(yè)≈用戶讓OS處理一個(gè)任務(wù)(讓OS啟動(dòng)一個(gè)程序)

暫時(shí)調(diào)到外存等待的進(jìn)程狀態(tài)為掛起狀態(tài)。

低級(jí)調(diào)度——處理機(jī)調(diào)度

中級(jí)調(diào)度——內(nèi)存調(diào)度

高級(jí)調(diào)度——作業(yè)調(diào)度


七狀態(tài)模型:

掛起:進(jìn)程映像調(diào)到外存

阻塞:進(jìn)程映像還在內(nèi)存中

P20進(jìn)程調(diào)度的時(shí)機(jī)、切換和過程、方式

P22調(diào)度算法評(píng)價(jià)指標(biāo)


P23

進(jìn)程調(diào)度算法

短作業(yè)優(yōu)先:



P26 進(jìn)程同步與進(jìn)程互斥

并發(fā)執(zhí)行的進(jìn)程有異步性。

有時(shí)我們必須保證進(jìn)程是按我們想要的推進(jìn)順序來執(zhí)行的,操作系統(tǒng)就需要提供進(jìn)程同步的機(jī)制來實(shí)現(xiàn)這樣的需求。

同步要解決的問題就是如何解決進(jìn)程異步的問題。

同步亦稱直接制約關(guān)系(進(jìn)程間有直接的合作),指的是為完成某些任務(wù)而建立的多個(gè)進(jìn)程需要協(xié)調(diào)工作次序而產(chǎn)生的制約關(guān)系。

資源的共享方式:

  • 互斥共享方式
  • 同時(shí)共享方式

我們把一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程使用的資源稱為臨界資源。

進(jìn)程互斥,間接制約關(guān)系(進(jìn)程間沒有直接的合作關(guān)系)

簡稱互斥的四個(gè)邏輯部分

  • 進(jìn)入?yún)^(qū):檢查是否可以進(jìn)入臨界區(qū),若可以進(jìn)入則上鎖(加上正在訪問臨界資源的標(biāo)志)。
  • 臨界區(qū):訪問臨界資源的那段代碼要放解除正在訪問臨界資源的標(biāo)志)
  • 剩余區(qū)

總結(jié)


P27進(jìn)程互斥的軟件實(shí)現(xiàn)方法

單標(biāo)志法:

問題:是依次交替輪流使用。如果輪到對(duì)方來訪問臨界區(qū),但是對(duì)方又不訪問,就會(huì)出現(xiàn)臨界區(qū)空閑,但又不允許p1訪問的情況。

違背了“空閑讓進(jìn)”的原則

雙標(biāo)志先檢查法:

看起來沒有問題,但是當(dāng)這兩個(gè)進(jìn)程并發(fā)執(zhí)行的時(shí)候,就會(huì)出現(xiàn)問題。

按照1、5、2、6的順序來執(zhí)行的話,就會(huì)發(fā)生奇怪的事情。

問題:進(jìn)入?yún)^(qū)的檢查和上鎖,兩個(gè)處理不是一氣呵成的。檢查之后,上鎖之前可能會(huì)發(fā)生進(jìn)程切換。進(jìn)而會(huì)出現(xiàn)兩個(gè)進(jìn)程都進(jìn)入臨界區(qū)的情況。違反了“忙則等待”的原則。

雙標(biāo)志后檢查法:

Peterson算法


總結(jié)


P28進(jìn)程互斥的硬件實(shí)現(xiàn)方法


  • 不適用于多處理機(jī),關(guān)中斷指令只對(duì)執(zhí)行關(guān)中斷指令的處理機(jī)有用
  • 不適用于用戶進(jìn)程,只能運(yùn)行在操作系統(tǒng)內(nèi)核態(tài)

總結(jié):

P29互斥鎖

多處理器的情況下,自旋等待的代價(jià)反而會(huì)很低

P30信號(hào)量機(jī)制

  • 信號(hào)量是一種變量,用來表示系統(tǒng)中某種資源的數(shù)量
  • 可以用系統(tǒng)提供的一對(duì)原語wait和signal來對(duì)信號(hào)量進(jìn)行操作(簡稱PV操作)

wait的過程:

  1. 先表示想要消耗一個(gè)資源
  2. 如果沒有資源了,則使用block原語將進(jìn)程從運(yùn)行態(tài)送進(jìn)阻塞態(tài);并把該進(jìn)程掛入阻塞隊(duì)列

signal的過程:

  1. 釋放資源,value+1
  2. 如果還有進(jìn)程等待這種資源(阻塞隊(duì)列中還有進(jìn)程),則使用wakeup原語喚醒等待隊(duì)列中的一個(gè)原語,使其進(jìn)入就緒態(tài)

整體過程:

?
2.3_5_信號(hào)量機(jī)制 P30 - 16:57
?

信號(hào)量機(jī)制遵循了讓權(quán)等待原則,(一個(gè)進(jìn)程會(huì)使用block源與自我阻塞,主動(dòng)放棄處理機(jī))

總結(jié):

P31用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程的同步和互斥

用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程的互斥

信號(hào)量表示資源的數(shù)量,互斥信號(hào)量mutex表示“進(jìn)入臨界區(qū)的名額”

  1. 劃定臨界區(qū):哪一段代碼是用來訪問臨界區(qū)資源
  2. 設(shè)置互斥信號(hào)量mutex(進(jìn)臨界區(qū)對(duì)mutex執(zhí)行P操作,出臨界區(qū)對(duì)mutex執(zhí)行V操作)

注意:

  • 要會(huì)自己定義記錄型信號(hào)量,默認(rèn)使semaphore
  • 對(duì)于不同的臨界資源,需要設(shè)置不同的互斥信號(hào)量
  • PV操作必須成雙成對(duì)(缺少p操作,就無法保證各個(gè)進(jìn)程互斥的訪問臨界資源;缺少v操作,就會(huì)導(dǎo)致某些進(jìn)程被阻塞以后一直無法被喚醒)


用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程的同步

進(jìn)程的同步:由于進(jìn)程同步具有異步性,有時(shí)為了完成某一特定任務(wù),需要進(jìn)程按照特定的順序來互相配合,有序推進(jìn)。

剛開始設(shè)置P=0表示并沒有這種資源。

在前操作之后執(zhí)行V操作,早后操作之前執(zhí)行P操作,只有先執(zhí)行V(還有進(jìn)程在等待這種資源,執(zhí)行wakeup語句,喚醒阻塞隊(duì)列中的一個(gè)進(jìn)程)操作釋放資源才能執(zhí)行P操作之后的代碼,這就保證了執(zhí)行代碼的順序。

更復(fù)雜的情況:信號(hào)量機(jī)制實(shí)現(xiàn)前驅(qū)關(guān)系

總結(jié)

以上都是進(jìn)程同步和互斥的理論,從下一講開始會(huì)介紹幾個(gè)經(jīng)典的進(jìn)程同步和互斥問題

P32 生產(chǎn)者消費(fèi)者問題

緩沖區(qū)是臨界區(qū)資源,各進(jìn)程必須互斥地訪問。

生產(chǎn)者、消費(fèi)者共享一個(gè)初始為空、大小為n的緩沖區(qū)。

full:產(chǎn)品的數(shù)量(非空緩沖區(qū)的數(shù)量)緩沖區(qū)剛開始都是空的,設(shè)置full=0

empty:空閑緩存區(qū),初始時(shí)全是空閑的,empty=n

mutex:“互斥信號(hào)量”,由于緩沖區(qū)為臨界資源,各個(gè)進(jìn)程必須互斥的訪問,初始設(shè)為1

實(shí)現(xiàn)互斥的PV鎖是在同一進(jìn)程中進(jìn)行;

實(shí)現(xiàn)同步關(guān)系的PV操作是在兩個(gè)進(jìn)程中實(shí)現(xiàn)的。對(duì)于full變量,現(xiàn)在生產(chǎn)者中執(zhí)行V操作,增加一個(gè)產(chǎn)品;再在消費(fèi)者那里執(zhí)行P操作,消耗一個(gè)產(chǎn)品。

實(shí)現(xiàn)互斥的P操作一定要在實(shí)現(xiàn)同步的P操作之后,否則可能引起死鎖;

V操作不會(huì)導(dǎo)致進(jìn)程阻塞,因此兩個(gè)V操作順序可以互換。

生產(chǎn)者生產(chǎn)一個(gè)產(chǎn)品和和消費(fèi)者使用產(chǎn)品這兩個(gè)步驟可否放入臨界區(qū)?

可以是可以,但是會(huì)導(dǎo)致一個(gè)進(jìn)程對(duì)臨界區(qū)上鎖的時(shí)間增長,這樣將不利于各個(gè)進(jìn)程交替使用臨界區(qū)資源。所以要讓臨界區(qū)的代碼盡可能的短。

P33多生產(chǎn)者和多消費(fèi)者問題

“多”:多類(不同生產(chǎn)者和消費(fèi)者生產(chǎn)和消費(fèi)的東西是不一樣的)

先分析存在哪些互斥和同步關(guān)系

互斥關(guān)系:對(duì)緩沖區(qū)(盤子)的訪問要互斥

同步關(guān)系(先后順序):

1.先放后取

  • 父親先將蘋果放入盤子后,女兒才能取蘋果。
  • 母親將橘子放入盤子后,兒子才能取橘子。

2.兒子或女兒將盤子拿空以后,父親或母親才能放入水果。

確定PV操作大致順序

實(shí)現(xiàn)互斥:在訪問臨界資源前后分別執(zhí)行P操作和V操作

實(shí)現(xiàn)同步:前V后P

設(shè)置信號(hào)量

互斥關(guān)系設(shè)置初值為1的信號(hào)量(mutex=1)

apple=1;orange=0

plate=1

可不可以不要互斥信號(hào)量?

三個(gè)變量同一時(shí)刻最多只有一個(gè)能是1,因此任何時(shí)刻最多只有一個(gè)進(jìn)程不會(huì)被阻塞





P38死鎖

死鎖產(chǎn)生的必要條件

什么時(shí)候會(huì)發(fā)生死鎖?

死鎖的處理策略:

見下一節(jié)


P39 死鎖的處理策略——預(yù)防死鎖

互斥條件:對(duì)互斥資源的爭搶才會(huì)導(dǎo)致死鎖。





P42內(nèi)存

※如何實(shí)現(xiàn)邏輯地址到物理地址的轉(zhuǎn)換

程序執(zhí)行前需要先放到內(nèi)存中才能被CPU處理

問題:程序的數(shù)據(jù)都存放在內(nèi)存中,那該如何區(qū)分各個(gè)程序的數(shù)據(jù)存放在什么地方呢?

方法就是,進(jìn)行編號(hào)。

每個(gè)存儲(chǔ)單元的大小取決于計(jì)算機(jī)是按什么來編址。(按字編址、按字節(jié)編址)

默認(rèn)進(jìn)程相關(guān)內(nèi)容從#0開始連續(xù)存放,指令中的參數(shù)直接給出變量的實(shí)際存放地址(物理地址)

但是如果不是從地址#0開始存放(邏輯地址),會(huì)影響指令的執(zhí)行嗎?

三種策略解決絕對(duì)地址和相對(duì)地址轉(zhuǎn)化的問題

方法一:絕對(duì)裝入

這種方式的靈活性很低(可移植性很低,在一臺(tái)電腦上物理地址開始的地方不是另一臺(tái)電腦上物理地址開始的地方)

方法二:可重定位裝入

靜態(tài)重定位

編譯鏈接后的模塊兒地址還是從0開始,模塊裝入內(nèi)存時(shí)進(jìn)行重定位

這種方式的特點(diǎn)是:

  • 給作業(yè)分配的內(nèi)存空間必須是連續(xù)的,而且是一次性分配全部需要的內(nèi)存空間;
  • 必須一次性裝入
  • 作業(yè)一旦進(jìn)入內(nèi)存,運(yùn)行期間不能再移動(dòng)。

動(dòng)態(tài)重定位(現(xiàn)代操作系統(tǒng)使用的方法)

如果一個(gè)系統(tǒng)支持動(dòng)態(tài)重定位,還需要一個(gè)重定位寄存器的支持。

剛開始往重定位寄存器中存放模塊存放的起始地址。

CPU在對(duì)一個(gè)內(nèi)存地址進(jìn)行訪問的時(shí)候,會(huì)把邏輯地址和重定位寄存器中存放的模塊起始地址進(jìn)行相加。

動(dòng)態(tài)重定位是進(jìn)程中的數(shù)據(jù),在運(yùn)行過程中發(fā)生移動(dòng)是很方便的。(比如如果想讓數(shù)據(jù)從200開始,只需要讓重定位寄存器中的值改為200)

動(dòng)態(tài)重定位具有很多優(yōu)點(diǎn):

(在之后學(xué)習(xí)過虛擬存儲(chǔ)管理之后,就對(duì)這些性質(zhì)有深入理解)

接下來從一個(gè)更宏觀、更全局的角度來描述從寫程序到程序運(yùn)行的過程。

通過編譯將源代碼編譯成若干個(gè)目標(biāo)模塊(即把高級(jí)語言翻譯為機(jī)器語言)

目標(biāo)模塊中已經(jīng)包含了代碼所對(duì)應(yīng)的指令。每一個(gè)模塊的地址都是相互獨(dú)立的邏輯地址

各個(gè)目標(biāo)模塊進(jìn)行鏈接以后,就形成了裝入模塊(.exe)。裝入模塊具有完整的邏輯地址。

剛剛我們講的邏輯地址到物理地址的轉(zhuǎn)換就是在裝入過程中發(fā)生。

接下來要介紹三種鏈接的方法:

采用動(dòng)態(tài)鏈接的方法時(shí),用到某一個(gè)模塊兒時(shí),才需要把某個(gè)模塊調(diào)入內(nèi)存。還需要用到其他模塊的時(shí)候,在裝入的過程中同時(shí)進(jìn)行鏈接。整個(gè)都用不到的模塊兒可以不裝入內(nèi)存。


P43內(nèi)存的管理

問題提出:

  • 操作系統(tǒng)該怎么管理哪些內(nèi)存區(qū)域已經(jīng)被分配出去,哪些還在空閑狀態(tài)呢?
  • 有很多空閑位置時(shí),如果有一個(gè)新的進(jìn)程想要放入內(nèi)存當(dāng)中,該放入什么位置呢?
  • 一個(gè)進(jìn)程運(yùn)行結(jié)束之后,進(jìn)程占用的內(nèi)存空間應(yīng)該如何回收呢?

1、因此操作系統(tǒng)要做的第一件事情就是負(fù)責(zé)內(nèi)存空間的分配與回收。

2、操作系統(tǒng)需要提供某種技術(shù),從邏輯上對(duì)內(nèi)存空間進(jìn)行擴(kuò)充——虛擬技術(shù)

3、操作系統(tǒng)需要提供地址轉(zhuǎn)換的功能,負(fù)責(zé)程序邏輯地址與物理地址的轉(zhuǎn)換。

4、操作系統(tǒng)需要提供內(nèi)存保護(hù)的功能。保證各個(gè)進(jìn)程在各自存儲(chǔ)空間內(nèi)運(yùn)行,互不干擾。

界地址寄存器:存放進(jìn)程的最大邏輯地址。

重定位寄存器(基地址寄存器)

界地址寄存器(限長寄存器)

總結(jié):


P45連續(xù)分配管理方式

(分配:具體見下一節(jié))

內(nèi)存的回收:

相鄰合并

P46動(dòng)態(tài)分區(qū)分配算法

P47 分頁存儲(chǔ)管理

頁框/頁幀/內(nèi)存塊/物理塊:內(nèi)存空間被分成的一個(gè)個(gè)大小相等的分區(qū)

頁/頁面:將進(jìn)程的邏輯地址分為與頁框大小相等的一個(gè)個(gè)部分

進(jìn)程的頁面與內(nèi)存的頁框有一一對(duì)應(yīng)關(guān)系

那OS是怎么記錄這種一一對(duì)應(yīng)關(guān)系的呢?


王道計(jì)算機(jī)考研 操作系統(tǒng)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
西和县| 苗栗县| 威远县| 大足县| 平定县| 孝感市| 哈密市| 涞源县| 砀山县| 博爱县| 白水县| 达尔| 衡东县| 蓬安县| 汉阴县| 延安市| 沙雅县| 新乐市| 东乌| 奇台县| 阿图什市| 游戏| 安西县| 青海省| 绥江县| 普格县| 米易县| 临朐县| 闸北区| 沧州市| 夏河县| 志丹县| 合山市| 绍兴县| 麻阳| 定结县| 星子县| 宁蒗| 茶陵县| 桦南县| 湄潭县|