




已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書煙臺(tái)大學(xué)計(jì)算機(jī)學(xué)院操作系統(tǒng)課程組2008-9-20第一部分 操作系統(tǒng)上機(jī)指導(dǎo)Linux操作系統(tǒng)環(huán)境:RedHat Enterprise Linux ES release 3 (Taroon Update 1) (2.4.21-9.EL)Red Flag Linux release 4.0 (HOT) (2.4)登錄到系統(tǒng)RedHat LinuxRed Flag Linux啟動(dòng)Grub啟動(dòng)Grub在GRUB中選擇Red Flag Linux (Console Mode) /*命令行模式*/在GRUB中選擇RedHat Enterprise Linux ES(2.4.21-9.EL)登錄界面*用戶名:root *密碼:computerLocalhost Login:Password:注意密碼沒有回顯登錄成功Last login:web Oct 20 15:35:17 tty1rootlocalhost root#常用命令練習(xí):用root賬號(hào)(超級(jí)用戶)注冊,口令為computer(注意大小寫)。注冊成功出現(xiàn)#號(hào)(超級(jí)用戶系統(tǒng)提示符,普通用戶的系統(tǒng)提示符為$)。1 注銷(退出)系統(tǒng):logout 或exit3練習(xí)使用命令ls(注意Linux命令區(qū)分大小寫。)使用ls 查看當(dāng)前目錄內(nèi)容;使用ls 查看指定目錄內(nèi)容,如/目錄,/etc目錄使用ls all 查看當(dāng)前目錄內(nèi)容;使用dir 查看當(dāng)前目錄內(nèi)容 4使用cd改變當(dāng)前目錄cd . 回到上層目錄 ;cd / 回到根目錄5pwd 顯示當(dāng)前路徑 6建立目錄mkdir mkdir 目錄名 ; mkdir /home/s2001/newdir 7刪除目錄:rmdir;8復(fù)制文件cp: 如 cp 文件名1 文件名29移動(dòng)文件或目錄: mv 10刪除文件 rm11. 顯示文件內(nèi)容:more (分頁顯示); 12. 顯示文件:cat 文件名 建立文件:cat 文件名,ctrl+d結(jié)束輸入使用編輯器vi 編輯文件1. 進(jìn)入linux的文本模式之后,在命令行鍵入vi filename.c 然后回車。下面作一些簡單的解釋:首先vi命令是打開vi編輯器。后面的filename.c是用戶即將編輯的c文件名字,注意擴(kuò)展名字是.c;當(dāng)然,vi編輯器功能很強(qiáng),可以用它來編輯其它格式的文件,比如匯編文件,其擴(kuò)展名字是.s;也可以直接用vi打開一個(gè)新的未命名的文件,當(dāng)保存的時(shí)候再給它命名,只是這樣做不很方便。2. 最基本的命令I(lǐng) :當(dāng)進(jìn)入剛打開的文件時(shí),不能寫入信息,這時(shí)按一下鍵盤上的I鍵(insert),插入的意思,就可以進(jìn)入編輯模式了。如下圖所示: 3. a與i是相同的用法4. 當(dāng)文件編輯完后,需要保存退出,這時(shí)需要經(jīng)過以下幾個(gè)步驟:1)按一下鍵盤上的Esc 鍵;2)鍵入冒號(hào)(:),緊跟在冒號(hào)后面是wq(意思是保存并退出)。如果不想保存退出,則在第二步鍵入冒號(hào)之后,鍵入q!(不帶w,機(jī)尾部保存)。如下圖所示:5. 退出vi編輯器的編輯模式之后,要對(duì)剛才編寫的程序進(jìn)行編譯。編譯的命令是:gcc filename.c -o outputfilename.out,其中g(shù)cc是c的編譯器。參數(shù):filename.c 是要編譯的源文件的名稱,outputfilename表示輸出文件名稱,中括號(hào)表示括號(hào)內(nèi)部的內(nèi)容可輸入也可以不輸入(中括號(hào)本身不再命令行中出現(xiàn))。如果不輸入outputfilename.out,默認(rèn)的輸出文件是a.out 。6. 最后一步是運(yùn)行程序,方法如下:./outputfilename.out添加新用戶、修改文件屬性1 添加新用戶(在root下,按默認(rèn)值回答)adduser 用戶名;如adduser s2001 ; 以新用戶登錄到系統(tǒng)2修改用戶口令 passwd 用戶名3控制文件屬性使用ls l 查看文件屬性改變用戶的所有權(quán):chown 用戶名 文件名改變文件權(quán)限:chmod g+w 文件名;chmod o-r 文件名或使用數(shù)字方式修改:如chmod 644文件名;chmod 755文件名u (user用戶),g ( group組),o (other其他); w 寫訪問權(quán)限,r 讀訪問權(quán)限, x 執(zhí)行權(quán)限4查看相關(guān)命令的幫助:man 命令名5顯示當(dāng)前系統(tǒng)中已注冊的用戶信息:who6顯示當(dāng)前注冊的用戶信息:whoami Tip:與文件鏈接的數(shù)Unix文件目錄的屬性顯示格式:如:-rw-rw-rw- 1 steve users 138 Apr 5 19:34 readme文件的訪問權(quán)限文件的擁有者用戶所在的組文件或目錄名drwxrwxrwx 3 steve users 80 Apr 5 19:43 dir1 最后修改的日期和時(shí)間三種權(quán)限: owner group others第二部分 操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)1 Linux基本環(huán)境1、實(shí)驗(yàn)?zāi)康?(1)熟悉Linux下的基本操作,學(xué)會(huì)使用各種Shell命令去操作Linux,對(duì)Linux有一個(gè)感性認(rèn)識(shí)。 (2)學(xué)會(huì)使用vi編輯器編輯簡單的C語言程序,并能對(duì)其編譯和調(diào)試。2、實(shí)驗(yàn)預(yù)備內(nèi)容(1)參閱相關(guān)Linux操作系統(tǒng)的安裝手冊,熟悉Linux的基本安裝和配置;(2)參閱相關(guān)Linux的命令參考手冊,熟悉Linux下的操作命令。3、實(shí)驗(yàn)內(nèi)容(1) 以root用戶身份登陸,并使用“l(fā)s”,“cat”“cd”等命令來實(shí)現(xiàn)基本的文件操作并觀察Linux文件系統(tǒng)的特點(diǎn);(2) 使用vi編輯器編寫一C程序,并用gcc命令進(jìn)行編譯和鏈接,并用a.out來進(jìn)行輸出結(jié)果。4、思考 (1)Linux系統(tǒng)在用戶登陸和操作界面以及文件系統(tǒng)上有哪些特點(diǎn)?實(shí)驗(yàn)2 進(jìn)程管理1、實(shí)驗(yàn)?zāi)康?(1)加深對(duì)進(jìn)程概念的理解,明確進(jìn)程和程序的區(qū)別。 (2)進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)。 (3)分析進(jìn)程競爭資源現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法。 (4)了解Linux系統(tǒng)中進(jìn)程通信的基本原理。2、實(shí)驗(yàn)預(yù)備內(nèi)容 (1)閱讀Linux的sched.h源文件,加深對(duì)進(jìn)程管理概念的理解。 (2)閱讀Linux的fork.c源文件,分析進(jìn)程的創(chuàng)建過程。3、實(shí)驗(yàn)內(nèi)容 (1)進(jìn)程的創(chuàng)建 編寫一段源程序,使系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,當(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”和字符“c”。試觀察紀(jì)錄屏幕上的顯示結(jié)果,并分析原因。 (2)進(jìn)程的控制 修改已編寫的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話,在觀察程序執(zhí)行時(shí)屏幕出現(xiàn)的現(xiàn)象,并分析原因。 如果在程序中使用調(diào)用lockf()來給每一個(gè)子進(jìn)程加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。 (3)編寫一段程序,使其現(xiàn)實(shí)進(jìn)程的軟中斷通信。 要求:使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來的中斷信號(hào)(即按DEL鍵);當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用Kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止 Parent Process is Killed! 在上面的程序中增加語句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 觀察執(zhí)行結(jié)果,并分析原因。 (4)進(jìn)程的管道通信 編制一段程序,實(shí)現(xiàn)進(jìn)程的管理通信。 使用系統(tǒng)調(diào)用pipe()建立一條管道線;兩個(gè)子進(jìn)程P1和P2分別向管道中寫一句話: Child 1 is sending a message! Child 2 is sending a message! 而父進(jìn)程則從管道中讀出來自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。 要求父進(jìn)程先接收子進(jìn)程P1發(fā)來的消息,然后再接收子進(jìn)程P2發(fā)來的消息。4、思考 (1)系統(tǒng)是怎樣創(chuàng)建進(jìn)程的? (2)可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理? (3)當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里? (4)進(jìn)程通信有什么特點(diǎn)?實(shí)驗(yàn)3 進(jìn)程間通信1、實(shí)驗(yàn)?zāi)康?Linux系統(tǒng)的進(jìn)程通信機(jī)構(gòu) (IPC) 允許在任意進(jìn)程間大批量地交換數(shù)據(jù)。本實(shí)驗(yàn)的目的是了解和熟悉Linux支持的消息通訊機(jī)制及信息量機(jī)制。2、實(shí)驗(yàn)預(yù)備內(nèi)容 閱讀Linux系統(tǒng)的msg.c、sem.c和shm.c等源碼文件,熟悉Linux的三種機(jī)制。3、實(shí)驗(yàn)內(nèi)容 (1)消息的創(chuàng)建,發(fā)送和接收。 使用系統(tǒng)調(diào)用msgget (), msgsnd (), msgrev (), 及msgctl () 編制一長度為1k的消息的發(fā)送和接收程序。 觀察上面的程序,說明控制消息隊(duì)列系統(tǒng)調(diào)用msgctl () 在此起什么作用? (2)共享存儲(chǔ)區(qū)的創(chuàng)建、附接和段接。 使用系統(tǒng)調(diào)用shmget(),shmat(),sgmdt(),shmctl(),編制一個(gè)與上述功能相同的程序。(3) 比較上述(1),(2)兩種消息通信機(jī)制中數(shù)據(jù)傳輸?shù)臅r(shí)間。實(shí)驗(yàn)4 存儲(chǔ)管理1、實(shí)驗(yàn)?zāi)康?存儲(chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。 本實(shí)驗(yàn)的目的是通過請(qǐng)求頁式存儲(chǔ)管理中頁面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的技術(shù)特點(diǎn),掌握請(qǐng)求頁式存儲(chǔ)管理的頁面置換算法。2、實(shí)驗(yàn)內(nèi)容 (1)通過隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共320條指令。指令的地址按下述原則生成: 50%的指令是順序執(zhí)行的; 50%的指令是均勻分布在前地址部分; 50%的指令是均勻分布在后地址部分。 具體的實(shí)施方法是: 在 0,319 的指令之間隨即選取一起點(diǎn)m; 順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令; 在前地址0,m+1中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為m; 順序執(zhí)行一條指令,其地址為 m+ 1; 在后地址m+ 2,319中隨機(jī)選取一條指令并執(zhí)行; 重復(fù)上述步驟-,直到執(zhí)行320次指令。 (2)將指令序列變換為頁地址流 設(shè):頁面大小為1k; 用戶內(nèi)存容量為4頁到32頁; 用戶虛存容量為32k。 在用戶虛存中,按每k存放10條指令排在虛存地址,即320條指令在虛存中的存放方式為: 第0條-第9條指令為第0頁(對(duì)應(yīng)虛存地址為0,9); 第10條-第19條指令為第一頁(對(duì)應(yīng)虛存地址為10,19); 第310條第319條指令為第31頁(對(duì)應(yīng)虛地址為310,319)。 按以上方式,用戶指令可組成32頁。 (3)計(jì)算并輸出下述各種算法在不同內(nèi)存容量下的命中率。 先進(jìn)先出的算法(FIFO); 最近最少使用算法(LRR); 最佳淘汰算法(OPT)先淘汰最不常用的頁地址; 最少訪問頁面算法(LFR); 最近最不經(jīng)常使用算法(NUR)。 其中和為選擇內(nèi)容。命中率=1-頁面失效次數(shù)/頁地址流長度 在本實(shí)驗(yàn)中,頁地址流長度為320,頁面失效次數(shù)為每次訪問相應(yīng)指令時(shí),該指令所對(duì)應(yīng)的頁不在內(nèi)存的次數(shù)。3、隨機(jī)數(shù)產(chǎn)生辦法,Linux或UNIX系統(tǒng)提供函數(shù)strand()和rand(),分別進(jìn)行初始化和產(chǎn)生隨機(jī)數(shù)。例如: srand (); 語句可初始化一個(gè)隨機(jī)數(shù); a0=10*rand()/65535*319+1; a1=10*rand()/65535*a0;語句可用來產(chǎn)生a0與a1中的隨機(jī)數(shù)。實(shí)驗(yàn)5 文件系統(tǒng)設(shè)計(jì)1、實(shí)驗(yàn)?zāi)康?通過一個(gè)簡單多用戶文件系統(tǒng)的設(shè)計(jì),加深理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn)。2、實(shí)驗(yàn)內(nèi)容 為linux系統(tǒng)設(shè)計(jì)一個(gè)簡單的二級(jí)文件系統(tǒng)。要求做到以下幾點(diǎn): (1)可以實(shí)現(xiàn)下列幾條命令(至少4條); login用戶登陸 dir 列文件目錄 create創(chuàng)建文件 delete刪除文件 open 打開文件 close關(guān)閉文件 read 讀文件 write寫文件 (2)列目錄時(shí)要列出文件名、物理地址、保護(hù)碼和文件長度; (3)源文件可以進(jìn)行讀寫保護(hù)。3、實(shí)驗(yàn)提示 (1)首先應(yīng)確定文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):主目錄、子目錄及活動(dòng)文件等。主目錄和子目錄都以文件的形式存放于磁盤,這樣便于查找和修改。 (2)用戶創(chuàng)建的文件,可以編號(hào)存儲(chǔ)于磁盤上。如file0,file1,file2.并以編號(hào)作為物理地址,在目錄中進(jìn)行登記。實(shí)驗(yàn)6 處理器調(diào)度一、實(shí)驗(yàn)內(nèi)容選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理器調(diào)度。二、實(shí)驗(yàn)?zāi)康脑诓捎枚嗟莱绦蛟O(shè)計(jì)的系統(tǒng)中,往往有若干個(gè)進(jìn)程同時(shí)處于就緒狀態(tài)。當(dāng)就緒進(jìn)程個(gè)數(shù)大于處理器數(shù)時(shí),就必須依照某種策略來決定哪些進(jìn)程優(yōu)先占用處理器。本實(shí)驗(yàn)?zāi)M在單處理器情況下的處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的工作。三、實(shí)驗(yàn)題目本實(shí)驗(yàn)有兩個(gè)題,學(xué)生可選擇其中的一題做實(shí)驗(yàn)。第一題:設(shè)計(jì)一個(gè)按優(yōu)先數(shù)調(diào)度算法實(shí)現(xiàn)處理器調(diào)度的程序。提示:(1) 假定系統(tǒng)有五個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來代表,進(jìn)程控制塊的格式為:進(jìn)程名指針要求運(yùn)行時(shí)間優(yōu)先數(shù)狀態(tài)其中,進(jìn)程名作為進(jìn)程的標(biāo)識(shí),假設(shè)五個(gè)進(jìn)程的進(jìn)程名分別為P1,P2,P3,P4,P5。指針按優(yōu)先數(shù)的大小把五個(gè)進(jìn)程連成隊(duì)列,用指針指出下一個(gè)進(jìn)程的進(jìn)程控制塊的首地址,最后一個(gè)進(jìn)程中的指針為“0”。要求運(yùn)行時(shí)間假設(shè)進(jìn)程需要運(yùn)行的單位時(shí)間數(shù)。優(yōu)先數(shù)賦予進(jìn)程的優(yōu)先數(shù),調(diào)度時(shí)總是選取優(yōu)先數(shù)大的進(jìn)程先執(zhí)行。狀態(tài)可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài)。五個(gè)進(jìn)程的初始狀態(tài)都為“就緒”,用“R”表示,當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。(2) 在每次運(yùn)行你所設(shè)計(jì)的處理器調(diào)度程序之前,為每個(gè)進(jìn)程任意確定它的“優(yōu)先數(shù)”和“要求運(yùn)行時(shí)間”。(3) 為了調(diào)度方便,把五個(gè)進(jìn)程按給定的優(yōu)先數(shù)從大到小連成隊(duì)列。用一單元指出隊(duì)首進(jìn)程,用指針指出隊(duì)列的連接情況。例: 隊(duì)首標(biāo)志 K2 K1P1 K2P2 K3P3 K4P4 K5P50K4K5K3K12312415342RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選隊(duì)首進(jìn)程運(yùn)行。采用動(dòng)態(tài)改變優(yōu)先數(shù)的辦法,進(jìn)程每運(yùn)行一次優(yōu)先數(shù)就減“1”。由于本實(shí)驗(yàn)是模擬處理器調(diào)度,所以,對(duì)被選中的進(jìn)程并不實(shí)際的啟動(dòng)運(yùn)行,而是執(zhí)行:優(yōu)先數(shù)-1要求運(yùn)行時(shí)間-1來模擬進(jìn)程的一次運(yùn)行。提醒注意的是:在實(shí)際的系統(tǒng)中,當(dāng)一個(gè)進(jìn)程被選中運(yùn)行時(shí),必須恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運(yùn)行,直到出現(xiàn)等待事件或運(yùn)行結(jié)束。在這里省去了這些工作。(5) 進(jìn)程運(yùn)行一次后,若要求運(yùn)行時(shí)間0,則再將它加入隊(duì)列(按優(yōu)先數(shù)大小插入,且置隊(duì)首標(biāo)志);若要求運(yùn)行時(shí)間=0,則把它的狀態(tài)修改成“結(jié)束”(E),且退出隊(duì)列。(6) 若“就緒”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進(jìn)程都成為“結(jié)束”狀態(tài)。(7) 在所設(shè)計(jì)的程序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊(duì)列的變化。(8) 為五個(gè)進(jìn)程任意確定一組“優(yōu)先數(shù)”和“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)的處理器調(diào)度程序,顯示或打印逐次被選中進(jìn)程的進(jìn)程名以及進(jìn)程控制塊的動(dòng)態(tài)變化過程。第二題:設(shè)計(jì)一個(gè)按時(shí)間片輪轉(zhuǎn)法實(shí)現(xiàn)處理器調(diào)度的程序。提示:(1) 假定系統(tǒng)有五個(gè)進(jìn)程,每一個(gè)進(jìn)程用一個(gè)進(jìn)程控制塊PCB來代表。進(jìn)程控制塊的格式為:進(jìn)程名指針要求運(yùn)行時(shí)間已運(yùn)行時(shí)間狀態(tài)其中,進(jìn)程名作為進(jìn)程的標(biāo)識(shí),假設(shè)五個(gè)進(jìn)程的進(jìn)程名分別為Q1,Q2,Q3,Q4,Q5。指針進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出下一個(gè)進(jìn)程的進(jìn)程控制塊的首地址,最后一個(gè)進(jìn)程的指針指出第一個(gè)進(jìn)程的進(jìn)程控制塊首地址。要求運(yùn)行時(shí)間假設(shè)進(jìn)程需要運(yùn)行的單位時(shí)間數(shù)。已運(yùn)行時(shí)間假設(shè)進(jìn)程已經(jīng)運(yùn)行的單位時(shí)間數(shù),初始值為“0”。狀態(tài)有兩種狀態(tài),“就緒”和“結(jié)束”,初始狀態(tài)都為“就緒”,用“R”表示。當(dāng)一個(gè)進(jìn)程運(yùn)行結(jié)束后,它的狀態(tài)為“結(jié)束”,用“E”表示。(2) 每次運(yùn)行所設(shè)計(jì)的處理器調(diào)度程序前,為每個(gè)進(jìn)程任意確定它的“要求運(yùn)行時(shí)間”。(3) 把五個(gè)進(jìn)程按順序排成循環(huán)隊(duì)列,用指針指出隊(duì)列連接情況。另用一標(biāo)志單元記錄輪到運(yùn)行的進(jìn)程。例如,當(dāng)前輪到P2執(zhí)行,則有:標(biāo)志單元 K2 K1Q1 K2Q2 K3Q3 K4Q4 K5Q5K2K3K4K5K12312410000RRRRRPCB1PCB2PCB3PCB4PCB5(4) 處理器調(diào)度總是選擇標(biāo)志單元指示的進(jìn)程運(yùn)行。由于本實(shí)驗(yàn)是模擬處理器調(diào)度的功能,所以,對(duì)被選中的進(jìn)程并不實(shí)際的啟動(dòng)運(yùn)行,而是執(zhí)行:已運(yùn)行時(shí)間+1來模擬進(jìn)程的一次運(yùn)行,表示進(jìn)程已經(jīng)運(yùn)行過一個(gè)單位的時(shí)間。請(qǐng)同學(xué)注意:在實(shí)際的系統(tǒng)中,當(dāng)一個(gè)進(jìn)程被選中運(yùn)行時(shí),必須置上該進(jìn)程可以運(yùn)行的時(shí)間片值,以及恢復(fù)進(jìn)程的現(xiàn)場,讓它占有處理器運(yùn)行,直到出現(xiàn)等待事件或運(yùn)行滿一個(gè)時(shí)間片。在這時(shí)省去了這些工作,僅用“已運(yùn)行時(shí)間+1”來表示進(jìn)程已經(jīng)運(yùn)行滿一個(gè)時(shí)間片。(5) 進(jìn)程運(yùn)行一次后,應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到標(biāo)志單元,以指示下一個(gè)輪到運(yùn)行的進(jìn)程。同時(shí),應(yīng)判斷該進(jìn)程的要求運(yùn)行時(shí)間與已運(yùn)行時(shí)間,若該進(jìn)程的要求運(yùn)行時(shí)間已運(yùn)行時(shí)間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時(shí)再運(yùn)行。若該進(jìn)程的要求運(yùn)行時(shí)間=已運(yùn)行時(shí)間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)指導(dǎo)它的狀態(tài)修改成“結(jié)束”(E)且退出隊(duì)列。此時(shí),應(yīng)把該進(jìn)程的進(jìn)程控制塊中的指針值送到前面一個(gè)進(jìn)程的指針位置。(6) 若“就緒”狀態(tài)的進(jìn)程隊(duì)列不為空,則重復(fù)上面的(4)和(5)的步驟,直到所有的進(jìn)程都成為“結(jié)束”狀態(tài)。(7) 在所設(shè)計(jì)的程序中應(yīng)有顯示或打印語句,能顯示或打印每次選中進(jìn)程的進(jìn)程名以及運(yùn)行一次后進(jìn)程隊(duì)列的變化。(8) 為五個(gè)進(jìn)程任意確定一組“要求運(yùn)行時(shí)間”,啟動(dòng)所設(shè)計(jì)的處理器調(diào)度程序,顯示或打印逐次被選中的進(jìn)程名以及進(jìn)程控制塊的動(dòng)態(tài)變化過程。四、實(shí)驗(yàn)報(bào)告(1) 實(shí)驗(yàn)題目。(2) 程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號(hào)說明。(3) 流程圖。(4) 打印一份源程序并附上注釋。(5) 打印程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果。要求如下: 進(jìn)程控制塊的初始狀態(tài)。 選中運(yùn)行的進(jìn)程名以及選中進(jìn)程運(yùn)行后的各進(jìn)程控制塊狀態(tài)。對(duì)于要求每選中一個(gè)進(jìn)程運(yùn)行后都要打印。實(shí)驗(yàn)7 主存儲(chǔ)器空間的分配和回收一、實(shí)驗(yàn)內(nèi)容主存儲(chǔ)器空間的分配和回收。二、實(shí)驗(yàn)?zāi)康囊粋€(gè)好的計(jì)算機(jī)系統(tǒng)不僅要有一個(gè)足夠容量的、存取速度高的、穩(wěn)定可靠的主存儲(chǔ)器,而且要能合理地分配和使用這些存儲(chǔ)空間。當(dāng)用戶提出申請(qǐng)存儲(chǔ)器空間時(shí),存儲(chǔ)管理必須根據(jù)申請(qǐng)者的要求,按一定的策略分析主存空間的使用情況,找出足夠的空閑區(qū)域分配給申請(qǐng)者。當(dāng)作業(yè)撤離或主動(dòng)歸還主存資源時(shí),則存儲(chǔ)管理要收回作業(yè)占用的主存空間或歸還部分主存空間。主存的分配和回收的實(shí)現(xiàn)雖與主存儲(chǔ)器的管理方式有關(guān)的,通過本實(shí)驗(yàn)幫助學(xué)生理解在不同的存儲(chǔ)管理方式下應(yīng)怎樣實(shí)現(xiàn)主存空間的分配和回收。三、實(shí)驗(yàn)題目本實(shí)驗(yàn)?zāi)M在兩種存儲(chǔ)管理方式下的主存分配和回收。第一題:在可變分區(qū)管理方式下采用最先適應(yīng)算法實(shí)現(xiàn)主存分配和實(shí)現(xiàn)主存回收。提示:可變分區(qū)方式是按作業(yè)需要的主存空間大小來分割分區(qū)的。當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)需要的主存量查看是否有足夠的空閑空間,若有,則按需要量分割一個(gè)分區(qū)分配給該作業(yè);若無,則作業(yè)不能裝入。隨著作業(yè)的裝入、撤離,主存空間被分成許多個(gè)分區(qū),有的分區(qū)被作業(yè)占用,而有的分區(qū)是空閑的。例如:05k10k14k26k32k128k操作系統(tǒng)作業(yè)1作業(yè)3空閑區(qū)作業(yè)2空閑區(qū)為了說明哪些區(qū)是空閑的,可以用來裝入新作業(yè),必須要有一張空閑區(qū)說明表,格式如下:起 址長 度狀 態(tài)第一欄14 K12 K未 分 配第二欄32 K96 K未 分 配MM空 表 目空 表 目MM其中,起址指出一個(gè)空閑區(qū)的主存起始地址。 長度指出從起始地址開始的一個(gè)連續(xù)空閑的長度。 狀態(tài)有兩種狀態(tài),一種是“未分配”狀態(tài),指出對(duì)應(yīng)的由起址指出的某個(gè)長度的區(qū)域是空閑區(qū);另一種是“空表目”狀態(tài),表示表中對(duì)應(yīng)的登記項(xiàng)目是空白(無效),可用來登記新的空閑區(qū)(例如,作業(yè)撤離后,它所占的區(qū)域就成了空閑區(qū),應(yīng)找一個(gè)“空表目”欄登記歸還區(qū)的起址和長度且修改狀態(tài))。由于分區(qū)的個(gè)數(shù)不定,所以空閑區(qū)說明表中應(yīng)有適量的狀態(tài)為“空表目”的登記欄目,否則造成表格“溢出”無法登記。上述的這張說明表的登記情況是按提示(1)中的例所裝入的三個(gè)作業(yè)占用的主存區(qū)域后填寫的。(2) 當(dāng)有一個(gè)新作業(yè)要求裝入主存時(shí),必須查空閑區(qū)說明表,從中找出一個(gè)足夠大的空閑區(qū)。有時(shí)找到的空閑區(qū)可能大于作業(yè)需要量,這時(shí)應(yīng)把原來的空閑區(qū)變成兩部分:一部分分給作業(yè)占用;另一部分又成為一個(gè)較小的空閑區(qū)。為了盡量減少由于分割造成的空閑區(qū),而盡量保存高地址部分有較大的連續(xù)空閑區(qū)域,以利于大型作業(yè)的裝入。為此,在空閑區(qū)說明表中,把每個(gè)空閑區(qū)按其地址順序登記,即每個(gè)后繼的空閑區(qū)其起始地址總是比前者大。為了方便查找還可使表格“緊縮”,總是讓“空表目”欄集中在表格的后部。(3) 采用最先適應(yīng)算法(順序分配算法)分配主存空間。按照作業(yè)的需要量,查空閑區(qū)說明表,順序查看登記欄,找到第一個(gè)能滿足要求的空閑區(qū)。當(dāng)空閑區(qū)大于需要量時(shí),一部分用來裝入作業(yè),另一部分仍為空閑區(qū)登記在空閑區(qū)說明表中。由于本實(shí)驗(yàn)是模擬主存的分配,所以把主存區(qū)分配給作業(yè)后并不實(shí)際啟動(dòng)裝入程序裝入作業(yè),而用輸出“分配情況”來代替。最先適應(yīng)分配算法如圖4-1。(4) 當(dāng)一個(gè)作業(yè)執(zhí)行結(jié)束撤離時(shí),作業(yè)所占的區(qū)域應(yīng)該歸還,歸還的區(qū)域如果與其它空閑區(qū)相鄰,則應(yīng)合成一個(gè)較大的空閑區(qū),登記在空閑區(qū)說明表中。例如,在提示(1)中列舉的情況下,如果作業(yè)2撤離,歸還所占主存區(qū)域時(shí),應(yīng)與上、下相鄰的空閑區(qū)一起合成一個(gè)大的空閑區(qū)登記在空閑區(qū)說明表中。歸還主存時(shí)的回收算法如圖4-2。(5) 請(qǐng)按最先適應(yīng)算法設(shè)計(jì)主存分配和回收的程序。然后按(1)中假設(shè)主存中已裝入三個(gè)作業(yè),且形成兩個(gè)空閑區(qū),確定空閑區(qū)說明表的初值。現(xiàn)有一個(gè)需要主存量為6K的作業(yè)4申請(qǐng)裝入主存;然后作業(yè)3撤離;再作業(yè)2撤離。請(qǐng)你為它們進(jìn)行主存分配和回收,把空閑區(qū)說明表的初值以及每次分配或回收后的變化顯示出來或打印出來。第二題:在分頁式管理方式下采用位示圖來表示主存分配情況,實(shí)現(xiàn)主存空間的分配和回收。提示:(1) 分頁式存儲(chǔ)器把主存分成大小相等的若干塊,作業(yè)的信息也按塊的大小分頁,作業(yè)裝入主存時(shí)可把作業(yè)的信息按頁分散存放在主存的空閑塊中,為了說明主存中哪些塊已經(jīng)被占用,哪些塊是尚未分配的空閑塊,可用一張位示圖來指出。位示圖可由若干存儲(chǔ)單元來構(gòu)成,其中每一位與一個(gè)物理塊對(duì)應(yīng),用0/1表示對(duì)應(yīng)塊為空閑/已占用。(2) 假設(shè)某系統(tǒng)的主存被分成大小相等的64塊,則位示圖可用8個(gè)字節(jié)來構(gòu)成,另用一單元記錄當(dāng)前空閑塊數(shù)。如果已有第0,1,4,5,6,9,11,13,24,31,共10個(gè)主存塊被占用了,那么位示圖情況如下:字 位 節(jié) 數(shù) 號(hào)01234567 011001110 101010100 200000000 310000001 400000000 500000000 600000000 700000000圖4-1 最先適應(yīng)分配模擬算法圖4-2 主存回收算法(3) 當(dāng)要裝入一個(gè)作業(yè)時(shí),根據(jù)作業(yè)對(duì)主存的需要量,先查當(dāng)前空閑塊數(shù)是否能滿足作業(yè)要求,若不能滿足則輸出分配不成功。若能滿足,則查位示圖,找出為“0”的一些位,置上占用標(biāo)志“1”,從“當(dāng)前空閑塊數(shù)”中減去本次占用塊數(shù)。按找到的計(jì)算出對(duì)應(yīng)的塊號(hào),其計(jì)算公式為: 塊號(hào)= j8+i其中,j表示找到的是第n個(gè)字節(jié),I表示對(duì)應(yīng)的是第n位。根據(jù)分配給作業(yè)的塊號(hào),為作業(yè)建立一張頁表,頁表格式:頁 號(hào)塊 號(hào)012MM(4) 當(dāng)一個(gè)作業(yè)執(zhí)行結(jié)束,歸還主存時(shí),根據(jù)該作業(yè)的頁表可以知道應(yīng)歸還的塊號(hào),由塊號(hào)可計(jì)算出在位示圖中的對(duì)應(yīng)位置,把對(duì)應(yīng)位的占用標(biāo)志清成“0”,表示對(duì)應(yīng)的塊已成為空閑塊。歸還的塊數(shù)加入到當(dāng)前空閑塊數(shù)中。由塊號(hào)計(jì)算在位示圖中的位置的公式如下:字節(jié)號(hào) j=塊號(hào)/8 ( 表示取整)位數(shù) i=塊號(hào)/8 ( 表示取余)(5) 設(shè)計(jì)實(shí)現(xiàn)主存分配和回收的程序。假定位示圖的初始狀態(tài)如(2)所述,現(xiàn)有一信息量為5頁的作業(yè)要裝入,運(yùn)行你所設(shè)計(jì)的分配程序,為作業(yè)分配主存且建立頁表(格式如(3)所述)。然后假定有另一作業(yè)執(zhí)行結(jié)束,它占用的塊號(hào)為第4,5,6和31塊,運(yùn)行你所設(shè)計(jì)的回收程序,收回作業(yè)歸還的主存塊。要求能顯示和打印分配或回收前后的位示圖和當(dāng)前空閑塊數(shù),對(duì)完成一次分配后還要顯示或打印為作業(yè)建立的頁表。四、實(shí)驗(yàn)報(bào)告(1) 實(shí)驗(yàn)題目。(2) 程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號(hào)說明。(3) 流程圖。(4) 打印一份源程序并附上注釋。(5) 打印程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果,要求如下:第一題:打印空閑區(qū)說明表的初始狀態(tài),作業(yè)4的申請(qǐng)量以及為作業(yè)4分配后的空閑區(qū)說明表狀態(tài);再依次打印作業(yè)3和作業(yè)2的歸還量以及回收作業(yè)3,作業(yè)2所占主存后的空閑區(qū)說明表。第二題:打印位示圖和當(dāng)前空閑塊數(shù)的初值;要求裝入的作業(yè)對(duì)主存的申請(qǐng)量,為作業(yè)分配后的位示圖、當(dāng)前空閑塊數(shù)和頁表;作業(yè)歸還的塊號(hào)、回收作業(yè)所占主存后的位示圖和當(dāng)前空閑塊數(shù)。第三部分 操作系統(tǒng)實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)2 指導(dǎo)實(shí)驗(yàn)內(nèi)容1 進(jìn)程的創(chuàng)建任務(wù)編寫一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程。當(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”和“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。程序#includemain()int p1,p2;if(p1=fork() /*子進(jìn)程創(chuàng)建成功*/ putchar(b);else if(p2=fork() /*子進(jìn)程創(chuàng)建成功*/ putchar(c); else putchar(a); /*父進(jìn)程執(zhí)行*/bca(有時(shí)會(huì)出現(xiàn)abc的任意的排列)分析:從進(jìn)程執(zhí)行并發(fā)來看,輸出abc的排列都是有可能的。原因:fork()創(chuàng)建進(jìn)程所需的時(shí)間雖然可能多于輸出一個(gè)字符的時(shí)間,但各個(gè)進(jìn)程的時(shí)間片的獲得卻不是一定是順序的,所以輸出abc的排列都是有可能的。2 進(jìn)程的控制 修改已編寫好的程序,將每個(gè)程序的輸出由單個(gè)字符改為一句話,再觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析其原因。如果在程序中使用系統(tǒng)調(diào)用lockf()來給每個(gè)程序加鎖,可以實(shí)現(xiàn)進(jìn)程之間的互斥,觀察并分析出現(xiàn)的現(xiàn)象。程序1#includemain()int p1,p2,i;if(p1=fork() for(i=0;i500;i+) printf(parent%dn,i); wait(0); /* 保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/exit(0);else if(p2=fork() for(i=0;i500;i+) printf(son %dn,i); wait(0); /* 保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/ exit(0); /*向父進(jìn)程信號(hào)0且該進(jìn)程推出*/ else for(i=0;i500;i+) printf(“grandchild %dn,i); exit(0);運(yùn)行結(jié)果parent.songrandchildgrandchild或grandchildsongrandchildsonparent分析:由于函數(shù)printf()輸出的字符串之間不會(huì)被中斷,因此,每個(gè)字符串內(nèi)部的字符順序輸出時(shí)不變。但是 , 由于進(jìn)程并發(fā)執(zhí)行時(shí)的調(diào)度順序和父子進(jìn)程的搶占處理機(jī)問題,輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。程序2#includemain()int p1,p2,i;if(p1=fork() lockf(1,1,0); for(i=0;i500;i+) printf(parent %dn,i); lockf(1,0,0); wait(0); /* 保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/ exit(0);else if(p2=fork() lockf(1,1,0); for(i=0;i500;i+) printf(son %dn,i); lockf(1,0,0); wait(0); /* 保證在子進(jìn)程終止前,父進(jìn)程不會(huì)終止*/exit(0); else lockf(1,1,0); for(i=0;i500;i+) printf(daughter %dn,i); lockf(1,0,0); exit(0); 運(yùn)行結(jié)果輸出parent塊,son塊,grandchild塊的順序可能不同,但是每個(gè)塊的輸出過程不會(huì)被打斷。分析:因?yàn)樯鲜龀绦驁?zhí)行時(shí),lockf(1,1,0)鎖定標(biāo)準(zhǔn)輸出設(shè)備,lockf(1,0,0)解鎖標(biāo)準(zhǔn)輸出設(shè)備,在lockf(1,1,0)與lockf(1,0,0)中間的for循環(huán)輸出不會(huì)被中斷,加鎖與不加鎖效果不相同。3軟中斷通信任務(wù)1編制一段程序,使用系統(tǒng)調(diào)用fork()創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal()讓父進(jìn)程捕捉鍵盤上來的中斷信號(hào)(即按ctrl+c鍵),當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill()向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后,分別輸出下列信息后終止:child process1 is killed by parent!child process2 is killed by parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出以下信息后終止:parent process is killed! 程序#include#include#include void waiting(),stop(),alarming();int wait_mark;main()int p1,p2;if(p1=fork() /*創(chuàng)建子進(jìn)程p1*/if(p2=fork() /*創(chuàng)建子進(jìn)程p2*/wait_mark=1;signal(SIGINT,stop); /*接收到c信號(hào),轉(zhuǎn)stop*/signal(SIGALRM,alarming);/*接受SIGALRMwaiting();kill(p1,16); /*向p1發(fā)軟中斷信號(hào)16*/ kill(p2,17); /*向p2發(fā)軟中斷信號(hào)17*/ wait(0); /*同步*/wait(0);printf(parent process is killed!n);exit(0); else wait_mark=1;signal(17,stop);signal(SIGINT,SIG_IGN); /*忽略 c信號(hào)*/while (wait_mark!=0);lockf(1,1,0);printf(child process2 is killed by parent!n);lockf(1,0,0);exit(0);elsewait_mark=1;signal(16,stop);signal(SIGINT,SIG_IGN); /*忽略c信號(hào)*/while (wait_mark!=0)lockf(1,1,0);printf(child process1 is killed by parent!n);lockf(1,0,0);exit(0);void waiting()sleep(5);if (wait_mark!=0) kill(getpid(),SIGALRM);void alarming()wait_mark=0;void stop()wait_mark=0; 不做任何操作等待五秒鐘父進(jìn)程回在子進(jìn)程縣推出后退出,并打印退出的順序;或者點(diǎn)擊ctrl+C后程序退出并打印退出的順序。任務(wù)2在上面的任務(wù)1中,增加語句signal(SIGINT,SIG_IGN)和語句signal(SIGQUIT,SIG_IGN),觀察執(zhí)行結(jié)果,并分析原因。這里,signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分別為忽略鍵信號(hào)以及忽略中斷信號(hào)。#include#include#includeint pid1,pid2;int EndFlag=0;int pf1=0;int pf2=0;void IntDelete()kill(pid1,16);kill(pid2,17);void Int1()printf(child process 1 is killed !by parentn);exit(0);void Int2()printf(child process 2 is killed !by parentn);exit(0);main()int exitpid;if(pid1=fork() if(pid2=fork() signal(SIGINT,IntDelete);waitpid(-1,&exitpid,0);waitpid(-1,&exitpid,0);printf(parent process is killedn);exit(0); else signal(SIGINT,SIG_IGN);signal(17,Int2);pause(); elsesignal(SIGINT,SIG_IGN);signal(16,Int1);pause();運(yùn)行結(jié)果請(qǐng)讀者將上述程序輸入計(jì)算機(jī)后,執(zhí)行并觀察。3 進(jìn)程的管道通信任務(wù) 編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe()建立一條管道線。兩個(gè)子進(jìn)程p1和p2分別向通道個(gè)寫一句話: child1 process is sending message!child2 process is sending message!而父進(jìn)程則從管道中讀出來自兩個(gè)進(jìn)程的信息,顯示在屏幕上。程序#include #include #include int pid1,pid2; main( ) int fd2;char outpipe100,inpipe100;pipe(fd); /*創(chuàng)建一個(gè)管道*/while (pid1=fork( )=-1);if(pid1=0) lockf(fd1,1,0); sprintf(outpipe,child 1 process is sending message!); /*把串放入數(shù)組outpipe中*/ write(fd1,outpipe,50); /*向管道寫長為50字節(jié)的串*/ sleep(5); /*自我阻塞5秒*/ lockf(fd1,0,0); exit(0); else while(pid2=fork( )=-1); if(pid2=0) lockf(fd1,1,0); /*互斥*/ sprintf(outpipe,child 2 process is sending message!); write(fd1,outpipe,50); sleep(5); lockf(fd1,0,0); exit(0); else wait(0); /*同步*/ read(fd0,inpipe,50); /*從管道中讀長為50字節(jié)的串*/ printf(%sn,inpipe); wait(0); read(fd0,inpipe,50); printf(%sn,inpipe); exit(0); 運(yùn)行結(jié)果延遲5秒后顯示:child1 process is sending message! 再延遲5秒:child2 process is sending message!分析請(qǐng)讀者自行完成 。 1、程序中的sleep(5)起什么作用?2、子進(jìn)程1和2為什么也
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美術(shù)素材考試題及答案
- 商業(yè)樓宇中央空調(diào)改造工程協(xié)議
- 市場推廣制作與執(zhí)行合同書
- 在線服務(wù)隱私保護(hù)合同協(xié)議書
- 金融投資產(chǎn)品開發(fā)協(xié)議
- 貴州國企招聘2025貴州磷化(集團(tuán))有限責(zé)任公司招聘139人筆試參考題庫附帶答案詳解
- 2025黑龍江中鐵特貨物流股份有限公司招聘75人筆試參考題庫附帶答案詳解
- 2025廣東儲(chǔ)能產(chǎn)業(yè)發(fā)展有限公司招聘17人筆試參考題庫附帶答案詳解
- 2025年甘肅人力委托招聘蘭州地鐵安檢人員筆試參考題庫附帶答案詳解
- 贈(zèng)友送別類試題及答案
- 2025屆鄂東南省級(jí)示范高中聯(lián)盟高考英語二模試卷含答案
- 2025購銷合同范本下載
- 2024年家政服務(wù)職業(yè)技能大賽家庭照護(hù)賽項(xiàng)決賽試?yán)碚擃}庫1000題
- 2025年四川省成都市成華區(qū)中考二診英語試題(含筆試答案無聽力音頻及原文)
- 2025勞動(dòng)合同范本下載打印
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 地理試卷(含答案)
- 管道試壓吹掃方案
- Unit 4 Clothes 單元整體(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教精通版(2024)英語三年級(jí)下冊
- 2024年探放水工技能大賽理論考試題庫500題(供參考)
- XX道路危險(xiǎn)運(yùn)輸企業(yè)安全管理臺(tái)賬標(biāo)準(zhǔn)化表格
- GB/T 13025.7-2012制鹽工業(yè)通用試驗(yàn)方法碘的測定
評(píng)論
0/150
提交評(píng)論