文档库 最新最全的文档下载
当前位置:文档库 › 实验报告四

实验报告四

实验报告四
实验报告四

实验四存储管理

常用页面置换算法模拟实验

一、实验目的

通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

二、实验内容

设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。

1、最佳淘汰算法(OPT)

2、先进先出的算法(FIFO)

3、最近最久未使用算法(LRU)

4、最不经常使用算法(LFU)

5、最近未使用算法(NUR)

命中率=1-页面失效次数/页地址流长度

三、实验过程

1.进入LINUX系统。打开虚拟机,在vi中编写程序,在终端输入文件名(gcc xx.c),输入执行指令,屏幕上无反应,按下^C后,显示最终结果。

2、页面置换算法

当CPU接收到缺页中断信号,中断处理程序先保存现场,分析中断原因,转入缺页中断处理程序。该程序通过查找页表,得到该页所在外存的物理块号。如果此时内存未满,能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须按某种置换算法从内存中选出一页准备换出,是否重新写盘由页表的修改位决定,然后将缺页调入,修改页表。利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。

常用的页面置换算法有

1、最佳置换算法(Optimal)

2、先进先出法(Fisrt In First Out)

3、最近最久未使用(Least Recently Used)

4、最不经常使用法(Least Frequently Used)

5、最近未使用法(No Used Recently)

3.运行结果:

四、回答问题

1、为什么OPT在执行时会有错误产生?

当需要淘汰一个内存页面时,这种算法力图选择该进程内存各个页面中永远不再需要的页,若找不到,则选择最久以后才会用到的页。这种算法有最小的缺页率。问题是它需要知道运行进程今后的整个访问踪迹,这往往难以做到,因而它只有理论上的意义。

OPTimal replacement(OPT)它是一种理想化的算法,性能最好,但在实际上难于实现。

即选择那些永不使用的,或者是在最长时间内不再被访问的页面置换出去。但是要确定哪一个页面是未来最长时间内不再被访问的,目前来说是很难估计的,所以该算法通常用来评价其它算法。

五、实验总结

从几种算法的命中率看,OPT最高,其次为NUR相对较高,而FIFO与LRU相差无几,最低的是LFU。但每个页面执行结果会有所不同。

①最佳置换算法(Optimal),其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,便可以利用此算法来评价其它算法。

②先进先出(FIFO)页面置换算法:

这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。

③ LRU置换算法:

④最少使用(LFU:Least Frequently Used)置换算法:在采用该算法时,应为在内存中的每个页面设置一个移位寄存器骼来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面为淘汰页。

FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

六、参考程序

#define TRUE 1

#define FALSE 0

#define INVALID -1

#define NULL 0

#define total_instruction 320 /*指令流长*/

#define total_vp 32 /*虚页长*/

#define clear_period 50 /*清0周期*/

typedef struct /*页面结构*/

{

int pn,pfn,counter,time;

}pl_type;

pl_type pl[total_vp]; /*页面结构数组*/

struct pfc_struct{ /*页面控制结构*/

int pn,pfn;

struct pfc_struct *next;

};

typedef struct pfc_struct pfc_type;

pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;

int diseffect, a[total_instruction];

int page[total_instruction], offset[total_instruction];

int initialize(int);

int FIFO(int);

int LRU(int);

int LFU(int);

int NUR(int);

int OPT(int);

int main( )

{

int s,i,j;

srand(10*getpid()); /*由于每次运行时进程号不同,故可用来作为初始化随机数队列的“种子”*/

s=(float)319*rand( )/32767/32767/2+1; //

for(i=0;i

{

if(s<0||s>319)

{

printf("When i==%d,Error,s==%d\n",i,s);

exit(0);

}

a[i]=s; /*任选一指令访问点m*/

a[i+1]=a[i]+1; /*顺序执行一条指令*/

a[i+2]=(float)a[i]*rand( )/32767/32767/2; /*执行前地址指令m' */

a[i+3]=a[i+2]+1; /*顺序执行一条指令*/

s=(float)(318-a[i+2])*rand( )/32767/32767/2+a[i+2]+2;

if((a[i+2]>318)||(s>319))

printf("a[%d+2],a number which is :%d and s==%d\n",i,a[i+2],s);

}

for (i=0;i

{

page[i]=a[i]/10;

offset[i]=a[i]%10;

}

for(i=4;i<=32;i++) /*用户内存工作区从4个页面到32个页面*/

{

printf("---%2d page frames---\n",i);

FIFO(i);

LRU(i);

LFU(i);

NUR(i);

OPT(i);

}

return 0;

}

int initialize(total_pf) /*初始化相关数据结构*/

int total_pf; /*用户进程的内存页面数*/

{int i;

diseffect=0;

for(i=0;i

{

pl[i].pn=i;

pl[i].pfn=INVALID; /*置页面控制结构中的页号,页面为空*/ pl[i].counter=0;

pl[i].time=-1; /*页面控制结构中的访问次数为0,时间为-1*/ }

for(i=0;i

{

pfc[i].next=&pfc[i+1];

pfc[i].pfn=i;

} /*建立pfc[i-1]和pfc[i]之间的链接*/

pfc[total_pf-1].next=NULL;

pfc[total_pf-1].pfn=total_pf-1;

freepf_head=&pfc[0]; /*空页面队列的头指针为pfc[0]*/

return 0;

}

int FIFO(total_pf) /*先进先出算法*/

int total_pf; /*用户进程的内存页面数*/

{

int i,j;

pfc_type *p;

initialize(total_pf); /*初始化相关页面控制用数据结构*/ busypf_head=busypf_tail=NULL; /*忙页面队列头,队列尾链接*/

for(i=0;i

{

if(pl[page[i]].pfn==INVALID) /*页面失效*/

{

diseffect+=1; /*失效次数*/

if(freepf_head==NULL) /*无空闲页面*/

{

p=busypf_head->next;

pl[busypf_head->pn].pfn=INVALID;

freepf_head=busypf_head; /*释放忙页面队列的第一个页面*/

freepf_head->next=NULL;

busypf_head=p;

}

p=freepf_head->next; /*按FIFO方式调新页面入内存页面*/ freepf_head->next=NULL;

freepf_head->pn=page[i];

pl[page[i]].pfn=freepf_head->pfn;

if(busypf_tail==NULL)

busypf_head=busypf_tail=freepf_head;

else

{

busypf_tail->next=freepf_head; /*free页面减少一个*/

busypf_tail=freepf_head;

}

freepf_head=p;

}

}

printf("FIFO:%6.4f\n",1-(float)diseffect/320);

return 0;

}

int LRU (total_pf) /*最近最久未使用算法*/

int total_pf;

{

int min,minj,i,j,present_time;

initialize(total_pf);

present_time=0;

for(i=0;i

{

if(pl[page[i]].pfn==INVALID) /*页面失效*/

{

diseffect++;

if(freepf_head==NULL) /*无空闲页面*/

{

min=32767;

for(j=0;jpl[j].time&&pl[j].pfn!=INVALID)

{

min=pl[j].time;

minj=j;

}

freepf_head=&pfc[pl[minj].pfn]; //腾出一个单元

pl[minj].pfn=INVALID;

pl[minj].time=-1;

freepf_head->next=NULL;

}

pl[page[i]].pfn=freepf_head->pfn; //有空闲页面,改为有效 pl[page[i]].time=present_time;

freepf_head=freepf_head->next; //减少一个free 页面

}

else

pl[page[i]].time=present_time; //命中则增加该单元的访问次数

present_time++;

}

printf("LRU:%6.4f\n",1-(float)diseffect/320);

return 0;

}

int NUR(total_pf) /*最近未使用算法*/

int total_pf;

{ int i,j,dp,cont_flag,old_dp;

pfc_type *t;

initialize(total_pf);

dp=0;

for(i=0;i

{ if (pl[page[i]].pfn==INVALID) /*页面失效*/

{diseffect++;

if(freepf_head==NULL) /*无空闲页面*/

{ cont_flag=TRUE;

old_dp=dp;

while(cont_flag)

if(pl[dp].counter==0&&pl[dp].pfn!=INVALID)

cont_flag=FALSE;

else

{

dp++;

if(dp==total_vp)

dp=0;

if(dp==old_dp)

for(j=0;j

pl[j].counter=0;

}

freepf_head=&pfc[pl[dp].pfn];

pl[dp].pfn=INVALID;

freepf_head->next=NULL;

}

pl[page[i]].pfn=freepf_head->pfn;

freepf_head=freepf_head->next;

}

else

pl[page[i]].counter=1;

if(i%clear_period==0)

for(j=0;j

pl[j].counter=0;

}

printf("NUR:%6.4f\n",1-(float)diseffect/320);

return 0;

}

int OPT(total_pf) /*最佳置换算法*/

int total_pf;

{int i,j, max,maxpage,d,dist[total_vp];

pfc_type *t;

initialize(total_pf);

for(i=0;i

{ //printf("In OPT for 1,i=%d\n",i);

//i=86;i=176;206;250;220,221;192,193,194;258;274,275,276,277,278;

if(pl[page[i]].pfn==INVALID) /*页面失效*/

{

diseffect++;

if(freepf_head==NULL) /*无空闲页面*/

{for(j=0;j

if(pl[j].pfn!=INVALID) dist[j]=32767; /* 最大"距离" */ else dist[j]=0;

d=1;

for(j=i+1;j

{

if(pl[page[j]].pfn!=INVALID)

dist[page[j]]=d;

d++;

}

max=-1;

for(j=0;j

if(max

{

max=dist[j];

maxpage=j;

}

freepf_head=&pfc[pl[maxpage].pfn];

freepf_head->next=NULL;

pl[maxpage].pfn=INVALID;

}

pl[page[i]].pfn=freepf_head->pfn;

freepf_head=freepf_head->next;

}

}

printf("OPT:%6.4f\n",1-(float)diseffect/320);

return 0;

}

int LFU(total_pf) /*最不经常使用置换法*/

int total_pf;

{

int i,j,min,minpage;

pfc_type *t;

initialize(total_pf);

for(i=0;i

{ if(pl[page[i]].pfn==INVALID) /*页面失效*/

{ diseffect++;

if(freepf_head==NULL) /*无空闲页面*/

{ min=32767;

for(j=0;j

{if(min>pl[j].counter&&pl[j].pfn!=INVALID)

{

min=pl[j].counter;

minpage=j;

}

pl[j].counter=0;

}

freepf_head=&pfc[pl[minpage].pfn];

pl[minpage].pfn=INVALID;

freepf_head->next=NULL;

}

pl[page[i]].pfn=freepf_head->pfn; //有空闲页面,改为有效 pl[page[i]].counter++;

freepf_head=freepf_head->next; //减少一个free 页面 }

else

pl[page[i]].counter++;

}

printf("LFU:%6.4f\n",1-(float)diseffect/320);

return 0;

}

四年级实验报告单

科学实验 四年级(上) 4课.小吊车 活动1:做小吊车(分组实验) 制作目的:做小吊车并研究小吊车原理 制作材料及工具:小纸盒吊车臂吊臂支架线绳两个铁丝钩一个剪刀锥子胶水钩码 制作过程: 1.小组分工合作 2.观察小吊车模型组装各部分 ①四个点要对称,固定牢固; ②绳子要从前往后穿,不要穿反了; 3.调试小吊车分别拉动两根线,看看小吊车的臂能否灵活运动. 实验现象:小吊车能提起或放下钩码 实验结论: 放松上牵引绳,拉紧下牵引绳,吊臂向下运动; 拉紧上牵引绳,放松下牵引绳,吊臂向上运动。 活动2:收与放 实验目的:推断动物与人的肢体运动原理(分组实验) 实验过程: 1. 弯曲手臂,感受上臂上下肌肉的长短松紧变化。 2.伸直手臂,感受上臂上下肌肉的长短松紧变化。

3.反复几次体会与小吊车的原理的联系。 实验现象:手臂骨骼就像小吊车的吊臂,肌肉就像绳子,手臂运动时,当肱二头肌收缩,肱三头肌舒张时,肱二头肌牵动前臂向内收缩;当肱三头肌收缩,肱二头肌舒张时,肱三头肌牵动前臂向外伸展. 实验结论:前臂收缩类似小吊车抬起重物。 前臂伸展类似小吊车放下重物。 6课.做沙盘(分组实验) 制作目的:通过制作校园沙盘模型培养学生的设计制作能力。 制作材料:硬纸板学校平面图橡皮泥潮湿的沙土废旧泡沫包装纸小木棍颜料盒剪刀 制作步骤: 对校园建筑的布局进行观测 2.用大的硬纸板做底座。在纸板上画好学校平面图。(明确建筑物.树木等的位置) 3.用橡皮泥旧泡沫等材料做出立体的楼房等校园建筑物,根据平面图摆放好位置。(可以用长方体或正方体的泡沫做楼房,硬纸板做围墙,小木棍做旗杆等)。 4.要注意建筑物的比例。(四年级的学生还不能很精确地计算出比例尺,教师适当指导。) 8课.快与慢 实验目的:研究小车运动的快慢(分组实验)

四年级上册科学实验报告

1.实验名称:室内外温度的测量与比较 实验目的:测量室内外温度 实验器材:温度计、线、笔 实验步骤: 1、取一支温度计用线拴好。 2、将温度计悬挂3、读数。 4、比较。 实验结果:室内外温度存在差距,通过对大气温度的测量,可以了解当地的气温。 2.实验名称:气温的测量 实验目的:测量温度的变化 实验器材:温度计 实验步骤: 1、阳光下和背阴处测量温度; 2、测量一天中,清晨、商务、中午、下午、傍晚的气温。 实验结果:1、阳光下的温度高,背阴处的温度低2、一天中,中午的时候气温最高,清晨的时候气温最低; 3.实验名称:用简易雨量器测量降水量 实验目的: 实验器材:雨量器 实验步骤:1、用喷水壶模拟降水,记录好时间。2、把雨量器改在水平桌面,读出刻度。3、换算成24小时,核对雨量等级。 实验结果:根据24小时内测的降水量,对照等级表,确定了下雨的等级。 4.实验名称:观察食盐、沙在水中的状态 实验目的:食盐、沙能否在水中溶解 实验器材:烧杯2个、搅拌棒2根、沙、食盐、水。 实验步骤: 1、取一小匙食盐,放入盛水的烧杯内,用搅拌棒轻轻搅拌。你有什么发现? 2、取一小匙淘洗干净的沙,放入盛水的烧杯内,用搅拌棒轻轻搅拌。你有什么发现? 3、比较食盐和沙在水中的状态。 实验结果:食盐在水中溶解了,沙在水中没有溶解。 5.实验名称:面粉在水中溶解了吗 实验目的:面粉能否在水中溶解 实验器材:烧杯1个、搅拌棒1根、面粉、水。

实验步骤: 1、取一小匙面粉,放入盛水的烧杯内,用搅拌棒搅拌。2、你发现了什么? 实验结果:面粉在水中没有溶解 6.实验名称:高锰酸钾的溶解 实验目的:高锰酸钾在水中溶解吗 实验器材:烧杯、高锰酸钾、钥匙、搅拌棒、水。 实验步骤: 1、水里放入几粒高锰酸钾,观察并描述高锰酸钾和水的变化。 2、用搅拌棒搅拌,再观察、描述高锰酸钾和水的变化。 实验结果:高锰酸钾在水中溶解了 7.实验名称:观察不同物质在水中的溶解 实验目的:观察不同物质在水中的溶解 实验器材:面粉、沙、食盐、高锰酸钾各一份,烧杯4个、钥匙、水。 实验步骤: 1、将四种物质分别放入盛有相同水的烧杯内,观察物质在水中的状态。 2、根据实验现象完成教材26页记录表。 实验结果:食盐、高锰酸钾在水中溶解了,面粉、沙在水中没有溶解。 8.实验名称:观察胶水和洗发液是怎样溶解的 实验目的:观察胶水和洗发液是怎样溶解的 实验器材:烧杯2个、钥匙、搅拌棒2根、水。 实验步骤: 1、取一小匙胶水或洗发液,倒入盛水的玻璃杯中。 2、先轻轻搅拌,观察有什么现象,再充分搅拌,继续观察。 实验结果:胶水或洗发液在水中溶解了 9.实验名称:观察醋、酒精和食用油是怎样溶解的 实验目的:观察醋、酒精和食用油是怎样溶解的 实验器材:试管3个、醋、酒精、食用油、三支滴管、水。 实验步骤: 1、在三个试管中,各盛约15毫升的水。分别用滴管往试管中加入2毫升醋、酒精和食用油。充分震荡后,静置一会儿。 2、观察实验结果:醋和酒精在水中溶解了,食用油不能溶解于水。 10,实验名称:观察气体在水中的溶解能力 实验目的:观察气体在水中的溶解能力 实验器材:汽水、注射器、橡皮塞。 实验步骤: 1、打开汽水用注射器吸出约1/3管汽水,再用橡皮塞封住管口。 2、观察汽水析出的气泡。慢慢地往外拉活塞,再慢慢地往回推,反复3 次.

小学科学四年级上册实验报告

小学科学四年级上册实验报告 一、食物营养成分的检验实验 实验目的:学会检验食物中的淀粉、脂肪、和蛋白质的方法。 实验材料:碘酒、米饭、滴管、白纸、酒精灯、碟子、花生、瘦肉等。 实验过程: 1、把少量米饭放在碟子上,用滴管向米饭上滴2—3滴碘酒,观察发生的现象。 2、把花生放在白纸上用力挤压,观察白纸上留有的痕迹。 3、将切成细条的瘦肉放在酒精灯火焰上烧,注意闻一闻,有什么气味? 实验现象及结论: 1、加入碘酒后,米饭变成蓝黑色,这说明大米中含有淀粉。 2、在白纸挤压花生后,会在纸上留下油迹。说明花生内含有脂肪。 3、将瘦肉在火上烧后,会闻到一股难闻的、烧焦羽毛的气味.说明瘦肉中含有蛋白质。 二、物体在水中的溶解实验 实验目的:认识溶解的特点,理解溶解的定义。 实验材料:三个烧杯、玻璃棒、药匙、食盐、高锰酸钾、沙子。 实验过程: 1、先在三个烧杯中倒入约三分之二的清水。 2、用药匙取适量的食盐,高锰酸钾,沙子分别放入三个烧杯中,用玻璃棒搅拌,仔细观察三个烧杯中有什么现象发生。 实验现象:食盐,高锰酸钾在水中不见了,并且均匀的分散在水中,沙子在水中没有变化。 实验结论:溶解的定义,不溶解的定义 注意事项:1,搅拌方法 2,通过颜色观察高锰酸钾在水中均匀分布情况 3,通过尝的方法了解食盐在水中均匀分布情况 三、不同材料的溶解实验 实验目的:通过实验判断不同材料在水中是否溶解。(进一步理解溶解现象)实验材料:烧杯,玻璃棒,小苏打,面粉,粉笔末,洗衣粉,木屑等。 实验过程:同上

实验结论:有的物体在水中能溶解,有的物体在水中不能溶解. 四、物体溶解快慢与哪些因素有关的实验 实验目的:了解加快物体在水中溶解的方法。 实验材料:烧杯、玻璃棒、药匙、高锰酸钾或(食盐、冰糖)、小锤、热水、冷水等。 实验过程:实验一: 1、在两个烧杯中分别倒入等量的温度相同的冷水。 2、把颗粒大小相同的高锰酸钾分别放入两个烧杯中。 3、用玻璃棒搅拌其中一个烧杯中的水,观察高锰钾溶解的快慢情况。 实验现象:搅拌的烧杯中的高锰酸钾溶解得快,不搅拌的烧杯中高锰酸钾溶解得慢。 实验结论:搅拌可以加快溶解。 实验二: 1、在两个烧杯中分别倒入等量的热水和冷水 2、把颗粒大小相同的高锰酸钾放入两个烧杯中,过一会钟,观察两个烧杯中高锰酸钾溶解情况 实验现象:热水中高锰酸钾溶解的快,冷水中高锰酸钾溶解的慢。 实验结论:用热水可以加快溶解。 实验三 1、在两个烧杯中分别倒入等量的温度相同的冷水。 2、取两块大小相同的高锰酸钾颗粒,将其中一块研成粉末,然后分别同时放入两个烧杯中,观察比较高锰酸钾溶解的快慢。 实验现象:研成粉末的高锰酸钾溶解的快,未研成粉末的高锰酸钾溶解的慢。实验结论:把物体研成粉末可以加快理解。 注意:此实验是典型的对比实验,实验中只有一个条件不同,其他条件应相同。 五、沉淀实验 实验目的:通过实验使学生知道沉淀是净化水的一种方法,能除掉水中一部分不溶解的杂质。 实验材料:烧杯2个、玻璃棒2根、明矾、混浊水。 实验过程:

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

西北工业大学操作系统实验报告实验四

实验四进程与线程一、实验目的 (1)理解进程的独立空间; (2)理解线程的相关概念。 二、实验内容与要求 1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知 识,了解C语言程序编写的相关知识; 2、理解进程的独立空间的实验内容及步骤 (1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并输出每次操作后的结果; (2)使用系统调用 fork()创建子进程,观察该变量的变化; (3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变化。 3、理解线程的实验步骤 (1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()中和新线程shared进行循环加/减操作,观察该变量的变化; (3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变化。

4、对整个实验过程进行分析总结,给出详细步骤; (1) 观察上述进程执行结果,并分析原因; (2) 提交源程序清单,并附加流程图与注释。 三、实验过程 1、进程的与线程的创建和构造 (1).进程的创建和构造 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。 新的进程通过克隆旧的程序(当前进程)而建立。fork()和clone()(对于线程)系统调用可用来建立新的进程。 (2)线程的创建和构造 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

四年级下册科学实验报告单

温度计的秘密 实验名称:液体热胀冷缩实验 实验器材:保温杯(内装热水)、小烧杯(一个装有冷水)、水胀缩实验小瓶(由带塞针剂小药瓶、红色水、细饮料管构成,在管外套一个小胶圈,用来标记管内液面高度)、用与上面相同的方法组装的煤油胀缩实验小瓶、酒精胀缩实验小瓶。 实验结论:根据水、煤油、酒精有热胀冷缩性质,归纳出液体都有热胀冷缩的性质。 注意事项:小药瓶要贴上标签,不要混用。 实验记录单

实验名称:气体热胀冷缩实验 实验器材:锥形烧瓶、大烧杯、小气球、细线、盛开水的保温瓶 试验方法:用细线把小气球扎于锥形瓶口。把锥形瓶放入烧杯后,灌进开水加热,由于瓶内空气受热膨胀,原来垂下的气球就会竖立胀大。把锥形瓶取出,随着瓶内空气冷却收缩,气球又逐渐变小。 实验结论:气体具有热胀冷缩的性质 注意事项:1.锥形瓶与气球的连接处不能漏气。为使现象明显,可预先向瓶内吹一些气。 2.锥形瓶可用开口较小、容量较大的其他薄壁玻璃瓶代替。如果能找到壁很薄的气球,光靠手掌提供的热量(双手握瓶),也能使气球竖立起来。 实验记录单

实验名称:固体热胀冷缩实验 实验材料:铁垫圈一个,木板、小钉两个,酒精灯、镊子、冷水、烧杯 实验方法:1.在木板上钉两个钉,便两钉间的距离正好通过铁垫圈 2.加热前,观察铁垫圈确能从铁钉间通过 3.将铁垫圈在酒精灯火焰上加热 4.观察加热后铁垫圈能不能从两钉间通过 5.将铁垫圈在冷水里浸一下,观察能不能从两钉间通过。 实验结论:固体具有热胀冷缩的性质 注意事项:1.垫圈最好是铜的,直径要大一些。 2.两钉间距要恰好通过铁垫圈,缝隙越小越好。 实验记录单

教科版四年级上科学实验报告单

教科版四年级上科学实验报告单 武冈市新东中心小学四年级科学实验报告单年级四年级学生姓名班级实验名称温度与气温实验时间 9月4日 选择每天测量气温的环境,完成“天气日历”中温度的测量和记录。实验目的 仪器器材温度计、百叶箱 1、用温度计测量一天中不同时间的气温; 2、测量清晨、上午、中午、下午、傍晚的气温(选择同一地点); 实验过程 3、把测得的气温填在记录表中。 实验结果优良 教师批注实验有序实验成绩优 实验报告单 年级四年级学生姓名实验名称风向和风速实验时间 9月9日 用自制的风向标和小风旗测量风向和风速,并使用适当的方法纪录观察结果。实验目的 仪器器材风向标、小风旗 1、学生分组用风向标测试风向。 实验过程 2、学生分组用小风旗测试风速。 3、总结风力大小。 实验结果优良 教师批注实验有序,效果良好。实验成绩优 实验报告单 年级四年级学生人数实验名称水能溶解一些物质实验时间 9月18日

观察和描述食盐、沙、面粉在水中的容易溶解和不容易溶解的现象,能使用过滤装实验目的置分离几种固体与水的混合物。 仪器器材食盐、沙、面粉、烧杯、筷子、玻棒、水槽、漏斗、滤纸、铁架台 1、食盐+水沙+水 2、用筷子轻轻搅拌,观察,盐和沙分别又发生了什么变化,同时什么也实验过程可能发生什么变化,生:水。师:对,水会发生什么变化呢, 3、面粉+水 实验结果良好 教师批注实验准备充分实验成绩良 实验报告单 年级四年级学生人数实验名称液体之间的溶解现象实验时间 9月30日能借助实验进一步观察多种物质之间的溶解现象,根据溶解的主要特征区分一些实验目的常见的溶解现象。 仪器器材玻璃杯、滴管、酒精、食用油、注射器、试管、试管夹、酒精灯、火柴 1、学生第一次使用试管振荡的方法,在实验之前,教师先介绍和演示试 管振荡。 2、学生开始实验。在三个试管中,分别加入醋、酒精和食用油。实验过程(让学生仔细观察醋和酒精如何扩散,充分描述醋和酒精在水中的溶解过程。记录在记录表上。) 3、交流实验观察结果。 实验结果优良 教师批注实验有序实验成绩优 实验报告单

实验四排序实验报告

数据结构实验报告 实验名称:实验四排序 学生: 班级: 班序号: 学号: 日期:2012年12月21日 1、实验要求 题目2 使用链表实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、冒泡排序 3、快速排序 4、简单选择排序 5、其他 要求: 1、测试数据分成三类:正序、逆序、随机数据。 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。 3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)。 4、对2和3的结果进行分析,验证上述各种算法的时间复杂度。 编写测试main()函数测试线性表的正确性。 2、程序分析 2.1存储结构 说明:本程序排序序列的存储由链表来完成。 其存储结构如下图所示。 (1)单链表存储结构:

(2)结点结构 struct Node { int data; Node * next; }; 示意图: 2.2关键算法分析 一:关键算法 (一)直接插入排序 void LinkSort::InsertSort() 直接插入排序是插入排序中最简单的排序方法,其基本思想是:依次将待排序序列中的每一个记录插入到一个已排好的序列中,直到全部记录都排好序。 (1)算法自然语言 1.将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录; 2.将无须去的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录; 3.重复执行2,直到无序区中没有记录为止。 (2)源代码 void LinkSort::InsertSort() //从第二个元素开始,寻找前面那个比它大的 { Node * P = front->next; //要插入的节点的前驱 while(P->next) { Node * S = front; //用来比较的节点的前驱 while(1) { CompareCount++; if( P->next->data < S->next->data ) // P的后继比S的后

四年级科学(上册)实验报告

实验目的: 认识空气有的性质。 实验材料: 透明玻璃杯、卫生纸、胶带、水槽、水、干抹布;空饮料瓶、气球 实验步骤:方法一 1、将一团卫生会紧塞在一个透明玻璃杯杯底; 2、将杯子倒立竖直压入水中,水面淹没杯底为止,尽量避免水槽里的水溢出来; 3、慢慢竖直提起杯子,并把杯口和外壁上的水用抹布擦干; 4、慢慢取出杯底的纸团,纸团会湿吗? 注意事项: 1、纸团应该塞紧在杯底,以免杯口朝下时落下,必要的话可以用胶带固定一下。 2、实验过程中杯子始终都是倒立杯口朝下,并保持竖直。 方法二: 1、将气球皮放进一个空饮料瓶中,用力吹,气球吹得大吗? 实验结果: 方法一:纸团。 方法二:气球。 实验结论: 空气有的性质。 年班

实验目的: 认识空气虽然很轻但是。 实验材料: 细木棍一根、空气充得同样多且颜色相同的气球两只、细线、胶带、针 实验过程: 1、将两只空气充的同样多的气球分别用细线绑在细木棍的两端; 2、调节细木棍中间的绳套使其左右平衡; 3、用针在其中一只气球口附近扎几个小眼,使气球慢慢漏气。 实验结果: 。 实验结论: 空气。 年班

教版小学科学4年级上册《我们周围的空气》单元实验报告3 实验目的: 认识空气具有。 实验材料: 1、气球 2、扇子(书) 实验过程: 1、让充满空气的气球口对着自己的脸,松开气球口,有什么感觉? 2、用扇子或书在自己的脸旁扇一扇,有什么感觉? 实验结果: 。 实验结论: 空气。 年班

教版小学科学4年级上册《我们周围的空气》单元实验报告4 实验目的: 认识到空气。 实验材料: 塑料袋、注射器、橡皮(手指) 实验步骤: 1、用手压一只装满空气的塑料袋,有什么感觉? 2、注射器吸满空气,用手堵住注射器的口,另一只手推活塞,有什么变化? 实验结果: 1、塑料袋; 2、注射器。 实验结论: 空气。 年班

实验报告电子版实验四

信息学院 学号:104100184 姓名:鲁庆斯班级:10C 班 课程名称:数字逻辑与数字系统实验名称:加法器、比较器与数据选择器 实验性质:①综合性实验②设计性实验③验证性实验 实验时间:年月日实验地点:同析楼3栋数字电子实验室 本实验所用设备: 1、数字电路实验台1台 2、集成电路芯片 74LS283(四位加法器) 1片 74LS85(四位比较器) 1片 74LS151(8选1数据选择器) 1片 自选芯片若干 实验报告:(包括:目的、方法、原理、结果或实验小结等。) 一、实验目的 1、掌握多位加法器、多位比较器、数据选择器的逻辑功能; 2、掌握基于MSI组合功能件的组合逻辑电路设计方法。 二、实验内容 1、加法器、比较器、数据选择器功能测试; 2、应用电路设计。 三、实验步骤 1、完成四位加法器74LS283的逻辑功能测试; (1)下图是74LS283的引脚图和功能示意图。 (2)下图和下表是74LS283功能测试图和数据记录表。 用开关按表设置输入 4 A- 1 A、 4 B- 1 B、 C的状态,借助指示灯观测输出 4 F- 1 F、 4 C状态,并记录下表中。 输入输出 4 A 3 A 2 A 1 A 4 B 3 B 2 B 1 B C 4 F 3 F 2 F 1 F 4 C 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1

教科版-四年级下册-科学实验报告单.doc

教科版小学科学四年级下册实验 一、实验名称:让小灯泡发光 实验目的:利用电来点亮小灯泡 实验器材:导线1根、电池1节、小电珠1个。 实验步骤:选择连接方式使小灯泡发光。 1、导线连接小灯泡的螺纹与电池底部的锌壳,电池铜帽与小灯泡的锡粒接触,观察现象。 2、导线连接小灯泡的锡粒与电池底部的锌壳,电池铜帽与小灯泡螺纹接触,观察现象。 3、导线连接电池铜帽与小灯泡螺纹,小灯泡的锡粒与电池底部的锌壳接触,观察现象。 4、整理器材。 实验结论:小灯泡亮了。

二、实验名称:简单电路 实验目的:连接带灯座的电路,让小灯泡亮起来 实验材料:小灯泡、小灯座、电池、电池盒各1个、导线2根。 实验步骤:组装电路 1、在电池盒的两端各连接好一根导线,把电池正确安装在电池盒里。 2、用连接电池的两根导线的另一端接触小灯泡,确定能使小灯泡发光。 3、将小灯泡安装在灯座上,再连接上导线,小灯泡亮了。 4、拆分器材。 5、整理器材。 实验结论:一段导线和一节电池能点亮一个小灯泡。

三、实验名称:电路检测器 实验目的:制作一个电路检测器,并且排除电路中的故障 实验器材:一个由2个灯泡、灯座、1节电池、电池盒连接组成的出故障的电路,一个“电路检测器”。操作步骤: 1、组装一个“电路检测器”。用电池、小电珠、导线制作一个电路检测器; 2、先预测再用电路检测器检测电路中所发生的故障, 3、说出故障原因,并且采用替换法把电路重新接亮。 实验结论:电路检测器能检测出电路故障。

四、实验名称:检测导体和绝缘体 实验目的:检测哪些物体是导体,哪些物体是绝缘体 实验材料:木片、塑料片、回形针、钥匙、纸板、橡皮、布、丝绸、玻璃、铅笔、铜丝、铁钉、铝片、陶瓷……,1个电路检测器。 实验步骤: 1、从以上物品中选择6种检测。 2、检查电路检测器。 3、检测每种物品,观察现象:使小灯泡发光,说明被鉴别的材料容易导电;小灯泡不发光,说明被鉴别的材料不容易导电(注意要重复检测)。 4、能说出导体、绝缘体的概念,并将被检测物品正确的分为导体和绝缘体两组。 5、整理器材。 实验结论: 在我们选取的材料中,铜片、钥匙…是导体;纸条、木片…是绝缘体。

AI实验四实验报告课件

实验四博弈搜索 (3 学时) 班级:计科041 班姓名:陆宇海学号:0407100232 一实验目的 熟悉和掌握博弈(对抗)搜索基本思想和实现关键技术,使用Python 语言实现通用的极大极小算法与Alpha-Beta剪枝算法,并进行实验验证。 二实验原理 博弈是人工智能取得巨大成功的领域,著名的有深蓝系统等。所有的计算机博弈程序(或系统)的基础 Alpha-Beta剪枝算法,即在极大极小算法基础再进行剪枝。熟练掌握该两种算法,能够解决博弈领域的大部分问题(当然可能需要大型数据库的支撑)。 三实验条件 1 Python解释器,及IDLE等程序开发调试环境。 2 本实验所提供的几个Python文件,请解压文件gameproject.rar. 四实验内容 1 MiniMax算法实现 2 AlphaBeta剪枝算法实现 3 应用于一字棋游戏(TicTacToe,) 进行算法测试 4 应用于抓三堆游戏(Nim),进行算法测试 五实验步骤 1 一字棋游戏的搜索问题形式化 import tictactoe

你先试着和一字棋随机Agent(它只会随机乱走,碰运气)对弈一局 import games import gameagents games.runGame(initialTTTState, {"X" : gameagents.HumanGameAgent(), "O" : gameagents.RandomGameAgent()}, False, False) #输出结果为: ------------- 2 | | | | ------------- 1 | | | | ------------- 0 | | | | ------------- 0 1 2 Your move? 0,0 Opponent's move was (1, 1) ------------- 2 | | | | ------------- 1 | | O | | ------------- 0 | X | | | ------------- 0 1 2 Your move? 0,1 Opponent's move was (2, 0) -------------

C上机实验报告 实验四

精品文档 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

小学四年级上科学实验报告

小学四年级上科学实验报告 苏教版小学四年级上册科学实验报 告 苏教版小学四年级科学实验报告 实验一: 实验名称:二氧化碳能使澄清的石灰 水变浑浊 实验材料:制取一瓶二氧化碳备用, 制取一瓶澄清的石灰水备用、烧杯一个 实验过程:1)、将澄清的石灰水倒入烧 杯中,观察澄清的石灰水是什么样子的, 2)、倒入装有二氧化碳的瓶子,摇晃后观察现象。 实验结论:二氧化碳能使澄清的石 灰水变浑浊 实验二: 实验名称:研究固体的热胀冷缩 实验材料:固体体胀演示器、酒精 灯、火柴、水槽、冷水 实验过程: (1)铜球穿过铁圈 (2)、给铜球加热,不能穿过铁圈 (3)把铜球放入冷水中,铜球又穿 过铁圈

实验结论:固体有热胀冷缩的性质 实验三: 实验名称:研究液体的热胀冷缩 实验材料:细管、胶塞、平底烧瓶、红颜色的水、水槽、热水 实验过程: (1)细管插在胶塞中间,用胶塞塞住瓶口 (2)、往瓶里加红颜色的水 (3)把瓶子放入水槽中,记下细管里水的位置。 (4)往水槽里加热水,观察细管里水面的位置有什么变化。 实验结论; 液体有热胀冷缩的性质 实验四: 实验名称:研究气体的热胀冷缩 实验材料:气球、水槽2个、平底烧瓶、热水、冷水 实验过程: (1)把气球套在平底烧瓶口 (2)、把烧瓶放在热水中,欢察现象。 (3)把烧瓶放在冷水中,欢察现象。 实验结论: 气体有热胀冷缩的性质 实验五:

实验名称:空气的成分 实验材料:水槽、蜡烛、玻璃片、去掉底的饮料瓶、火柴 实验过程: (1)把蜡烛放在水槽中点燃,罩上饮料瓶,拧紧瓶塞。观察现象。 (2)、把水槽内的水加到饮料瓶里的高度。 (3)拧开瓶盖,迅速将火柴插入瓶内,观察现象 实验结论:空气中至少有两种气体,一种气体支持燃烧,另一种气体不支持燃烧。 实验六: 实验名称:探究声音产生的原因。(答案不唯一,还可以采用其它方法实验)实验材料:尺子、小鼓、鼓槌、豆子 实验过程: (1)一手压住尺子,另一手弹拨,我们会听到尺子发出嗡嗡的声音,同时会看到尺子在振动。 (2)鼓面上放些豆子,敲击鼓面,我们会听到鼓面发出咚咚的声音,同时看到鼓面上的豆子在振动。

实验四 数字音频处理实验报告

云南大学软件学院 实验报告 序号:姓名:学号:指导教师:刘春花,刘宇成绩: 实验四数字音频处理 一、实验目的 1、熟悉并掌握MATLAB工具的使用; 2、实现音频文件的生成、读取、播放和转换的基本操作。 二、实验环境 MATLAB 6.5以上版本、WIN XP或WIN2000计算机 三、实验内容 1、用matlab 产生音乐。在matlab命令窗口执行下列命令,并回答问题 cf = 220; sf = 22050; d = 0.5; n = sf * d; t = (1:n)/sf; s0 = sin(2*pi*cf*t); sound(s0, sf); 1)信号的频率是多少? 采样频率是多少?采样间隔是多少?一共有

多少个采样点?声音有多少秒? 频率:220 采样频率:22050 采样间隔: (1:n)/sf采样点: sin(2*pi*cf*t) 时长:0.5s 2)请解释sound(s, sf)函数的参数和实现的功能。如果把 sound(s0,sf)改为sound(s0,2*sf)听起来会有什么不同,为什么?时间更短,因为频率发生改变,变成了原来的2倍 3)执行sound1.m,听一听,能否在此程序基础上做修改,实现一小段音乐旋律,时间不少于10秒。并保存为为wav文件。 文件。获取相应参数,填空wav )读取1、2. 执行语句: [B, fs, nbits]=wavread('C:\TEMP\hootie.wav'); % loads the clip size(B); % the size of B sound(B,fs) % plays the sound. 采样频率:44100

四年级科学实验报告单

四年级科学实验报告单

4课.小吊车 活动1:做小吊车(分组实验) 制作目的:做小吊车并研究小吊车原理 制作材料及工具:小纸盒吊车臂吊臂支架线绳两个铁丝钩一个剪刀锥子胶水钩码 制作过程: 1.小组分工合作 2.观察小吊车模型组装各部分 ①四个点要对称,固定牢固; ②绳子要从前往后穿,不要穿反了; 3.调试小吊车分别拉动两根线,看看小吊车的臂能否灵活运动. 实验现象:小吊车能提起或放下钩码 实验原理:放松上牵引绳,拉紧下牵引绳,吊臂向下运动;拉紧上牵引绳,放松下牵引绳,吊臂向上运动。 8课.快与慢 实验目的:研究小车运动的快慢(分组实验) 实验材料:秒表(或电子手表)、长尺、玩具车(学生自带),橡皮泥,马达、电池等(学生自带) 实验过程: 1.小组做好分工:赛车手、计时员、测量员、记录员。 2.找好起点(必要时确定好终点); 3.秒表做好归零; 4.在相同时间内必须进行多次测量(不少于3次),并做好记

录 5. .在相同距离内必须进行多次测量(不少于3次),并做好记录 实验原理: 1:相同时间内经过的距离越长,物体运动的速度越快 2:相同距离下所用的时间越短,物体运动的速度越快 9推和拉 实验目的:能够用实验体验探究出力有大小和方向,推和拉都是力。(分组实验) 实验过程: (1)三人一组,两人活动,另一人裁判,交替进行。 (2)活动前,要做好准备工作,推手掌双方要站在相距100厘米的位置,手掌放在中间位置,在准备过程中,不允许用力推或拉对方。 (3)裁判员下达命令后,双方用力推或拉,力争战胜对方。 (4 ) 同一规则再做拉手臂游戏。 实验现象:两个同学同时推,力气大的一方会将力气小的一方推出界线,要想赢,就要增大脚与地面的摩擦力,发现力有大小。用力推时,必须对正方向,方向偏了,也会输,发现了力有方向。 实验原理:推和拉的用力,方向和结果是不同的。推和拉会使物体移动位置或变形,推和拉是一种力,方向不同,大小不同,使物体移动的位置远近也不同。 6课.做沙盘(分组实验)

操作系统实验报告-实验四

操作系统实验报告-实验四

实验四:进程管理(二) 实验内容: 1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。 源代码及结果: 真实用户ID和有效用户ID的区别: 真实用户ID:这个ID就是我们登陆unix 系统时的身份ID。 有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。 2.阅读如下程序,编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU

消耗的时间),并解释执行结果。再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。 /* process using time */ #include #include #include #include #include void time_print(char *,clock_t); int main(void){ //取得进程运行相关的时间 clock_t start,end; struct tms t_start,t_end; start = times(&t_start); system(“grep the /usr/doc/*/* > /dev/null 2> /dev/null”); /*command >/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。一般来讲标准输出和标准

操作系统实验报告_实验四

实验四:进程管理(二) 实验内容: 1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。 源代码及结果: 真实用户ID和有效用户ID的区别: 真实用户ID:这个ID就是我们登陆unix系统时的身份ID。 有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。 2.阅读如下程序,编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU 消耗的时间),并解释执行结果。再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。 /* process using time */ #include #include #include #include #include void time_print(char *,clock_t);

int main(void){ //取得进程运行相关的时间 clock_t start,end; struct tms t_start,t_end; start = times(&t_start); system(“grep the /usr/doc/*/* > /dev/null 2> /dev/null”); /*command >/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。一般来讲标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。>/dev/null 2> /dev/null 标准输出与标准错误输出都会被丢弃*/ // 0 1 2 标准输入标准输出错误输出 // > 将信息放到该文件null中 end=times(&t_end); time_print(“elapsed”,end-start); puts(“parent times”); time_print(“\tuser CP U”,t_end.tms_utime); time_print(“\tsys CPU”,t_end.tms_stime); puts(“child times”); time_print(“\tuser CPU”,t_end.tms_cutime); time_print(“\tsys CPU”,t_end.tms_cstime); exit(EXIT_SUCCESS); } void time_print(char *str, clock_t time) { long tps = sysconf(_SC_CLK_TCK); /*函数sysconf()的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK 为定义每秒钟

相关文档