南京工程学院 嵌入式linux 复习
1,Linux系統(tǒng)的常用命令(包括參數(shù))
{1}用戶切換(su)
(1)作用
變更為其它使用者的身份,主要用于將普通用戶身份轉(zhuǎn)變?yōu)槌売脩?#xff0c;而且需輸入相應(yīng)用戶密碼。
(2)格式
su [選項(xiàng)] [使用者]
其中的使用者為要變更的對應(yīng)使用者。
(3)常見參數(shù)
-,-l,--login:為該使用者重新登錄,大部分環(huán)境變量(如HOME、SHELL和USER等)和工作目錄都是以該使用者(USER)為主。若沒有指定USER,缺省情況是root
-m,-p:執(zhí)行su時不改變環(huán)境變量
-c,--command:變更賬號為USER的使用者,并執(zhí)行指令(command)后再變回原來使用者
{2}用戶管理命令
useradd:添加用戶賬號
useradd [選項(xiàng)] 用戶名
usermod:設(shè)置用戶賬號屬性
usermod [選項(xiàng)] 屬性值
userdel:刪除對應(yīng)用戶賬號
userdel [選項(xiàng)] 用戶名
groupadd:添加組賬號
groupadd [選項(xiàng)] 組賬號
groupmod:設(shè)置組賬號屬性
groupmod [選項(xiàng)] 屬性值
groupdel:刪除對應(yīng)組賬號
groupdel [選項(xiàng)] 組賬號
passwd:設(shè)置賬號密碼
passwd [對應(yīng)賬號]
id:顯示用戶ID、組ID和用戶所屬的組列表
id [用戶名]
groups:顯示用戶所屬的組
groups [組賬號]
who:顯示登錄到系統(tǒng)的所有用戶
who
{3}系統(tǒng)管理命令
ps:顯示當(dāng)前系統(tǒng)中由該用戶運(yùn)行的進(jìn)程列表
ps [選項(xiàng)]
top:動態(tài)顯示系統(tǒng)中運(yùn)行的程序(一般為每隔5s) top
kill:輸出特定的信號給指定PID(進(jìn)程號)的進(jìn)程
kill [選項(xiàng)] 進(jìn)程號(PID)
uname顯示系統(tǒng)的信息(可加選項(xiàng)-a)
uname [選項(xiàng)]
setup:系統(tǒng)圖形化界面配置
setup
crontab:循環(huán)執(zhí)行例行性命令
crontab [選項(xiàng)]
shutdown:關(guān)閉或重啟Linux系統(tǒng)
shutdown [選項(xiàng)] [時間]
uptime:顯示系統(tǒng)已經(jīng)運(yùn)行了多長時間
uptime
clear:清除屏幕上的信息
clear
{4}磁盤相關(guān)命令
free:查看當(dāng)前系統(tǒng)內(nèi)存的使用情況
free [選項(xiàng)]
df :查看文件系統(tǒng)的磁盤空間占用情況
df [選項(xiàng)]
du :統(tǒng)計(jì)目錄(或文件)所占磁盤空間的大小
du [選項(xiàng)]
fdisk :查看硬盤分區(qū)情況及對硬盤進(jìn)行分區(qū)管理
fdisk [-l]
{5}文件系統(tǒng)掛載命令(mount)
(1)作用
掛載文件系統(tǒng),它的使用權(quán)限是超級用戶或/etc/fstab中允許的使用者。掛載是指把分區(qū)和目錄對應(yīng)的過程,而掛載點(diǎn)是指掛載在文件樹中的位置。mount命令就可以把文件系統(tǒng)掛載到相應(yīng)的目錄下,并且由于Linux中把設(shè)備都當(dāng)作文件一樣使用,因此,mount命令也可以掛載不同的設(shè)備。通常,在Linux下“/mnt”目錄是專門用于掛載不同的文件系統(tǒng)的,它可以在該目錄下新建不同的子目錄來掛載不同的設(shè)備文件系統(tǒng)。
(2)格式
mount [選項(xiàng)] [類型] 設(shè)備文件名 掛載點(diǎn)目錄
其中的類型是指設(shè)備文件的類型。
(3)常見參數(shù)
-a:依照/etc/fstab的內(nèi)容裝載所有相關(guān)的硬盤
-l:列出當(dāng)前已掛載的設(shè)備、文件系統(tǒng)名稱和掛載點(diǎn)
-t: 類型將后面的設(shè)備以指定類型的文件格式裝載到掛載點(diǎn)上。常見的類型有前面介紹過的幾種:vfat、ext3、ext2、iso9660、nfs等
-f:通常用于除錯。它會使mount不執(zhí)行實(shí)際掛上的動作,而是模擬整個掛上的過程,通常會和-v一起使用
{6}文件相關(guān)命令
cd:改變當(dāng)前工作目錄
cd [路徑]
ls:列出目錄和文件的信息
ls [選項(xiàng)] [文件]
mkdir :創(chuàng)建一個目錄
mkdir [選項(xiàng)] 路徑
grep :在指定文件中搜索特定的內(nèi)容,并將含有這些內(nèi)容的行標(biāo)準(zhǔn)輸出
grep [選項(xiàng)] 格式 [文件及路徑]
{8}文件比較合并相關(guān)命令
diff:比較兩個不同的文件或不同目錄下的兩個同名文件功能,并生成補(bǔ)丁文件。
diff[選項(xiàng)] 文件1 文件2
diff比較文件1和文件2的不同之處,并按照選項(xiàng)所指定的格式加以輸出。diff的格式分為命令格式和上下文格式,其中上下文格式又包括了舊版上下文格式和新版上下文格式,命令格式分為標(biāo)準(zhǔn)命令格式、簡單命令格式及混合命令格式,它們之間的區(qū)別會在使用實(shí)例中進(jìn)行詳細(xì)地講解。當(dāng)選項(xiàng)缺省時,diff默認(rèn)使用混合命令格式。
patch:命令跟diff配合使用,把生成的補(bǔ)丁文件應(yīng)用到現(xiàn)有代碼上。
patch [選項(xiàng)] [待patch的文件[patch文件]]。
常用的格式為:patch -pnum [patch文件],其中的-pnum是選項(xiàng)參數(shù)。
{9}網(wǎng)絡(luò)相關(guān)命令
netstat:顯示網(wǎng)絡(luò)連接、路由表和網(wǎng)絡(luò)接口信息
netstat [-an]
nslookup查詢一臺機(jī)器的IP地址和其對應(yīng)的域名
nslookup [IP地址/域名]
finger:查詢用戶的信息
finger [選項(xiàng)] [使用者] [用戶@主機(jī)]
ping:用于查看網(wǎng)絡(luò)上的主機(jī)是否在工作
ping [選項(xiàng)] 主機(jī)名/IP地址
ifconfig:查看和配置網(wǎng)絡(luò)接口的參數(shù)
ifconfig [選項(xiàng)] [網(wǎng)絡(luò)接口]
ftp:利用ftp協(xié)議上傳和下載文件
telnet:利用telnet協(xié)議瀏覽信息
telent [選項(xiàng)] [IP地址/域名]
ssh:利用ssh登錄對方主機(jī)
ssh [選項(xiàng)] [IP地址]
?
2,Vi的常用命令
插 入 (insert)
-- i 從 光 標(biāo) 所 在 位 置 前 面 開 始 插 入 資 料, 光 標(biāo) 後 的 資 料 隨 新 增 資 料 向 後 移 動。
-- I 從 光 標(biāo)列 的 第 一 個 非 空 白 字 符 前 面 開 始 插 入 資 料。
vi用法 --- 修改和刪除
x 刪除光標(biāo)所在字符。
dd 刪除光標(biāo)所在的列。
r 修改光標(biāo)所在字符,r後接著要修正的字符
R進(jìn)入取代狀態(tài),新增資料會覆改原先資料, 直到按[ESC]回到指令模式下為止。
s 刪除光標(biāo)所在字符,并進(jìn)入輸入模式。
S 刪除光標(biāo)所在的列,并進(jìn)入輸入模式。
vi用法 --- 退出
<:q>不保存退出
<:q!>不保存強(qiáng)制性退出
<:w>保存編輯
<:w filename>存入文件filename 中
<:w! filename>強(qiáng)制性存入文件filename 中
<:wq>(<:x>)保存并退出(shift+zz)
vi用法 --- 光標(biāo)移動
<b>移動到當(dāng)前單詞的開始
<e>移動到當(dāng)前單詞的結(jié)尾
<w>向前移動一個單詞
<h>向前移動一個字符
<j>向上移動一行
<k>向下移動一行
<l>向后移動一個字符
vi用法 --- 替換操作
<r>替換光標(biāo)所在的字符
<R>替換字符序列
<cw>替換一個單詞
<ce>同<cw>
<cb>替換光標(biāo)所在的前一字符
<c$>替換自光標(biāo)位置至行尾的所有字符
<C>同<c$>
<cc>替換當(dāng)前行
vi用法 --- 復(fù)制與粘貼
</yw>將光標(biāo)所在單詞拷入剪貼板
<y$>將光標(biāo)至行尾的字符拷入剪貼板
<Y>同<y$>
<yy>將當(dāng)前行拷入剪貼板
<p>將剪貼板中的內(nèi)容粘貼在光標(biāo)后
<P>將剪貼板中的內(nèi)容粘貼在光標(biāo)前
?
3,Gcc的使用(掌握常用參數(shù))
gcc --- 常用選項(xiàng)
?
gcc ---庫選項(xiàng)
?
函數(shù)庫分為靜態(tài)庫和動態(tài)庫兩種,靜態(tài)庫是一系列的目標(biāo)文件(.o文件)的歸檔文件(文件名格式為libname.a),如果在編譯某個程序時鏈接靜態(tài)庫,則鏈接器將會搜索靜態(tài)庫,從中提取出它所需要的目標(biāo)文件并直接拷貝到該程序的可執(zhí)行二進(jìn)制文件(ELF格式文件)之中;動態(tài)庫(文件名格式為libname.so[.主版本號.次版本號.發(fā)行號])在程序編譯時并不會被鏈接到目標(biāo)代碼中,而是在程序運(yùn)行時才被載入。
gcc --- 警告選項(xiàng)
?
gcc --- 優(yōu)化選項(xiàng)
gcc可以對代碼進(jìn)行優(yōu)化,它通過編譯選項(xiàng)“-On”來控制優(yōu)化代碼的生成,其中n是一個代表優(yōu)化級別的整數(shù)。
不同的優(yōu)化級別對應(yīng)不同的優(yōu)化處理工作。如使用優(yōu)化選項(xiàng)“-O”主要進(jìn)行線程跳轉(zhuǎn)(Thread Jump)和延遲退棧(Deferred Stack Pops)兩種優(yōu)化。使用優(yōu)化選項(xiàng)“-O2”除了完成所有“-O1”級別的優(yōu)化之外,同時還要進(jìn)行一些額外的調(diào)整工作,如處理器指令調(diào)度等。選項(xiàng)“-O3”則還包括循環(huán)展開和其他一些與處理器特性相關(guān)的優(yōu)化工作。
可能適合使用優(yōu)化選項(xiàng)的場合:程序發(fā)行
不太適合使用優(yōu)化選項(xiàng)的場合:程序開發(fā)
gcc --- 體系結(jié)構(gòu)相關(guān)選項(xiàng)
?
4,Gdb的常用命令
gdb工作環(huán)境相關(guān)命令
?
gdb設(shè)置斷點(diǎn)與恢復(fù)命令
?
gdb中源碼查看相關(guān)相關(guān)命令
?
gdb中查看運(yùn)行數(shù)據(jù)的相關(guān)命令
?
?
5,簡單makefile的編寫(具體自己找程序看)
makefile是make讀入的惟一配置文件,因此本節(jié)的內(nèi)容實(shí)際就是講述makefile的編寫規(guī)則。在一個makefile中通常包含如下內(nèi)容:
· ?需要由make工具創(chuàng)建的目標(biāo)體(target),通常是目標(biāo)文件或可執(zhí)行文件;
· ?要創(chuàng)建的目標(biāo)體所依賴的文件(dependency_file);
創(chuàng)建每個目標(biāo)體時需要運(yùn)行的命令(command),這一行必須以制表符(tab鍵)開頭。
?
6,嵌入式操作系統(tǒng)的分類(軟件架構(gòu)角度)
答:軟件架構(gòu)角度:單體結(jié)構(gòu),分層結(jié)構(gòu),微內(nèi)核結(jié)構(gòu);
單體結(jié)構(gòu)優(yōu)點(diǎn):性能好,通信開銷小;缺點(diǎn):體積龐大、高度集成、相互關(guān)聯(lián)
分層結(jié)構(gòu):這種結(jié)構(gòu)要求在每個層次上都要提供一組API接口函數(shù),這就會帶來額外的開銷
微內(nèi)核結(jié)構(gòu):易于擴(kuò)展、調(diào)試方便、易于移植,但是速度可能會慢
7,嵌入式中間件的概念、思路、特點(diǎn)
中間件(Middleware):在OS內(nèi)核、設(shè)備驅(qū)動程序和應(yīng)用軟件之外的所有系統(tǒng)軟件;
中間件的基本思路:把原本屬于應(yīng)用軟件層的一些通用的功能模塊抽取出來,形成獨(dú)立的一層軟件,從而為運(yùn)行在其上的各個應(yīng)用軟件提供一個靈活、安全、移植性好、相互通信、協(xié)同工作的平臺;
優(yōu)點(diǎn):實(shí)現(xiàn)軟件的可重用,降低應(yīng)用軟件的復(fù)雜性,降低開發(fā)成本。
?
8,Ifconfig命令配置IP地址、子網(wǎng)掩碼
Ifconfig ?eth0 ?210.25.132.142 ?netmask ?255.255.255.0
?
9,Linux的文件類型及其字母表示
d 目錄文件;l 符號鏈接;s 套接字文件;b 塊設(shè)備文件/二進(jìn)制文件;c 字符設(shè)備文件;p 命名管道文件;-普通文件
?
10,系統(tǒng)調(diào)用,編程接口
系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統(tǒng)內(nèi)核提供的服務(wù)。例如用戶可以通過進(jìn)程控制相關(guān)的系統(tǒng)調(diào)用來創(chuàng)建進(jìn)程、實(shí)現(xiàn)進(jìn)程調(diào)度、進(jìn)程管理等。
在實(shí)際使用中程序員調(diào)用的通常是用戶編程接口——API
?
11,進(jìn)程間通信的方式及其特點(diǎn)
(1)管道(Pipe)及有名管道(named pipe)
(2)信號(Signal):直接進(jìn)行用戶空間進(jìn)程和內(nèi)核進(jìn)程之間的交互,
(3)消息隊(duì)列(Messge Queue):可以實(shí)現(xiàn)消息的隨機(jī)查詢,比FIFO具有更大的優(yōu)勢,消息又是存在于內(nèi)核中的,由“隊(duì)列ID”來標(biāo)識。
(4)共享內(nèi)存(Shared memory):直接讀寫內(nèi)存,不需要任何數(shù)據(jù)的拷貝
(5)信號量(Semaphore):用來解決進(jìn)程之間的同步與互斥問題的一種進(jìn)程之間通信機(jī)制
(6)套接字(Socket):
12,查看文件信息,查詢進(jìn)程信息
cat :連接并顯示指定的一個和多個文件的有關(guān)信息。
cat[選項(xiàng)]文件1文件2…
其中的文件1、文件2為要顯示的多個文件
13,修改文件主,文件組,文件操作權(quán)限
chmod :改變文件的訪問權(quán)限。具體看書
14,文件的復(fù)制、刪除、移動、改名
cp:將給出的文件或目錄復(fù)制到另一文件或目錄中。
cp:cp [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄
mv:為文件或目錄改名或?qū)⑽募梢粋€目錄移入另一個目錄中。
mv [選項(xiàng)] 源文件或目錄 目標(biāo)文件或目錄 ?
rm:刪除一個目錄中的一個或多個文件或目錄。
rm [選項(xiàng)] 文件或目錄
chown:修改文件所有者和組別。
chown [選項(xiàng)]...文件所有者[所有者組名] 文件
其中的文件所有者為修改后的文件所有者。
chgrp:改變文件的組所有權(quán)。
chgrp:chgrp [選項(xiàng)]... 文件所有組 文件
其中的文件所有組為改變后的文件組擁有者。
chmod :改變文件的訪問權(quán)限。
chmod [選項(xiàng)]…符號權(quán)限[符號權(quán)限]…文件
chmod [選項(xiàng)] …八進(jìn)制權(quán)限 文件…
?
15,打包命令,壓縮命令
壓縮打包相關(guān)命令
bzip2:.bz2文件的壓縮(或解壓)程序
bzip2[選項(xiàng)] 壓縮(解壓縮)的文件名
bunzip2:.bz2文件的解壓縮程序
bunzip2[選項(xiàng)] .bz2壓縮文件
bzip2recover:用來修復(fù)損壞的.bz2文件
bzip2recover .bz2壓縮文件
gzip:.gz文件的壓縮程序
gzip [選項(xiàng)] 壓縮(解壓縮)的文件名
gunzip:解壓被gzip壓縮過的文件
gunzip [選項(xiàng)] .gz文件名
unzip:解壓winzip壓縮的.zip文件
unzip [選項(xiàng)] .zip壓縮文件
compress:早期的壓縮或解壓程序(壓縮后文件名為.Z)
compress [選項(xiàng)] 文件
tar:對文件目錄進(jìn)行打包或解包
tar [選項(xiàng)] [打包后文件名]文件目錄列表
?
16,文件鎖及其編程操作
文件鎖包括建議性鎖和強(qiáng)制性鎖。建議性鎖要求每個上鎖文件的進(jìn)程都要檢查是否有鎖存在,并且尊重已有的鎖。在一般情況下,內(nèi)核和系統(tǒng)都不使用建議性鎖。強(qiáng)制性鎖是由內(nèi)核執(zhí)行的鎖,當(dāng)一個文件被上鎖進(jìn)行寫入操作的時候,內(nèi)核將阻止其他任何文件對其進(jìn)行讀寫操作。采用強(qiáng)制性鎖對性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。
?
17,I/O處理的模型
阻塞I/O模型:在這種模型下,若所調(diào)用的I/O函數(shù)沒有完成相關(guān)的功能,則會使進(jìn)程掛起,直到相關(guān)數(shù)據(jù)到達(dá)才會返回。如常見對管道設(shè)備、終端設(shè)備和網(wǎng)絡(luò)設(shè)備進(jìn)行讀寫時經(jīng)常會出現(xiàn)這種情況。
· ?非阻塞模型:在這種模型下,當(dāng)請求的I/O操作不能完成時,則不讓進(jìn)程睡眠,而且立即返回。非阻塞I/O使用戶可以調(diào)用不會阻塞的I/O操作,如open()、write()和read()。如果該操作不能完成,則會立即返回出錯(例如:打不開文件)或者返回0(例如:在緩沖區(qū)中沒有數(shù)據(jù)可以讀取或者沒空間可以寫入數(shù)據(jù))。
· ?I/O多路轉(zhuǎn)接模型:在這種模型下,如果請求的I/O操作阻塞,且它不是真正阻塞I/O,而是讓其中的一個函數(shù)等待,在這期間,I/O還能進(jìn)行其他操作。如本節(jié)要介紹的select()和poll函數(shù)(),就是屬于這種模型。
· ?信號驅(qū)動I/O模型:在這種模型下,通過安裝一個信號處理程序,系統(tǒng)可以自動捕獲特定信號的到來,從而啟動I/O。這是由內(nèi)核通知用戶何時可以啟動一個I/O操作決定的。
· ?異步I/O模型:在這種模型下,當(dāng)一個描述符已準(zhǔn)備好,可以啟動I/O時,進(jìn)程會通知內(nèi)核。現(xiàn)在,并不是所有的系統(tǒng)都支持這種模型。
?
18,串口的三種模式
規(guī)范模式,非規(guī)范模式,原始模式
19,串口配置的流程
1.保存原先串口配置2.激活選項(xiàng)3.設(shè)置波特率4.設(shè)置字符大小5.設(shè)置奇偶校驗(yàn)位6.設(shè)置停止位7.設(shè)置最少字符和等待時間8.清除串口緩沖9.激活配置
20,進(jìn)程的概念、狀態(tài)、分段
進(jìn)程是一個程序的一次執(zhí)行的過程,同時也是資源分配的最小單元。
一個進(jìn)程應(yīng)該包括:
??程序的代碼;
??程序的數(shù)據(jù);
??PC中的值,用來指示下一條將運(yùn)行的指令;
??一組通用的寄存器的當(dāng)前值,堆、棧;
??一組系統(tǒng)資源(如打開的文件)
總之,進(jìn)程包含了正在運(yùn)行的一個程序的所有狀態(tài)信息。
執(zhí)行態(tài):該進(jìn)程正在運(yùn)行,即進(jìn)程正在占用CPU。
就緒態(tài):進(jìn)程已經(jīng)具備執(zhí)行的一切條件,正在等待分配CPU的處理時間片。
等待態(tài):進(jìn)程不能使用CPU,若等待事件發(fā)生(等待的資源分配到)則可將其喚醒。
Linux中的進(jìn)程包含3個段,分別為“數(shù)據(jù)段”、“代碼段”和“堆棧段”。
?
21,exit()和_exit()的聯(lián)系和區(qū)別
exit()和_exit()函數(shù)都是用來終止進(jìn)程的。
_exit()函數(shù)的作用是:直接使進(jìn)程停止運(yùn)行,清除其使用的內(nèi)存空間,并清除其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit()函數(shù)則在這些基礎(chǔ)上做了一些包裝,在執(zhí)行退出之前加了若干道工序。exit()函數(shù)與_exit()函數(shù)最大的區(qū)別就在于exit()函數(shù)在調(diào)用exit系統(tǒng)之前要檢查文件的打開情況,把文件緩沖區(qū)中的內(nèi)容寫回文件,就是圖中的“清理I/O緩沖”一項(xiàng)。
由于在Linux的標(biāo)準(zhǔn)函數(shù)庫中,有一種被稱作“緩沖I/O(buffered I/O)”操作,其特征就是對應(yīng)每一個打開的文件,在內(nèi)存中都有一片緩沖區(qū)。每次讀文件時,會連續(xù)讀出若干條記錄,這樣在下次讀文件時就可以直接從內(nèi)存的緩沖區(qū)中讀取;同樣,每次寫文件的時候,也僅僅是寫入內(nèi)存中的緩沖區(qū),等滿足了一定的條件(如達(dá)到一定數(shù)量或遇到特定字符等),再將緩沖區(qū)中的內(nèi)容一次性寫入文件。若想保證數(shù)據(jù)的完整性,就一定要使用exit()函數(shù)
?
22,守護(hù)進(jìn)程的編寫步驟
23,守護(hù)進(jìn)程的出錯處理
一種通用的辦法是使用syslog服務(wù),將程序中的出錯信息輸入到系統(tǒng)日志文件中,從而可以直觀地看到程序的問題所在。
?
24,管道的概念和特點(diǎn)
所謂管道即連接兩個任務(wù)之間的一個打開的共享文件,專用于任務(wù)之間的數(shù)據(jù)通信;
管道是基于文件描述符的通信方式,當(dāng)一個管道建立時,它會創(chuàng)建兩個文件描述符fds[0]和fds[1],其中fds[0]固定用于讀管道,而fd[1]固定用于寫管道,這樣就構(gòu)成了一個半雙工的通道。
?
25,信號的生命期
一個完整的信號生命周期可以分為3個重要階段,這3個階段由4個重要事件來刻畫的:信號產(chǎn)生、信號在進(jìn)程中注冊、信號在進(jìn)程中注銷、執(zhí)行信號處理函數(shù)
26,用戶進(jìn)程對信號的處理方式
信號處理的主要方法有兩種,一種是使用簡單的signal()函數(shù),另一種是使用信號集函數(shù)組。
27,信號的編程、
249-250頁
28,信號量的概念和使用步驟
信號量是用來解決進(jìn)程之間的同步與互斥問題的一種進(jìn)程之間通信機(jī)制,包括一個稱為信號量的變量和在該信號量下等待資源的進(jìn)程等待隊(duì)列,以及對信號量進(jìn)行的兩個原子操作(PV操作)。
信號量的使用:
?
第一步:創(chuàng)建信號量或獲得在系統(tǒng)已存在的信號量,此時需要調(diào)用semget()函數(shù)。不同進(jìn)程通過使用同一個信號量鍵值來獲得同一個信號量。
?
第二步:初始化信號量,此時使用semctl()函數(shù)的SETVAL操作。當(dāng)使用二維信號量時,通常將信號量初始化為1。
?
第三步:進(jìn)行信號量的PV操作,此時調(diào)用semop()函數(shù)。這一步是實(shí)現(xiàn)進(jìn)程之間的同步和互斥的核心工作部分。
?
第四步:如果不需要信號量,則從系統(tǒng)中刪除它,此時使用semclt()函數(shù)的IPC_RMID操作。此時需要注意,在程序中不應(yīng)該出現(xiàn)對已經(jīng)被刪除的信號量的操作。
?
29,共享內(nèi)存的概念和使用步驟
共享內(nèi)存是一種最為高效的進(jìn)程間通信方式。因?yàn)檫M(jìn)程可以直接讀寫內(nèi)存,不需要任何數(shù)據(jù)的拷貝。為了在多個進(jìn)程間交換信息,內(nèi)核專門留出了一塊內(nèi)存區(qū)。這段內(nèi)存區(qū)可以由需要訪問的進(jìn)程將其映射到自己的私有地址空間。因此,進(jìn)程就可以直接讀寫這一內(nèi)存區(qū)而不需要進(jìn)行數(shù)據(jù)的拷貝,從而大大提高了效率。
共享內(nèi)存的實(shí)現(xiàn)分為兩個步驟,
?
第一步是創(chuàng)建共享內(nèi)存,這里用到的函數(shù)是shmget(),也就是從內(nèi)存中獲得一段共享內(nèi)存區(qū)域。
?
第二步映射共享內(nèi)存,也就是把這段創(chuàng)建的共享內(nèi)存映射到具體的進(jìn)程空間中,這里使用的函數(shù)是shmat()。
?
30,消息隊(duì)列的概念和使用步驟
消息隊(duì)列就是一些消息的列表。用戶可以從消息隊(duì)列中添加消息和讀取消息等,可以實(shí)現(xiàn)消息的隨機(jī)查詢,消息又是存在于內(nèi)核中的,由“隊(duì)列ID”來標(biāo)識。
消息隊(duì)列的實(shí)現(xiàn)包括
?
創(chuàng)建或打開消息隊(duì)列、
添加消息、
讀取消息
控制消息隊(duì)列
?
這四種操作。
?
31,消息隊(duì)列的編程
268頁
32,C語言的位操作
33,寫出Linux系統(tǒng)的信號處理函數(shù)singal的原型,并對該函數(shù)進(jìn)行解釋
該函數(shù)原型整體指向了一個無返回值并且?guī)б粋€整型參數(shù)的函數(shù)指針
34,什么是交叉編譯?什么是交叉調(diào)試?
所謂交叉編譯就是在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼。嵌入式的交叉編譯也包括交叉編譯、交叉鏈接等過程
交叉調(diào)試是宿主機(jī)和目標(biāo)機(jī)之間進(jìn)行的交叉調(diào)試,調(diào)試器依然運(yùn)行在宿主機(jī)的通用操作系統(tǒng)上,但被調(diào)試的進(jìn)程運(yùn)行在特定的硬件平臺的嵌入式中,調(diào)試器和被調(diào)試進(jìn)程通過串口或者網(wǎng)絡(luò)進(jìn)行通信。
?
35,什么是優(yōu)先級反轉(zhuǎn)?如何應(yīng)對優(yōu)先級反轉(zhuǎn)?
優(yōu)先級翻轉(zhuǎn)是當(dāng)一個高優(yōu)先級任務(wù)通過信號量機(jī)制訪問共享資源時,該信號量已被一低優(yōu)先級任務(wù)占有,因此造成高優(yōu)先級任務(wù)被許多具有較低優(yōu)先級任務(wù)阻塞,實(shí)時性難以得到保證。
解決優(yōu)先級翻轉(zhuǎn)問題有優(yōu)先級天花板(priority?ceiling)和優(yōu)先級繼承(priority?inheritance)兩種辦法。(來自百度)
1)單調(diào)速率調(diào)度(Rate Monotonic Scheduling,RMS) 算法;RMS是一種靜態(tài)優(yōu)先級調(diào)度算法,也是最常用的一種確定任務(wù)優(yōu)先級的算法;
思路:單位時間內(nèi)任務(wù)被執(zhí)行的次數(shù)越多,優(yōu)先級越高。即任務(wù)的周期越短,優(yōu)先級越高。
2)最早期限優(yōu)先(Earliest Deadline First, EDF) 調(diào)度算法:EDF是一種動態(tài)優(yōu)先級調(diào)度算法,也是性能最好的一種調(diào)度算法;
基本思路:對時間期限最近的任務(wù),分配最高的優(yōu)先級。
?
總結(jié)
以上是生活随笔為你收集整理的南京工程学院 嵌入式linux 复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京工程学院 Dsp复习
- 下一篇: 南京工程学院 数据库复习(数据库系统概论