版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)報(bào)告
修4城*孝
《操作系統(tǒng)原理》
實(shí)驗(yàn)報(bào)告
院(部):管理工程學(xué)院
專業(yè):信息管理與信息
系統(tǒng)
實(shí)驗(yàn)項(xiàng)目:實(shí)驗(yàn)一二三
五
班級(jí):信管102
姓名:張鳳丹
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
學(xué)號(hào):021418
目錄
弓I言................................6
實(shí)驗(yàn)一、模擬進(jìn)程創(chuàng)立、終止、阻塞、喚醒原語(yǔ)
...................................................................................9
實(shí)驗(yàn)?zāi)康模?.....................9
實(shí)驗(yàn)內(nèi)容:.........................10
實(shí)驗(yàn)步驟:.........................10
實(shí)驗(yàn)代碼:.........................11
程序運(yùn)行結(jié)果及分析.................24
實(shí)驗(yàn)感想:..........................24
實(shí)驗(yàn)二、模擬進(jìn)程調(diào)度功能...............26
實(shí)驗(yàn)?zāi)康模?........................26
實(shí)驗(yàn)內(nèi)容:.........................26
實(shí)驗(yàn)步驟:.........................27
實(shí)驗(yàn)代碼:.........................28
程序運(yùn)行結(jié)果及分析.................37
實(shí)驗(yàn)感想:..........................38
實(shí)驗(yàn)三:模擬動(dòng)態(tài)分區(qū)首次適應(yīng)分配和回收算法
.................................................................................38
實(shí)驗(yàn)?zāi)康模?....................38
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)內(nèi)容:.........................38
實(shí)驗(yàn)步驟:.........................39
實(shí)驗(yàn)代碼:.........................39
程序運(yùn)行結(jié)果及分析.................53
實(shí)驗(yàn)感想:..........................54
實(shí)驗(yàn)五:模擬使用銀行家算法判斷系統(tǒng)的狀態(tài)55
實(shí)驗(yàn)?zāi)康模?........................55
實(shí)驗(yàn)步驟:.........................55
實(shí)驗(yàn)代碼:.........................55
程序運(yùn)行結(jié)果及分析.................66
實(shí)驗(yàn)感想:..........................67
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
引言
操作系統(tǒng)是信息管理與信息系統(tǒng)專業(yè)一門
重要的專業(yè)理論課程,了解和掌握操作系統(tǒng)的基
本概念、功能和實(shí)現(xiàn)原理,對(duì)認(rèn)識(shí)整個(gè)計(jì)算機(jī)系
統(tǒng)的工作原理十分重要。
操作系統(tǒng)實(shí)驗(yàn)是操作系統(tǒng)課程的一個(gè)重要組成
部分,經(jīng)過試驗(yàn)環(huán)節(jié)的鍛煉使同學(xué)們不但能夠?qū)?/p>
以前的所學(xué)過的基礎(chǔ)知識(shí)加以鞏固,同時(shí)能夠經(jīng)
過上機(jī)實(shí)驗(yàn),對(duì)操作系統(tǒng)的抽象理論知識(shí)加以理
解,最終達(dá)到融會(huì)貫通的目的,因此,實(shí)驗(yàn)環(huán)節(jié)
是同學(xué)們理解、掌握操作系統(tǒng)基本理論的一個(gè)重
要環(huán)節(jié)。
本實(shí)驗(yàn)指導(dǎo)書,根據(jù)教材中的重點(diǎn)內(nèi)容設(shè)定了相
應(yīng)的實(shí)驗(yàn)題目,由于實(shí)驗(yàn)課程的學(xué)時(shí)有限,我們
規(guī)定了必做題目和選做題目,其中必做題目必須
在規(guī)定的上機(jī)學(xué)時(shí)中完成,必須有相應(yīng)的預(yù)習(xí)報(bào)
告和實(shí)驗(yàn)報(bào)告。選做題目是針對(duì)有能力或感興趣
的同學(xué)利用課余時(shí)間或上機(jī)學(xué)時(shí)的剩余時(shí)間完
成。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)一、模擬進(jìn)程創(chuàng)立、終止、阻塞、喚
醒原語(yǔ)
實(shí)驗(yàn)?zāi)康模?/p>
經(jīng)過設(shè)計(jì)并調(diào)試創(chuàng)立、終止、阻塞、喚
醒原語(yǔ)功能,有助于對(duì)操作系統(tǒng)中進(jìn)程控制
功能的理解,掌握操作系統(tǒng)模塊的設(shè)計(jì)方法
和工作原理。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)創(chuàng)立、終止、阻塞、喚醒原語(yǔ)功能函
數(shù)。
2、設(shè)計(jì)主函數(shù),采用菜單結(jié)構(gòu)(參見后面給
出的流程圖)。
3、設(shè)計(jì)“顯示隊(duì)列”函數(shù),目的能將就緒、
阻塞隊(duì)列中的進(jìn)程信息顯示在屏幕上,以
供隨時(shí)查看各隊(duì)列中進(jìn)程的變化情況。
實(shí)驗(yàn)步驟:
1、進(jìn)程PCB中應(yīng)包含以下山家?
2、系統(tǒng)總體結(jié)構(gòu):
I^^臺(tái)
系統(tǒng)主菜單
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
1…創(chuàng)立
2…阻塞
3…喚醒
4…終止
5…顯示
0…退出
請(qǐng)輸入您需要
的功能(0
—5):
退出創(chuàng)立阻塞喚醒終止顯示
[結(jié)束
實(shí)驗(yàn)代碼:
#include<stdio.h>
#include<string.h>
structPCB
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
charname[4];
intpriority;
intruntime;
);
voidmain()
(
intx,t;
inta=0;
intk=0,r=l,i=0,j=0;//k為就緒隊(duì)列總數(shù),r堵
塞隊(duì)列總數(shù)
charname[4];
structPCBpcb[10];
structPCBpcbl[10];
structPCBpcb2[10];
printf(n...........................菜單
...........................\n\n\nn);
printf("0-退出系統(tǒng)\n");
printf「L…創(chuàng)立進(jìn)程\n”);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf("2--堵塞進(jìn)程\n”);
printf("3--喚醒進(jìn)程W”);
printf(”4--終止進(jìn)程\n");
printf("5.…顯示進(jìn)程\n");
printf(M...................................................................\nM
);
strcpy(pcb1[0].nameJs'');〃堵塞隊(duì)歹l|
pcbl[0].priority=2;
pcbl[0].runtime=3;
//printf(n%s%d%dH,pcbl[O].name,pcbl[
0].priority,pcb1[0].runtime);
while(l)
(
printf("請(qǐng)輸入你的選擇;
scanf(H%dn,&x);
if(x==0)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
break;
if(x==l)
printf(u.......................創(chuàng)立進(jìn)程
..........\n");
printf("進(jìn)程名:”);
scanf(n%sn,&pcb[k].name);
printf("優(yōu)先級(jí):”);
scanf(n%dn,&pcb[k].priority);
printf("運(yùn)行時(shí)間:");
scanf(n%dn,&pcb[k].runtime);
k=k+l;
)
if(x==2)
(
printf(H...................堵塞進(jìn)程
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
.....................\nH);
printf("請(qǐng)輸入要查找的進(jìn)程:");
scanf(n%sn,name);
for(j=0;j<=k;j++)
(
if(strcmp(pcb[j].name,name)==O)
{
t=j;
strcpy(pcb2[a].name,pcb[t].name);
pcb2[a].priority
pcb[t].priority;
pcb2[a].runtime
pcb[t].runtime;
strcpy(pcbl[r].name,pcb2[a].name);
pcbl[r].priority
pcb2[a].priority;
pcbl[r].runtime
pcb2[a].runtime;
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
r=r+l;
a=a+l;
for(i=t;i<=k;i++)
(
strcpy(pcb[i].name,pcb[i+1].name);
pcb[i].priority=
pcb[i+l].priority;
pcb[i].runtime=
pcb[i+l].runtime;
)
k=k-l;
printfC將就緒序列調(diào)度為運(yùn)行:”);
for(i=0;i<a;i++)
printf(n%s%d%d\nn,pcb2[i].name,pcb2[i].p
riority,pcb2[i].runtime);
printf("堵塞進(jìn)程:\nH);
for(j=0;j<r;j++)
printf(n%s%d%d\nn,pcbl[j].name,pcbl[j].
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
priority,pcbl[j].runtime);
break;
)
else
printf("該進(jìn)程已是堵塞進(jìn)程!\n“);
break;
)
)
if(x==3)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf(n........................喚醒進(jìn)程
.....................W);
printfC請(qǐng)輸入要喚醒的進(jìn)程:");
scanf(n%sn,name);
for(i=0;i<r;i++)
(
if(strcmp(pcbl[i].name,name)==O)
|
t=i;
strcpy(pcb[k].name9pcb1[t].name);
pcb[k].priority=pcbl[t].priority;
pcb[k].runtime=
pcbl[t].runtime;
k=k+l;
for(j=t;j<r;j++)
strcpy(pcbl[j].name,pcbl[j+l].name);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
pcbl[j].priority=
pcbl[j+l].priority;
pcbl[j].runtime=
pcbl[j+l].runtime;
)
r=r-l;
printf("就緒進(jìn)程:\nn);
for(j=0;j<k;j++)
printf(n%s%d%d\nn,pcb[j].name,pcb[j].pri
ority,pcb[j].runtime);
printf("堵塞進(jìn)程:\nn);
for(j=0;j<r;j++)
printf(n%s%d%d\nn,pcbl[j].name,pcbl[j].
priority,pcb1[j].runtime);
break;
)
else
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printfC該堵塞進(jìn)程為空,不能喚醒
進(jìn)程!\曖);
break;
)
)
//for(j=0;j<k;j++)
//printf(n%s%d%d\nn,pcb[j].name,pcb[j].p
riority,pcb[j].runtime);
if(x==4)
(
printf(n.......................終止進(jìn)程
....................\nn);
printfC請(qǐng)輸入你要終止的進(jìn)程:
”);
scanf(n%sn,name);
for(i=0;i<k;i++)
(
if(strcmp(pcb[i].name,name)==O)
(
t=i;
for(j=t;j<k;j++)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
strcpy(pcb[j].name,pcb[j+l].name);
pcb[j].priority
pcb[j+1].priority;
pcb[j].runtime
pcb[j+1].runtime;
)
k=k-l;
)
if(strcmp(pcbl[i].name,name)==O)
|
t=i;
for(j=t;j<r;j++)
(
strcpy(pcbl[j].name,pcbl[j+l].name);
pcbl[j].priority
pcbl[j+l].priority;
pcbl[j].runtime
pcbl[j+l].runtime;
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
)
r=r-l;
)
)
printf("就緒進(jìn)程:\nH);
for(j=0;j<k;j++)
printf(n%s%d%d\nn,pcb[j].name,pcb[j].pri
ority,pcb[j].runtime);
printf("堵塞進(jìn)程:\nH);
for(j=0;j<r;j++)
printf(n%s%d%d\nn,pcbl[j].name,pcbl[j].
priority,pcbl[j].runtime);
)
if(x==5)
(
printf(n...................顯示進(jìn)程
..........S');
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printfC就緒進(jìn)程:\nn);
for(j=0;j<k;j++)
printf(n%s%d%d\nn,pcb[j].name,pcb[j].pri
ority,pcb[j].runtime);
printf("堵塞進(jìn)程:\nn);
for(j=0;j<r;j++)
printf(n%s%d%d\nM,pcbl[j].name,pcbl[j].
priority,pcbl[j].runtime);
)
)
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
程序運(yùn)行結(jié)果及分析
1)運(yùn)行結(jié)果
?*C:\Windows\sy$tem32\Debug'llll.exe*
--------菜單一…一■=
退系
出
0---
-進(jìn)
進(jìn)
-建
創(chuàng)
-進(jìn)
進(jìn)
-示
-〈
進(jìn)
顯
清輸入你的選擇:1
-----------------創(chuàng)建迓程一
譚程名,a
優(yōu)先練2
海行時(shí)間:3
耦輸入你的選擇?La…
卜----------------創(chuàng)建進(jìn)程一
除程拓b
唯越2
運(yùn)行時(shí)冏3
常輸入你的選擇,5曰二小知
-----------------顯:程一
就緒進(jìn)程?
A23
b23
堵塞進(jìn)程?
g23
請(qǐng)輸入你的選擇:2
-----------------堵塞進(jìn)程一
清解人要喜找電注程一
醯舞列調(diào)度為運(yùn)行…2
s23
A23
請(qǐng)輸入你的選擇:3
-----------------映酸進(jìn)程-
最黔第喚醒的進(jìn)笛$
b23
s23
堵塞進(jìn)程:
a23
產(chǎn)
請(qǐng)輸入你的選擇:4
-----------------終止進(jìn)程一
曙辭要終止的進(jìn)道a
b23
s23
實(shí)驗(yàn)感想:
經(jīng)過設(shè)計(jì)并調(diào)試創(chuàng)立、終止、阻塞、喚
醒原語(yǔ)功能,加深了對(duì)操作系統(tǒng)中進(jìn)程控制
功能的理解,而且掌握操作系統(tǒng)模塊的設(shè)計(jì)
方法和工作原理。更重要的是理解了操作系
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
統(tǒng)的調(diào)度方法是就緒-運(yùn)行-堵塞-喚醒-結(jié)
束的過程。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)二、模擬進(jìn)程調(diào)度功能
實(shí)驗(yàn)?zāi)康模?/p>
經(jīng)過本實(shí)驗(yàn),進(jìn)一步掌握進(jìn)程調(diào)度的功能
和實(shí)現(xiàn)原理。
實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)進(jìn)程調(diào)度功能,至少模擬兩種以上調(diào)度
算法。如:優(yōu)先級(jí)調(diào)度算法、時(shí)間片調(diào)度算
法等。
2、進(jìn)程調(diào)度功能作為一個(gè)函數(shù)scheduler,加
入到實(shí)驗(yàn)題目一中。
3、進(jìn)程調(diào)度程序從就緒隊(duì)列中挑選進(jìn)程,若隊(duì)
列為空,應(yīng)顯示“無(wú)就緒進(jìn)程無(wú)法調(diào)度”的
提示信息。
4、若選上一個(gè)進(jìn)程,以顯示:進(jìn)程名、狀態(tài)、
時(shí)間片、優(yōu)先級(jí)等信息表示一個(gè)進(jìn)程被執(zhí)行。
若運(yùn)行完,應(yīng)刪除相應(yīng)PCB。
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)步驟:
1、在實(shí)驗(yàn)題目一中的主菜單中加入一個(gè)菜單
項(xiàng):6調(diào)度,選擇該菜單項(xiàng)后,系統(tǒng)進(jìn)入進(jìn)
程調(diào)度。
2、進(jìn)程調(diào)度的結(jié)榔-------------------
進(jìn)程調(diào)度子菜
單
0--------返
回主菜單
1---------優(yōu)
先級(jí)調(diào)度
2--------時(shí)
間片調(diào)度
請(qǐng)選擇您需要
的功能選項(xiàng):
讀入選擇=》X
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
返回上級(jí)菜單
轉(zhuǎn)優(yōu)先級(jí)調(diào)度算法轉(zhuǎn)時(shí)間片調(diào)度算法
實(shí)驗(yàn)代碼:
#include<stdio.h>
#include<string.h>
voidpriority();
voidtime();
structPCB
charname[4];
intpriority;
intruntime;
);
structPCBpcb[5];
intq=5;
voidmain()
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
intp,i;
§11X^丫8由[0].1121110「十1”);〃序歹1|隊(duì)歹!),優(yōu)先級(jí)
由高到低為1,2,3.?…
pcb[0].priority=2;
pcb[O].runtime=3;
strcpy(pcb[1].nameJp2'')序歹[J隊(duì)歹!J
pcb[l].priority=3;
pcb[l].runtime=2;
§1;0^丫8(:1)[2].1121]10」十3");〃序歹1|隊(duì)歹1|
pcb[2].priority=1;
pcb[2].runtime=4;
strcpy(pcb[3].nameJp4");〃序歹lj隊(duì)歹!J
pcb[3].priority=5;
pcb[3].runtime=6;
§(1\^丫8(:夙4].1121]10」十5");〃序歹[]隊(duì)歹!|
pcb[4].priority=4;
pcb[4].runtime=5;
printf(".........................................進(jìn)程調(diào)度子菜
單...................\nn);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf(n
0............退出系統(tǒng)\n”);
printf(n
1.....優(yōu)先級(jí)調(diào)度\n”);
printf(n
2.....時(shí)間片調(diào)度\n”);
printf(n\n\ii顯示所有進(jìn)程\n");
for(i=0;i<5;i++)
printf(n%s%d%d\nn,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
printf("請(qǐng)選擇您需要的功能選項(xiàng):");
scanf(n%dn,&p);
printf**********************")?
while(l)
if(p==0)
break;
switch(p)
//case0:
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
//break;
case1:
printf("優(yōu)先級(jí)調(diào)度算法\n");
priority();
break;
case2:
printf("時(shí)間片調(diào)度算法\n“);
time();
break;
)
printf("請(qǐng)選擇您需要的功能選項(xiàng)
scanf(n%dn,&p);
printf(,,**********************'')?
)
voidpriorityO
(
inti,j;
intt=O,r=O;
//intq=5;
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
charname[2]=nn;
for(i=0;i<q-l;i++)
for(j=i;j<q;j++)
(
if(pcb[i].priority>pcb[j].priority)
(
strcpy(name,pcb[i].name);
strcpy(pcb[i].name,pcb[j].name);
strcpy(pcb[j].name,name);
t=pcb[i].priority;
pcb[i].priority=pcb[j].priority;
pcb[j].priority=t;
r=pcb[i].runtime;
pcb[i].runtime=pcb[j].ruiitime;
pcb[j].ruiitime=r;
)
)
printf("按優(yōu)先級(jí)高低進(jìn)行排序\n”);
for(i=0;i<q;i++)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf(n%s%d%d\nn,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
printf(,,***********************\u'')?
printf("顯示優(yōu)先級(jí)最高的進(jìn)程\n");
printf(n%s%d%d\nn,pcb[O].name,pcb[O].p
riority,pcb[0].runtime);
for(i=0;i<q;i++)
strcpy(pcb[i].name,pcb[i+l].name);
pcb[i].priority=pcb[i+l].priority;
pcb[i].runtime=pcb[i+l].runtime;
)
printf(“*********************'')?
printf(“使最高優(yōu)先級(jí)進(jìn)程處于執(zhí)行狀態(tài)
(撤銷該進(jìn)程)\n”);
for(i=0;ivq-l;i++)〃撤銷進(jìn)程
printf(n%s%d%d\nM,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
q=q-i;
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
voidtime()
inti,j,t;
//intq=5;
for(i=0;i<q;i++)
printf(n%s%d%d\nn,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
for(i=0;i<q;i++)
pcb[i].runtime=pcb[i].runtime-l;
)
printf("***********************'n'')?
printf("將每個(gè)執(zhí)行進(jìn)程的執(zhí)行時(shí)間減去一個(gè)
時(shí)間片。\n");
for(i=0;i<q;i++)
printf(n%s%d%d\nn,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
for(i=0;i<q;i++)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(pcb[i].runtime<=0)
{t=i;
for(j=t;j<q;j++)
strcpy(pcb[j].name9pcb[j+1].name);
pcb[j].priority
pcb[j+1].priority;
pcb[j].runtime
pcb[j+1].runtime;
)
)
printf("***********************\n'')?
printf("將進(jìn)行結(jié)束的進(jìn)程撤銷。\n");
for(i=0;i<q;i++)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf(n%s%d%d\nn,pcb[i].name,pcb[i].
priority,pcb[i].runtime);
)
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
程序運(yùn)行結(jié)果及分析
?1'C:\Windows\system32\Debug\2222.exe,I。M囪I由
清選擇您需要的功能選項(xiàng):2
23
32
45
將每個(gè)執(zhí)彳邊程的執(zhí)行時(shí)間減去T時(shí)間片。
pl22
p231
p544
進(jìn)行結(jié)束的進(jìn)程撤銷。
pl22
p23
44
將每個(gè)執(zhí)行進(jìn)程的執(zhí)行時(shí)間減去一個(gè)時(shí)間片。
9121
>230
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
實(shí)驗(yàn)感想:
經(jīng)過本實(shí)驗(yàn),我進(jìn)一步掌握進(jìn)了程調(diào)度的功
能和實(shí)現(xiàn)原理。熟練掌握了兩種進(jìn)程調(diào)度算法的
應(yīng)用,相信這對(duì)以后進(jìn)一步學(xué)習(xí)操作系統(tǒng)、信息
系統(tǒng)的開發(fā)都有很大的好處。
實(shí)驗(yàn)三:模擬動(dòng)態(tài)分區(qū)首次適應(yīng)分配和回收算法
實(shí)驗(yàn)?zāi)康模?/p>
經(jīng)過本實(shí)驗(yàn),可加深理解動(dòng)態(tài)分區(qū)分配、回
收程序的功能和具體實(shí)現(xiàn),特別是對(duì)回收分區(qū)的
合并的理解。
實(shí)驗(yàn)內(nèi)容:
1、設(shè)計(jì)動(dòng)態(tài)分區(qū)首次適應(yīng)分配、回收算法。
2、設(shè)計(jì)“未分配區(qū)說(shuō)明表”,格式為:
序號(hào)始址長(zhǎng)度狀態(tài)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
160k2001
0
3、設(shè)計(jì)”已分配區(qū)說(shuō)明表”,格式為:
作業(yè)名|始址]長(zhǎng)度狀態(tài)一
0
0
4、設(shè)計(jì)顯示程序,將“未分配區(qū)說(shuō)明表”和
“已分配區(qū)說(shuō)明表”的內(nèi)容,顯示在屏幕上。
初始分配從一個(gè)空閑區(qū)分配起,回收時(shí)要合
并空區(qū)。
實(shí)驗(yàn)步驟:
1、系統(tǒng)要求分配一個(gè)分區(qū)時(shí),應(yīng)輸入:作業(yè)名、
作業(yè)長(zhǎng)度。
2、回收一個(gè)分區(qū)時(shí),應(yīng)輸入:回收的作業(yè)名。
回收的分區(qū)請(qǐng)注意是否需要進(jìn)行合并。
實(shí)驗(yàn)代碼:
#include<STDIO.H>
#include<STDLIB.H>
intMAX_SEGMENT=10;〃最大碎片值
structPartition〃分區(qū)表目
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
intPar_Size;〃分區(qū)大小
intPar_No;〃分區(qū)序號(hào)或者名字
intAddr;〃分區(qū)地址
intIsUse;〃分區(qū)使用情況,0表示空閑,1表
示使用
Partition*pri;〃前向指針
Partition*next;〃后向指針
);
Partition*Int()〃函數(shù),返回Partition類型指針
{〃初始化空閑分區(qū)表
Partition
list=(structPartition*)malloc(sizeof(struct
Partition));//malloc申請(qǐng)動(dòng)態(tài)分配空間
list->next=NULL;
H=list;
if(!list)
(
printfC'n錯(cuò)誤,內(nèi)存初始化分配失敗!程序
結(jié)束");
exit(l);
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
Hl=(structPartition*)malloc(sizeof(struct
Partition));
printf("請(qǐng)預(yù)先輸入分區(qū)總大小(以KB為單
位):”);
scanf(n%dH,&Hl->Par_Size);
Hl->Addr=0;
Hl->ParNo=0;
Hl->IsUse=0;
Hl->pri=H;
Hl->next=NULL;
H->next=Hl;////list—>H1
returnlist;
)
Partition*InitFPQ
(〃初始化已分配分區(qū)表
Partition
inti;
FP=(structPartition*)malloc(sizeof(struct
Partition));
FP->next=NULL;
H=FP;
for(i=0;i<10;i++)〃已分配區(qū)先暫定分配
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
十個(gè)表目
(
F=(structPartition*)malloc(sizeof(struct
Partition));
if(!F)
(
printf(”n錯(cuò)誤,內(nèi)存分配失??!程序結(jié)束
”);
exit(l);
)
F->ParSize=0;
F->Addr=0;
F->ParNo=0;
F->IsUse=0;
F->next=NULL;
H->next=F;
F->pri=H;
H=H->next;
)
returnFP;
)
Partition*New_Process(Partition
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
Partition*FP)
{〃為新的進(jìn)程分配資源
Partition
intSize,Name,L;
H=list;
Hl=FP->next;
H=H->next;
printf(”請(qǐng)輸入新作業(yè)的名稱和大小(整
數(shù))\曖);
printf("作業(yè)名稱:“);
scanf(n%dn,&Name);
printf("作業(yè)大小(整數(shù)):");
scanf(n%dn,&Size);
while(H)
(
if(!H)〃表目已查完,無(wú)法分配
(
prmtf(n\n已無(wú)空閑分區(qū),本次無(wú)法分
配!”);
returnlist;
)
else{
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(H->IsUse==O)//空表目
//if(H->Par_Size>=Size)〃大小滿足,
空閑分區(qū)大小》要分配的大小
if(H->Par_Size>=Size)〃大小滿足,
|
booltemp=false;
if((H->Par_Size-Size)<=MAX_SEGMENT){//
空閑分區(qū)大小-要分配的大小v碎片值,會(huì)產(chǎn)生碎
片,將整塊內(nèi)存大小分配出去,
Size=H->Par_Size;//分配的大小
為整塊內(nèi)存
temp=true;〃會(huì)產(chǎn)生碎片
)
〃其它情況就分配大小為請(qǐng)求大小,
不會(huì)產(chǎn)生碎片,
L=H,Addr;〃保存空閑分地址
if(temp){
printf("該次內(nèi)存分配會(huì)產(chǎn)生碎片,
將整塊內(nèi)存大?。?1分配出去![Size);
}else{
printf("該次內(nèi)存分配不會(huì)產(chǎn)生碎
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
片”);
)
break;
)
)
H=H->next;〃否則,繼續(xù)往下查找
)
if(H)
(
if(H->Par_Size>Size)〃大小滿足,空閑分區(qū)
大小》要分配的大小
(
P=(structPartition*)malloc(sizeof(struct
Partition));〃分配新的表目,處理一條數(shù)
據(jù),分配一次內(nèi)存
P->IsUse=l;
P,Addr=L;〃指向空閑分區(qū)地址
P->next=H;〃修改指針
H->pri->next=P;
P->pri=H->pri;
H->pri=P;
P->Par_Size=Size;〃分配大小為要請(qǐng)求分
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
配的大小
P->Par_No二Name;〃名稱
H->Par_Size-=Size;〃修改空閑分區(qū),H
所指區(qū)塊大小減Size
H->Addr+=Size;〃H所指區(qū)塊地址力口Size
}else
(
H->IsUse=l;〃大小相等的,把當(dāng)前表
項(xiàng)設(shè)置空表目
)
while(Hl)
(
if(Hl->IsUse==O)
(
Hl->Par_No=Name;
Hl->ParSize=Size;
Hl->Addr=L;〃保存已分配地址
Hl->IsUse=l;〃在已分配表中設(shè)置為已
分配
break;
)
Hl=Hl->next;
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
)
}else
printf(”所申請(qǐng)資源已大過系統(tǒng)所擁有的,
請(qǐng)重新輸入!\n");
returnlist;
)
Partition*Reclaim(PartitionPartition
*FP)
(〃結(jié)束作業(yè),資源回收,N。為作業(yè)名,回收內(nèi)
存
Partition*H1,*H2,*H3,*HF;//H1為釋放
區(qū),H2為后分區(qū),H3為前分區(qū)
intNo;〃作業(yè)名
Hl=list;
HF=FP;〃可有可無(wú)?
Hl=Hl->next;
HF=FP->next;
printf("請(qǐng)輸入您想結(jié)束的作業(yè)名:");
scanf(H%Dn,&No);
while(HF)〃對(duì)已分配表進(jìn)行操作
if(HF->Par_No==No)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
HF->IsUse=O;〃標(biāo)志為空表目
break;〃這時(shí)保存著HF所指分區(qū)的信息
)
HF=HF->next;
)
if(!HF)〃如果找不到該作業(yè),則提示出錯(cuò)
prin情(”所輸入的作業(yè)名稱不正確,請(qǐng)重新
輸入!”);
else{
while(Hl)//對(duì)空閑表進(jìn)行操作
(
if(Hl->Par_No==No)
(
Hl->IsUse=O;〃標(biāo)志為空表目
printf(”內(nèi)存回收成功”);
break;
)
Hl=Hl->next;
)
H2=HL>next;〃后分區(qū)
H3=HL>pri;〃前分區(qū)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(H2&&H2,IsUse==0)〃后接分區(qū)為空閑
(
if(H2->next==NULL)〃判斷后接分區(qū)
是否為尾結(jié)點(diǎn)
(
Hl->Par_Size+=H2->Par_Size;//把
H2合并到H1
Hl->next=NULL;
free(H2);
printf(n已回收%d大小內(nèi)存
n,Hl->Par_Size);
}else〃后分區(qū)不為空閑,表示已經(jīng)被使用
(
Hl->Par_Size+=H2->Par_Size;
Hl->next=H2->next;
H2->next->pri=Hl;
free(H2);
printf(n已回收%d大小內(nèi)存
n,Hl->Par_Size);
)
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(H3&&H3->IsUse==0)〃前分區(qū)為空閑
分區(qū),則合并去前分區(qū)
H3->ParSize+=Hl->ParSize;
H3->next=Hl->next;
if(Hl->next!=NULL)〃若Hl為尾結(jié)點(diǎn)
Hl->next->pri=H3;
free(Hl);
printf(n已回收%d大小內(nèi)存
M,Hl->Par_Size);
)
)
returnlist;
)
voidPrint(PartitionPartition*FP)
(〃輸出已分配分區(qū)和空閑分區(qū)
Partition
Hl=list->next;
H2=FP;
H2=H2->next;
?/
-MVW-%**rjwrj*rj、rj、rj?rjwrjwrj?rjwrjwrjwrj?*jwrjwrjwrjwrjwrj*rj?*J?rj**Jwrj*
*******¥****¥***¥¥g);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
?Ar/tf%S?alx*1**2><S?
VJ?*|VITTI5不不不不不不不不不不不不不不不不
printfC分區(qū)序號(hào)大小開始地址狀態(tài)
W”);
while(Hl)
(
printf(n%d%d
%dn,Hl->Par_No,Hl->Par_Size,Hl->Addr);
if(Hl->IsUse==l)
printf(n已分配\n”);
printf(H空表目\n");
Hl=Hl->next;
ff*£**1*<*?***
*,*]**J??2*rj?*2?r2*rjwrj?rj*rj?rjw*{?rjwrjwrj*rj*rjwrj?
¥豕***¥¥¥**¥¥¥***¥¥3);
voidMain_Print(Partition*list,Partition*FP)
〃主入口函數(shù),進(jìn)行菜單選擇
intop;
while(l)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf(n\n........................................主菜單
.................M);
printf(H\nH);
printf(”L申請(qǐng)新的作業(yè),分配內(nèi)存\n");
printf("2.結(jié)束作業(yè),回收內(nèi)存\n”);
printf("3.查看內(nèi)存表\n");
printf("4.退出系統(tǒng)\n");
printf(n\n請(qǐng)選擇vl-4>:");
scanf(n%dn,&op);
switch(op)〃根據(jù)輸入,選擇分支方向
(
case1:
New_Process(list,FP);
break;
case2:
Reclaim(list,FP);
break;
case3:
Print(list,FP);
break;
case4:
break;
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
default:
printf(n\n選擇錯(cuò)誤,請(qǐng)重新選擇!”);
break;
)
if(op==4)
break;〃退出循環(huán)
)
)
voidmain()
{〃主函數(shù)入口
structPartition*list,*FP;
list=Int();
FP=InitFP();
Main_Print(list,FP);
)
程序運(yùn)行結(jié)果及分析
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
請(qǐng)預(yù)先輸入分區(qū)m大小<以而為單位〉?120
-----------------------轉(zhuǎn)單一
清誨擇
磬入烈f業(yè)的名稱和大小遭數(shù)〉
北坐大片整數(shù)>:80
該茨內(nèi)在耀冬會(huì)產(chǎn)生碎片
?主菜單,
申
益
內(nèi)存
S第
表
出
的俏
花
業(yè)
表
星
出
請(qǐng)選擇<1-4):2
i束的作業(yè)名
鹵存回物
四單---------
內(nèi)存
申
作
出
表
出
運(yùn)擇
解入拓作業(yè)的名稱和大小《整數(shù)〉
業(yè)名稱:100
黯禽鬻皆累統(tǒng)所擁有的.請(qǐng)重新輸入,
-------------------------主菜單--------
申
的伍窗
內(nèi)存
b整
w^亞
萋
i表
退
出g
二
i*TIM工-
噫
料
表
己C
J硼-
始
口
」
大F
丁
e空
80已
4080
內(nèi)存
申
的
作窗I
^n掂
董,
錄
一
退g
實(shí)驗(yàn)感想:
經(jīng)過本實(shí)驗(yàn),加深了對(duì)動(dòng)態(tài)分區(qū)分配、
回收程序的功能和具體實(shí)現(xiàn),特別是對(duì)回收
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
分區(qū)的合并的理解。
實(shí)驗(yàn)五:模擬使用銀行家算法判斷系統(tǒng)的狀態(tài)
實(shí)驗(yàn)?zāi)康模?/p>
了解進(jìn)程管理的實(shí)現(xiàn)方法,理解和掌握
處理進(jìn)程同步問題的方法。
實(shí)驗(yàn)內(nèi)容:
實(shí)現(xiàn)銀行家算法、進(jìn)程調(diào)度過程的模擬、讀者-寫者問題的寫者優(yōu)先算
法。
實(shí)驗(yàn)步驟:
?理解安全性算法和銀行家算法的核心機(jī)
制:
?理解進(jìn)程的三狀態(tài)調(diào)度過程,及各狀態(tài)間的轉(zhuǎn)換關(guān)系;
?設(shè)計(jì)讀者-寫者問題的寫者優(yōu)先算法;
實(shí)驗(yàn)代碼:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
#definem50
intnol;〃進(jìn)程數(shù)
intno2;〃資源數(shù)
intr;
int
allocation[m][m],need[m][m],available[m],max[
charnamel[m],name2[m];
〃定義全局變量
voidmain()
voidcheck();
voidprint();
inti,j,p=O,q=O;
charc;
int
request[m],allocationl[m][m],needl[m][m],avail
ablel[m];
printf(n銀行家算法
\n");
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
printf「請(qǐng)輸入進(jìn)程總數(shù)
scanf(n%dn,&nol);
printfC請(qǐng)輸入資源種類數(shù)嚴(yán));
scanf(M%dM,&no2);
printf("請(qǐng)輸入最大需求矩陣八n");
for(i=0;i<nol;i++)
for(j=0;j<no2;j++)
scanf(n%dn,&max[i][j]);〃輸入已知
進(jìn)程最大資源需求量
printf(”請(qǐng)輸入當(dāng)前分配矩陣:\n");
for(i=0;i<nol;i++)
for(j=0;j<no2;j++)
scanf(n%dn,&allocation[i][j]);〃輸入
已知的進(jìn)程已分配的資源數(shù)
for(i=0;i<nol;i++)
for(j=0;j<no2;j++)
need[i][j]=max[i][j]-allocation[i]|j];//根
據(jù)輸入的兩個(gè)數(shù)組計(jì)算出need矩陣的值
printf("請(qǐng)輸入可利用資源矩陣\n");
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
for(i=0;i<no2;i++)
scanf(H%dH,&available[i]);〃輸入
已知的可用資源數(shù)
printQ;〃輸出已知條件
check();〃檢測(cè)TO時(shí)刻已知條件的安全狀態(tài)
if(r==l)〃如果安全則執(zhí)行以下代碼
(
do{
q=0;
P=0;
printf("\n請(qǐng)輸入請(qǐng)求資源的進(jìn)程號(hào)
(0-4):\nn);
for(j=0;j<=10;j++)
(
scanf(n%dn,&i);
if(i>=nol)
|
printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");
continue;
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
elsebreak;
)
printf("\n請(qǐng)輸入該進(jìn)程所請(qǐng)求的資源數(shù)
request[j]:\nn);
for(j=0;j<no2;j++)
scanf(n%dn,&request[j]);
for(j=0;j<no2;j++)
if(request[j]>need[i][j])p=l;
〃判斷請(qǐng)求是否超過該進(jìn)程所需要的
資源數(shù)
if(p)
printf("請(qǐng)求資源超過該進(jìn)程資源需
求量,請(qǐng)求失?。nn);
else
(
for(j=0;j<no2;j++)
if(request[j]>available[j])q=l;〃判
斷請(qǐng)求是否超過可用資源數(shù)
if(q)
printf(“沒有做夠的資源分配,請(qǐng)
求失敗!\nn);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
else
〃請(qǐng)求滿足條件
(
for(j=0;j<no2;j++)
(
availablel[j]=available[j];
allocation1[i][j]=allocatioii[i][j];
needl[i][j]=need[i][j];
〃保存原已分配的資源數(shù),仍需要的
資源數(shù)和可用的資源數(shù)
available[j]=available[j]-request[j];
allocation[i][j]+=request[j];
need[i][j]=need[i][j]-request[j];
〃系統(tǒng)嘗試把資
源分配給請(qǐng)求的進(jìn)程
)
print。;
check();〃檢測(cè)分配后的安
全性
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(r==O)〃如果分配后系統(tǒng)不安
全
(
for(j=0;j<no2;j++)
(
available[j]=availablel[j];
allocation[i][j]=allocatioiil[i][j];
need[i][j]=needl[i][j];
〃還原已分配的資源數(shù),
仍需要的資源數(shù)和可用的資源數(shù)
)
print—返回分配前資源數(shù)
W);
print();
)
)
}prmtf(n\n你還要繼續(xù)分配嗎?Yor
N?\nn);
〃判斷是否繼續(xù)進(jìn)行資源分配
c=getche();
}while(c==,y,||c==,Y*);
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
)
)
voidcheck()〃安全算法函數(shù)
(
intk,f,v=O,i,j;
intwork[m],a[m];
boolfinish[m];
r=l;
for(i=0;i<nol;i++)
finish[i]=false;〃初始化進(jìn)程均沒得到
足夠資源數(shù)并完成
for(i=0;i<no2;i++)
work[i]=available[i];〃work[i]表示可提供
進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)
k=nol;
do{
for(i=0;i<nol;i++)
if(finish[i]==false)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
f=l;
for(j=0;j<no2;j++)
if(need[i][j]>work[j])
f=0;
if(f==l)〃找到還沒有完成且
需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)
程
(
finish[i]=true;
a[v++]=i;〃記錄安全序列號(hào)
for(j=0;j<no2;j++)
work[j]+=allocatioii[i][j];〃釋
放該進(jìn)程已分配的資源
)
)
)
k-;〃每完成一個(gè)進(jìn)程分配,未完成
的進(jìn)程數(shù)就減1
}whiIe(k>0);
f=l;
for(i=0;i<nol;i++)〃判斷是否所有的進(jìn)程
都完成
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
if(finish[i]==false)
(
f=0;
break;
)
)
if(f==O)〃若有進(jìn)程沒完成,則為不安
全狀態(tài)
(
printf("系統(tǒng)處在不安全狀態(tài)!”);
r=0;
)
else
(
printf(n\n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列
為:\nn);
for(i=0;i<nol;i++)
printf(Mp%dn,a[i]);〃輸出安全序列
)
)
文檔僅供參考,不當(dāng)之處,請(qǐng)聯(lián)系改正。
voidprint()〃輸出函數(shù)
inti,j;
printf(n\nn);
printf(**************此時(shí)刻資源分配情況
¥¥***¥¥¥**¥¥¥***¥¥¥**W?fX).
printfc進(jìn)程名/號(hào)|最大需求矩陣|
當(dāng)前分配矩陣I需求矩陣|\曖);
for(i=0;i<nol;i++)
(
printf(Mp%d/%dn,i,i);
forG=0;j<no2;j++)
{printf(n%dn,max[i][j]);}
for0=0;j<no2;j++)
{printf(H%d
n,a
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024八年級(jí)地理上冊(cè)第一章疆域和人口-從世界看中國(guó)學(xué)情評(píng)估晉教版
- 大學(xué)生心理健康教育(河南經(jīng)貿(mào)職業(yè)學(xué)院版)學(xué)習(xí)通測(cè)試及答案
- 《金版學(xué)案》2022屆高考政治一輪復(fù)習(xí)課時(shí)作業(yè):必修2-4單元總結(jié)-
- 2025年人教版八年級(jí)數(shù)學(xué)寒假預(yù)習(xí) 第03講 二次根式的加減(3個(gè)知識(shí)點(diǎn)+7大考點(diǎn)舉一反三+過關(guān)測(cè)試)
- 2025年人教版七年級(jí)數(shù)學(xué)寒假?gòu)?fù)習(xí) 專題05 一元一次方程(4重點(diǎn)串講+13考點(diǎn)提升+過關(guān)檢測(cè))
- 【狀元之路】2022高考地理總復(fù)習(xí)隨堂訓(xùn)練1-2-4全球氣候變化和氣候類型的判讀-
- 【創(chuàng)新設(shè)計(jì)】2021高考化學(xué)(廣東專用)二輪-微題型專練17
- 四川省綿陽(yáng)2024-2025學(xué)年高二上學(xué)期數(shù)學(xué)期末模擬試題(五)(含答案)
- 【原創(chuàng)】江蘇省2021屆高三上學(xué)期第三次周測(cè)數(shù)學(xué)試題
- 部編版語(yǔ)文二年級(jí)下冊(cè)第五單元綜合素養(yǎng)測(cè)評(píng) A卷(含答案)
- 福建省泉州市晉江市2023屆九年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 鉆孔灌注樁施工方案 (詳細(xì))
- 新建南通至寧波高速鐵路站前Ⅲ標(biāo)二分部出海棧橋及綜合碼頭(自用)工程海域使用論證報(bào)告表
- 東北扭秧歌活動(dòng)方案
- 車身穩(wěn)定系統(tǒng)課件
- 2023-2024學(xué)年廣東省東莞市七年級(jí)上期末數(shù)學(xué)試卷附答案
- 檢察機(jī)關(guān)的體制與組織機(jī)構(gòu)課件
- 山東省濰坊市濰城區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末語(yǔ)文試題
- 2024年1月四川高中學(xué)業(yè)水平合格考物理試卷試題真題
- 雅詩(shī)蘭黛集團(tuán)企業(yè)培訓(xùn)方案
- 30題產(chǎn)業(yè)研究員崗位常見面試問題含HR問題考察點(diǎn)及參考回答
評(píng)論
0/150
提交評(píng)論