SAA验报告一 本文关键词:报告,SAA
SAA验报告一 本文简介:浙江财经大学东方学院实验报告项目名称SAS基本操作玉数据集建立、浏览所属课程名称SAS与MATLAB软件项目类型综合实验(实训)日期班级13保险学号1320530112姓名巫小敏指导教师徐朝辉浙江财经大学东方学院教务部制一、实验(实训)概述:【目的及要求】掌握启动SAS的方法,熟悉常用的操作界面;
SAA验报告一 本文内容:
浙江财经大学东方学院
实
验
报
告
项
目
名
称
SAS基本操作玉数据集建立、浏览
所属课程名称
SAS与MATLAB软件
项
目
类
型
综
合
实验(实训)日期
班
级
13保险
学
号
1320530112
姓
名
巫小敏
指导教师
徐朝辉
浙江财经大学东方学院教务部制
一、实验(实训)概述:
【目的及要求】
掌握启动SAS的方法,熟悉常用的操作界面;理解SAS数据库、临时|永久数据集等基本概念,熟练掌握建立数据集、浏览编辑数据集的基本使用方法。
二、实验(实训)内容:
【项目内容】
项目1。(验证题,实验报告只要写上SAS验证试验项目,并写出结果就行)
输入下列程序,运行并保存在恰当的文件夹中:
data
tmp;
input
name$
birthday
date9.
score1
score2
score3
wage
comma8.2
percent;
cards;
zhangsanfen
02-oct-76
78
81
65
1,256.12
0.21
lisi
18-jan-75
74
93
65
1,080.5
0.15
wangwu
14,feb,74
88
90
95
2,040.
0.3
xuliu
30/jun/77
75
89
69
980.38
0.12
proc
print;
format
birthday
monyy7.
wage
dollar4.2;
run;
上述程序建立了一个含有姓名、生日、项目1~3的考核分、工资、加薪比率这些字段的临时数据集tmp。
项目2。
1)用菜单|工具条方式在d盘自己目录下建立mysas数据库
2)修改项目1的程序,用编程方法在d盘自己目录下建立mylib永久文件库,并在其中建立tmp数据集
项目3
1)用菜单|工具条方式在d盘自己目录下建立mysas数据库
2)修改项目1的程序,用编程方法在d盘自己目录下建立mylib永久文件库,并在其中建立tmp数据集。
有10位同学的名字、年龄、体重、身高数据如下表所示;
试用多种手段将这些数据新建为一个存放在MyLib库下的health1永久数据集。
health数据集的内容
Name
Birth
Weight
Height
Tom
1991/10/1
40
165
Mike
1991/3/4
42
160
Jack
1992/1/1
46
162
Brown
1989/12/3
41
172
Lucy
1991/5/16
39
155
Gup
1990/7/1
38
166
Lee
1991/12/1
46
182
Mary
1992/1/2
39
159
Kate
1991/3/2
37
155
Vencent
1991/4/1
40
160
1)
用编程方法将上表数据输入SAS中,观察输出结果(要在输出窗口显示出)和日志窗口中的内容。通过交互方式分别对变量Name,Birh,Weight,Height建立“姓名、出生日期、体重和身高”标签。
2)
用VIEWTABLE数据建立health2数据集,保持在Mylib数据库中。
项目4。
记事本stock.txt中存放有code(证券代码)、name
(证券名称)、scale
(流通盘)、EPS
(每股收益)、share
(投资组合中所占份额)、price
(价格)的数据(以空格分隔),将其读入到SAS
临时数据集stock中。
项目5。
试着将SAS数据集stock中的数据导出到Excel
表格stock.xls中。
【实验(实训)过程】(步骤、记录、数据、程序等)
分项目写出程序、结果,如果涉及操作步骤,需要写出步骤。
项目1
项目2
(1)先在D盘里建一个mysas的文件夹,再点击SAS主界面中工具条上有“创建新的数据库”工具图标,
(2)
libname
mylib
D:/mylib
;
data
mylib.
tmp;
input
name$
birthday
date9.
score1
score2
score3
wage
comma8.2
percent;
cards;
zhangsanfen
02-oct-76
78
81
65
1,256.12
0.21
lisi
18-jan-75
74
93
65
1,080.5
0.15
wangwu
14,feb,74
88
90
95
2,040.
0.3
xuliu
30/jun/77
75
89
69
980.38
0.12
proc
print;
format
birthday
monyy7.
wage
dollar4.2;
run;
项目3
(1)
libname
mylib
D:/mylib
;
data
mylib.heaithl;
input
name$8.
birth
yymmdd10.
weight
height;
format
birth
yymmdd10.;
cards;
Tom
1991/10/01
40
165
Mike
1991/03/04
42
160
Jack
1992/01/01
46
162
Brown
1989/12/03
41
172
Lucy
1991/05/16
39
155
Gup
1990/07/01
38
166
Lee
1991/12/01
46
182
Mary
1992/01/02
39
159
Kate
1991/03/02
37
155
Vencent
1991/04/01
40
160
proc
print;
run;
(2)
项目4
(1)
data
stock;
infile
D:/stock.txt
;
input
code$
name$
scale
EPS
share
price;
proc
print;
run;
(2)
文件
–
导出数据
–
next-
finish
code
name
scale
EPS
share
price
000096
广聚能源
8500.00
0.06
1000.00
13.27
000099
中信海直
6000.00
0.03
2000.00
14.20
000150
ST麦科特
12600.00
0.00
1500.00
7.12
000151
中成股份
10500.00
0.03
1300.00
10.08
000153
新力药业
2500.00
0.06
2000.00
22.75
000155
川化股份
13000.00
-0.01
5000.00
6.85
000156
安塑股份
3600.00
0.03
2000.00
14.95
000157
中联重科
10000.00
0.06
3000.00
12.65
000158
常山股份
10000.00
0.02
2400.00
8.38
000159
国际实业
7000.00
0.01
3100.00
12.15
000301
丝绸股份
15365.00
0.04
2000.00
7.31
000488
晨鸣纸业
7700.00
0.10
1000.00
13.26
000725
京东方
6000.00
0.04
2000.00
12.33
000835
隆源实业
1338.00
0.07
1000.00
22.58
000869
张裕A
3200.00
0.19
1300.00
18.29
000877
天山股份
7800.00
-0.08
3000.00
12.55
000885
ST春都
6000.00
-0.07
2000.00
12.48
000890
法尔胜
16934.00
0.03
1000.00
9.12
000892
长丰通信
12000.00
0.03
1000.00
7.88
000897
津滨发展
14166.00
0.00
5000.00
6.91
000900
现代投资
21423.00
0.06
3000.00
8.59
000901
航天科技
4800.00
0.01
1000.00
27.95
000902
中国服装
6500.00
-0.03
2000.00
10.92
000903
云内动力
6000.00
0.11
3000.00
11.79
000905
厦门路桥
9500.00
0.05
1000.00
9.29
000906
南方建材
6650.00
0.01
2000.00
14.47
000908
天一科技
8988.00
0.01
3000.00
8.28
000909
数源科技
6000.00
0.00
1000.00
9.99
000910
大亚股份
8000.00
0.04
2000.00
8.90
000911
南宁糖业
7280.00
0.07
2400.00
9.01
000912
泸天化
15000.00
0.11
1500.00
8.06
000913
钱江摩托
8450.00
0.06
3000.00
11.86
000915
山大华特
4599.00
0.00
1000.00
14.40
000916
华北高速
34000.00
0.04
5000.00
5.15
000917
电广传媒
11800.00
0.09
3000.00
16.23
000918
亚华种业
6000.00
-0.05
1000.00
10.12
三、指导教师评语及成绩:
评语:
成绩:
指导教师签名:
批阅日期:
篇2:化学实验报告
化学实验报告 本文关键词:化学实验,报告
化学实验报告 本文简介:东塔学校化学实验报告班级姓名同组人指导教师史老师日期:实验题目:观察和描述一对蜡烛及期燃烧的探究实验目的:1、培养观察和描述的能力。2、学习科学探究的方法。实验器材:蜡烛、小木条、烧杯2个、澄清石灰水实验步骤:1、点燃前,观察蜡烛的颜色、状态、形状和硬度;观察把蜡烛投入水中的情况。2、燃着时,火焰分
化学实验报告 本文内容:
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:观察和描述一对蜡烛及期燃烧的探究
实验目的:
1、培养观察和描述的能力。
2、学习科学探究的方法。
实验器材:
蜡烛、小木条、烧杯2个、澄清石灰水
实验步骤:
1、点燃前,观察蜡烛的颜色、状态、形状和硬度;观察把蜡烛投入水中的情况。
2、燃着时,火焰分几层,用小木条比较火焰不同部分温度的高低,用烧杯推测燃烧后的生成物。
3、燃灭后,用火柴去点白烟,蜡烛能否重新燃烧。
现象:
1、蜡烛是乳白色,柱状固体、无味,能被轻易切成处,放于水中飘浮于水面上。
2、火焰分为三层。小木条上外焰接触的部分被烧焦得最厉害,干燥的烧杯内壁有水珠,涂有石灰水的烧杯变浑浊。
3、白烟能被点燃。
分析及结论:
1、蜡烛难溶于水、质软。
2、外焰温度最高,蜡烛燃烧有水和CO2生成。
3、吹灭蜡烛后的白烟是可燃物。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:对人体吸入的空气和呼出的气体的探究
实验目的:
探究人体吸入的空气和呼出的气体有何不同
实验器材:
水槽、集气瓶4个、玻璃片4块、滴管、石灰水、饮料管、小木条
实验步骤:
1、用吹气排水法收集两瓶呼出的气体。
2、收集两瓶空气。
3、在1瓶空气和1瓶呼出气中滴入石灰水、振荡。
4、将燃着的木条分别插入空气和呼出气中。
5、对着干燥的玻璃片呼气。
现象:
1、滴入石灰水后,充满呼出气的集气瓶更浑浊一些;
2、插入呼出气中的木条立即熄灭,插入空气中的木条正常燃烧过了一会儿才熄灭;
3、呼气后干燥的玻璃片上有较多的水珠。
分析及结论:
人体呼出的气体中有CO2含量较高,吸入的空气中O2含量较高,呼出气中H2O含量较高。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:化学实验的基本操作
实验目的:
熟练掌握药品的取用,给物质的加热,仪器洗涤的操作
实验器材:
镊子、药匙、试管、量筒、滴管、酒精灯、试管夹、试管刷、锌粒、盐酸、碳酸纳粉末、氢氧化钠溶液、硫酸铜溶液
实验步骤:
一、药品的取用
1、用镊子夹取了粒锌放入试管中,并将试管放在试管架上。
2、取少量碳酸钠粉末放入试管中,并半试管放在试管架上。
3、量取2ml盐酸加入到试管2中,往试管一中滴加盐酸。
二、结物质的加热
取2ml氢氧化钠溶液倒入试管中,滴加硫酸铜溶液,然后在酒精灯火焰上加热。
三、洗涤仪器
将本实验中所用的试管、量筒洗干净。
现象:
一、3加入盐酸后产生大量气泡,试管外壁发热。
二、先产生蓝色紫状况淀,受热后,变为黑色的沉淀。
分析及结论:
一、3碳酸钠与盐酸反应放出二氧化碳气体,盐酸也锌粒反应放出氢气。
二、氢氧化钠与硫酸铜反生或氢氧化铜,氢氧化铜受热分解生成氧化铜。
三、掌握化学实验的基本操作是我们安全、正确、快速的进行实验并获得可靠结果的重要保证。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:制取氧气及氧气的性质
实验目的:
1、掌握用KmnO4制取O2的方法
2、了解O2的化学性质。
实验器材:
铁架台、酒精灯、试管、水槽、集气瓶、镊子、KmnO4、木炭、石灰水、细铁丝、酒精
实验步骤:
一、氧气的制取,1、查,先在水槽中装适量的水,再检查装置的气密性。2、装,往试管中装入KMnO4,并在试管口放一团棉花。3、定,固定各仪器(注意,铁夹夹在试管中上部,试管口要略向下倾斜,酒精灯与试管底部的距离)。4、倒,把两个装满水的集气瓶连同玻璃片倒立在水槽中。5、点,点燃酒精灯,先预热,再集中加热。6、收,待气泡连续、均匀的放出时,开始收集,收集好后在水中盖上玻璃片取出正放于桌上。7、移,先将导管移出水面。8、灭,最后熄灭酒精灯。
二、氧气的性质:1、把烧到发红的木炭伸入到氧气瓶中,熄灭后滴入石灰水,振荡。2、把细铁丝先沾点酒精,点燃,再伸入到O2瓶中。
现象:
1、木炭在O2中燃烧,发白光、放热、滴入的石灰水变浑浊。
2、细铁丝在氧气中剧烈燃烧,火星四射,放热,生成一种黑色的熔融物。
分析及结论:
1、,CO2使石灰水浑浊
2、
3、可燃物如:木炭在氧气里燃烧,比在空气里燃烧更剧烈;在空气中不能燃烧的物质如铁却可以在氧气里燃烧,说明O2是一种化学性质较活泼的气体。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:氧气的制取
实验目的:
1、掌握用高锰酸钾制取氧气的方法。
2、掌握氧气的检验方法。
实验器材:
铁架台、酒精灯、试管、水槽、集气瓶、木条、棉花、高锰酸钾
实验步骤:
一、制取O2
1、查:先在水槽中装适量的水,检查装置的气密性。
2、装:往试管中装入KMnO4并在试管口放一团棉花。
3、定:固定各仪器(注意:铁夹夹在试管中上部;试管口要稍向下倾斜;注意酒精灯与试管底部的距离)。
4、倒:将装满水的集气瓶连同玻璃片倒立于水槽中。
5、点:点燃酒精灯,先预热,再固定加热。
6、收:待气泡连续,均匀的冒出时,开始收集。
7、移:先将导管移出水面。
8、灭:再熄灭酒精灯。
二、检验O2,用带火星的木条伸入集气瓶口,观察现象。
现象:
伸入集气瓶口的带火星的木条复燃
分析及结论:
1、
2、氧气能支持燃烧,用带火星的木条来检验氧气的生成。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:分子运动现象的探究
实验目的:
认识分子的运动
实验器材:
试管、滴管、滤纸条、棉花、酚酞溶液、浓氨水
实验步骤:
1、在一张滤纸条上滴几滴酚酞溶液,把滤纸条放入试管中。
2、在试管口塞一团棉花,将试管平放于实验桌上。
3、往棉花上滴数滴浓氨水,观察现象。
现象:
试管中的滤纸条,由外到里逐渐出现一个一个红点
分析及结论:
浓氨水中的氨分子由于不断运动,进入到试管中,与滤纸条上的酚酞发生反应生成了一种红色物质。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:水的净化
实验目的:
1、了解净化水的常用方法。
2、掌握过滤的基本操作。
实验器材:
烧杯4个、玻璃棒、漏斗、铁架台、滤纸,明矾粉末
实验步骤:
1、在A、B、C
3个烧杯中,装入半杯浑浊的河水。
2、往A、B两杯中加入2药匙明矾粉末,搅拌溶解后,静置。
3、准备过滤器。
4、过滤A得到滤液D。
5、比较B、C、D,观察它们的清澈程度。
现象:
1、加入明矾静置后,A、B变得比C更澄清。
2、过滤后,D又变得更澄清,它们的清澈程度依次是D、B、C。
分析及结论:
过滤法,明矾的吸附沉降法,都是净化水的常用方法。过滤法的净化程度更高,但是,这两种方法一般都只能除去水中的不溶物,要除去可溶性杂质,得到更净化的水还要采用其它方法。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:质量守恒定律的探究
实验目的:
验证化学反应遵循质量守恒定律
实验器材:
锥形瓶、天平、酒精灯、玻璃管、小气球、白磷
实验步骤:
白磷燃烧前后质量的比较
1、在玻璃管的一端系牢一个小气球,将玻璃管插入胶塞中。
2、在底部铺有细沙的锥形瓶中放一小粒白磷,塞上胶塞使玻璃管下端能与白磷接触。
3、将该装置放于天平上用砝码平衡。
4、取下锥形瓶,将玻璃管灼烧至红热,放回瓶中,塞紧胶塞,将白磷引燃。
5、冷却后又放回天平上。
现象:
引燃白磷后,瓶内充满大量白烟,小气球膨胀,冷却放回天平后,天平依然平衡。
分析及结论:
瓶内发生反应:,反应前后物质的总质量不变,即参加化学反应的各物质质量之和等于反应后生成的各物质的质量之和。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:质量守恒定律的探究
实验目的:
验证化学反应遵循质量守恒定律
实验器材:
烧杯(100ml)、天平、硫酸铜溶液、铁钉
实验步骤:
铁钉与CuSO4溶液反应前后质量的测定
1、在100ml烧杯中加入30ml
CuSO4溶液,准备3根光亮的铁钉。
2、将溶液、铁钉一起放于天平上称量,记录质量m。
3、将铁钉投入杯中,几分钟后,将其放于天平上称量记录质量m2。
现象:
1、烧杯中溶液的蓝色逐渐变为浅绿色,铁钉表面履盖了一层红色粉末。
2、m1=36g
m2=36g
分析及结论:
烧杯中发生反应:铁+硫酸铜→铜+硫酸亚铁,反应前后物质的总质量不变,即参加化学反应的各物质质量之和等于反应后生成的各物质的质量之和。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:实验室制取CO2的研究与实践
实验目的:
设计CO2的制取装置并验证产生的气体
实验器材:
锥形瓶、长颈漏斗、集气瓶、导气管、试管、大理石、稀盐酸、澄清石灰水
实验步骤:
1、思考实验室制取CO2气体时应考虑的因素
2、选择P111上提供的仪器设计出制取CO2的装置,并相互讨论、交流,选出最佳装置。
讨论的结果是最佳装置有两种,分别应包括以下仪器:
①试管、导管、集气瓶。
②锥形瓶,长颈漏斗,导管,集气瓶
3、制取并检验CO2
现象:
1、大理石与稀盐酸反应产生大量气泡,大理石逐渐缩小甚至会消失。
2、将产生气体通入澄清石灰水后,石灰水变浑浊。
分析及结论:
1、实验室制取气体应先考虑①选择适当的反应。②反应物的状态,反应的条件。③用排空气法还是排水法收集气体。
2、大理石与盐酸发生的反应是:CaCO3+2HCl=CaCl2+CO2↑+H2O
CO2能使澄清石灰水变浑浊
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:CO2的制取及性质
实验目的:
1、掌握CO2的实验室制度。
2、掌握CO2的检验及验满方法。
实验器材:
铁架台、试管2支、集气瓶、酒精灯、小木条、澄清石灰水、大理石、稀盐酸
实验步骤:
1、检查装置的气密性。
2、往试管中装入大理石,倒入占试管容积1/3的稀盐酸。
3、固定仪器。
4、用向上排空气法收集气体,瓶口盖上玻片。
5、用一根燃着的木条伸入集气瓶口。
6、在另一支试管中装入石灰水,插入导管观察现象。
7、实验完毕后,清洗仪器,整理桌面。
现象:
1、大理石与稀盐酸反应产生大量气泡,大理石逐渐减小。
2、伸入集气瓶口的木条立即熄灭。
3、往石灰水中通入气体后变浑浊。
分析及结论:
1、产生的气体是CO2。
2、用燃着的木条做CO2的验满。
3、大理石与稀盐酸的反应是:碳酸钙+盐酸→氯化钙+水+二氧化碳
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:金属活动性的探究
实验目的:
1、比较几种金属活动性大小。
2、理解置换反应概念。
实验器材:
试管4支、小木条、稀HCl、镁带、锌粒、铁屑、铜丝、稀H2SO4
实验步骤:
1、分别在4支试管中装入5ml稀盐酸。
2、分别投入少量的Mg、Zn、Fe、Cu。
3、用燃着的木条放于试管口。
4、用稀H2SO4代替稀HCl重作以上实验。
现象:
1、第1支试管反应最剧烈,产生大量的气泡。
第2支试管反应适中,气泡较多。
第3支试管反应较慢,气泡较小。
第4支无任何现象。
2、点火后,可见前3支试管口瞬间出现浅蓝色火焰。
分析及结论:
1、Mg+2HCl=MgCl2+H2↑
Fe+2HCl=FeCl=FeCl2+H2↑
Zn+2HCl=ZnCl2+H2↑
Cu与稀HCl,稀H2SO4不反应,四种金属活动性顺序为Mg>Zn>Fe>Cu。
2、如以上反应,由一种单质和一种化合物生成另一种单质和另一种化合物的反应,叫置换反应。
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:配制一定浓度的溶液
实验目的:
掌握配制某A%溶液的方法
实验器材:
天平、药匙、烧杯、量筒(50ml)、细口瓶、食盐
实验步骤:
1、计算:算出配制50g,6%的NaCl深液中NaCl和H2O的质量。
2、称量,溶解:用天平称出所需NaCl倒入烧杯中。用量筒量取所需的水,倒入盛有NaCl的烧杯中,搅拌。
3、装瓶:把溶液装入细口瓶中,盖上瓶塞,贴上标签。
现象:
1、m(NaCl)=3g
m(水)=47g
V(水)=47ml
2、标签应包括药品名称和溶液中溶质的质量分数。
分析及结论:
m(NaCl)=50×6%=3g
V(水)=
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:酸的化学性质
实验目的:
由HCl、H2SO4归纳酸的通性
实验器材:
点滴板、滴管、试管2支、稀HCl、稀H2SO4、石蕊、酚酞试液、锈铁钉
实验步骤:
1、在点滴板上分别滴2d稀HCl、稀H2SO4,在其中滴入石蕊、酚酞试液。
2、写出Mg、Zn、Fe与稀H2SO4,投入锈铁钉,1分钟后取出,用水洗净铁钉。
现象:
1、
酸溶液
紫色石芯试液
无色酚酞试液
HCl
变红
无色
H2SO4
变红
无色
2、投入锈铁钉后,溶液呈浅黄色,铁钉变得光亮洁净。
分析及结论:
1、酸性溶液遇石蕊变红,遇酚酞不变色。
2、Mg+H2SO4=MgSO4+H2↑
Zn+H2SO4=ZnSO4+H2↑
Fe+H2SO4=FeSO4+H2↑
3、Fe2O3+6HCl=2FeCl3+3H2O
Fe2O3+3H2SO4=Fe(SO4)3+3H2O
东塔学校化学实验报告
班级
姓名
同组人
指导教师
史老师
日期:
实验题目:碱的化学性质
实验目的:
由NaOH、Ca(OH)2学习碱的通性
实验器材:
点滴板、滴管、NaOH、
Ca(OH)2、石蕊、酚酞试液
实验步骤:
1、在点滴板上分别滴入2dNaOH溶液和Ca(OH)2溶液,往其中滴入石蕊,酚酞试液。
2、回忆检验CO2的反应。
3、NaOH在空气中不仅会吸水还能与CO2反应,写出方程式。
现象:
碱溶液
紫色石芯试液
无色酚酞试液
NaOH
变蓝
变红
Ca(OH)2
变蓝
变红
分析及结论:
1、碱性溶液遇石蕊变蓝,遇酚酞变红。
2、CO2+
Ca(OH)2=CaCO3↓+H2O
3、CO2+
2NaOH=Na2CO3+H2O
从本实验可归纳出碱的通性:1、显色反应。2、+非金属氧化物。
靖安中学化学实验报告
班级
姓名
同组人
指导教师
白老师
日期:
实验题目:中和反应
实验目的:
1、学习判断酸碱反应完全的方法。
2、认识中和反应。
实验器材:
烧杯、滴管、酚酞试液、稀HCl、NaOH
实验步骤:
1、在小烧杯中加入10ml
NaOH溶液,滴入几滴酚酞溶液。
2、再慢慢滴入稀HCl,并不断搅拌,至溶液颜色恰好变成无色为止。
现象:
1、溶液变成红色。
2、红色逐渐减退,直至呈无色。
分析及结论:
1、碱性溶液遇酚酞变红。
2、NaOH被HCl中和,溶液碱性减弱故红色逐渐减退。
NaOH被完全中和时,溶液不再呈碱性,故变为无色。
NaOH+HCl=NaCl+H2O
靖安中学化学实验报告
班级
姓名
同组人
指导教师
白老师
日期:
实验题目:测量溶液的PH
实验目的:
1、学习使用PH试纸。
2、了解某些溶液的酸碱度。
实验器材:
玻璃片、玻璃棒、PH试纸、稀HCl、5%NaOH、5%氨水、橘子汁等物质
实验步骤:
1、在玻璃片上放一小片PH试纸,用玻璃棒滴1d待测液到试纸上。
2、与标准比色卡比较,即得出被测液大致的PH。
3、测定以下物质的PH,认识它们的酸碱性,橘子汁、肥皂水、草木灰水、唾液。
现象:
1、
2、
溶液名称
PH
物质名称
PH
酸碱性
稀HCl
3
橘子汁
5
酸性
NaOH(5%)
11
肥皂水
8
碱性
氨水(5%)
8
草木灰
9
碱性
唾
液
7
中性
分析及结论:
1、NaOH为强碱,氨水为弱碱,因此,同浓度的NaOH溶液的PH大于氨水。
2、PH<7
呈酸性
PH=7
呈中性
PH>7
呈碱性
靖安中学化学实验报告
班级
姓名
同组人
指导教师
白老师
日期:
实验题目:粗盐的提纯
实验目的:
1、掌握粗盐提纯的方法。
2、了解混合物分离的概念。
实验器材:
天平、烧杯2个,玻璃棒、量筒、泥坑斗、铁架台、滤纸、酒精灯、蒸发皿、粗盐
实验步骤:
1、溶解:用天平称取粗盐5g,投入到10ml水的烧杯中,搅拌,称出剩余粗盐的质量。
2、过滤:过滤食盐水1~2次,直到滤液澄清。
3、蒸发:将滤液倒入蒸发皿中,加热,结晶。
4、计算产率。
现象:
1、搅拌,促进粗盐进中NaCl的溶解。
2、滤纸上有不溶的杂质。
3、加热时搅拌防液滴飞溅,待有较多NaCl出现时停止加热,用余热蒸干。
分析及结论:
1、
称取粗盐
剩余粗盐
溶解粗盐
溶解粗盐
精盐
精盐产率
5.0
0.7
4.3
4.3
3.3
76.7%
2、精盐产率=
靖安中学化学实验报告
班级
姓名
同组人
指导教师
白老师
日期:
实验题目:初步区分氮肥、磷肥、钾肥的方法的探究
实验目的:
探究氮肥、磷肥、钾肥的区别方法
实验器材:
烧杯、研钵、NH4HCO3、NH4Cl、磷矿粉、K2SO4、KCl
实验步骤:
1、比较NH4HCO3等5种化肥的外观,气味和在水中的溶解性。
2、在研钵中分别倒入少量的NH4Cl、K2SO4、KCl分别加入少量的熟石灰,混合,研磨,嗅气味。
现象:
化肥种类
氮肥
钾肥
磷肥
NH4HCO3
NH4Cl
K2SO4
KCl
磷矿粉
看
外
观
白色晶体
灰白色粉末
气
味
有强烈的氨味
无明显异味
加
水
全都能溶于水
难溶于水
加熟石灰
产生氨气
不产生氨气
分析及结论:
区别氮、磷、钾肥的方法
1、首先从外观、气味上区别。
2、然后从溶解性方面区别。
3、最后可通过化学方法如加碱的方法区别。
实验步骤和方法
实验现象及反应方程式
实验结论
在充满CO2气体的软塑料瓶中注入约10mL的氢氧化钠溶液,振荡
方案1
从软塑料瓶中取少量反应后的溶液于试管中,滴入
CO2和NaOH确实发生了化学反应
方案2
从软塑料瓶中取少量反应后的溶液于试管中,滴入----------------------
CO2和NaOH确实发生了化学反应
方案3
从软塑料瓶中取少量反应后的溶液于试管中,滴入---------------
CO2和NaOH确实发生了化学反应
方案4
从软塑料瓶中取少量反应后的溶液于试管中,滴入-----------------
CO2和NaOH确实发生了化学反应
靖安中学化学实验报告
班级
姓名
同组人
指导教师
日期:
实验题目:
二氧化碳与氢氧化钠反应实验探究
药品与仪器
充满CO2气体的软塑料瓶,试管、滴管、稀盐酸、Ca(OH)2溶液、CaCl2溶液、氢氧化钠溶液、
靖安中学化学实验报告
班级
姓名
同组人
指导教师
日期:
实验题目:粗盐的提纯
实验目的:
1、掌握粗盐提纯的方法。
2、了解混合物分离的概念。
实验器材:
天平、烧杯2个,玻璃棒、量筒、泥坑斗、铁架台、滤纸、酒精灯、蒸发皿、粗盐
实验步骤:
1、溶解:用天平称取粗盐5g,投入到10ml水的烧杯中,搅拌,称出剩余粗盐的质量。
2、过滤:过滤食盐水1~2次,直到滤液澄清。
3、蒸发:将滤液倒入蒸发皿中,加热,结晶。
4、计算产率。
现象:
1-----------------------------------------------------------------------------------------
2、----------------------------------------------------------------------------------------
3、----------------------------------------------------------------------------------------
分析及结论:
1、
称取粗盐
剩余粗盐
溶解粗盐
溶解粗盐
精盐
精盐产率
2、精盐产率=
靖安中学化学实验报告
班级
姓名
同组人
指导教师
日期:
实验题目:碱的化学性质
实验目的:
由NaOH、Ca(OH)2学习碱的通性
实验器材:
点滴板、滴管、NaOH、
Ca(OH)2、石蕊、酚酞试液
实验步骤:
1、在点滴板上分别滴入2dNaOH溶液和Ca(OH)2溶液,往其中滴入石蕊,酚酞试液。
2、回忆检验CO2的反应。
3、NaOH在空气中不仅会吸水还能与CO2反应,写出方程式。
现象:
碱溶液
紫色石芯试液
无色酚酞试液
NaOH
Ca(OH)2
分析及结论:
1、----------------------------------------------------------------------------------------
2、----------------------------------------------------------------------------------------
3、----------------------------------------------------------------------------------------
从本实验可归纳出碱的通性:1、显色反应。2、非金属氧化物。
靖安中学化学实验报告
班级
姓名
同组人
指导教师
白老师
日期:
实验题目:中和反应
实验目的:
1、学习判断酸碱反应完全的方法。
2、认识中和反应。
实验器材:
烧杯、滴管、酚酞试液、稀HCl、NaOH
实验步骤:
1、在小烧杯中加入10ml
NaOH溶液,滴入几滴酚酞溶液。
2、再慢慢滴入稀HCl,并不断搅拌,至溶液颜色恰好变成无色为止。
现象:
1、---------------------------------------------------------------------------------------
2、--------------------------------------------------------------------------------------
分析及结论:
1、碱性溶液遇酚酞变红。
2、NaOH被HCl中和,----------------------------------------------------------
NaOH被完全中和时,---------------------------------------------------------。
NaOH+HCl=NaCl+H2O
篇3:操作系统课设报告
操作系统课设报告 本文关键词:操作系统,报告
操作系统课设报告 本文简介:[键入文字]操作系统课程设计操作系统课程设计报告时间:2013-1-7~2013-1-18地点:信息技术实验中心计算机科学与技术专业2010级01班06号赖敏2013-1-18目录一课程设计的目的和意义3二进程调度算法模拟31设计目的32设计要求33使用动态优先权的进程调度算法的模拟4三动态分区分配
操作系统课设报告 本文内容:
[键入文字]
操作系统课程设计
操作系统课程设计报告
时间:2013-1-7~2013-1-18
地点:信息技术实验中心
计算机科学与技术专业
2010级01班06号
赖敏
2013-1-18
目录
一
课程设计的目的和意义3
二
进程调度算法模拟3
1
设计目的3
2
设计要求3
3
使用动态优先权的进程调度算法的模拟4
三
动态分区分配方式模拟11
1
设计目的11
2
设计要求11
3
模拟算法的实现12
3.3.1
首次适应算法13
3.3.2
最佳适应算法13
四
请求调页存储管理方式模拟18
1
设计目的18
2
设计要求18
3
模拟算法的实现18
4.3.1OPT算法18
4.3.2FIFO算法21
4.3.3LRU算法22
五
简单文件系统的实现24
1
设计目的24
2
设计要求24
3
模拟算法的实现25
六
总结40
一
课程设计的目的和意义
操作系统课程设计是计算机科学与技术专业的重要实践性教学环节。在进行了专业基础课程和操作系统原理课程学习的基础上,设计或分析一个实际的操作系统旨在加深对计算机硬件结构和系统软件的认识,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力,为毕业设计及以后的工程实践打下良好的基础。
通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力
1、巩固和加深对操作系统原理的理解,提高综合运用本课程所学知识的能力。
2、培养学生选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
3、通过实际操作系统的分析设计、编程调试,掌握系统软件的分析方法和工程设计方法。
4、能够按要求编写课程设计报告书,能正确阐述设计和实验结果、正确绘制系统和程序框图。
5、通过课程设计,培养学生严谨的科学态度,严肃认真的工作作风和团队协作精神。
二
进程调度算法模拟
1
设计目的
通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。
2
设计要求
(1)用C语言来实现对N个进程采用动态优先算法的进程调度;
(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:
l
进程标识符id
l
进程优先数priority,并规定优先数越大的进程,其优先权越高;
l
进程已占用的CPU时间cputime;
l
进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0;
l
进程的阻塞时间startblock,表示当进程再运行startblock个时间片后,进程将进入阻塞状态;
l
进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间片后,将转换成就绪态
l
进程状态state;
l
队列指针next,用来将PCB排成队列
(3)优先数改变的原则:
l
进程在就绪队列中呆一个时间片,优先数增加1
l
进程每运行一个时间片,优先数减3。
(4)假设在调度前,系统中有5个进程,它们的初始状态如下:
ID
0
1
2
3
4
PRIORITY
9
38
30
29
0
CPUTIME
0
0
0
0
0
ALLTIME
3
3
6
3
4
STARTBLOCK
2
-1
-1
-1
-1
BLOCKTIME
3
0
0
0
0
STATE
READY
READY
READY
READY
READY
(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:
RUNNING
PROG:
i
READY_QUEUE:->id1->id2
BLOCK_QUEUE:->id3->id4
==================================
ID
01234
PRIORITY
P0P1P2P3P4
CPUTIME
C0C1C2C3C4
ALLTIME
A0A1A2A3A4
STARTBLOCK
T0T1T2T3T4
BLOCKTIME
B0B1B2B3B4
STATE
S0S1S2S3S4
3
使用动态优先权的进程调度算法的模拟
(1)
流程图如图1.3.1:
N
Y
N
Y
N
Y
开始
创建N个进程并初始化pcb[N]
根据进程状态初始化阻塞队列和就绪队列
在就绪队列中找出优先权最大的进程运行
进程运行完毕即alltime=0
删除该进程
运行一个时间片
就绪队列中其他进程优先数prority+1
进程运行完毕
优先数priority-3
结束
阻塞就绪转换
进程调入就绪队列或阻塞队列
1.3.1-
动态优先权进程调度流程图
(2)
实验效果图:
1)输入进程的初始状态进行初始化如图1.3.2:
1.3.2-
初始化进程状态
2)运行部分结果如图1.3.3:
1.3.3-
运行结果
(3)实验关键代码:
#define
N
5
//默认进程数
int
count;
//定义进程结构体
typedef
struct
pcb{
int
id;
//进程id号
int
priority;
//进程优先权
int
cputime;
//占用cpu时间
int
alltime;
//进程运行完成时间
int
startblock;
//进程开始阻塞时间
int
blocktime;
//进程阻塞到恢复就绪时间
char
state;
//进程状态
pcb*
next;
//指向下一个进程指针
}pcb,*pcb_link;
//初始化进程
pcb_link
initTask(pcb
pcb[]){
int
i;
char
c;
pcb_link
plink=(pcb_link)malloc(sizeof(pcb));
//就绪队列创建头指针
plink->next=NULL;
printf(“请初始化%d个进程:/n“,N);
printf(“ID
“);
//初始化进程id
for(i=0;inext=
就绪队列
return
plink;/
}
//在就绪队列中找到优先数最大的进程
int
maxPriority(pcb_link
ready_q){
pcb_link
p;
p=ready_q->next;
int
prog,max;
max=prog=INT_MIN;
while(p){
if(p->priority>max){
prog=p->id;
max=p->priority;
}
p=p->next;
}
return
prog;
}
//进程运行函数
void
run(pcb_link
ready_q,pcb_link
block_q,int
prog){
pcb_link
p,running_p=NULL;
if(-1next;
while(p){
if(p->id==prog)
running_p=p;
//running_p指向运行的进程
else
p->priority+=1;
//就绪队列中其他进程priority+1
p=p->next;
}
running_p->priority-=3;
/*
running_p->cputime+=1;
running_p->alltime-=1;
if(running_p->startblock>0)
running_p->startblock-=1;
改变运行进程
if(running_p->alltime==0)
的信息和状态
running_p->state=
F
;
else
if(running_p->startblock!=0)
running_p->state=
R
;
else
running_p->state=
B
;/
}
p=block_q->next;
while(p){
p->blocktime-=1;
if(p->blocktime==0)
//判断阻塞队列中进程状态是否变成就绪状态
p->state=
R
;
p=p->next;
}
}
//进程调入或调出就绪队列函数
void
ready_or_block(pcb_link
ready_q,pcb_link
block_q,int
prog,pcb
pcb[]){
pcb_link
p,q,ready_end,block_end,t;
ready_end=block_end=t=NULL;
p=ready_q;
while(p->next)
p=p->next;
ready_end=p;
//就绪队列尾指针
q=block_q;
p=block_q->next;
while(p){
if(p->state==
R
){
t=p;
q->next=t->next;
/*
阻塞队列中就绪进程
t->next=ready_end->next;
插到就绪队列尾部
ready_end->next=t;/
ready_end=t;
//修改就绪队列尾指针
}
else
q=p;
p=q->next;
}
block_end=q;
if(prog>-1
if(pcb[prog].state==
B
){
/*
while(p->id!=prog
运行后进程变成阻塞状态
p=p->next;
插到阻塞进程尾部
}
q->next=p->next;
p->next=block_end->next;
block_end->next=p;
//修改阻塞队列尾指针/
}
else
if(pcb[prog].state==
R
){
while(p->id!=prog
p=p->next;
}
if(p->next){
q->next=p->next;
p->next=ready_end->next;
ready_end->next=p;
}
}
else{
/*
count++;
while(p->id!=prog
进程计数器count++
p=p->next;
并删除该进程
}
q->next=p->next;/
}
}
}
int
main(void){
pcb
pcb[N];
//创建进程数组
pcb_link
ready,block;
//创建就绪和阻塞队列头指针
int
program;
count=0;
//进程计数器初始为0
block=(pcb_link)malloc(sizeof(pcb));
block->next=NULL;
ready=initTask(pcb);
//初始化进程
printf(“/n/n/n运行过程:/n“);
while(count=tsk[task_id].size){
//找到第一个够分的空间块
free[i].size-=tsk[task_id].size;
tsk[task_id].workplace=i;
break;
}
if(i==free_block)
printf(“任务%d分配空间失败/n“,task_id);
//分配失败输出
}
//释放任务空间
void
fre(space
free[],task
tsk[],int
task_id){
int
work;
work=tsk[task_id].workplace;
free[work].size+=tsk[task_id].size;
//空间块空间增加
tsk[task_id].workplace=-1;
}
3.3.2
最佳适应算法
最佳适应算法(Best-fit):当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩余块是最小的。然后把它分配出去,若大小恰好合适,则直接分配;若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。
最佳适应算法和首次适应算法的不同之处是,在为进程分配和释放一个空间后对分区链表进行一次从小到大的排序。
算法代码如下:
//没分配完一个分区或进程释放空间,对分区链表进行排序
void
sort(space_link
slink){
space_link
tp,t,p,q;
tp=(space_link)malloc(sizeof(space));
//创建临时头指针,用来指向已排序的分区
tp->next=NULL;
t=slink->next;
slink->next=t->next;
t->next=tp->next;
tp->next=t;
t=slink->next;
while(t){
q=tp;
p=tp->next;
while(p){
if(t->size>p->size){
//找到待排序的分区在有序链表里的位置
q=p;
p=p->next;
}
else
break;
}
slink->next=t->next;
/*
t->next=p;
q->next=t;
插入有序链表
t=slink->next;/
}
slink->next=tp->next;
free(tp);
}
关键实验代码如下:
#define
free_block
5
//空闲分区块数
#define
free_space
640
//空闲分区总数
#define
N
7
//任务数
//定义分区块
typedef
struct
space{
int
id;
//分区块id
int
size;
//分区块大小
spacenext;
//指向下一个分区块
}space,*space_link;
//定义任务结构体
typedef
struct
task{
int
id;
//任务id
int
size;
//任务需要空间大小
int
workplace;
//申请到的空间块
}task,*task_link;
//初始化分区
space_link
init_space(space
free[]){
int
i,sum,a;
space_link
sh;
sum=0;
a=40;
//初始大小40
sh=(space_link)malloc(sizeof(space));
for(i=0;inext=/
return
sh;
//返回链表头指针
}
//初始化任务
void
init_task(task_link
tsk,int
task_id,int
size){
tsk->id=task_id;
tsk->size=size;
tsk->workplace=-1;
//申请到的空间块初始为-1
}
int
main(void){
space
spa[free_block];
task
tsk[N];
space_link
space_head;
char
c;
space_head=init_space(spa);
printf(“动态分区分配方式的模拟/n“);
printf(“亲输入分区方式,F用首次适应算法分配,B用最佳适应算法分配/n/n“);
printf(“请选择分配方式:“);
scanf(“%c“,printf(“/n/n“);
if(c==
F
){
//首次适应算法
init_task(
//初始任务0
alloc(spa,tsk,0);
//给任务0分配空间
print(space_head);
//输出分区状态
init_task(
alloc(spa,tsk,1);
print(space_head);
init_task(
alloc(spa,tsk,2);
print(space_head);
fre(spa,tsk,1);
//释放任务1空间
print(space_head);
init_task(
alloc(spa,tsk,3);
print(space_head);
fre(spa,tsk,2);
print(space_head);
fre(spa,tsk,0);
print(space_head);
init_task(
alloc(spa,tsk,4);
print(space_head);
init_task(
alloc(spa,tsk,5);
print(space_head);
init_task(
alloc(spa,tsk,6);
print(space_head);
fre(spa,tsk,5);
print(space_head);
}
else
if(c==
B
){
//最佳首次适应算法
init_task(
alloc(spa,tsk,0);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,1);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,2);
sort(space_head);
print(space_head);
fre(spa,tsk,1);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,3);
sort(space_head);
print(space_head);
fre(spa,tsk,2);
sort(space_head);
print(space_head);
fre(spa,tsk,0);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,4);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,5);
sort(space_head);
print(space_head);
init_task(
alloc(spa,tsk,6);
sort(space_head);
print(space_head);
fre(spa,tsk,5);
sort(space_head);
print(space_head);
}
}
运行结果图如图2.3.2:
2.3.2-
运行结果
四
请求调页存储管理方式模拟
1
设计目的
熟练掌握操作系统中请求调页方式的存储管理算法。
2
设计要求
1)
假设每个页面中可以存放10条指令,分配给一个作业的内存块数为4;
2)
用C语言模拟一作业的执行过程,改作业共320条指令,即其地址空间为32页,目前他的所有页还未调入内存。在模拟过程中,如果所访问的指令已经在内存,则显示其物理地址,并转到下一条指令,如果所访问指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存;如果4个内存块中均有内容,
则需进行页面置换;最后显示其物理地址,并转向下一条指令。在所有的320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
3)
置换算法请分别采用OPT、FIFO和LRU;
4)
作业中的指令顺序按如下原则生成:
l
50%的指令顺序执行;
l
25%的指令跳转到当前地址前(目标地址随机生成);
l
25%的指令跳转到当前地址后(目标地址随机生成);
具体的实施方法是:
①
在[0,319]的指令地址之间随机选取一条起始执行指令,其序号为m;
②
顺序执行下一条指令,即序号为m+1的指令;
③
通过随机数跳转到前地址部分[0,m-1]中的某条指令处,其序号为;
④
顺序执行下一条指令,其地址为+1的指令;
⑤
通过随机数跳转到后地址部分[+2,319]中的某条指令处,其序号为;
⑥
顺序执行下一跳指令,即序号为+1的指令;
⑦
重复跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行的过程,直至执行320条指令。
3
模拟算法的实现
4.3.1
OPT算法
OPT算法关键代码如下:
void
opt(memory*m,pagepag[]){
int
i,j,m1,m2,m3,p,order_id,a[320][3],b[BLOCK_N]={-1,-1,-1,-1};//数组a用来存放320执行指令,数组b用来存放当前内存块中指令
count_order=i=j=0;
//初始化指令数组
for(j;j-1){
m2=random_order(0,m1-1);
//跳转到前地址指令
p=belong_page(m2);
order_id=belong_orderId(m2);
pag[p].ord[order_id].state=1;
a[i][0]=p;
a[i][2]=m2;
//存入数组a
//printf(“%d/n“,a[i][0]);
i++;
count_order++;
//指令计数器加1
}
if(m2+1block[m->point]==-1){
//内存块没有装满
pag[a[i][0]].workplace=m->point;
m->block[m->point]=a[i][0];
m->point=(m->point+1)%BLOCK_N;
//指向下一个内存块的位置
b[m->point]=a[i][2];
//数组b记录指令号
print(*m);
//输出内存块状态
printf(“/n“);
}
else{
//内存块已满,需置换
m2=-1;
for(j=0;jm2){
m2=a[m1][1];
m3=j;
//在数组b中找到需置换的指
}
}
order_id=b[m3];
p=belong_page(order_id);
//计算页号
m1=pag[p].workplace;
pag[p].workplace=-1;
//修改被置换页的状态
b[m3]=a[i][2];
//新指令替换原指令
m->block[m1]=a[i][0];
//内存块替换
pag[a[i][0]].workplace=m1;
//修改新指令的页状态
print(*m);
//输出内存状态
printf(“/n“);
}
count++;
//缺页数加1
}
else{
//页号在内存块中
for(j=0;jblock[m->point]==-1){
//内存块不满
pag[pg].workplace=m->point;
m->block[m->point]=pg;
m->point=(m->point+1)%BLOCK_N;
//指向下一个内存块
print(*m);
//输出内存块状态
}
else{
//内存块已满
pag[m->block[m->point]].workplace=-1;
//修改被替换页状态
pag[pg].workplace=m->point;
//修改指令所在页状态
m->block[m->point]=pg;
//新页存入内存块
m->point=(m->point+1)%BLOCK_N;
//指向下一个内存块
print(*m);
//输出内存状态
}
count++;
//缺页数加1
}
pag[pg].ord[id].state=1;
count_order++;
//指令计数器加1
}
}
4.3.3
LRU算法
void
lru(memory*m,int
order_id,page
pag[],stacks){
int
pg=belong_page(order_id);
//计算页号
int
id=belong_orderId(order_id);
//计算所在页的id
int
middle,i;
if(pag[pg].ord[id].state==0){
//指令未被执行
if(pag[pg].workplace==-1){
//页不在内存块中
if(m->block[m->point]==-1){
//内存块未满
m->block[m->point]=pg;
//页存入内存块
pag[pg].workplace=m->point;
//修改页状态
m->point=(m->point+1)%BLOCK_N;
//指向下一个内存块
s->st[s->top]=pg;
//页压入栈
s->top++;
//栈顶指针加1
print(*m);
//输出内存状态
}
else{
//内存已满
pag[pg].workplace=pag[s->st[s->bottom]].workplace;
//修改页状态
pag[s->st[s->bottom]].workplace=-1;
//修改被置换页状态
for(i=s->bottom;itop-1;i++)
s->st[i]=s->st[i+1];
s->st[i]=pg;
//栈顶存入新页
m->block[pag[pg].workplace]=pg;
print(*m);
}
count++;
//缺页数加1
}
else{
for(i=s->bottom;itop;i++)
if(s->st[i]==pg)
middle=i;
for(i=middle;itop-1;i++)
s->st[i]=s->st[i+1];
//修改栈中页的顺序
s->st[i]=pg;
}
pag[pg].ord[id].state=1;
count_order++;
//指令数加1
}
}
实验关键代码如下:
#define
ORDER_N
10
#define
PAGE_N
32
#define
BLOCK_N
4
int
count;
//缺页计数器
int
count_order;
//指令计数器
//定义指令结构体
typedef
struct
order{
int
id;
int
belong;
int
state;
}order;
//定义页结构体
typedef
struct
page{
order
ord[ORDER_N];
int
workplace;
}page;
定义内存结构体
typedef
struct
memory{
int
block[BLOCK_N];
int
point;
}memory;
//定义栈
typedef
struct
stack{
int
st[BLOCK_N];
i