版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
附錄A習(xí)題參考答案
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第1章
1.嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中。簡(jiǎn)單的說就是系統(tǒng)
的應(yīng)用軟件與系統(tǒng)的硬件一體化,類似與BIOS的工作方式。具有軟件代碼小,高度自動(dòng)化,響
應(yīng)速度快等特點(diǎn)。特別適合于要求實(shí)時(shí)的和多任務(wù)的體系。根據(jù)IEEE(國(guó)際電氣和電子」.程
師協(xié)會(huì))的定義:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”(原文為
devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)o
簡(jiǎn)單地講就是嵌入到對(duì)象體中的專用計(jì)算機(jī)系統(tǒng)。
嵌入式系統(tǒng)一般有3個(gè)主要的組成部分:硬件、實(shí)時(shí)操作系統(tǒng)以及應(yīng)用軟件。
?硬件:包括處理器、存儲(chǔ)器(ROM、RAM)、輸入輸出設(shè)備、其他部分輔助系統(tǒng)等。
?實(shí)時(shí)操作系統(tǒng)(Real-TimeOperatingSystem,RTOS):用于管理應(yīng)用軟件,并提供一種機(jī)制,
使得處理器分時(shí)地執(zhí)行各個(gè)任務(wù)并完成一定的時(shí)限要求。
?應(yīng)用軟件:實(shí)現(xiàn)具體業(yè)務(wù)邏輯功能。
2.嵌入式系統(tǒng)的三要素是嵌入、專用、計(jì)算機(jī);其中嵌入性指的是嵌入到對(duì)象體系中,有對(duì)
象環(huán)境要求;專用性是指軟、硬件按對(duì)象要求裁減;計(jì)算機(jī)指實(shí)現(xiàn)對(duì)象的智能化功能。廣義
地說一個(gè)嵌入式系統(tǒng)就是一個(gè)具有特定功能或用途的計(jì)算機(jī)軟硬件集合體,即以應(yīng)用為中心、
以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗
嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
3.嵌入式實(shí)時(shí)操作系統(tǒng)(Real-TimeOperatingSystem,RTOS)是指操作系統(tǒng)本身要能在一
個(gè)固定時(shí)限內(nèi)對(duì)程序調(diào)用(或外部事件)做出正確的反應(yīng),亦即對(duì)時(shí)序與穩(wěn)定性的要求十分嚴(yán)
格。
Fl前國(guó)際較為知名的有:VxWorksNeutrinoRTOS>NucleusPkis^OS/9、VRTX、LynuxOS,
RTLinux、BlueCatRT等。
4.嵌入式系統(tǒng)一般由硬件層、中間層、軟件層和功能層組成。其作用分別如下:
(1)硬件層:由嵌入式微處理器、外圍電路和外設(shè)組成。外圍電路有:電源電路、復(fù)位
電路、調(diào)試接口和存儲(chǔ)器電路,就構(gòu)成一個(gè)嵌入式核心控制模塊。
操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。為方便使用,有的模塊在此基礎(chǔ)
上增加了LCD.鍵盤、USB接口,以及其他一些功能的擴(kuò)展電路。
(2)中間層:硬件層與軟件層之間為中間層,也稱為BSP(BoardSupportPackage,板
級(jí)支持包)。
作用:將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動(dòng)程序與硬件無關(guān):
功能:一般應(yīng)具有相關(guān)硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置等功能。BSP
是主板硬件環(huán)境和操作系統(tǒng)的中間接口,是軟件平臺(tái)中具有硬件依賴性的那一部分,主要目
的是為了支持操作系統(tǒng),使之能夠更好地運(yùn)行于硬件主板上。
(3)軟件層:主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作
系統(tǒng)是一個(gè)標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時(shí)器等資源都封裝起來,以方便用戶使用。
(4)功能層:由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來完成對(duì)被控對(duì)象的控制功能。功
能層是面向被控對(duì)象和用戶的,為了方便用戶操作,往往需要具有友好的人機(jī)界面。
5.非占先式,調(diào)度法也稱作合作型多任務(wù)(cooperativemultitasking),各個(gè)任務(wù)彼此合作共享
一個(gè)CPU。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后
控制權(quán)還是回到原來被中斷了的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)
先級(jí)的任務(wù)才能獲得CPU的使用權(quán)。當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用占先式(preemptive)
內(nèi)核。最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行行的任務(wù)使一個(gè)比
它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了,或者說被掛起了,那
個(gè)高優(yōu)先級(jí)的任務(wù)立刻得到了CPU的控制權(quán)。
6.在實(shí)時(shí)系統(tǒng)中,如果系統(tǒng)在指定的時(shí)間內(nèi)未能實(shí)現(xiàn)某個(gè)確定的任務(wù),會(huì)導(dǎo)致系統(tǒng)的全面失
敗,這樣的系統(tǒng)被稱為強(qiáng)實(shí)時(shí)系統(tǒng)或硬實(shí)時(shí)系統(tǒng)。強(qiáng)實(shí)時(shí)系統(tǒng)響應(yīng)時(shí)間一般在亳秒或微秒級(jí)。
在弱實(shí)時(shí)系統(tǒng)中,雖然響應(yīng)時(shí)間同樣重要,但是超時(shí)卻不會(huì)發(fā)生致命的錯(cuò)誤。其系統(tǒng)響應(yīng)時(shí)間
在亳秒至秒的數(shù)量級(jí)上,其實(shí)時(shí)性的要求比強(qiáng)實(shí)時(shí)系統(tǒng)要差一些。
7.嵌入式系統(tǒng)的設(shè)計(jì)步驟及各部分的主要工作如下。
(1)需求分析階段,羅列出用戶的需求;
(2)體系結(jié)構(gòu)設(shè)計(jì)階段,描述系統(tǒng)的功能如何實(shí)現(xiàn);
(3)詳細(xì)設(shè)計(jì)階段,進(jìn)行硬件系統(tǒng)與軟件系統(tǒng)的分類劃分,以決定哪些功能用硬件實(shí)現(xiàn),哪些
用軟件實(shí)現(xiàn);
(4)系統(tǒng)集成,把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)在設(shè)計(jì)過
程中的錯(cuò)誤;
(5)系統(tǒng)測(cè)試,對(duì)設(shè)計(jì)好的系統(tǒng)進(jìn)行測(cè)試,看其是否滿足給定的要求。
8.Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)主要有以下幾點(diǎn):
(1)可應(yīng)用于多種硬件平臺(tái)。Linux已經(jīng)被移植到多種硬件平臺(tái),這對(duì)于經(jīng)費(fèi),時(shí)間
受限制的研究與開發(fā)項(xiàng)目是很有吸引力的。原型可以在標(biāo)準(zhǔn)平臺(tái)上開發(fā)后移植到具體的硬件
上,加快了軟件與硬件的開發(fā)過程。Linux采用一個(gè)統(tǒng)一的框架對(duì)硬件進(jìn)行管理,從一個(gè)硬件
平臺(tái)到另一個(gè)硬件平臺(tái)的攻動(dòng)與上層應(yīng)用無關(guān)。
(2)Linux的高度模塊化使添加部件非常容易。本身內(nèi)置網(wǎng)絡(luò)支持,而目前嵌入式系統(tǒng)
對(duì)網(wǎng)絡(luò)支持要求越來越高,
(3)Linux是一個(gè)和Unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問控制,支持大量
硬件(包括X86,Alpha、ARM和Motorola等現(xiàn)有的大部分芯片)等特性的一種通用操作系統(tǒng)。
(4)Linux可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系。其程序源碼全部
公開,任何人可以修改并在GUN通用公共許可證(GNUGeneralPublicLicense)下發(fā)行。這樣,
開發(fā)人員可以對(duì)操作系統(tǒng)進(jìn)行定制,適應(yīng)其特殊需要。
(5)Linux帶有Unix用戶熟悉的完善的開發(fā)工具,幾乎所有的Unix系統(tǒng)的應(yīng)用軟件都已移
植到了Linux」:。其強(qiáng)大的語言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且
使用方便。
9.(參考答案)Linux執(zhí)號(hào)進(jìn)程調(diào)度一般是在以下情況發(fā)生的:
(1)正在執(zhí)行的進(jìn)程運(yùn)行完畢;
(2)正在執(zhí)行的進(jìn)程調(diào)用阻塞原語將自己阻塞起來進(jìn)入等待狀態(tài);
(3)正在執(zhí)行的進(jìn)程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了V原語操作激
活了等待資源的進(jìn)程隊(duì)列;
(4)執(zhí)行中的進(jìn)程提出UO請(qǐng)求后被阻塞;
(5)系統(tǒng)分配的時(shí)間片已經(jīng)用完;
以上都是CPU為不可剝奪方式下的引起進(jìn)程調(diào)度的原區(qū)。在CPU方式是可剝奪時(shí),還有下面
的原因:
(6)就緒隊(duì)列中的某個(gè)進(jìn)程的優(yōu)先級(jí)變得高于當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級(jí),從而也將引起
進(jìn)程調(diào)度。
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第2章
一.填空題:
1.改變目錄位置至用戶的工作目錄
2.改變目錄位置至相對(duì)路徑user的目錄下
3.查看當(dāng)前目錄下的文件
4.查看文件.bash_profile的內(nèi)容
5.分頁(yè)查看inittab文件內(nèi)容
6.將目錄/tmp下的文件filel復(fù)制到當(dāng)前目錄下,文件名為file2
7、將文件filel移到目錄dirl下,文件名仍為filel
8、建立一新目錄dir1
9、刪除目錄dirl,但dirl下必須沒有文件存在,否則無法刪除
10、刪除文件名中有五個(gè)字符且前四個(gè)字符為file的所有文件
11.文件config的內(nèi)容依次顯示到屏幕卜
12.以分頁(yè)方式查看文件名filel的內(nèi)容
13.以分頁(yè)方式查看文件名filel的內(nèi)容
14.顯示目錄dirl的總?cè)萘?/p>
15.對(duì)于目錄dir1,設(shè)定成任何使用者皆有讀取及執(zhí)行的權(quán)利,但只有所有者可做修改
16、對(duì)于文件fi1e1,設(shè)定只有所有者可以讀、寫和執(zhí)行的權(quán)利。
17、將文件file4鏈接至文件fi1e3o
18、尋找文件fi1e1中包含字符串a(chǎn)bc所在行的文本內(nèi)容。
19、自根目錄下尋找文件filel的路徑。
20、比較目錄dir1與dir2內(nèi)各文件的不同之處。
二、單項(xiàng)選擇題
1.A2.B3.D4.C5.B
6.C7.A8.C9.D10.B
11.A12.D13.D14.B15.B
16.B17.A18.DI9.B20.B
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第3章
一.填空題:
1.next
2.命令模式
3.預(yù)處理、編譯、匯編和連接
4.stepnext
5.末行模式
6.預(yù)處理鏈接
7.匯編
8.wtest,txt
二、綜合題
1.參考答案:
prl:prog,osubr.o
gcc-oprlprog,osubr.o
prog,o:prog,cprog,h
gcc-c-oproR.oprog,c
subr.o:subr.csubr.h
gcc-c-osubr.osubr.c
2.(1)
hello:main,olist,osymbol,otable,o
gcc-oprogmain.olist,osymbol,otable,o
main,o:main,ctable,hsymbol,hlist,h
gcc-c-omain,omain,c
list,o:list,clist,h
gcc-c-olist.olist.c
symbol,o:symbol.csymbol,h
gcc-c-osymbol,osymbol,c
table,o:table,ctable,hsymbol,hlist,h
gcc-c-otable,otable,c
clean:
rmhello*.o
(2)mount-tnfs-onoclock192.168.0.10:/home/armtest/hello/mnt
3.
hello,c:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"hello,h”
intmain(intargc,char*argv[])
(
printf(^HelloWorld!\n,");
message();
return0;
)
hello.h:
voidmessage(void);
message,c:
#include<stdio.h>
voidmessage(void){
prinlf("Thisisamessage!\nz,);
)
三.選擇題
1.C2.A3.B4.B5.B6.C
7.C8.D9.D10.A11.A
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第4章
選擇題
LA2.C3.D4.1)5.C
6.B7,C8.A9.D10.D
11.D12.D13.D14.B15.D
16.B17.A18.C19.C20.C
二.簡(jiǎn)答題
LLinux內(nèi)核的編譯菜單有好幾個(gè)版本,運(yùn)行:
(1)makeconfig:進(jìn)入命令行,可以一行一行的配置,但使用不十分方便。
(2)makemenuconfig:大多數(shù)開發(fā)人員使用的Linux內(nèi)核編譯菜單,使用方便。
(3)iiuikcxcunGg:在2.4.X以及以前版本中xcunfig菜單是基丁TCL/TK的圖形庫(kù)的。
2.在完成內(nèi)核的裁減之后,內(nèi)核的編譯就只要執(zhí)行以下幾條命令:
makeclean編譯內(nèi)核之前先把環(huán)境給清理干凈。有時(shí)你也可以用makercalclcan或make
mrproper來徹底清除相關(guān)依賴,保證沒有不正確的.。文件存在。
makedep編譯相關(guān)依賴文件
makezlmage創(chuàng)建內(nèi)核鏡像文件
makemodules創(chuàng)建內(nèi)核模塊,若不創(chuàng)建內(nèi)核模塊,這步可以不要。
makeinstall把相關(guān)文件拷貝到默認(rèn)的目錄。在給嵌入式設(shè)備編譯時(shí)這步可以不耍,因?yàn)?/p>
具體的內(nèi)核安裝還需要你手進(jìn)行。
3.此命令是裝載壓縮映像工件zlmage到flash存儲(chǔ)器中,地址是kemel分區(qū),并采用xmodem傳輸
協(xié)議。
4.此命令是設(shè)置網(wǎng)卡1的地址,掩碼為255.255.255Q不寫netmask參數(shù)則默認(rèn)為
。
5.此命令將nfs服務(wù)的共享目錄sharedir加載到/mnt/nfs。
6、此命令是裝載根文件系統(tǒng)root.cramfs到flash存儲(chǔ)器中,地址是根文件系統(tǒng)分區(qū),并
采用xmodem傳輸協(xié)議。
7、這個(gè)命令的操作同時(shí)進(jìn)行了分區(qū)和格式化,0?128K存放vivi,128K?192K存放VIVI
控制臺(tái)指令,192K-1216K存放kernel,1216K-4288K存放root,其余部分存放應(yīng)用程序。
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第5章
一.選擇題
1.B2.C3.C4.C5.D6.C
二.綜合應(yīng)用題
1.
Tomismyfriend
Jackismyfriend
Harryismyfriend
2.
(1)程序注釋
#!/bin/sh定義實(shí)用的shell
#
n/etc/rc.d/rc.httpd注釋行,凡是以星號(hào)開始的行均為注釋行。
#
#Start/stop/restarttheApachewebserver.
#
#TomakeApachestartautomaticallyatboot,makethis
#fileexecutable:chmod755/etc/rc.d/rc.httpd
#
casew$rin枇ase結(jié)構(gòu)開始,判斷“位置參數(shù)”決定執(zhí)行的操作。本程序攜帶一個(gè)“位置
參數(shù)”,即$1
,start,)#若位置參數(shù)為start
/usr/sbin/apachec11start;;#啟動(dòng)httpd進(jìn)程
'stop')#若位置參數(shù)為stop
/usr/sbin/apachect1stop;;#關(guān)閉httpd進(jìn)程
'restart*)#若位置參數(shù)為stop
/usr/sbin/apachect1restart;;#重:新啟動(dòng)httpd進(jìn)程
*)#若位置參數(shù)不是start、stop或restart時(shí)
echo"usage$0startstop|restart;;#顯示命令提示信息:程序的調(diào)用方法
esacrtcase結(jié)構(gòu)結(jié)束
(2)程序的功能是啟動(dòng),停止或重新啟動(dòng)httpd進(jìn)程
(3)程序的調(diào)用方式有三種:?jiǎn)?dòng),停止和重新啟動(dòng)。
3.
#!/bin/sh
FILENAME:
echo**Inputfilename:"
readFILENAME
if[-c-FILENAME"]
then
cp$FILENAME/dev
fi
4.
#/bin/bash
typesetfirstsecond
read-p"Inputthefirstnumber:*first
read-p"Inputthesecondnumber:second
result=$[$first+$second]
echo"resultis:Sresult*
exit0
5.
#!/bin/sh
i=l
while[i-le50]
do
if[-d/userdata];then
mkdir-p/userdata/user$i
chmod754/userdata/user$i
echo"user$i”
let=i+1〃(或i=$(($i+l))
else
mkdir/userdata
mkdir-p/userdata/user$i
chmod754/userdata/user$i
echo'user$i”
let"i=i+1"(或i=$(($i+l))
fi
done
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第6章
一.簡(jiǎn)答題
1.使用虛擬地址尋址整個(gè)系統(tǒng)的主存和輔存的方式在現(xiàn)代操作系統(tǒng)中被稱為虛擬內(nèi)存。MMU
便是實(shí)現(xiàn)虛擬內(nèi)存的必要條件。嵌入式處理器如果存在MMU,由于在MUU具備內(nèi)存地址映射
和尋址功能,操作系統(tǒng)會(huì)使用它完成從虛擬地址到物理地址的轉(zhuǎn)換,所有的應(yīng)用程序只需
要使用虛擬地址尋址數(shù)據(jù),
虛擬內(nèi)存的管理方法使系統(tǒng)既可以運(yùn)行體積比物理內(nèi)存還要大的應(yīng)用程序,也可以實(shí)現(xiàn)
“按需調(diào)頁(yè)”策略,既滿足了程序的運(yùn)行速度,又節(jié)約了物理內(nèi)存空間。
2.進(jìn)程內(nèi)存區(qū)域涉及到5種數(shù)據(jù)段,即:
①代碼段:代碼段是用來存放可執(zhí)行文件的操作指令,也就是說是它是可執(zhí)行程序在內(nèi)存
中的鏡像。
②數(shù)據(jù)段:數(shù)據(jù)段用來存放可執(zhí)行文件中已初始化全局變量,換句話說就是存放程序靜態(tài)
分配的變量和全局變量。
③BSS段:BSS段包含了程序中未初始化的全局變量,在內(nèi)存中BSS段全部置零。
④堆(heap):堆是用于存放進(jìn)程運(yùn)行中被動(dòng)態(tài)分配的內(nèi)存段,它的大小并不固定,可動(dòng)
態(tài)擴(kuò)張或縮減。當(dāng)進(jìn)程調(diào)用malloc等函數(shù)分配內(nèi)存時(shí);新分配的內(nèi)存就被動(dòng)態(tài)添加到堆上(堆
被擴(kuò)張);當(dāng)利用free等函數(shù)釋放內(nèi)存時(shí),被釋放的內(nèi)存從堆中被剔除(堆被縮減)
⑤棧:棧是用戶存放程序臨時(shí)創(chuàng)建的局部變量,也就是說函數(shù)括弧“{}”中定義的變量(但
不包括static聲明的變量,static意味著在數(shù)據(jù)段中存放變量)。除此以外,在函數(shù)被調(diào)用
時(shí),其參數(shù)也會(huì)被壓入發(fā)起調(diào)用的進(jìn)程棧中,并且待到調(diào)用結(jié)束后,函數(shù)的返回值也會(huì)被存
放回棧中。
3.在Linux系統(tǒng)中,內(nèi)核在最高級(jí)執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級(jí)任何操作都可以執(zhí)行。
而應(yīng)用程序則執(zhí)行在最低級(jí),即所謂的“用戶態(tài)”。在這一級(jí)處理器禁止對(duì)硬件的直接訪問
和對(duì)內(nèi)存的未授權(quán)訪問。模塊是在所謂的“內(nèi)核空間”中運(yùn)行的,而應(yīng)用程序則是在“用戶
空間”中運(yùn)行的。它們分別引用不同的內(nèi)存映射,也就是程序代碼使用不同的“地址空間”。
4.共享內(nèi)存區(qū)域是被多個(gè)進(jìn)程共享的一部分物理內(nèi)存。如果多個(gè)進(jìn)程都把該內(nèi)存區(qū)域映射到
自己的虛擬地址空間,則這些進(jìn)程就都可以直接訪問該共享內(nèi)存區(qū)域,從而可以通過該區(qū)域
進(jìn)行通信。共享內(nèi)存是進(jìn)程間共享數(shù)據(jù)的一種最快的方法,一個(gè)進(jìn)程向共享內(nèi)存區(qū)域?qū)懭肓?/p>
數(shù)據(jù),共享這個(gè)內(nèi)存區(qū)域的所有進(jìn)程就可以立刻看到其中的內(nèi)容。這塊共享虛擬內(nèi)存的頁(yè)面,
出現(xiàn)在每一個(gè)共享該頁(yè)面的進(jìn)程的頁(yè)表中。但是它不需要在所有進(jìn)程的虛擬內(nèi)存中都有相同
的虛擬地址。
5.內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程(sw叩d)定期由調(diào)度程序調(diào)度,這也是內(nèi)存
管理依賴于進(jìn)程調(diào)度的唯--原因。當(dāng)一個(gè)進(jìn)程存取的內(nèi)存映射被換例時(shí),內(nèi)存管理向文件系統(tǒng)
發(fā)出請(qǐng)求,同時(shí),掛起當(dāng)前正在運(yùn)行的進(jìn)程。
二.編程題
1.參考程序:
#include<stdlib.h>
structtest
(
inta[10];
charb[20];
)
intmain()
{
structtest*ptr=calloc(sizeof(structtest),10);
)
2.參考程序:
#include<sys/types.h>
#include<sys/stat.h>
??include<fcntl.h>
#include<unistd.h>
#include<sys/mman.h>
main()
{
intfd;
void*start;
structstatsb;
fd=open(<Vetc/passwd,>,0RDONLY);/*打開/etc/passwd*/
fstat(fd,&sb);/*取得文件大小*/
start=mmap(NULL,sb.st_size,PROT_READ,M/\P_PRIVATE,fd,0);
if(start==MAP_FAILED)/*判斷是否映射成功*/
return;
printf("%s”,start);
munma(start,sb.st_size);/*解除映射*/
closed(fd);
)
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第7章
一、單項(xiàng)選擇題
1.A2.B3.A4.D5.6.A7.C
二.編程題
1.
(1)
Voidmain(void)
(
intfid;
fid=open(/test.txtw,O_RDWR10_CREAT);
if(fid=-l)
(
Printf("openorcreateerror'n");
exit(0);
)
Close(fid);
)
(2)
objects=main.o
exec=main
all:$(objects)
gcc-o$(exec)$(objects)
main.o:main.c
gcc-cmain,c
c1ean:
rm-r$(exec)$(objects)
2.參考程序:
#include<sys/types.h>
#inclu(le<sys/stat.h>
#include<fcntl.h>
/include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#defineBUFFER_SIZE1024
intmain(intargc.char**argv)
intfrom_fd,to_fd;
intbytcs_rcad,byles_wriic;
charbuffer[BUFFER_SIZE];
char*ptr;
if(argc!=3){
fprinll'(stderr,"Usage:%sfromfilctofile\n\a",argvlOJ);
exit(l);
)
/*打開源文件*/
if((frotn_fd=open(argv[1],O_RDONLY))==-1){
fprintf(stderr."Open%sEiTor:%s\n".argv|1|,strerror(emio);;
exit(l);
)
/*創(chuàng)建目的文件*/
if((to_fd=open(argv⑵,O_WRONLY|O_CREAT.S」RUSR|S」WUSR))==-1){
fprintf(stdcrr,"Opcn%sError:%s\n",argv[2],strcrror(eirno));
cxit(l);
)
/*以下代碼是一個(gè)經(jīng)典的拷貝文件的代碼*/
whilc(byics_rcad=rcad(from_fd,buffer,BUFFER_SIZE)){
if((bytes_read==-1)&&(errno!=EINTR))break:/*發(fā)生讀錯(cuò)誤,退出循環(huán)*/
elseif(bylcs_read>O){
pti-buffer:
while(by(es_write=wrile(to_fd,ptr,bytes_read)){
it((bytes_wnte=-l)&<&(errno!=fclNIK))break:/*若寫錯(cuò)誤,退出循環(huán)*/
/*寫完了所有讀的字節(jié)*/
elseif(bytes_write==bytes_read)break;/*讀寫字節(jié)不等退出循環(huán)*/
elseif(bytes_write>O){/*只寫了一部分,繼續(xù)寫*/
ptr+=b>/tcs_wrilc;
bytes_read-=bytes_write:
)
)
if(bytes_wri:e==-1)break;/*寫的時(shí)候發(fā)生的致命借誤*/
)
}
close(from_fd);
close(to_fd);
exit(O);
I
3.參考程序:
#include<stdio.h>
structstudent{
charname[10];
intage;
);
intmain。
(
FILE*fp;
inii;
structstudentboya[2],boyb[2],*pp.*qq:
if((fp=fopcn("7-6.txt"."w+,,))==NULL)〃打開文件
|
printf("Cannotopenfile,exit
return-1;
I
pp=boya;
qq=boyb;
prinlf("plcaseinputdala:\n");〃輸入學(xué)生信息
for(i=0;i<2;i++,pp++)
scanf("%s%d",pp->naine,&pp->age);
pp=boya;
fwrite(pp,sizeof(struccstudent),2,fp);〃把學(xué)生信息寫入文件
rewind(fp);〃重定位文件
fread(qq,sizeof(structstudent),2,fp);〃從文件中讀取學(xué)生信息
prin(f("namc\l\tagc\n"i;
for(i=0;i<2;i++,qq++)
printf("%s\t\t%d\n",qq->name,qq->age);
fclose(fp);
return0;
4.參考程序如下:
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第8章
一、單項(xiàng)選擇題
1.B
2.A
3.A
4.D
5.C
6.D
7、C
8、I)
9、C
10、B
二.閱讀程序題
1.答案要點(diǎn):
(1)將數(shù)據(jù)緩沖區(qū)清0
(2)創(chuàng)建管道
(3)創(chuàng)建子進(jìn)程
(4)關(guān)閉子進(jìn)程寫描述符
(5)子進(jìn)程讀取管道內(nèi)容
(6)關(guān)閉子進(jìn)程讀描述符
(7)父進(jìn)程運(yùn)行控制語句
(8)關(guān)閉父進(jìn)程的讀描述符
(9)將數(shù)據(jù)寫入緩沖區(qū)
(10)關(guān)閉父進(jìn)程寫描述符
三.程序設(shè)計(jì)
1.參考程序如下:
voidmain(){
kcytuniquekey;/*定義一個(gè)IPC關(guān)鍵字*/
intid;
structsembuflock_it;
unionsemunoptions;
inti;
unique_key=ftoka');/*生成關(guān)鍵字,字符'a'是一個(gè)隨機(jī)種子*/
/*創(chuàng)建一個(gè)新的信號(hào)量集合*/
id=semget(unique_key,1,IPC_CREAT|IPC_EXCL|0666);
printf(?,semaphoreid=%d\n”,id);
options,val=1;/*設(shè)置變量值*/
semctl(id,0,SETVAL,options);/*設(shè)置索引0的信號(hào)量*/
/*打印出信號(hào)量的值"
i=scmctl(id,0,GETVAL,0);
printf("valueofsemaphoreatindex0is%d\n/,,i);
/*下面重新設(shè)置信號(hào)量*/
lock_it.sem_num=設(shè)置哪個(gè)信號(hào)量*/
lockit.scmop=~1;/*定義操作*/
lock_it.sem_flg=IPC_NOWAIT;/*操作方式*/
if(semop(id,&lock_it,1)==-1){
printf(*cannotlocksemaphore.\n");
exit(1);
)
i=semctKid,0,GETVAL,0);
printf("valueofsemaphoreatindex0is%d\n',i);
/*清除信號(hào)量*/
semctl(id,0,1PC_RMID,0);
)
2.參考程序:
(1)init.c清單
#include<unistd.h>
#include<signal,h>
#include<sys/param.h>
^include<sys/types.h>
#include<sys/stat.h>
voidinit_daemon(void)
intpid;
inti;
if(pid=fork())
exitS);〃是父進(jìn)程,結(jié)束父進(jìn)程
elseif(pid<0)
exit(1);〃fork失敗,退出
〃是第一子進(jìn)程,后臺(tái)繼續(xù)執(zhí)行
setsidO;
〃第一子進(jìn)程成為新的會(huì)話組長(zhǎng)和進(jìn)程組長(zhǎng)并與控制終端分離
if(pid=fork0)
exit(0);〃是第一子進(jìn)程,結(jié)束第一子進(jìn)程
elseif(pid<0)
exit(1);〃fork失敗,退出
〃是第二子進(jìn)程,繼續(xù)
〃第二子進(jìn)程不再是會(huì)話組長(zhǎng)
for(i=0;i<N0FILE;++i)〃關(guān)閉打開的文件描述符
close(i);
chdir("/tmp");〃改變工作目錄到/tmp
umask(0);//重設(shè)文件創(chuàng)建掩模
return;
)
(2)test,c清單
#include<stdio.h>
#include<time,h>
voidinit_daemon(void);〃守護(hù)進(jìn)程初始化函數(shù)
main()
(
FILE*fp;
time_tt;
initdaemon。;〃初始化為Daemon
while(l)〃每隔一分鐘向test,log報(bào)告運(yùn)行狀態(tài)
(
sleep(60);//睡眠一分鐘
if((fp=fopen("test,log","a"))>=0)
(
t=time(0);
reat%s\nv,asetime(localtime(&t)));
fclose(fp);
}
}
)
以上程序在RedHaiUnux6.0下編譯通過。步驟如下:
編譯:gcc-g-otestinit.ctest,c
查看進(jìn)程:ps-ef
程的各種特性滿足上面的要求。
3.參考程序:
ttdefineINPUT0
^defineOUTPUT1
voidmain(){
intfile?descriptors[2];
/*定義子進(jìn)程號(hào)*/
pid_tpid;
charbuf[256];
intreturnedcount;
/*創(chuàng)建無名管道*/
pipe(filedcscriptors);
/*創(chuàng)建子進(jìn)程*/
if((pid=forkO)==-1){
printf(''Errorinfork\n");
exit(1);
)
/*執(zhí)行子進(jìn)程*/
if(pid==0){
printf(^inthespawned(child)process…\n");
/*子進(jìn)程向父進(jìn)程寫數(shù)據(jù),關(guān)閉管道的讀端*/
close(file_descriptors[INPUT]);
write(filedescriptors[OUTPUT],“testdata”,strlen(^testdata"));
exit(0);
)else{
/*執(zhí)行父進(jìn)程*/
printfC*inthespawning(parent)process...\n*);
/*父進(jìn)程從管道讀取子進(jìn)程寫的數(shù)據(jù),關(guān)閉管道的寫端*/
close(file_descriptors[OUTPUT]);
returncdcount=read(filedescriptors[INPUT],buf,sizeof(buf));
printf(,z%dbytesofdatareceivedfromspawnedprocess:%s\n”,
returnedcount.buf);
)
)
在Linux系統(tǒng)下,有名管道可由兩種方式創(chuàng)建:命令行方式mknod系統(tǒng)調(diào)用和函數(shù)mkfifo。
下面的兩種途徑都在當(dāng)前目錄下生成了一個(gè)名為myfifo的有名管道:
方式一:mkfifo("myfifo","rw");
方式二:mknodmyfifop
生成了有名管道后,就可以使用一般的文件I/O函數(shù)如open、closerread,write等來對(duì)它
進(jìn)行操作。下面即是一個(gè)同單的例子,假設(shè)我們已經(jīng)創(chuàng)建了一個(gè)名為myfifo的有名管道。
/*進(jìn)程一:讀有名管道*/
^include
ttinclude
voidniain(){
FILE*in_file;
intcount=1;
charbuf[80];
infile=fopen(mypipe,r);
if(infile==NULL){
printf("Errorinfdopen.\n?,);
exit(1);
}
while((count=fread(buf,1,80,infile))>0)
printf("receivedfrompipe:%s\n”,buf);
fclose(infile);
)
/*進(jìn)程二:寫有名管道*/
#include
^include
voidmain(){
FILE*out.file;
intcount=1;
charbuf[80];
out_file=fopen(,zmypipe*,"w");
if(out_file--NULL){
printf(z,Erroropeningpipe.");
exit(1);
)
sprintf(buf,z,thisistestdataforthenamedpipeexample'd');
fwrite(buf,1,80,out_file);
fclose(outfile);
)
嵌入式Linux實(shí)時(shí)操作系統(tǒng)及應(yīng)用編程
第9章
一、簡(jiǎn)答題
1.參考答案:
Mutex互斥量,用于操作某個(gè)臨界資源時(shí)對(duì)該資源上鎖,以實(shí)現(xiàn)互斥地對(duì)獨(dú)占資源的使用。(3
分)
Scmophorc信號(hào)燈,信號(hào)燈內(nèi)有一計(jì)數(shù)器,可以用于對(duì)多個(gè)同類資源的分配。當(dāng)資源用完時(shí),
申請(qǐng)資源的線程會(huì)在信號(hào)量上睡眠,有線程釋放資源時(shí),再將該線程喚醒繼續(xù)運(yùn)行。(3分)
Condition條件變量,條件變量用于等待信號(hào)。當(dāng)?個(gè)線程需要等待某個(gè)信號(hào)時(shí),就可到條件變
量上等待,當(dāng)信號(hào)具備時(shí),系統(tǒng)會(huì)喚醒該線程繼續(xù)運(yùn)行。(4分)
2.參考答案:
本地:共享內(nèi)存+信號(hào)量,適合于大展數(shù)據(jù)傳輸。Linux支持系統(tǒng)V和POSIX的共享內(nèi)存和
信號(hào)量。(5分)
遠(yuǎn)程:Sockcl+應(yīng)用協(xié)議。適合于跨網(wǎng)絡(luò)的(大量)數(shù)據(jù)傳輸。Linux支持BSD的socket。應(yīng)用
層協(xié)議需要自行設(shè)計(jì)。(5分)
3.答案要點(diǎn):程序是編譯后形成的可執(zhí)行代碼,是靜止的。進(jìn)程是程序的?次執(zhí)行,是活動(dòng)
的。線程是進(jìn)程的可執(zhí)行單元,同一進(jìn)程的不同線程共享進(jìn)程的資源和地址空間。
4.兩種實(shí)現(xiàn)方法,一種是繼承Thread,另外一種是實(shí)現(xiàn)接口Runnable。
同步的實(shí)現(xiàn)方法有兩種,分別是synchronized,wait與notify。用synchronized可以對(duì)一段代碼、
一個(gè)對(duì)象及一個(gè)方法進(jìn)行加鎖。用wait與notify可以使穴■象處于等待及喚醒方式導(dǎo)致同步,因
為每個(gè)對(duì)象都直接或間接的繼承了Object類。
5.參考答案:(每小點(diǎn)1分)
Linux執(zhí)行進(jìn)程調(diào)度一般是在以卜情況發(fā)生的:
(1)正在執(zhí)行的進(jìn)程運(yùn)行完畢;
(2)正在執(zhí)行的進(jìn)程調(diào)用阻塞原語將自己阻塞起來進(jìn)入等待狀態(tài):
(3)正在執(zhí)行的進(jìn)程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了V原語快作激
活了等待資源的進(jìn)程隊(duì)列;
(4)執(zhí)行中的進(jìn)程提出UO請(qǐng)求后被阻塞;
(5)系統(tǒng)分配的時(shí)間片已經(jīng)用完;
以上都是CPU為不可剝奪方式下的引起進(jìn)程調(diào)度的原因。在CPU方式是可剝奪時(shí),還有下面
的原因:
(6)就緒隊(duì)列中的某個(gè)進(jìn)程的優(yōu)先級(jí)變得高于當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級(jí),從而也將引起進(jìn)程調(diào)
度。
二.編程題
參考程序:
/*數(shù)據(jù)寫入緩沖區(qū)*/
voidput(structprodcons*b,intdata)
{pthrcad_mutcx_lock(&b->lock);/*獲得互斥鎖*/
while((b->wrilepos+1)%BUFFER_SIZE==b->readpos){
printf(uwaitfornotfull\n");
pthread_cond_\vait(&b->notfull,&b->lock);
/*等待b->notfull,不滿則跳出阻塞力
}
b->buffer[b->writepos]=data;/*寫入數(shù)據(jù)*/
b->writepos++;
if(b->vvritepos>=BUFFER_SIZE)b->writepos=0;
pthread_cond_signal(&b->notempty);/*設(shè)置狀態(tài)變量
pthread_mutex_unlock(&b->lock);/*釋放互斥鎖*/
}
/*從緩沖區(qū)中讀出數(shù)據(jù)*/
intgel(struc(prodcons*b)
(
intdata;
pthread_mutex_lock(&b->lock);/*獲得互斥鎖*/
while(b->writcpos==b->rcadpos){
printf("waitfornotempty\nn);
pthrcad_cond_\vait(&b->notempty,&b->lock);
/*等待不空則跳出阻塞*/
}
data=b->buffer[b->readpos];/*讀出數(shù)據(jù)*/
b->readpos++;
if(b->rcadpos>=BUFFER_SIZE)b->readpos=0;
pthread_cond_signal(&b->notfull);/*設(shè)置狀態(tài)變量*/
pthread_inutex_unlock(&b->lock);/*釋放互斥鎖*/
returndata;
}
/*生產(chǎn)者進(jìn)程*/
void*producedvoid*data)
intn;
for(n=0;n<1000;n++){
printf("put—>%d\n,'?n);
pul(&buffer,n);
put(&buffer,OVER);
printf("producerstopped!\nH);
returnNULL;
/*消費(fèi)者進(jìn)程*/
void*consuiner(void*data)
{intd;
while(1){
d=gct(&buffcr);
if(d==OVER)break;
printf("%d->get\nd);
piintf("consumcrstoppcd!\n");
returnNULL;
/*主函數(shù)*/
intmain(void)
{pthread_tth_a,th_b;
void*rctval;
init(&buffer);
pthrcad_crcatc(&th_a,NULL,producer,0);
pthread_create(&th_b,NULL,consumer,0);
/*等待生產(chǎn)者和消費(fèi)者結(jié)束*/
pthreadjoin(th_a,&retval);
pthreadjoin(th_b,&retval);
return0;
第10章
一、單項(xiàng)選擇題
LB2.B3.C4.A5.B6.C7、C8、B9、A10、B
二.編程題
1.參考程序:
#includo<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
^include<sys/types.h>
"include<netinet/in.h>
^include<sys/socket.h>
#include<sys/wait.h>
Jtinclude<unistd.h>
#include<arpa/inet.h>
intmain(intargc,char**argv)
(
intsockfd;
structsockaddrinmyaddr;
unsignedintmyport,1isnum;
if(argv[l])
myport=atoi(argvfl]);
else
myport=7838;
if(argv[2])
lisnum=atoi(argv[2]);
else
lisnum=2;
if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
)
elseprintfCsockelcreated\nw);
bzero(&my_addr,sizeof(myaddr));
myaddr.sin_family=PFINET;
myaddr.sinport=htons(mypoi't);
if(argv[3])my_addr.sin_addr.s_ciddr=inet_addr(argv[3]);
elsemyaddr.sinaddr.s_addr=INADDRANY;
if(bind(sockfd,(structsockaddr*)&myaddr,sizeof(structsockaddr))==-1)
{
perror("bind");
exit(1);
)
elseprintf("binded'n");
if(listen(sockfd,lisnum)==-1){
perror("listen");
exit(1);
)
elseprintf("beginlisten\n,/);
sleep(100);
close(sockfd);
return0;
}
編譯程序用下列命令:
gcc-Wa11simple-listen,c
運(yùn)行程序用如下命令:
./a.out78382
這將在你自己主機(jī)的所有IP地址是等待客戶端連接。比如你的網(wǎng)卡lo的IP地址127.0.0.1,
又比如你的網(wǎng)卡ethO的IP地址192.168.0.100
如果要指定只在某個(gè)地址是開啟監(jiān)聽服務(wù),可以用下面的命令:
./a.out78382127.0.0.1
這樣,客戶端只能通過127.0.0.1的7838端口連接你的程序。
你可以開啟?個(gè)終端輸入telnet127.0.0.17838米測(cè)試是否能連接成功。
同時(shí)可以用netstat-angrep7838命令來查看網(wǎng)絡(luò)是否連接正常
2.參考程序:
"include<stdio.h>
#includc<stdlib.h>
include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#includc<sys/sockot.h>
#include<sys/wait.h>
#includo<unistd.h>
#include<arpa/inet.h>
/************關(guān)于本文檔********************************************
"filename:simple-accept.c
?purpose:演示最基本的網(wǎng)絡(luò)編程步驟,開啟服務(wù)端的監(jiān)聽,并接收每個(gè)客戶端的連接請(qǐng)求
?wroteby:zhoulifa(zhoulifa@163.com)周立發(fā)(http:〃zhoulifa.bokcc.com)
Linux愛好者Linux知識(shí)傳播者SOHO族開發(fā)者最擅長(zhǎng)C語言
?datetime:2007-01-2412:41
*Note:任何人可以任意復(fù)制代碼并運(yùn)用這些文檔,當(dāng)然包括你的商業(yè)用途
*但請(qǐng)遵循GPL
*Hop。:希望越來越多的人貢獻(xiàn)自己的力量,為科學(xué)技術(shù)發(fā)展出力
*科技站在巨人的肩膀上進(jìn)步更快!感謝有開源前輩的貢獻(xiàn)!
intmain(intargc,char**argv)
intsockfd,new_fd;
socklentlen;
structsockaddr_inmy_addr,their_addr;
unsignedintmyport,lisnum;
if(argv[1])
myport=atoi(argv[l]);
else
myport=7838;
if(argv[2])
1isnum=atoi(argv⑵);
else
lisnum=2;
if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
)
elseprintf("socketcreated\n/,);
bzei'o(&my_ciddr,sizeof(my_addr));
myaddr.sinfamily=PFINET;
my_addr.sin_port=htons(myport);
if(argv[3])myaddr.sinaddr.s_addr=inetaddr(argv[3]);
elsemyaddr.sinaddr.saddr=INADDRANY;
if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1)
{
perror("bind");
exit(1);
)
elseprintf("binded'n");
if(listen(sockfd,lisnum)==-1){
perror("listen");
exit(1);
)
elseprintf(''begin1isten\n,/);
while(l){
len=sizeof(structsockaddr);
if((newfd=accept(sockfd,(structsockaddr*)&their_addr,&lcn))==-1)
(
pcrror("accept");
exit(errno);
)
elseprintf("server:gotconnectionfrom%s,port%d,
socket%d\n,/,inetntoa(theiraddr.sinaddr),
ntohs(theiraddr.sinport),newfd);
)
close(sockfd);
return0;
}
編譯程序用下列命令:
gcc-Wallsimple-acccpt.c
運(yùn)行程序用如下命令:
./a.out78381127.0.0.1
另外開多幾個(gè)客戶端程療連接上來,
程序輸出結(jié)果如下:
server:gotconnectionfrom127.0.0.1,port15949,socket4
server:gotconnectionfrom127.0.0.1,port15950,socket5
server:gotconnectionfrom127.0.0.1,port15951,socket6
server:gotconnectionfrom127.0.0.1,port15952,socket7
3.參考程序:
服務(wù)器:
??include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
^include<st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年黑龍江大慶市中考語文試題解讀及備考指導(dǎo)
- 黑龍江省綏化市海倫市2025-2026學(xué)年七年級(jí)上學(xué)期1月期末考試語文試卷(無答案)
- 廣東省湛江雷州市2025-2026學(xué)年上學(xué)期期末七年級(jí)語文試卷(無答案)
- 2025秋人教版二年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)專項(xiàng)拔高卷(含答案)
- 五官科題庫(kù)及答案
- 微機(jī)原理試題庫(kù)及答案
- 三年級(jí)下冊(cè)第八單元寫作指導(dǎo)這樣想象真有趣人教部編版
- 北京版六年級(jí)下冊(cè)數(shù)學(xué)第二單元比和比例測(cè)試卷附參考答案【預(yù)熱題】
- 在市民政工作半年總結(jié)會(huì)議上的工作報(bào)告全國(guó)民政工作會(huì)議
- 防雷系統(tǒng)設(shè)計(jì)安裝技術(shù)要點(diǎn)
- 超星爾雅學(xué)習(xí)通《學(xué)術(shù)規(guī)范與學(xué)術(shù)倫理(華東師范大學(xué))》2025章節(jié)測(cè)試附答案
- GB 17440-2025糧食加工、儲(chǔ)運(yùn)系統(tǒng)粉塵防爆安全規(guī)范
- 《綠色農(nóng)產(chǎn)品認(rèn)證》課件
- 衛(wèi)生院、社區(qū)衛(wèi)生服務(wù)中心《死亡醫(yī)學(xué)證明書》領(lǐng)用、發(fā)放、管理制度
- 《金融科技概論》完整全套課件
- 校車逃生安全知識(shí)
- 膠體與界面化學(xué)
- 康復(fù)治療技術(shù)歷年真題單選題100道及答案
- 深圳益電通變頻器說明書TD90
- 2024至2030年中國(guó)公安信息化與IT行業(yè)發(fā)展形勢(shì)分析及運(yùn)行策略咨詢報(bào)告
- 糧食采購(gòu)合同范文
評(píng)論
0/150
提交評(píng)論