版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《計(jì)算機(jī)操作系統(tǒng)》
試驗(yàn)指導(dǎo)書(shū)
(適合于計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè))
湖南工業(yè)高校計(jì)算機(jī)與通信學(xué)院
二00九年十月
刖百
計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)的主要專(zhuān)業(yè)基礎(chǔ)課程,其實(shí)踐性、應(yīng)用性很強(qiáng)。實(shí)踐
教學(xué)環(huán)節(jié)是必不行少的一個(gè)重要環(huán)節(jié)。計(jì)算機(jī)操作系統(tǒng)的試驗(yàn)?zāi)康氖羌由顚?duì)理論教學(xué)內(nèi)容的理解和
駕馭,便學(xué)牛較系統(tǒng)地駕馭操作系統(tǒng)的基本原理,加深對(duì)操作系統(tǒng)基本方法的理解,加深對(duì)課堂學(xué)
間的理解,為學(xué)生綜合運(yùn)用所學(xué)學(xué)問(wèn),在Linux環(huán)境下調(diào)用一些常用的函數(shù)編寫(xiě)功能較笥潔的程序
來(lái)實(shí)現(xiàn)操作系統(tǒng)的基本方法、并在實(shí)踐應(yīng)用方面打下肯定基礎(chǔ)。要求學(xué)生在試驗(yàn)指導(dǎo)老師的幫助下
自行完成各個(gè)操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個(gè)試驗(yàn)解決一類(lèi)問(wèn)題。要求學(xué)生
能夠全面、深化理解和嫻熱駕馭所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類(lèi)似問(wèn)題:對(duì)?比能夠較好
地理解和駕馭,并且能夠進(jìn)行簡(jiǎn)潔分析和推斷;能夠嫻熟運(yùn)用Linux用戶(hù)界面;駕馭操作系統(tǒng)中進(jìn)
程的概念和限制方法:了解進(jìn)程的并發(fā),進(jìn)程之間的通信方式,了解虛擬存儲(chǔ)管理的基本思想。同
時(shí)培育學(xué)生進(jìn)行分析問(wèn)題、解決問(wèn)題的實(shí)力:培育學(xué)生完成試驗(yàn)分析、試驗(yàn)方法、試驗(yàn)操作與測(cè)試、
試驗(yàn)過(guò)程的視察、理解和歸納實(shí)力。
為了收到良好的試驗(yàn)效果,編寫(xiě)了這本試驗(yàn)指導(dǎo)書(shū)。在指導(dǎo)書(shū)中,每一個(gè)試驗(yàn)均依據(jù)該課程試
驗(yàn)大綱的要求編寫(xiě),力求緊扣理論學(xué)問(wèn)點(diǎn)、突出設(shè)計(jì)方法、明確設(shè)計(jì)思路,通過(guò)多種形式完成試驗(yàn)
任務(wù),最終引導(dǎo)學(xué)生有目的、有方向地完成試驗(yàn)任務(wù),得出試驗(yàn)結(jié)果。任課老師在試驗(yàn)前對(duì)試驗(yàn)任
務(wù)進(jìn)行肯定的分析和講解,要求學(xué)生依據(jù)每一個(gè)試驗(yàn)的具體要求提前完成打算工作,如:查找資料、
設(shè)計(jì)程序、完成程序、寫(xiě)出預(yù)習(xí)報(bào)告等,做到有打算地上機(jī)。進(jìn)行試驗(yàn)時(shí),指導(dǎo)老師應(yīng)檢查學(xué)生的
預(yù)習(xí)狀況,并對(duì)調(diào)試過(guò)程賜予主動(dòng)指導(dǎo)。試驗(yàn)完畢后,學(xué)生應(yīng)依據(jù)試驗(yàn)數(shù)據(jù)及結(jié)果,完成試驗(yàn)報(bào)告,
由學(xué)習(xí)委員統(tǒng)?收齊后交指導(dǎo)老師批閱評(píng)定。
試驗(yàn)成果考核:
試驗(yàn)成果占計(jì)算機(jī)操作系統(tǒng)課程總評(píng)成果的20%。指導(dǎo)老師每次試驗(yàn)對(duì)學(xué)生進(jìn)行出勤考核,對(duì)
試驗(yàn)效果作記錄,并剛好批改試驗(yàn)報(bào)告,綜合評(píng)定每一次的試驗(yàn)成果,在學(xué)期終了以平均成果作為
該生的試驗(yàn)成果。有以卜.情形之一者,試驗(yàn)成果為不及格:
1.遲到、早退、無(wú)故缺勤總共3次及以上者;
2.未按時(shí)完成試驗(yàn)達(dá)3次及以上者;
3.缺交試驗(yàn)報(bào)告2次及以上者。
目錄
第一部分試驗(yàn)環(huán)境及所用系統(tǒng)函數(shù)介紹.......................................1
1.1Linux操作系統(tǒng)簡(jiǎn)介..................................................1
1.2Linux的運(yùn)用........................................................1
1.2.1vi的運(yùn)用.....................................................1
1.2.2gcc的運(yùn)用....................................................2
主要系統(tǒng)調(diào)用函數(shù)....................................................2
其次部分試驗(yàn)內(nèi)容..........................................................5
試驗(yàn)一熟識(shí)LINUX基本吩咐及編程環(huán)境...................................5
試驗(yàn)二進(jìn)程管理........................................................8
試驗(yàn)三進(jìn)程調(diào)度.......................................................12
試驗(yàn)四進(jìn)程間通信.....................................................17
試驗(yàn)五存儲(chǔ)管理試驗(yàn)...................................................20
第一部分試驗(yàn)環(huán)境及所用系統(tǒng)函數(shù)介紹
DOS操作系統(tǒng)是單道操作系統(tǒng),無(wú)法進(jìn)行多道程序設(shè)計(jì),Windows環(huán)境下的Visual
C++雖然也可用于多道程序設(shè)計(jì),但是并不是完全的多道,因?yàn)樗部捎糜贒OS編程。
所以我們的試驗(yàn)選用Linux操作系統(tǒng)。Linux操作系統(tǒng)是一個(gè)類(lèi)UINX操作系統(tǒng),是一
個(gè)純多道并發(fā)的網(wǎng)絡(luò)操作系統(tǒng)。
1.1Linux操作系統(tǒng)簡(jiǎn)介
Linux是一個(gè)多用戶(hù)操作系統(tǒng),是UNIX的一個(gè)克隆版本(界面相同但內(nèi)部實(shí)現(xiàn)不
同),同時(shí)它是一個(gè)自由軟件,是免費(fèi)的、源代碼開(kāi)放的,這是它與UNIX的不同之處。
現(xiàn)在,Linux憑借優(yōu)秀的設(shè)計(jì),不凡的性能,加上IBM、Inlel、CA、CORE、Oracle等
國(guó)際知名企業(yè)的大力支持,市場(chǎng)份額逐步擴(kuò)大,己成為與Windows和UNIX并存的三
大主流操作系統(tǒng)之一。
1.2Linux的運(yùn)用
1.2.1vi的運(yùn)用
1)vi的簡(jiǎn)潔應(yīng)用
vi是linux環(huán)境下赫赫出名的文本編輯工具之一。
進(jìn)入vi編輯器的方法:vifilenames注:文件名必需帶有擴(kuò)展名.c,如filename.c
否則無(wú)法通過(guò)編譯;
進(jìn)入vi后要按:按“i”鍵從吩咐方式切換到輸入方式;
從輸入方式切換到吩咐方式的方法:按“Esc”鍵
保存文件:w
保存文件并退出:wq
不保存文件退出:q!
注:以上操作必需在吩咐方式下進(jìn)行。
2)其他常用vi操作吩咐
上下左右
0:行首
$:行尾
ctrl+f:后翻頁(yè)
ctrl+b:前翻頁(yè)
G:文件尾
數(shù)字G:數(shù)字所指定行
i,I:插入吩咐,i在當(dāng)前光標(biāo)處插入,I行首插入
.1.
a,A:追加吩咐,a在當(dāng)前光標(biāo)后追加,A在行木追加
。,0:打開(kāi)吩咐,。在當(dāng)前行下打開(kāi)一行,0在當(dāng)前行上插入一行
x:刪除光標(biāo)處字符
dd:刪除當(dāng)前行
dO:刪除光標(biāo)前半行
d$:刪除光標(biāo)后半行
r,R:替換吩咐,r替換當(dāng)前光標(biāo)處字符,R從光標(biāo)處起先替換
/string:查找字符串
n:接著查找
N:反向接著查找
%:查找對(duì)應(yīng)括號(hào)
u:取消上次操作
注:以上操作必需在吩咐方式下進(jìn)行。
gcc的運(yùn)用
gcc是linux下的一種C程序編譯工具,運(yùn)用方法如下(有提示符#的狀況):
編譯:gcc-ofilename1filename.c
其中:filename.c是源文件名,filename1是目標(biāo)文件名,o代表object
執(zhí)行:./filenamel
示例:鍵入一簡(jiǎn)潔的程序:
viab.c按回車(chē)鍵輸入以下代碼段,
#includc<stdio.h>
#include<unisted.h>
main()
{printtpaaaa'');
)
按ESC鍵,再按“:WQ”(W是保存,Q是退出)
出現(xiàn)提示符:[root@GGG-LINUXrootl#
鍵入:gcc-。abab.c進(jìn)行編譯。
執(zhí)行:./ab
L2.3主要系統(tǒng)調(diào)用函數(shù)
1.2.1系統(tǒng)調(diào)用fork()
功能:創(chuàng)建一個(gè)新的進(jìn)程.
頭文件:#include<unistd.h>
說(shuō)明:本系統(tǒng)調(diào)用產(chǎn)生一個(gè)新的進(jìn)程,叫子進(jìn)程,是調(diào)用進(jìn)程的一個(gè)復(fù)制品.調(diào)用進(jìn)程
.2.
叫父進(jìn)程,子進(jìn)程繼承了父進(jìn)程的幾乎全部的屬性。
(1)該子進(jìn)程繼承了父進(jìn)程的程序空間,復(fù)制了父進(jìn)程的數(shù)據(jù)段和棧段。也就是說(shuō)
不管是父進(jìn)程還是子進(jìn)程,在占有處理機(jī)后,都從fork()調(diào)用的返回點(diǎn)起先
運(yùn)行;
(2)調(diào)用勝利則對(duì)父進(jìn)程返回子進(jìn)程標(biāo)識(shí)號(hào)pid;
(3)調(diào)用勝利對(duì)子進(jìn)程返回(),這也是最便利的區(qū)分父子進(jìn)程的方法。
(4)若調(diào)用失敗則返回-1給父進(jìn)程,子進(jìn)程不生成。
留意:假如fork。值>0:0的數(shù)即是子進(jìn)程號(hào)。但這時(shí)是父進(jìn)程占有處理機(jī)。
1.2.2系統(tǒng)調(diào)用wait(&status):
功能:等待子進(jìn)程結(jié)束。
(1)當(dāng)有多個(gè)子進(jìn)程時(shí),任一個(gè)子進(jìn)程結(jié)束即將限制返回調(diào)用者,并將子進(jìn)程調(diào)用
exit(status)時(shí)的status值送到&slalus指針?biāo)竼卧小?/p>
(2)在限制返回調(diào)用者時(shí),同時(shí)將所等到的子進(jìn)程pid作為wait()系統(tǒng)調(diào)用函數(shù)
的返回值。
(3)waitpid(pid,-):等待pid所指定的進(jìn)程結(jié)束。
(4)返回值:等待到一個(gè)子進(jìn)程返回時(shí),返回值為該子進(jìn)程號(hào);否則返回值為
說(shuō)明:允許調(diào)用進(jìn)程(即父進(jìn)程)取得子進(jìn)程的狀態(tài)信息,調(diào)用進(jìn)程將會(huì)掛起直到其一
個(gè)子進(jìn)程終止。
1.2.3系統(tǒng)調(diào)用exit()
功能:終止進(jìn)程.
語(yǔ)法:#include<stdlib.h>
voidexit(status)
intstatus
功能:調(diào)用進(jìn)程被該系統(tǒng)調(diào)用終止。該系統(tǒng)調(diào)用發(fā)出后,操作系統(tǒng)將從系統(tǒng)中刪除
調(diào)用exit的進(jìn)程,并將status值傳給等待它結(jié)束的父進(jìn)程。
返回值:無(wú)
1.2.4系統(tǒng)調(diào)用kill()
功能:向一個(gè)或一組進(jìn)程發(fā)送一個(gè)信號(hào)。
語(yǔ)法:#include<signal.h>
intkill(pid,sig);
pid_tpid;intsig;
說(shuō)明:向一個(gè)或一組進(jìn)程發(fā)送一個(gè)信號(hào),該信號(hào)由參數(shù)sig指定,為系統(tǒng)給出的信號(hào)表
中的一個(gè)。
Sig是signal的縮寫(xiě)。
.3.
返回值:調(diào)用勝利則返回0,否則返回-1.
kill-STOP[pid]:發(fā)送SIGSTOP(17,19,23)停止一個(gè)進(jìn)程,而并不殲滅這個(gè)進(jìn)程。
kill-CONT[pid]:發(fā)送SIGCONT(19,18,25)重新起先一個(gè)停止的進(jìn)程。
kill-KILL[pid]:發(fā)送SIGKILL(9)強(qiáng)迫進(jìn)程馬上停止,并且不實(shí)施清理操作。
kill-9-1:終止擁有的全部進(jìn)程。
SIGKILL和SIGSTOP信號(hào)不能被捕獲、封鎖或者忽視。
1.2.5系統(tǒng)調(diào)用lockf()
功能:應(yīng)用、檢測(cè)或刪除打開(kāi)文件的一個(gè)POSIX鎖
語(yǔ)法:#includc<unistd.h>
intlockf(intfd,intcmd,ofOlen);
說(shuō)明:
應(yīng)用、檢測(cè)或刪除打開(kāi)文件某部分的一個(gè)POSIX鎖,文件通過(guò)fd指明,文件的描
述符的懇求操作通過(guò)cmd指明。
#dcfincF_ULOCK0解鎖一個(gè)區(qū)域
#defineF_LOCK1上鎖一個(gè)區(qū)域
#defineF_TLOCK2檢測(cè)并上鎖一個(gè)區(qū)域
#defineF_TEST3檢測(cè)一個(gè)區(qū)域是否上鎖
文件上鎖區(qū)域的懇求起始于隱含的偏移并包好len字節(jié),假如len為負(fù),從
pos...pos+len-l,這里pos為當(dāng)前文件位置,假如len為零,則位置從當(dāng)前文件位置延
長(zhǎng)延長(zhǎng)到無(wú)限長(zhǎng),包括當(dāng)前和以后的文件最終的位置。在全部狀況下,位置可延長(zhǎng)到
以前當(dāng)前的文件的最終位置。
在Linux中,這稱(chēng)為fcntl(2)的接口(一般會(huì)指明lockf和fcntl的關(guān)系)。
1.2.6系統(tǒng)調(diào)用pipe()
是用來(lái)建立管道的。
語(yǔ)法:#include<unistd.h>
intpipeiintfd[2]);這里fd⑴為寫(xiě)入端,fd⑼為讀出端。
功能:從管道里寫(xiě)或從管道里讀。
.4.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
其次部分試驗(yàn)內(nèi)容
試驗(yàn)一熟識(shí)LINUX基本吩咐及編程環(huán)境
一、試驗(yàn)類(lèi)型
本試驗(yàn)為驗(yàn)證性試驗(yàn)。
二、試驗(yàn)?zāi)康呐c任務(wù)
1)熟識(shí)運(yùn)用Linux字符界面,窗口系統(tǒng)的常用吩咐;
2)熟識(shí)運(yùn)用Linux常用的編程工具;
3)熟識(shí)運(yùn)用Linux的在線(xiàn)求助系統(tǒng)。
三、預(yù)習(xí)要求
1)熟識(shí)一種操作系統(tǒng)的運(yùn)用和安裝,如windows操作系統(tǒng)的安裝,DOS系統(tǒng)的運(yùn)
用
2)了解進(jìn)程的概念及進(jìn)程的狀態(tài)
3)熟識(shí)c語(yǔ)言程序設(shè)計(jì)
4)熟識(shí)c語(yǔ)言程序編譯過(guò)程
四、試驗(yàn)基本原理
進(jìn)入Linux操作系統(tǒng)后,限制終端的吩咐行輸入方式下輸入各種吩咐,并顯示各
種吩咐操作后的輸出結(jié)果,操作包括文件操作吩咐的運(yùn)用,vi吩咐的運(yùn)用以及gcc編
譯器的運(yùn)用,具體的各種吩咐及運(yùn)用方式見(jiàn)第一部分的介紹。
五、試驗(yàn)儀器與設(shè)備(或工具軟件)
試驗(yàn)設(shè)備:計(jì)算機(jī)一臺(tái),軟件環(huán)境要求:安裝RedHatLinux操作系統(tǒng)和gcc
編譯器。
六、試驗(yàn)內(nèi)容
1)運(yùn)用常用的操作吩咐Is,cp,rm,mkdir,man,vi等。
2)熟識(shí)怎么編輯一個(gè)程序(編輯,調(diào)試,運(yùn)行見(jiàn)),輸入一個(gè)簡(jiǎn)潔的C程序進(jìn)行
練習(xí),參考練習(xí)程序如下:
程序1
#include<sldio.h>
.5.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
main()
intpl;
while((pl=fork())==-l);
if(pl==O)
putchar('B');
elseputchar('A');
)
)
程序2
#include<stdio.h>
#include"stdafx.h"
main()
(
introw,column,num,n=6;
for(row=1;row<n;row++)
{for(column=1;column<n-row;column++)
printfC'");
for(num=row;num>=1;num—)
printf('%d",num);
for(num=2;num<=row;num++)
printf("%d",num);
printf(H\n");
}I
七、試驗(yàn)步驟
1)進(jìn)入Linux操作系統(tǒng)
開(kāi)機(jī)后,選擇進(jìn)入Linux操作系統(tǒng)方式,輸入用戶(hù)名和密碼,即可進(jìn)入Linux操作
系統(tǒng)。
2)進(jìn)入限制終端的吩咐行輸入方式
在Linux操作系統(tǒng)環(huán)境下,點(diǎn)擊“小紅帽”菜單,選擇“系統(tǒng)”下拉菜單,選擇“終
端”選項(xiàng),進(jìn)入吩咐行輸入方式。
3)輸入吩咐后按回車(chē)鍵
在吩咐行輸入方式下,輸入各種文件操作吩咐,并按回車(chē)查看顯示結(jié)果,
八、留意事項(xiàng)
.6.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
1)gcc編譯器不能編譯不帝擴(kuò)展名的C語(yǔ)言程序。
2)留意編譯和運(yùn)行程序的基本過(guò)程。
3)留意嫻熟運(yùn)用man吩咐來(lái)查看某條吩咐的含義及運(yùn)用方式。
九、試驗(yàn)報(bào)告要求
要求列出多條吩咐的運(yùn)用和相應(yīng)結(jié)果,須要列出運(yùn)行了的程序清單及相應(yīng)結(jié)果,并
對(duì)結(jié)果進(jìn)行分析和探討,
.7.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
試驗(yàn)二進(jìn)程管理
一、試驗(yàn)類(lèi)型
本試驗(yàn)為設(shè)計(jì)性試驗(yàn)。
二、試驗(yàn)?zāi)康呐c任務(wù)
1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)分。
2)進(jìn)一步相識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)
三、預(yù)習(xí)要求
1)進(jìn)程的概念
2)進(jìn)程限制的概念及內(nèi)容
3)進(jìn)程的并發(fā)執(zhí)行
4)熟識(shí)互斥的概念
5)用到的Linux函數(shù)有:fork(),lockf()等。
四、試驗(yàn)基本原理
運(yùn)用fork。系統(tǒng)調(diào)用來(lái)創(chuàng)建一個(gè)子進(jìn)程,父進(jìn)程和子進(jìn)程并發(fā)執(zhí)行,交替輸出結(jié)果。
運(yùn)用lockf()系統(tǒng)調(diào)用對(duì)臨界區(qū)進(jìn)行加鎖操作,實(shí)現(xiàn)對(duì)共享資源的互斥運(yùn)用。
五、試驗(yàn)儀器與設(shè)備(或工具軟件)
試驗(yàn)設(shè)備:計(jì)算機(jī)一臺(tái),軟件環(huán)境要求:安裝RedHatLinux操作系統(tǒng)和gcc編
譯器。
六、試瞼內(nèi)容
1)進(jìn)程的創(chuàng)建
編寫(xiě)一段程序,運(yùn)用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子程序。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)
中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)°讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯
示字符“a”;子進(jìn)程分別顯示字符“b”和字符飛”。運(yùn)行程序1()次,視察記錄屏幕上的顯
示結(jié)果,并分析緣由。
2)進(jìn)程的限制
修改已編寫(xiě)的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話(huà),再視察
程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析緣由。假如在程序中運(yùn)用系統(tǒng)調(diào)用bckf()來(lái)給
每一個(gè)進(jìn)程加鎖,可以實(shí)現(xiàn)進(jìn)程間的互斥,視察并分析出現(xiàn)的現(xiàn)象。
(1)進(jìn)程的創(chuàng)建參考程序如下:
.8.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
#inciude<stdio.h>
main()
(
intpl,p2;
while((p1=fork())=-1);
if(pl!=O)
(
while(((p2=fork())==-1);
if(p2==0)putchar('b');
elseputchar('c');
)
elseputchar('a');
)
運(yùn)行結(jié)果:bca(或bac)
分析:從進(jìn)程并發(fā)執(zhí)行來(lái)看,輸出bac,acb等狀況都有可能。
緣由:fork。創(chuàng)建進(jìn)程所需的時(shí)間要多于輸出一個(gè)字符的時(shí)間,因此在主程序創(chuàng)建
進(jìn)程的同時(shí),進(jìn)程2就輸出了“b。而進(jìn)程2和主程序的輸出次序是隨機(jī)的,所以出現(xiàn)
上述結(jié)果。
(2)進(jìn)程的限制參考程序如下
#include<stdio.h>
main()
{intpl,p2,i;
while((pl=fork())==-l);
if(pl==0)
{for(i=0;i<5()();i++)
printf("child%d\n”,i);
)
else
(
while((p2=fork())==-1);
if(p2==0)
for(i=0;i<500;i++)
printf("son%d\n",i);
elsefor(i=0;i<500;i++)
printf("daughter%d\n",i);
9
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
運(yùn)行結(jié)果:略
分析:由于函數(shù)p「intf()輸出和字符串之間不會(huì)被中斷,因此字符串內(nèi)部的字符依
次輸出不變。但是由于進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度依次和父進(jìn)程的搶占處理機(jī)問(wèn)題,輸出
字符串的依次和先后隨著執(zhí)行的不同而發(fā)生改變。
進(jìn)程加鎖后的參考程序如下:
#include<stdio.h>
main()
{intpl,p2,i;
while((pl=fork())==-l);
if(pl==O)
(
lock(1,1,0);
for(i=0;i<500;i++)
printf("child%d\n",i);
lock(1,0,0);
)
else
(
while((p2=fork())==-1);
if(p2==0)
{
lock(1,1,0)
for(i=0;i<500:i++)
printf("son%d\n",i);
lock(1,0,0)
else
(
lock(1,1,0)
for(i=0;i<500;i++)
printf("daughter%d\n",i);
lock(1,0,0)
}
)
)
.10.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
運(yùn)行結(jié)果:略
分析:學(xué)生自己完成
七、試驗(yàn)步驟
1)進(jìn)入vi編輯器
2)在編譯器中輸入所要運(yùn)行的程序代碼
3)退出編輯器,返回吩咐行輸入方式,運(yùn)用gcc編譯器編譯程序,獲得能運(yùn)行的
目標(biāo)程序。
4)運(yùn)行目標(biāo)程序,查看運(yùn)行結(jié)果。
八、留意事項(xiàng)
1)假如運(yùn)用gcc編譯程序有錯(cuò)的話(huà),須要重新修改程序,直到無(wú)錯(cuò)為止。
2)留意系統(tǒng)是如何創(chuàng)建進(jìn)程的?
3)查看結(jié)果是否是交替輸出,假如修改輸出的次數(shù)是否會(huì)出現(xiàn)交替現(xiàn)象?
4)相關(guān)函數(shù)的介紹見(jiàn)第一部分的介紹。
九、試驗(yàn)報(bào)告要求
須要列出運(yùn)行了的程序清單及相應(yīng)結(jié)果,并對(duì)結(jié)果進(jìn)行分析和探討。對(duì)結(jié)果的分
析主要探討結(jié)果為什么會(huì)交替出現(xiàn)?并發(fā)進(jìn)程是如何執(zhí)行的?
.11.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
試驗(yàn)三進(jìn)程調(diào)度
一、試驗(yàn)類(lèi)型
本試驗(yàn)為綜合性試驗(yàn)
二、試驗(yàn)?zāi)康呐c任務(wù)
在采納多道程序設(shè)計(jì)的系統(tǒng)中,往往有若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài)。當(dāng)就緒進(jìn)
程個(gè)數(shù)大于處理機(jī)數(shù)時(shí),就必需依照某種策略來(lái)確定那些進(jìn)程優(yōu)先占用處理機(jī)。本試
驗(yàn)?zāi)M在單處理機(jī)狀況下的處理機(jī)調(diào)度,幫助學(xué)生加深了解處理機(jī)調(diào)度的工作。
三、預(yù)習(xí)要求
I)熟識(shí)進(jìn)程限制塊和進(jìn)程組織方式
2)熟識(shí)進(jìn)程調(diào)度的概念
3)熟識(shí)時(shí)間片輪轉(zhuǎn)調(diào)度算法等
4)熟識(shí)c語(yǔ)言編程,指針及結(jié)構(gòu)體等學(xué)問(wèn)
5)數(shù)據(jù)結(jié)構(gòu)中的鏈表的建立及基本操作
四、試驗(yàn)基本原理
進(jìn)程限制塊通過(guò)鏈表隊(duì)列的方式組織起來(lái),系統(tǒng)中存在運(yùn)行隊(duì)列和就緒隊(duì)列(為
簡(jiǎn)潔起見(jiàn),不設(shè)堵塞隊(duì)列),進(jìn)程的調(diào)度就是進(jìn)程限制塊在運(yùn)行隊(duì)列和就緒隊(duì)列之間的
切換。當(dāng)須要調(diào)度時(shí),從就緒隊(duì)列中選擇一個(gè)進(jìn)程占用處理機(jī),即從就緒隊(duì)列中刪除
一個(gè)進(jìn)程,插入到運(yùn)行隊(duì)列中,當(dāng)占用處理機(jī)的進(jìn)程運(yùn)行的時(shí)間片完成后,放棄處理
機(jī),即在運(yùn)行隊(duì)列中的進(jìn)程限制塊等待一段時(shí)間(時(shí)間片)后,從該隊(duì)列上刪除,假
如該進(jìn)程運(yùn)行完畢,則刪除該進(jìn)程(節(jié)點(diǎn));否則,則插入到就緒隊(duì)列中。
五、試驗(yàn)儀器與設(shè)備(或工具軟件)
試驗(yàn)設(shè)備:計(jì)算機(jī)一臺(tái),軟件環(huán)境要求:安裝RedHatLinux操作系統(tǒng)和gcc編譯
器。
六、試驗(yàn)內(nèi)容
設(shè)計(jì)一個(gè)時(shí)間片輪轉(zhuǎn)調(diào)度算法實(shí)現(xiàn)處理機(jī)調(diào)度的程序,具體內(nèi)容如下
I)試驗(yàn)中運(yùn)用的數(shù)據(jù)結(jié)構(gòu)
(DPCB進(jìn)程限制塊
內(nèi)容包括參數(shù)①進(jìn)程名name:②要求運(yùn)行時(shí)間runtime:③優(yōu)先數(shù)prior:④狀態(tài)
.12.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
state;⑤已運(yùn)行時(shí)間runedtimeo
(2)為簡(jiǎn)潔起見(jiàn),只設(shè)運(yùn)行隊(duì)列,就緒鏈表兩種數(shù)據(jù)結(jié)構(gòu),進(jìn)程的調(diào)度在這兩個(gè)隊(duì)
列中切換,如圖3.1所示
圖3.1PCB鏈表
2)每個(gè)進(jìn)程運(yùn)行時(shí)間隨機(jī)產(chǎn)生,為1~20之間的整數(shù)。
3)時(shí)間片的大小由試驗(yàn)者自己定義,可為3或5
4)可參考的程序流程圖如圖3.2
圖3.2模擬進(jìn)程調(diào)度的流程圖
.13.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
5)參考程序
include"stdio.h"
#include"stdlib.h"
typedefstructPCB
(
ininame;
intruntime;
intrunedtirne;
intstate;
intkilltimc;
structPCB*next;
}PCB;
#defineNUM10
voidmain()
(
inttimcslice=3;
PCB*runqueue;
PCB*top,*tail,*tcmp;
inti;
srand(10);
for(i=0;i<NUM;i++)
(
temp=newPCB;
temp->name=i;
tcinp->runtime=rand()%20;
teiTip->runedtime=O;
temp->next=NULL;
temp->kilkime=0;
if(i==0){top=temp;tail=temp;}
else{
tail->next=temp;
tail=tcinp;
)
printf("processname%d,runtime二%d,runcdtime=%d,killtime=%d\n"
,tail->name,(ail->run(ime,tail->runed(ime,iail->killtime);
I
while(top!=NULL)
{
runqueue=top;
top=top->ncxt;
runqueue->next=NULL;
runqucuc->runtimc=runqucuc->runtimc-timcslicc;
if(runqueue->runtime<=0)
.14
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
runqucuc->kiHtime=runqucuc->runtimc+timcslicc;
iunqueue->runedtime=runqueue->runedtime+iunqueue->killtime;
runqucuc->runtimc=O;
printf("processname%d,runtime=%d,runedtime=%d,killtime=%d\n"
,runqueue->name,ninqueue->runtime.runqueue->runedtime,runqueue->killtinie);
)
else{
runqueue->kilkime=tinieslice;
runqueue->iunedtinie=runqueue->runediime+runqueue->killtime;
printf("proccssname%d,runtime=%d,runedtime=%d,killtime=%d\n"
,runqueue->name,runqueue->runtime,runqueue->runedtime,runqueue->killtime);
tail->next=runqueve;
tail=tail->next;
)
6)運(yùn)行結(jié)果,包括各個(gè)進(jìn)程的運(yùn)行依次,每次占用處理機(jī)的運(yùn)行時(shí)間,可以參考
下列輸出如圖4.3o
processnane=l,run=8,runed=3killtine=3
processname=2,run^0.runcd=3killtinc?3
processnamerun-13,rttned-3.killtime-3
processname=4f.run=6,runed=3^killtine=3
processi*un=0^runed=l-killtine=l
processname=6/run"11-runcd?3^killtinc-3
processnamerun=4^run匕(17-killtime-3
processname=8.run=16,rttned=3?killtine=3
processname=9.run=9,runed=3,killtine=3
processname-10,run-2-rttncd-3.killtinc-3
processname=1,run=5^runed=6.killtine-3
processname=3,run=10,ritned=6.killtine=3
pvocosaname—4,i*un-3,runod-G,kill七itn?-3
processnamerun-8,runcd-6.killtinc-3
processname=7.run=1?runed=6,killtine=3
processname=8-vun=13_riined=6^killtine=3
processname=9/run=6,runed=6-killtinc=3
processname-10?run-0,runed-5.killtine-2
processname=l-run=2-runed=9-kllltine=3
processname=3,run=7^runed=9killtine=3
processname=4,run^-O,runcd=9^.killtinc-3
processname-6^run-5.ruued-9.killtine-3
processnameK.run=0^Mned=7〃killtine=l
processname=8,run=10-i*aned=9.killtine=3
processname-9,run-3,runcd"9.killtinc-3
processnane-l.run-0。runed=ll.killtime?2
圖4.3輸出結(jié)果示意圖
七、試驗(yàn)步驟
I)進(jìn)入vi編輯器
2)在編譯器中輸入所要運(yùn)行的程序代碼
3)退出編輯器,返回吩咐行輸入方式,運(yùn)用gcc編譯器編譯程序,獲得能運(yùn)行的
目標(biāo)程序。
4)運(yùn)行目標(biāo)程序,查看運(yùn)行結(jié)果。
.15
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
八、留意事項(xiàng)
1)修改時(shí)間片大小,查看對(duì)試驗(yàn)結(jié)果的影響。
2)隨機(jī)數(shù)的產(chǎn)生由rand。函數(shù)實(shí)現(xiàn),rand()的輸出隨機(jī)數(shù)范圍在()~2匕之間,須要
轉(zhuǎn)換到0~20范圍。
3)留意鏈表節(jié)點(diǎn)的插入,刪除方法。
九、試驗(yàn)報(bào)告要求
須要列出運(yùn)行了的程序清單及相應(yīng)結(jié)果,并對(duì)結(jié)果進(jìn)行分析和探討。對(duì)結(jié)果的分
析主要探討時(shí)間片大小對(duì)程序執(zhí)行的影響?
.16.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
試驗(yàn)四進(jìn)程間通信
一、試驗(yàn)類(lèi)型
木試驗(yàn)為設(shè)計(jì)性試驗(yàn)
二、試驗(yàn)?zāi)康呐c任務(wù)
了解Linux系統(tǒng)中的進(jìn)程管道通信的基本原理,并能編寫(xiě)簡(jiǎn)潔的管道通信的程序。
三、預(yù)習(xí)要求
1)熟識(shí)進(jìn)程通信的概念
2)熟識(shí)管道通信的基本原理
3)用到的系統(tǒng)調(diào)用有pipe。
四、試驗(yàn)基本原理
試驗(yàn)利用Linux操作系統(tǒng)供應(yīng)的系統(tǒng)調(diào)用pipe。來(lái)實(shí)現(xiàn)兩個(gè)進(jìn)程之間的通信。輸入
進(jìn)程從管道的一端輸入數(shù)據(jù),另一個(gè)進(jìn)程從管道的另一端讀數(shù)據(jù),通過(guò)這種方式來(lái)實(shí)
現(xiàn)進(jìn)程間的通信。
五、試驗(yàn)儀器與設(shè)備(或工具軟件)
試驗(yàn)設(shè)備:計(jì)算機(jī)一臺(tái),軟件環(huán)境要求:安裝RedHalLinux操作系統(tǒng)和gcc編譯
器C
六、試驗(yàn)內(nèi)容
編制一段程序,實(shí)現(xiàn)進(jìn)程管道通信。運(yùn)用系統(tǒng)調(diào)用pipe。建立一條管道。兩個(gè)子進(jìn)
程PI和P2分別向管道各寫(xiě)一句話(huà):
Childprocess1issendingmessage!
Childprocess2issendingmessage!
而父進(jìn)程則從管道中讀出來(lái)自?xún)蓚€(gè)子進(jìn)程的信息、,顯示在屏幕上。
參考程序程序如下
#include<unistd.h>
#include<signal.h>
#includc<stdio.h>
intpidl,pid2;
main(){
intfd[2J;
.17.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
charOutPipellOOJJnPipel100J;
pipe(fd);
while((pidl=fork())==-l);
if(pidl==O){
lockf(fd[l],l,0);
sprintf(OutPipe,"\nChildprocess1issendingmessage!\n");
write(fd[l],OutPipe,50);
sleep(5);
lockf(fd[l],0,0);
exi1(0);
)
else{
while((pid2=fork())==-1);
if(pid2==0){
lockf(fd[l],l,0);
sprintf(OutPipe,"\nChildprocess2issendingmessage!\n");
write(fd[l],OutPipe,50);
sleep(5);
lockf(fd[1],(),());
exit(0);
)
clsc{
wait(0);
read(fd[0],InPipe,50);
prinlf("%s\n”,InPipe);
wait(0);
read(fd[0],InPipc,50);
printf("%s\n",InPipe);
exit(O);
)
)
)
七、試驗(yàn)步驟
1)進(jìn)入vi編輯器
2)在編譯器中輸入所要運(yùn)行的程序代碼
.18.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
3)退出編輯器,返回吩咐行輸入方式,運(yùn)用gcc編譯器編譯程序,獲得能運(yùn)行的
目標(biāo)程序。
4)運(yùn)行目標(biāo)程序,查看運(yùn)行結(jié)果。
八、留意事項(xiàng)
1)管道按怎樣的方式傳送消息?是否能夠雙向傳送消息?
2)在管道通信方式中,如何來(lái)實(shí)現(xiàn)進(jìn)程同步與互斥的?
3)pipe。函數(shù)的運(yùn)用可參看第一部分的介紹。
九、試驗(yàn)報(bào)告要求
須要列出運(yùn)行了的程序清單及相應(yīng)結(jié)果,并對(duì)結(jié)果進(jìn)行分析和探討。對(duì)結(jié)果的分
析主要探討管道通信方式的特點(diǎn),試驗(yàn)結(jié)果是否體現(xiàn)該特點(diǎn)。
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
試驗(yàn)五存儲(chǔ)管理試驗(yàn)
一、試驗(yàn)類(lèi)型
本試驗(yàn)為綜合性試驗(yàn)。
二、試驗(yàn)?zāi)康呐c任務(wù)
1)理解動(dòng)態(tài)異長(zhǎng)存儲(chǔ)分區(qū)資源管理
2)駕馭所需數(shù)據(jù)結(jié)構(gòu)和管理程序
3)了解各種存儲(chǔ)安排算法的優(yōu)點(diǎn)利缺點(diǎn)。
4)編程實(shí)現(xiàn)動(dòng)態(tài)不等長(zhǎng)存儲(chǔ)管理的模擬程序。
三、預(yù)習(xí)要求
I)進(jìn)程限制的概念及內(nèi)容
2)熟識(shí)存儲(chǔ)管理的概念
3)了解動(dòng)態(tài)分區(qū)管理的思想,熟識(shí)安排算法和回收算法
4)熟識(shí)c語(yǔ)言編程,指針及結(jié)構(gòu)體等學(xué)問(wèn)
5)數(shù)據(jù)結(jié)構(gòu)中的鏈表的建立及基本操作
四、試驗(yàn)基本原理
運(yùn)用一個(gè)一維數(shù)組來(lái)模擬內(nèi)存儲(chǔ)空間,建立內(nèi)存塊來(lái)記錄內(nèi)存安排運(yùn)用狀況,通過(guò)
隨機(jī)產(chǎn)生進(jìn)程及其所須要的內(nèi)存來(lái)模擬真實(shí)的進(jìn)程。通過(guò)給進(jìn)程安排內(nèi)存及回收來(lái)實(shí)
現(xiàn)對(duì)動(dòng)態(tài)不等長(zhǎng)存儲(chǔ)管理方法。
五、試驗(yàn)儀器與設(shè)備(或工具軟件)
試驗(yàn)設(shè)備:計(jì)算機(jī)一臺(tái),軟件環(huán)境要求:安裝RedHatLinux操作系統(tǒng)和gcc編
譯器。
六、試驗(yàn)內(nèi)容
I)試驗(yàn)中運(yùn)用的數(shù)據(jù)結(jié)構(gòu)
(1)內(nèi)存塊表,包括參數(shù)①進(jìn)程名name;②起始地址address;③長(zhǎng)度length;
④標(biāo)記flag,表示該塊是否被安排。
(2)為簡(jiǎn)潔起見(jiàn),只設(shè)內(nèi)存安排記錄鏈表數(shù)據(jù)結(jié)構(gòu),用來(lái)記錄內(nèi)存安排與空閑狀
況。
2)試驗(yàn)中假設(shè)有若干個(gè)進(jìn)程,如5個(gè),每個(gè)須要空間隨機(jī)產(chǎn)生,為0~2()之間的整
.20.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
數(shù),進(jìn)程名字試驗(yàn)者自己定義,可以是一個(gè)整數(shù)。
3)其他一些參數(shù),如內(nèi)存空間的大小試驗(yàn)者自己定義,建議為100;
4)為了得到清楚的試驗(yàn)結(jié)果,建議先給每個(gè)進(jìn)程安排存儲(chǔ)空間,后進(jìn)行回收。
5)程序的流程圖如圖5.1,圖5.2,圖5.3
圖5.1總的流程圖圖5.2安排流程圖
圖53回收流程圖
6)參考程序
#include"math.h"
#include"stdafx.h"
^include"stdio.h,,
21.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
#include"stdlib.h"
typedefstructMEMORY.BLOCK
(
intname;
intaddress;
intlength:
intflag;
MEMORY.BLOCK*next;
}MEM()RY_BLOCK;
intallocation(MEMORY_BLOCK+Hname,intlime);
intreclaini(intprocessname,MEMORY_BLOCK*Hcadcr);
intmain()
(
#defineNUM10
int
MEMORY.BLOCK*Header,*t;
Header=newMEMORY_BLOCK;〃初始化存儲(chǔ)空間
Hcadcr->namc=-1;
Header->address=O;
Header->length=100;
Header->tlag=O;
Header->next=NULL;
srand(lOO);
for(i=0;i<NUM;i++)
{
time=rand()%20;//(ime=time%20;
allocation(Hcadcr,i,tinie);
}
t=Header;
while(t!=NULL)
{
printf("processname%d,addrcss=%d,lcngth=%d,flag=%d\n"
,t->name,t->address,t->length,t->flag);
t=t->next;
)
intprocessname=3;〃回收
printf("回收processname%d\n”,processname);
reclaim(processname,Header);
t=Headcr;
while(t!=0)
{
print('("processname%d,address=%d,length=%djlag=%d\n"
,t->name,t->address,t->length,t->flag);
t=t->next;
}
proccssnamc=4;
.22.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
printf("回收processname%d\n",proccssnamc);
rcclaim(proccssnamc.Hcadcr);
t=Header;
while。!=0)
{
printf("processname%d,address=%d,length=%d,flag=%d\n"
,t->name,t->address,t->length,t->flag);
t=t->next;
)
return1;
)
intreclaim(intprocessname,MEMORY_BLOCK*Header)
(
MEMORY_BLOCK
t=Header;
temp=t;
while(t->name!=processname)
{
cemp=l;
t=t->next;
)
if(t==O){printf("noprocess");return0;}
else
{if(t->next!=NULL)
if(tcmp->flag==0&&t->ncxt->flag==0)//£右為空
{lemp->name=-1;
temp->length=temp->lcngth+t->length+t->next->length;
l(=t->nexl;
temp->next=tt->next;
deleteit;
deletet;
)
elseif(temp->flag==0)〃左為空
{
temp->name=-1;
tenip->length=teiTip->length+t->length;
temp->next=t->next;
deletet;
)
elseif(l->nexl->flag==0)//右為空
(
l->name=-1;
t->length=t->length+t->next->length;
t->tlag=O;
tt=t->next:
t->ncxt=tt->ncxt;
.23.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
deletett;
else{
t->name=-1;
t->tlag=O;
}
else
{
if(temp->flag==O)〃左為空
{
tcmp->namc=-1;
temp->leng(h=temp->leng(h+t->length;
temp=t->next;
deletet;
}
else{
t->name=-1;
t->flag=O;
return1;
)
intallocation(MEMORY_BLOCK*Header,intname,inttime)
(
MEMORY.BLOCK
intthresh=2;
t=Header;
while(t!=0)
{
if(t->lcngth>timc&&t->flag==O)break;
t=t->next;
)
if(t==O){printf("nomemory:%d\n'\name);return0;}
else{
if(t->length-time>thresh)〃分割
(
temp=newMEMORY.BLOCK;
temp->name=-1;
lemp->llag=0;
temp->length=t->length-time;
tenip->address=t->address+lime;
t->name=name;
t->flag=l;
.24.
計(jì)算機(jī)操作系統(tǒng)試驗(yàn)指導(dǎo)書(shū)
t->lcngth=timc;
tcmp->ncxt=t->ncxt;
t->nexl=temp;
)
else〃干脆安排
(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 林地租賃協(xié)議合同
- 林業(yè)流轉(zhuǎn)合同范本
- 木工合同轉(zhuǎn)包協(xié)議
- 模具費(fèi)支付協(xié)議書(shū)
- 沒(méi)收訂金合同范本
- 北京聯(lián)通協(xié)議書(shū)
- 大棚賣(mài)棚合同范本
- 建房定金合同范本
- 委托回收合同范本
- 回收衣服合同范本
- 鐵路工程道砟購(gòu)銷(xiāo)
- 2024年廣東省廣州市中考?xì)v史真題(原卷版)
- 壯醫(yī)藥線(xiàn)療法
- 超星爾雅學(xué)習(xí)通《中國(guó)古代史(中央民族大學(xué))》2024章節(jié)測(cè)試答案
- 項(xiàng)目4任務(wù)1-斷路器開(kāi)關(guān)特性試驗(yàn)
- 編輯打印新課標(biāo)高考英語(yǔ)詞匯表3500詞
- (高清版)DZT 0215-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 煤
- 高層建筑消防安全培訓(xùn)課件
- 實(shí)驗(yàn)診斷學(xué)病例分析【范本模板】
- 西安交大少年班真題
- JJF(石化)006-2018漆膜彈性測(cè)定器校準(zhǔn)規(guī)范
評(píng)論
0/150
提交評(píng)論