目錄
3、任務(wù)管理
(1)嵌入式操作系統(tǒng)的任務(wù)管理可以分為
(2)進(jìn)程
(3)線程
(4)任務(wù)
(5)任務(wù)的創(chuàng)建與中止
(6)任務(wù)的狀態(tài)任務(wù)有三中基本狀態(tài):
(7)任務(wù)控制塊 TCB
(8)任務(wù)的切換
(9)任務(wù)的調(diào)度
(10)實(shí)時(shí)系統(tǒng)調(diào)度
(11)任務(wù)互斥
(12)信號(hào)量
(13)任務(wù)同步
(14)死鎖
(15)信號(hào)
(16)任務(wù)間通信
嵌入式系統(tǒng)設(shè)計(jì)師考試筆記之操作系統(tǒng)基礎(chǔ)復(fù)習(xí)筆記一:
嵌入式系統(tǒng)設(shè)計(jì)師考試筆記之操作系統(tǒng)基礎(chǔ)復(fù)習(xí)筆記一-CSDN博客
3、任務(wù)管理
(1)嵌入式操作系統(tǒng)的任務(wù)管理可以分為
A、單道程序技術(shù):操作系統(tǒng)中,任何時(shí)候只能有一個(gè)程序在運(yùn)行。
B、多道程序技術(shù):操作系統(tǒng)中,允許多個(gè)程序同時(shí)存在并運(yùn)行。
(2)進(jìn)程
進(jìn)程,簡單的說,是一個(gè)正在運(yùn)行的程序。
進(jìn)程與程序既有聯(lián)系又有區(qū)別,主要表現(xiàn)為下面結(jié)構(gòu)方面:
A、程序由數(shù)據(jù)和代碼兩部分內(nèi)容組成,它是一個(gè)靜態(tài)的概念。而進(jìn)程是正在執(zhí)行的程序,它也兩部分組成:程序和該程序的運(yùn)行上下文。它是一個(gè)動(dòng)態(tài)的概念。
B、程序和進(jìn)程之間并不是一一對(duì)應(yīng)的。一個(gè)進(jìn)程在運(yùn)行的時(shí)候可以啟動(dòng)一個(gè)或多個(gè)程序。反之同一個(gè)程序也可能由多進(jìn)程同時(shí)執(zhí)行。
C、程序可以作為一種軟件資源長期保存,以文件的形式存放在光盤或硬盤上,而進(jìn)程則是一次行的過程,它是暫時(shí)的,是動(dòng)態(tài)的產(chǎn)生和終止。
一個(gè)進(jìn)程至少應(yīng)包括三個(gè)方面:相應(yīng)的程序、CPU 上下文、一組系統(tǒng)資源。
進(jìn)程有三個(gè)特性:
A、 動(dòng)態(tài)性:進(jìn)程是正在運(yùn)行的程序,而程序的運(yùn)行狀態(tài)是不斷變化的。
B、 獨(dú)立性:進(jìn)程是系統(tǒng)資源的使用單位,每個(gè)進(jìn)行有自己的運(yùn)行上下文和內(nèi)部狀態(tài)。
C、 并發(fā)性:宏觀來看,系統(tǒng)中同時(shí)有多個(gè)進(jìn)程存在,它們相互獨(dú)立地運(yùn)行。
注:對(duì)于并發(fā)的理解。
????????在單 CPU的情況下,所謂的并發(fā)性指的是宏觀上的并發(fā)運(yùn)行,而微觀上還是順序進(jìn)行,各個(gè)進(jìn)程輪流去使用CPU 資源。在單核CPU中,真正的、物理上的PC寄存器只有一個(gè),進(jìn)程在輪流執(zhí)行的時(shí)候,物理PC的取值也在不斷變化。而邏輯PC其實(shí)就是一個(gè)內(nèi)存變量。每個(gè)進(jìn)程都有一個(gè)邏輯PC,當(dāng)一個(gè)進(jìn)程要運(yùn)行的時(shí)候,就把它的邏輯PC裝載到物理 PC中去;反之,當(dāng)一個(gè)進(jìn)程暫不運(yùn)行的時(shí)候,就把物理PC中的值保存在它的邏輯PC當(dāng)中。
(3)線程
線程就是進(jìn)程當(dāng)中的一條執(zhí)行流程。
進(jìn)程其實(shí)包含兩個(gè)部分:資源平臺(tái)和執(zhí)行流程(線程)。
????????在一個(gè)進(jìn)程當(dāng)中,或者說在一個(gè)資源平臺(tái)上,可以同時(shí)存在多個(gè)線程;可以用線程作為 CPU的基本調(diào)度單位,使得各個(gè)線程之間可以并發(fā)執(zhí)行;對(duì)于同一個(gè)進(jìn)程當(dāng)中的各個(gè)線程來說,他們可以共享該進(jìn)程的大部分資源。每個(gè)線程都有自己獨(dú)立的 CPU 運(yùn)行上下文和棧,這是不能共享的。
(4)任務(wù)
在嵌入式系統(tǒng)中,任務(wù)其實(shí)就是線程,它是能夠獨(dú)立運(yùn)行的一個(gè)實(shí)體。原因有二:
A、 任務(wù)具有獨(dú)立的優(yōu)先級(jí)和??臻g,CPU上下文一般存放在??臻g中。
B、 任務(wù)之間可以很方便地、直接地使用共享的內(nèi)存單元,而不需要經(jīng)過系統(tǒng)內(nèi)核。
在多道程序的嵌入式系統(tǒng)中,同時(shí)存在著多個(gè)任務(wù),這些任務(wù)之間的結(jié)構(gòu)一般為層狀結(jié)構(gòu),存在著父 子關(guān)系。當(dāng)嵌入式內(nèi)核剛剛啟動(dòng)的時(shí)候,只有一個(gè)任務(wù)存在,然后由該任務(wù)派生出所有其他任務(wù)。
(5)任務(wù)的創(chuàng)建與中止
任務(wù)的創(chuàng)建主要發(fā)生在以下三種情形:
A、 系統(tǒng)初始化。
B、 任務(wù)運(yùn)行的過程中。
C、 用戶提出請(qǐng)求。
????????從技術(shù)的角度來說,實(shí)際上新任務(wù)只有一種創(chuàng)建的方法,也就是在一個(gè)已經(jīng)存在的任務(wù)中,通過調(diào)用相應(yīng)的系統(tǒng)函數(shù)來創(chuàng)建一個(gè)新的任務(wù)。
????????任務(wù)的創(chuàng)建只要有兩種可能的實(shí)現(xiàn)模型:fork/exec和 spawn。兩種模型的差別主要在于內(nèi)存的分配方式。
A、fork/exec模型下,首先調(diào)用fork函數(shù)為新任務(wù)創(chuàng)建一份與父任務(wù)完全相同的內(nèi)存空間,然后再調(diào)用exec函數(shù)裝入新任務(wù)的代碼,并用它來覆蓋原有的屬于父任務(wù)的內(nèi)容。嵌入式Linux操作系統(tǒng)是基于fork/exec模型的。
B、spawn模式下,在創(chuàng)建新任務(wù)的時(shí)候,直接為它分配一個(gè)全新的地址空間,然后將新任務(wù)的代碼裝入并運(yùn)行。uCOS操作系統(tǒng)是基于 spawn模型的。
任務(wù)的中止可能有多種原因,主要有下面三種情況:
A、 正常退出。
B、 錯(cuò)誤推出。
C、 被其他任務(wù)踢出。
????????在有些嵌入式系統(tǒng)中,尤其是一些控制系統(tǒng)中,它的某些任務(wù)被設(shè)計(jì)為“死循環(huán)”的模式,一直循環(huán)下去,不會(huì)中止。
(6)任務(wù)的狀態(tài)任務(wù)有三中基本狀態(tài):
A、 運(yùn)行狀態(tài):任務(wù)占有 CPU,并在CPU上運(yùn)行。
B、 就緒狀態(tài):任務(wù)已經(jīng)具備運(yùn)行的條件,在等待 CPU空閑。
C、 阻塞狀態(tài):任務(wù)因?yàn)檎诘却撤N事件的發(fā)生而暫時(shí)不能運(yùn)行。
????????對(duì)于就緒狀態(tài)和阻塞狀態(tài),它們的相同之處在于,任務(wù)都是處于暫停狀態(tài),沒有運(yùn)行。不同之處在于,暫停的原因是不一樣的,導(dǎo)致就緒狀態(tài)的原因是外因,是操作系統(tǒng)的CPU正忙,而導(dǎo)致阻塞狀態(tài)的原因是內(nèi)因,是任務(wù)自身的問題。
任務(wù)狀態(tài)的四種轉(zhuǎn)換關(guān)系:
A、 運(yùn)行à阻塞:任務(wù)由于等待某個(gè)時(shí)間被阻塞起來。
B、 運(yùn)行à就緒:調(diào)度器由于某種原因(例如優(yōu)先級(jí))選擇了另一個(gè)任務(wù)去運(yùn)行。
C、 就緒à運(yùn)行:CPU空閑了,處于就緒狀態(tài)的任務(wù)被調(diào)度器選中去運(yùn)行。
D、阻塞à就緒:任務(wù)的等待事件完成,具備了繼續(xù)運(yùn)行的條件。
(7)任務(wù)控制塊 TCB
????????任務(wù)控制塊 TCB,就是在操作系統(tǒng)中,用來描述和管理一個(gè)任務(wù)的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)為每一個(gè)任務(wù)都維護(hù)了一個(gè)相應(yīng)的TCB,用來保存該任務(wù)的各種相關(guān)信息。它的主要內(nèi)容包括下面幾項(xiàng):
A、 任務(wù)的管理信息:任務(wù)的標(biāo)識(shí) ID、狀態(tài)、優(yōu)先級(jí)、調(diào)度信息、各種隊(duì)列指針等。
B、 CPU 上下文信息:CPU各種寄存器當(dāng)前的值以及邏輯寄存器。
C、 資源管理的信息:段表地址、頁表地址、根目錄、文件描述字等。
????????當(dāng)需要?jiǎng)?chuàng)建一個(gè)任務(wù)的時(shí)候,就為它生成一個(gè) TCB,并初始化這個(gè) TCB的內(nèi)容;當(dāng)需要中止一個(gè)任務(wù)的時(shí)候,只要回收它的TCB就可以了。
(8)任務(wù)的切換
基本思想:把當(dāng)前任務(wù)的運(yùn)行上下文保存起來,并恢復(fù)新任務(wù)的上下文。
任務(wù)切換通常有下面的基本步驟:
A、 將處理器的運(yùn)行上下文保存在當(dāng)前任務(wù)的 TCB中。
B、 更新當(dāng)前任務(wù)的狀態(tài),從運(yùn)行狀態(tài)變?yōu)榫途w狀態(tài)或阻塞狀態(tài)。
C、 按照一定的策略,從所有處于就緒狀態(tài)的任務(wù)中選擇一個(gè)去運(yùn)行。
D、修改新任務(wù)的狀態(tài),從就緒狀態(tài)變成運(yùn)行狀態(tài)。
E、 根據(jù)新任務(wù)的 TCB的內(nèi)容,恢復(fù)它的運(yùn)行上下文環(huán)境。
????????在一個(gè)多任務(wù)的操作系統(tǒng)中,采用任務(wù)隊(duì)列的方式來組織它的所有任務(wù)。由操作系統(tǒng)來維護(hù)一組隊(duì)列,用來表示系統(tǒng)當(dāng)中所有任務(wù)的當(dāng)前狀態(tài),不同的狀態(tài)用不同的隊(duì)列來標(biāo)志。
(9)任務(wù)的調(diào)度
調(diào)度器可以看作CPU 的資源管理者。
任務(wù)調(diào)度的首要問題是:何時(shí)進(jìn)行調(diào)度,即調(diào)度發(fā)生的時(shí)機(jī)。一般有下面幾種情形:
A、 一個(gè)新任務(wù)被創(chuàng)建時(shí),需要決定運(yùn)行新任務(wù)還是繼續(xù)執(zhí)行父任務(wù)。
B、 一個(gè)任務(wù)運(yùn)行結(jié)束時(shí),需要從就緒隊(duì)列中選擇某個(gè)任務(wù)去運(yùn)行。
C、 一個(gè)任務(wù)運(yùn)行阻塞時(shí),需要選擇另一個(gè)任務(wù)去運(yùn)行。
D、一個(gè)I/O操作完成,任務(wù)阻塞結(jié)束,立即執(zhí)行新就緒任務(wù)還是繼續(xù)執(zhí)行被中斷任務(wù)。
E、 一個(gè)時(shí)鐘節(jié)拍結(jié)束時(shí),需要對(duì)就緒任務(wù)重新調(diào)度。
任務(wù)調(diào)度的第二個(gè)問題是:如何調(diào)度,即調(diào)度方式。主要有兩種方式:
A、 不可搶占調(diào)度方式:例如時(shí)間片輪轉(zhuǎn)。
B、 可搶占調(diào)度方式:例如優(yōu)先級(jí)調(diào)度。
實(shí)時(shí)操作系統(tǒng)大都采用可搶占調(diào)度方式。
任務(wù)調(diào)度的第三個(gè)問題是:調(diào)度算法。
A、 先來先服務(wù)算法:按照任務(wù)到達(dá)的先后次序進(jìn)行調(diào)度,是不可搶占的調(diào)度方式。
B、 短作業(yè)優(yōu)先算法:各個(gè)任務(wù)開始執(zhí)行之前,事先預(yù)計(jì)好它的執(zhí)行時(shí)間,從中選擇用時(shí)較短的任務(wù)優(yōu)先執(zhí)行。
C、 時(shí)間片輪轉(zhuǎn)算法:所有的就緒任務(wù)按照先來先服務(wù)的原則排成一個(gè)隊(duì)列。在每次調(diào)度的時(shí)候,把處理器分派給隊(duì)列當(dāng)中的第一個(gè)任務(wù),讓它去執(zhí)行一小段時(shí)間。在這個(gè)時(shí)間段里任務(wù)被阻塞或由于其他原因暫停,或者任務(wù)的時(shí)間片用完了,它會(huì)被送到就緒隊(duì)列的末尾,然后調(diào)度器再執(zhí)行當(dāng)前隊(duì)列的第一個(gè)任務(wù)。這種算法的優(yōu)點(diǎn)是各個(gè)就緒任務(wù)都平均地分配使用CPU的時(shí)間,每個(gè)就緒任務(wù)都能一直保持著活動(dòng)性。時(shí)間片輪轉(zhuǎn)法有一個(gè)默認(rèn)前提,即位于就緒隊(duì)列中的各個(gè)任務(wù)是同等重要的。
D、優(yōu)先級(jí)算法:給每個(gè)任務(wù)都設(shè)置一個(gè)優(yōu)先級(jí)。然后在任務(wù)調(diào)度的時(shí)候,在所有處于就緒狀態(tài)的任務(wù)中選擇優(yōu)先級(jí)最高的那個(gè)任務(wù)去運(yùn)行。采用優(yōu)先級(jí)調(diào)度算法的一個(gè)問題是可能會(huì)發(fā)生優(yōu)先 級(jí)反轉(zhuǎn)(教程P285),出現(xiàn)任務(wù)“饑餓”現(xiàn)象。
(10)實(shí)時(shí)系統(tǒng)調(diào)度
對(duì)于RTOS調(diào)度器來說,任務(wù)之間的公平性并不是最重要的,它追求的是實(shí)時(shí)性。
A、單調(diào)速率調(diào)度算法(RMS):任務(wù)的優(yōu)先級(jí)與它的周期表現(xiàn)為單調(diào)函數(shù)的關(guān)系,任務(wù)的周期越短,優(yōu)先級(jí)越高,任務(wù)的周期越長,優(yōu)先級(jí)越低。RMS假定任務(wù)是相同獨(dú)立的、周期性的、任務(wù)在能夠在任何位置被搶占,而實(shí)際中的系統(tǒng),任務(wù)之間需要進(jìn)行通信和同步,這是一種理想的調(diào)度方法,實(shí)際中并不一定存在。
B、最早期限優(yōu)先法(EDF):根據(jù)任務(wù)的截止時(shí)間來確定其優(yōu)先級(jí),對(duì)于時(shí)間限期最近的任務(wù),分配最高的優(yōu)先級(jí)。當(dāng)有一個(gè)新的任務(wù)處于就緒狀態(tài)時(shí),各個(gè)任務(wù)的優(yōu)先級(jí)就有可能要進(jìn)行調(diào)整,選擇截止時(shí)間最近的任務(wù)去運(yùn)行。
(11)任務(wù)互斥
A、任務(wù)之間的關(guān)系:相互獨(dú)立、任務(wù)互斥、任務(wù)同步、任務(wù)通信。
B、任務(wù)間的互斥:當(dāng)前已經(jīng)有一個(gè)任務(wù)正在訪問臨界區(qū)共享數(shù)據(jù),那么其他任務(wù)暫時(shí)不能訪問。
C、提出互斥訪問的四個(gè)條件:
a、在任何時(shí)候最多只能有一個(gè)任務(wù)位于它的臨界區(qū)中。
b、不能事先假定 CPU的個(gè)數(shù)和系統(tǒng)的運(yùn)行速度。
c、沒有任務(wù)位于它的臨界區(qū)中,它不妨礙其他任務(wù)去訪問臨界區(qū)資源。
d、任何一個(gè)任務(wù)進(jìn)入臨界區(qū)的請(qǐng)求必須在有限的時(shí)間內(nèi)得到滿足,不能無限期。
D、任務(wù)互斥的解決方案:
a、關(guān)閉中斷法
b、繁忙等待法
c、信號(hào)量處理
(12)信號(hào)量
信號(hào)量記錄當(dāng)前可用資源的數(shù)量。
信號(hào)量由操作系統(tǒng)維護(hù),任務(wù)不能直接去修改它的值,只能通過初始化和兩個(gè)標(biāo)準(zhǔn)原語(PV原語)來對(duì)它進(jìn)行訪問。
注:關(guān)于原語。
????????原語通常由若干條語句組成,用來實(shí)現(xiàn)某個(gè)特點(diǎn)的操作,并通過一段不可分割或不可中斷的程序來實(shí)現(xiàn)其功能。原語時(shí)操作系統(tǒng)內(nèi)核的一個(gè)組成部分,必須在內(nèi)核態(tài)下執(zhí)行。原語的不可中斷性是通過在其執(zhí)行過程中關(guān)閉中斷來實(shí)現(xiàn)的。關(guān)鍵要理解PV 原語的實(shí)現(xiàn):
P(semaphores S)
{
--S.count; //申請(qǐng)一個(gè)資源
if(S.count < 0) //沒有空閑資源
{
將當(dāng)前任務(wù)阻塞起來,加到阻塞隊(duì)列末尾,調(diào)度新的任務(wù)運(yùn)行。
}
}
V(semaphores S)
{
++S.count; //釋放一個(gè)資源
if(S.count <= 0) //有任務(wù)被阻塞
{
從阻塞隊(duì)列中取出一個(gè)任務(wù),把該任務(wù)改為就緒狀態(tài),插入就緒隊(duì)列。
}
}
利用操作系統(tǒng)提供的信號(hào)量機(jī)制,可以方便、有效地實(shí)現(xiàn)對(duì)臨界資源的互斥訪問,優(yōu)點(diǎn)有兩個(gè):
A、 可以設(shè)置信號(hào)量的計(jì)數(shù)值,從而允許多個(gè)任務(wù)同時(shí)進(jìn)入臨界區(qū)。
B、 當(dāng)一個(gè)任務(wù)暫時(shí)無法進(jìn)入臨界區(qū)時(shí),它會(huì)被阻塞起來,將 CPU讓給其他任務(wù)。
(13)任務(wù)同步
????????任務(wù)之間的同步可以使用信號(hào)量機(jī)制,通過引入PV操作來設(shè)定兩個(gè)任務(wù)在運(yùn)行時(shí)的先后順序。例如,可以把信號(hào)量視為某個(gè)共享資源的當(dāng)前個(gè)數(shù),然后由一個(gè)任務(wù)負(fù)責(zé)生成這種資源,而另一個(gè)任務(wù)則負(fù)責(zé)消費(fèi)這種資源,這樣可以構(gòu)成兩個(gè)任務(wù)之間的先后順序。在具體實(shí)現(xiàn)上,一般把信號(hào)量的初始值設(shè)為 N,N大于或等于0。然后在一個(gè)任務(wù)內(nèi)使用 V原語,把信號(hào)量加 1,而在另外一個(gè)任務(wù)內(nèi)部使用P原語,將信號(hào)量減 1,從而實(shí)現(xiàn)這兩個(gè)任務(wù)之間的同步關(guān)系。
(14)死鎖
????????在一組任務(wù)中,每個(gè)任務(wù)都占用著若干資源,同時(shí)又在等待其他任務(wù)占用的資源,從而造成所有任務(wù)都無法進(jìn)展下去的現(xiàn)象,這稱為死鎖現(xiàn)象。
除了資源的競爭之外,PV 操作使用不當(dāng)也會(huì)引起死鎖。
(15)信號(hào)
所謂信號(hào),是系統(tǒng)給任務(wù)的一個(gè)指示,表明某個(gè)異步事件已經(jīng)發(fā)生了。
該事件可能來自外部,也可能來自內(nèi)部。
信號(hào)機(jī)制也可以稱為軟中斷機(jī)制。
信號(hào)機(jī)制與中斷處理機(jī)制非常相似,相同點(diǎn):
A、 都具有中斷性。
B、 都有相應(yīng)的服務(wù)程序。
C、 都可以屏蔽響應(yīng)。
不同點(diǎn):
A、 中斷由硬件或特定指令產(chǎn)生,而信號(hào)由系統(tǒng)調(diào)用產(chǎn)生。
B、 中斷觸發(fā)后,硬件會(huì)根據(jù)中斷向量找到相應(yīng)的處理程序執(zhí)行;而信號(hào)則通過發(fā)送信號(hào)的系統(tǒng)調(diào)用來觸發(fā),系統(tǒng)不一定馬上對(duì)它進(jìn)行處理。
C、 中斷處理程序在系統(tǒng)內(nèi)核的上下文中運(yùn)行,是全局的;而信號(hào)處理程序在相關(guān)任務(wù)的上下文中運(yùn)行,是任務(wù)的一個(gè)組成部分。
(16)任務(wù)間通信
任務(wù)之間的通信可以分為兩種類型:
A、 低級(jí)通信:只能傳遞狀態(tài)和整數(shù)值等控制信息,例如信號(hào)量機(jī)制。
B、 高級(jí)通信:能夠傳輸任意數(shù)量的數(shù)據(jù),只要有三類:共享內(nèi)存、消息傳遞和管道。
任務(wù)之間的通信方式有兩種:
A、 直接通信:通信雙方必須明確知道與之通信的對(duì)象。例如PV 原語。
B、 間接通信:通信雙方不需指出消息的來源和去向,通過共享郵箱發(fā)送和接收消息。
郵箱只能存放單條消息,它提供一種低開銷的消息傳遞機(jī)制,只有空和滿兩種狀態(tài)。消息隊(duì)列與郵箱類似,但是可以同時(shí)存放若干條消息,提供了一種任務(wù)間緩沖通信的方法。文章來源:http://www.zghlxwxcb.cn/news/detail-719531.html
管道由UNIX首創(chuàng),以文件系統(tǒng)為基礎(chǔ),連接兩個(gè)任務(wù)之間的一個(gè)打開的共享文件,專用于任務(wù)直接的數(shù)據(jù)通信。文章來源地址http://www.zghlxwxcb.cn/news/detail-719531.html
到了這里,關(guān)于嵌入式系統(tǒng)設(shè)計(jì)師考試筆記之操作系統(tǒng)基礎(chǔ)復(fù)習(xí)筆記二的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!