文档库 最新最全的文档下载
当前位置:文档库 › os实验指导书1

os实验指导书1

os实验指导书1
os实验指导书1

实验4 存储管理

1、实验目的

存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。

2、实验内容

(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:

①50%的指令是顺序执行的;

②50%的指令是均匀分布在前地址部分;

③50%的指令是均匀分布在后地址部分。

具体的实施方法是:

①在 [0,319] 的指令之间随即选取一起点m;

②顺序执行一条指令,即执行地址为m+1的指令;

③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;

④顺序执行一条指令,其地址为 m′+ 1;

⑤在后地址[m′+ 2,319]中随机选取一条指令并执行;

⑥重复上述步骤①-⑤,直到执行320次指令。

(2)将指令序列变换为页地址流

设:①页面大小为1k;

②用户内存容量为4页到32页;

③用户虚存容量为32k。

在用户虚存中,按每k存放10条指令排在虚存地址,即320条指令在虚存中的存放方式为:

第0条-第9条指令为第0页(对应虚存地址为[0,9]);

第10条-第19条指令为第一页(对应虚存地址为[10,19]);

……

第310条~第319条指令为第31页(对应虚地址为[310,319])。

按以上方式,用户指令可组成32页。

(3)计算并输出下述各种算法在不同内存容量下的命中率。

①先进先出的算法(FIFO);

②最近最少使用算法(LRR);

③最佳淘汰算法(OPT)先淘汰最不常用的页地址;

④最少访问页面算法(LFR);

⑤最近最不经常使用算法(NUR)。

其中③和④为选择内容。

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

在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

3、随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。例如: srand ();

语句可初始化一个随机数;

a[0]=10*rand()/65535*319+1;

a[1]=10*rand()/65535*a[0];

实验4指导

[实验内容]

<任务>

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

(1)先进先出的算法(FIFO)

(2)最近最少使用的算法(LRU)

(3)最佳淘汰算法(OPT)

(4)最少访问页面算法(LFU)

(5)最近最不经常使用算法(NUR)

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

<程序设计〉

本实验的程序设计基本上按照实验内容进行。即首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。相关定义如下:

1 数据结构

(1)页面类型

typedef struct{

int pn,pfn,counter,time;

}pl-type;

其中pn 为页号,pfn为面号, counter为一个周期内访问该页面的次数, time为访问时间.

(2) 页面控制结构

pfc-struct{

int pn,pfn;

struct pfc_struct *next;

}

typedef struct pfc_struct pfc_type;

pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head;

pfc_type *busypf_tail;

其中pfc[total_vp]定义用户进程虚页控制结构,

*freepf_head为空页面头的指针,

*busypf_head为忙页面头的指针,

*busypf_tail为忙页面尾的指针.

2.函数定义

(1)Void initialize( ):初始化函数,给每个相关的页面赋值.

(2)Void FIFO( ):计算使用FIFO算法时的命中率.

(3)Void LRU( ):计算使用LRU算法时的命中率.

(4)Void OPT( ):计算使用OPT算法时的命中率.

(5)Void LFU( ):计算使用LFU算法时的命中率.

(6)Void NUR( ):计算使用NUR算法时的命中率.

3.变量定义

(1)int a[total_instruction]: 指令流数据组.

(2)int page[total_instruction]: 每条指令所属的页号.

(3)int offset[total_instruction]: 每页装入10条指令后取模运算页号偏移值.

(4)int total_pf: 用户进程的内存页面数.

(5)int disaffect: 页面失效次数.

4.程序参考源码及结果

<程序>

#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; //页号 logic number

int pfn; //页面框架号 physical frame number

int counter; //计数器

int time; //时间

}pl_type;

pl_type pl[total_vp]; /*页面线性结构---指令序列需要使用地址*/

typedef struct pfc_struct /*页面控制结构,调度算法的控制结构*/

{

int pn;

int pfn;

struct pfc_struct *next;

}pfc_type;

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

int diseffect, a[total_instruction]; /* a[]为指令序列*/

int page[total_instruction], offset[total_instruction];/*地址信息*/

int initialize(int);

int FIFO(int);

int LRU(int);

int LFU(int);

int NUR(int); //not use recently

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;

}

/*初始化相关数据结构 total_pf表示内存的块数 */

int initialize(int total_pf)

{

int i;

diseffect=0;

for(i=0;i

{

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

pl[i].counter=0; /*页面控制结构中的访问次数为0*/

pl[i].time=-1; /*访问的时间*/

}

for(i=0;i

{

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

pfc[i].pfn=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(int total_pf) /*先进先出算法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;

freepf_head->pn=page[i];

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

freepf_head->next=NULL; /*使busy的尾为null*/

if(busypf_tail==NULL)

{

busypf_tail=busypf_head=freepf_head;

}

else

{

busypf_tail->next=freepf_head;

busypf_tail=freepf_head;

}

freepf_head=p;

}

}

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

return 0;

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

{

int min,minj,i,j,present_time; /*minj为最小值下标*/

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;j

{

if(min>pl[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=0;

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(int total_pf ) /*最近未使用算法Not Used recently count表示*/ {

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->pn=page[i];

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(int total_pf) /*最佳置换算法*/

{

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

pfc_type *t;

initialize(total_pf);

for(i=0;i

{

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;

}

for(j=0;j

{

if((pl[j].pfn!=INVALID)&&(dist[j]==32767))

{

dist[j]=j;

}

}

max=0;

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;

}

/*该算法时根据已知的预测未知的,least frequency Used是最不经常使用置换法*/ int LFU(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;

/*获取counter的使用用频率最小的内存*/

for(j=0;j

{

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

{

min=pl[j].counter;

minpage=j;

}

}

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

pl[minpage].pfn=INVALID;

pl[minpage].counter=0;

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;

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

}

}

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

return 0;

}

<结果一:〉

4 page framesFIFO:0.2562LRU:0.2531OPT:0.3031LFU:0.2812NUR:0.2812

5 page framesFIFO:0.2969LRU:0.2906OPT:0.3500LFU:0.3219NUR:0.3094

6 page framesFIFO:0.3375LRU:0.3281OPT:0.3844LFU:0.3375NUR:0.3344

7 page framesFIFO:0.3563LRU:0.3563OPT:0.4031LFU:0.3563NUR:0.3500

8 page framesFIFO:0.3937LRU:0.3750OPT:0.4531LFU:0.3937NUR:0.3719

9 page framesFIFO:0.4219LRU:0.4094OPT:0.4844LFU:0.4156NUR:0.4062

10 page framesFIFO:0.4375LRU:0.4313OPT:0.5062LFU:0.4313NUR:0.4250

11 page framesFIFO:0.4813LRU:0.4625OPT:0.5531LFU:0.4500NUR:0.4656

12 page framesFIFO:0.5406LRU:0.4875OPT:0.5687LFU:0.4938NUR:0.4875

13 page framesFIFO:0.5500LRU:0.5188OPT:0.5969LFU:0.5062NUR:0.5437

14 page framesFIFO:0.5594LRU:0.5531OPT:0.6344LFU:0.5281NUR:0.5469

15 page framesFIFO:0.5687LRU:0.5844OPT:0.6687LFU:0.5469NUR:0.5813

16 page framesFIFO:0.5781LRU:0.5938OPT:0.6813LFU:0.5719NUR:0.5969

17 page framesFIFO:0.5906LRU:0.6156OPT:0.6969LFU:0.6156NUR:0.6156

18 page framesFIFO:0.6156LRU:0.6312OPT:0.7156LFU:0.6344NUR:0.6531

19 page framesFIFO:0.6687LRU:0.6656OPT:0.7344LFU:0.6531NUR:0.6719

20 page framesFIFO:0.6875LRU:0.6969OPT:0.7500LFU:0.6719NUR:0.6906

21 page framesFIFO:0.6906LRU:0.7094OPT:0.7688LFU:0.6969NUR:0.7188

22 page framesFIFO:0.7125LRU:0.7219OPT:0.7969LFU:0.7156NUR:0.7344

23 page framesFIFO:0.7156LRU:0.7406OPT:0.8125LFU:0.7250NUR:0.7812

24 page framesFIFO:0.7281LRU:0.7625OPT:0.8187LFU:0.7406NUR:0.7719

25 page framesFIFO:0.7469LRU:0.7750OPT:0.8344LFU:0.7594NUR:0.8000

26 page framesFIFO:0.8125LRU:0.8000OPT:0.8500LFU:0.7812NUR:0.8063

27 page framesFIFO:0.8313LRU:0.8187OPT:0.8594LFU:0.8031NUR:0.8281

28 page framesFIFO:0.8438LRU:0.8375OPT:0.8688LFU:0.8344NUR:0.8469

29 page framesFIFO:0.8688LRU:0.8531OPT:0.8750LFU:0.8562NUR:0.8562

30 page framesFIFO:0.8781LRU:0.8719OPT:0.8781LFU:0.8750NUR:0.8688

31 page framesFIFO:0.8938LRU:0.8750OPT:0.8844LFU:0.8844NUR:0.8906

32 page framesFIFO:0.9000LRU:0.9000OPT:0.9000LFU:0.9000NUR:0.9000

<分析>

从上述结果可知,在内存页面数较少(4~5页)时,五种算法的命中率差别不大,都是30%左右。在内存页面为7~18个页面之间时,5种算法的访内命中率大致在35%~60%之间变化。但是,FIFO算法与OPT 算法之间的差别一般在6~10个百分点左右。在内存页面为25~32个页面时,由于用户进程的所有指令基本上都已装入内存,使命中率增加,从而算法之间的差别不大。

比较上述5种算法,以OPT算法的命中率最高,NUR算法次之,再就是LFU算法和LRU算法,其次是FIFO算法。就本问题,在15页之前,FIFO的命中率比LRU的高。

<结果二:>

4 page framesFIFO:0.2594LRU:0.2562OPT:0.2687LFU:0.2437NUR:0.2625

5 page framesFIFO:0.3000LRU:0.3000OPT:0.3000LFU:0.2969NUR:0.2875

6 page framesFIFO:0.3375LRU:0.3281OPT:0.3281LFU:0.3094NUR:0.3281

7 page framesFIFO:0.3563LRU:0.3563OPT:0.3688LFU:0.3312NUR:0.3469

8 page framesFIFO:0.4031LRU:0.4094OPT:0.3875LFU:0.3406NUR:0.3781

9 page framesFIFO:0.4156LRU:0.4281OPT:0.4156LFU:0.3656NUR:0.4125

10 page framesFIFO:0.4281LRU:0.4469OPT:0.4313LFU:0.3750NUR:0.4406

11 page framesFIFO:0.4531LRU:0.4688OPT:0.4594LFU:0.4281NUR:0.4656

12 page framesFIFO:0.4656LRU:0.4813OPT:0.4906LFU:0.4375NUR:0.4938

13 page framesFIFO:0.4750LRU:0.5000OPT:0.5219LFU:0.4625NUR:0.5312

14 page framesFIFO:0.4906LRU:0.5125OPT:0.5375LFU:0.4938NUR:0.5500

15 page framesFIFO:0.5312LRU:0.5250OPT:0.5625LFU:0.5281NUR:0.5563

16 page framesFIFO:0.5406LRU:0.5625OPT:0.5813LFU:0.5531NUR:0.5844

17 page framesFIFO:0.5906LRU:0.5813OPT:0.6188LFU:0.5750NUR:0.6031

18 page framesFIFO:0.6000LRU:0.5906OPT:0.6344LFU:0.5906NUR:0.6250

19 page framesFIFO:0.6312LRU:0.6156OPT:0.6438LFU:0.6219NUR:0.6438

20 page framesFIFO:0.6406LRU:0.6344OPT:0.6625LFU:0.6438NUR:0.6750

21 page framesFIFO:0.6969LRU:0.6594OPT:0.6875LFU:0.6656NUR:0.6937

22 page framesFIFO:0.7000LRU:0.6781OPT:0.7125LFU:0.6813NUR:0.6844

23 page framesFIFO:0.7156LRU:0.6906OPT:0.7312LFU:0.7188NUR:0.6969

24 page framesFIFO:0.7438LRU:0.7219OPT:0.7531LFU:0.7438NUR:0.7469

25 page framesFIFO:0.7594LRU:0.7562OPT:0.7656LFU:0.7656NUR:0.7719

26 page framesFIFO:0.7750LRU:0.7812OPT:0.7937LFU:0.7781NUR:0.7781

27 page framesFIFO:0.8125LRU:0.7969OPT:0.8094LFU:0.8125NUR:0.7969

28 page framesFIFO:0.8344LRU:0.8313OPT:0.8281LFU:0.8313NUR:0.8406

29 page framesFIFO:0.8406LRU:0.8594OPT:0.8531LFU:0.8375NUR:0.8406

30 page framesFIFO:0.8625LRU:0.8781OPT:0.8750LFU:0.8562NUR:0.8594

31 page framesFIFO:0.8812LRU:0.8812OPT:0.8906LFU:0.8781NUR:0.8656

32 page framesFIFO:0.9000LRU:0.9000OPT:0.9000LFU:0.9000NUR:0.9000

<分析>

从结果可以看出,FIFO的命中率竟然比OPT的还高。至于为什么,请探讨。

附录:

系统调用函数说明、参数值及定义

1、fork()

创建一个新进程

int fork()

其中返回int取值意义如下:

0:创建子进程,从子进程返回的id值

大于0:从父进程返回的子进程id值

-1:创建失败

2、lockf(files,function,size):

用作锁定文件的某些段或者整个文件,本函数适用的头文件为:

#include

参数定义:

int lockf(files,function,size)

int files,function;

long size;

其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。

3、msgget(key,flag):

获得一个消息的描述符,该描述符指定一个消息队列以便用于其他系统调用。

该函数使用偷文件如下:

#include

#include

#include

参数定义

int msgget(key,flag)

key_tkey;

int flag;

语法格式:msgqid=msgget(key,flag)

其中:msgid是该系统调用返回的描述符,失败则返回-1;flag 本身由操作允许权和控制命令值相“或”得到。

如:IP_CREAT|0400 是否该队列应被创建;

IP_EXCL |0400 是否该队列的创建应是互斥的;等。

4、msgsnd(id,msgp,size,flag):

发送一消息。

该函数是用头文件如下:

#include

#include

#include

参数定义

int msgnd(id,msgp,size,flag)

int id,size,flag;

struct msgbuf * msgp;

其中:id是返回消息队列的描述符;msgp是指向用户存储区的一个构造体指针,size指示由msgp指向的数据结构中字符数组的长度;即消息的长度。这个数组的最大值由MSG-MAX系统可调用参数来确定。flag 规定当核心用尽内部缓冲空间时应执行的动作;若在标志flag中末设置IPC_NOWAIT位,则当该消息队列中字节数超过一最大值时,或系统范围的消息数超过某一最大值时,调用msgsnd进程睡眠。若是设置

IPC_NOWAIT,则在此情况下,msgsnd立即返回。

5、msgrcv(id,msgp,size,type,flag):

接受一消息。

该函数调用使用头文件如下:

#include

#include

#include

参数定义

int msgrcv(id,msgp,size,type,flag)

int id,size,type,flag;

struct msgbuf * msgq;

struct sgbuf{long mtpe;chat mtext[];};

语法格式:

count=msgrcv(id,msgp,size,type,flag)

其中:id是用来存放欲接收消息的拥护数据结构的地址;size是msgp中数据数组的大小; type是用户要读的消息类型:

type为0:接收该队列的第一个消息;

type为正:接收类型type的第一个消息;

type为负:接收小于或等于type绝对值的最低类型的第一个消息。

flag规定倘若该队列无消息,核心应当做什么事,如果此时设置了IPC_NOWAIT标志,则立即返回,若在flag中设置了MSG_NOERROR,且所接收的消息大小大于size,核心截断所接受的消息。

count是返回消息正文的字节数。

6、msgctl(id,cmd,buf):

查询一个消息描述符的状态,设置它的状态及删除一个消息描述符。

调用该函数使用头文件如下:

#include

#include

#include

参数定义

int msgctl(id,cmd,buf)

int id,cmd;

struct msgbuf * msgq;

struct msqid_ds * buf;

其中:函数调用成功时返回0,调用不成功时返回-1。id用来识别该消息的描述符;cmd规定命令的类型。

IPC_START将与id相关联的消息队列首标读入buf。

IPC_SET为这个消息序列设置有效的用户和小组标识及操作允许权和字节的数量。

IPC_RMID删除id的消息队列。

buf是含有控制参数或查询结果的用户数据结构的地址。

附:msgid_ds结构定义如下:

struct msgid_ds

{struct ipc_perm msg_perm; /*许可权结构*/

shot padl[7]; /*由系统使用*/

ushort onsg_qnum; /*队列上消息数*/

ushort msg_qbytes; /*队列上最大字节数*/

ushort msg_lspid; /*最后发送消息的PID*/

ushort msg_lrpid; /*最后接收消息的PID*/

time_t msg__stime; /*最后发送消息的时间*/

time_t msg_rtime; /*最后接收消息的时间*/

me_t msg_ctime; /*最后更改时间*/

};

struct ipc_perm

{ushort uid; /*当前用户id*/

ushort gid; /*当前进程组id*/

ushort cuid; /*创建用户id*/

ushort cgid /*创建进程组id*/

ushort mode; /*存取许可权*/

{shot patl;long pad2} /*由系统使用*/

};

7、shmget(key,size,flag):

获得一个共享存储区。

该函数使用头文件如下:

#include

#include

#include

语法格式:

shmid=shmaget(key,size,flag)

参数定义:

int shmaget(key,size,flag)

key_t key;

int size,flag;

其中:size是存储区的字节数,key和flag与系统调用msgget中的参数含义相同。

附:

操作允许权八进制数

用户可读00400

用户可读00200

小组可读00040

小组可读00020

其他可读00004

其他可读00002

控制命令值

IPC_CREAT 0001000

IPC_EXCL 0002000

如:shmid=shmget(key,size,(IPC_CREAT|0400));

创建一个关键字为key,长度为size的共享存储区。

8、shmat(id,addr,flag):

从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。

该函数调用使用头文件如下:

#include

#include

#include

参数定义:

char * shmat(id,addr,flag)

int id,flag;

char * addr;

语法格式:virtaddr=shmat(id,addr,flag)

其中:id是共享存储区的标识符,addr是用户要使用共享存储区附接的虚地址,若addr是0,系统是否对应用户规定的地址做舍入操作。如果flag中设置了shm_rnd即表示操作系统在必要时舍去这个地址。如果设置了shm_rdonly,即表示只允许读操作。viraddr是附接的虚地址。

9、shmdt(addr):

把一个共享存储区从指定进程的虚地址空间分开。

调用该函数使用头文件:

#include

#include

#include

参数定义:

int shmdt(addr)

char * addr

其中,当调用成功时,返回0值,调用不成功,返回-1,addr是系统调用shmat所返回的地址。

10、shmctl(id,cmd,buf):

对与共享存储区关联的各种参数进行操作,从而对共享存储区进行控制。

调用该函数使用头文件:

#include

#include

#include

参数定义:

int shmctl(id,cmd,buf)

int id,cmd;

struct shmid_ds * buf;

其中:调用成功返回0,否则返回-1。id为被共享存储区的标识符。cmd规定操作的类型。规定如下:IPC_STAT:返回包含在指定的shmid相关数据结构中的状态信息,并且把它放置在用户存储区中的*but指针所指的数据结构中。执行此命令的进程必须有读取允许权。

IPC_SET:对于指定的shmid,为它设置有效用户和小组标识和操作存取权。

IPC_RMID:删除指定的shmid以及与它相关的共享存储区的数据结构。

SHM_LOCK:在内存中锁定指定的共享存储区,必须是超级用户才可以进行此项操作。

Buf是一个用户级数据结构地址。

附:

shmid_ds

{struct ipc_perm shm_perm; /*允许权结构*/

int shm_segsz; /*段大小*/

int padl; /*由系统使用;*/

ushort shm_lpid; /*最后操作的进程id;*/

ushort shm_cpid; /*创建者的进程id;*/

ushort shm_nattch; /*当前附界数;*/

short pad2; /*由系统使用;*/

time_t shm_atime; /*最后附接时间*/

time_t shm_dtime; /*最后段接时间*/

time_t shm_ctime; /*最后修改时间*/

}

11、signal(sig,function):

允许调用进程控制软中断信号的处理。

头文件为:

#include

参数定义:

signal(sig,function);

int sig;

void(*func)();

其中:sig的值是:

SIGHVP 挂起

SIGINT 键盘按^c键或break键

SIGQUIT 键盘按quit键

SIGILL 非法指令

SIGIOT IOT指令

SIGEMT EMT指令

SIGFPE 浮点运算溢出

SIGKILL 要求终止进程

SIGBUS 总线错

SIGSEGV 段违例

SIGSYS 系统调用参数错

SIGPIPE 向无读者管道上写

SIGALRM 闹钟

SIGTERM 软件终结

SIGUSRI 用户定义信号

SIGUSR2 第二个用户定义信号

SIGCLD 子进程死

SIGPWR 电源故障

function的解释如下:

SIG_DEL:缺省操作。对除SIGPWR和SIGCLD外所有信号的缺省操作是进程终结对信号

SIGQUIT,SIGILL,SIGTRA,SIGIOT,SIGEMT,SIGFPE,SIGBUS,SIGSEGV和SIGSYS它产生一内存映像文件。

SIG_IGN:忽视该信号的出现。

Function:在该进程中的一个函数地址,在核心返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGILL,SIGTRAP和SIGTWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DEL,一个进程不能捕获SIGKILL信号。

实验指导书-1

计算机网络实验指导书 2009.9

实验一以太网组网初步 第一部分双绞线电缆制作 【实验目的】 1.进一步了解和认识常见的网络设备及其功能 2.熟悉常见的网络传输介质及其使用 3.掌握双绞线连接器压接方法 4.掌握双绞线模块的打线方法 5.掌握简单的物理网络维护知识 【实验要求】 1.预习网络设备工作原理方面的知识 2.预习背景知识 3.实验前熟悉相关工具软件的使用方法 4.在使用Rj45接头压接工具时,应十分注意安全 【实验原理】 一.以太网简介 典型的局域网主要有:以太网、令牌环、FDDI、ATM、优先权局域网(即100VG-AnyLAN)。其中以以太网使用最为普遍。按数据传输率,以太网分为三类: 1.标准以太网 由IEEE802.3标准所规范,对于拓扑结构、传输介质、数据编码方式、数据传输速率、数据帧的长度以及介质访问控制协议等均有详细的描述。 按使用的传输介质不同,可分为四种: 10Base-5:粗同轴电缆,最大传输距离500m 10Base-2:细同轴电缆,最大传输距离185m 10Base-T: 双绞线,最大传输距离100m 10Base-FL: 长波多模光纤,最大传输距离2000m 2.快速以太网 由IEEE802.3u标准所规范 按使用的传输介质或工作方式不同,可分为三种: 100Base-TX: 五类UTP或STP双绞线(只用两对),最大传输距离100m 100Base-T4: 3、4或5类UTP或STP双绞线(4对线全用),最大传输距离100m 100Base-FX: 单模或多模光纤,最大传输距离2~20km 3.千兆位以太网 由IEEE 802.3z和802.3ab标准所规范。 按使用的传输介质或工作方式不同,可分为七种: 1000Base-T: 5类UTP双绞线(4对线全用),最大传输距离100m

新机械制造技术基础综合实验指导书-图文(精)知识交流

实验一切削加工质量的综合实验 一、实验目的 1、通过综合实验加深理解《机械制造技术基础》课程的相关理论知识,引导学生自主学 习,以提高学生分析问题和解决问题的能力。 2、以保证切削加工质量为目标,展开对机床、刀具、夹具和工件所组成的工艺系统各因 素的认识和分析,进行一系列的设计、试验和测量,从实验过程和实验结果中对影响加工质量的因素进行综合分析。 3、通过以学生动手为主的综合实验,使课程实验成为提高学生综合素质、工程设计能力, 工程实践能力和创新能力的重要环节。 二、实验要求 学生在掌握所学课程的基本知识和理论、熟悉机械加工方法和工艺知识的基础上,根据某一零件图加工质量的要求自拟加工工艺并设计实验方案,选择合理的加工方法、刀具和加工工艺参数等。对试件进行切削加工,控制加工精度和表面粗糙度,分析影响零件加工质量的各种因素,以及寻找控制零件加工质量的基本措施和方法。 三、实验仪器及设备 CA6140型车床、三向通用测力仪、应变放大器、数据采集卡、计算机、表面粗糙度仪、车刀量角台、各种工件材料毛坯、不同角度和材料的车刀、游标卡尺、直尺、千分尺等。四、实验内容

图1为综合实验总体结构框图。从图中可以看出影响加工质量的各种因素,包括机床、工件、刀具和切削条件等几个方面。怎样进行实验设计,如何选用不同的加工方法和工艺参数进行独立自主的实验以完成零件图上加工质量的要求是本实验的主要内容。 图1 制造技术综合实验总体结构图 在实验过程中必须掌握基本的实验手段: 1、掌握使用车刀量角台测量车刀几何角度的基本方法,加深对车刀各几何角度、各参考 平面及其相互关系的理解,绘出所选用车刀的标注角度图。 2、了解测力仪工作原理及测力系统的工作过程,自选切削参数和实验设计,实测切削力, 了解并掌握切削参数(f、a p、κr、γ0、V C对切削力的影响规律,并能够通过实验

Linux操作系统实验指导书

《Linux系统管理与维护》实验指导书 实验一初识Linux操作系统 一实验名称 初识Linux操作系统 二实验目的与要求 掌握Linux的启动、登录与注销。 三实验内容 1.以root用户和普通用户两种不同身份登录Linux,说出其登录后得差异。 2.图形模式下的注销、重启与关机。 3.学会在虚拟机上登录和注销Linux。 四操作步骤与结果分析 五问题与建议

实验二Linux的桌面应用 一实验名称 Linux的桌面应用 二实验目的与要求 熟悉Linux操作系统桌面环境 熟悉Linux文件系统及常用的操作 掌握Linux下使用外部存储设备、网络设备 掌握Linux下安装应用程序 三实验内容 1.查看GNOME提供的“应用程序”、“位置”或者“系统”菜单,运行其中的应用程 序和工具。 2.查看Linux文件目录结构,学会常用的文件目录操作,如复制、粘贴、移动、删 除、更名、创建文档、创建文件夹等。 3.练习在Linux下使用光盘和U盘。 4.学会网络配置,使计算机能够进行网络浏览等操作。 5.学会在Linux下安装新的应用软件。 四操作步骤与结果分析 五问题与建议

实验三Linux操作系统的安装 一实验名称 Linux操作系统的安装 二实验目的与要求 掌握安装Linux操作系统 三实验内容 1.通过学习《项目五Linux操作系统的安装及远程服务》的内容,学会如何安装Linux。 环境:windows 系统、vmware虚拟机、Redhat Linux镜像光盘。 通过安装向导将安装分为两步:1、基本安装,2、配置及具体安装。 在第一阶段重点如何分区,在第二阶段重点掌握如何设置密码及安装桌面环境。四操作步骤与结果分析 五问题与建议

数学实验课程实验指导书Word版

《数学实验》课程实验指导书 2006-4-29

目录 实验一、微积分基础 3实验二、怎样计算 5实验三、最佳分数近似值 6实验四、数列与级数 7实验五、素数 8实验六、概率 9实验七、几何变换 11实验八、天体运动 13实验九、迭代(一)——方程求解 15实验十、寻优 16实验十一、最速降线 18实验十二、迭代(二)——分形 20实验十三、迭代(三)——混沌 21实验十四、密码 22实验十五、初等几何定理的机器证明 23附表(实验报告) 24

实验一、微积分基础 一、实验目的及意义:1、熟悉Mathematic软件常见函数图形 2、通过作图,进一步加深对函数的理解,观察函数的性质 3、构造函数自变量与因变量的对应表,观察函数的变化。 二、实验内容: 1.1函数及其图象 1.2数e 1.3 积分与自然对数 1.4调和数列 1.5双曲函数 三、实验步骤 1.开启软件平台——Mathematics ,开启Mathematics编辑窗口; 2.根据各种问题编写程序文件 3.保存文件并运行; 4.观察运行结果(数值或图形); 5.根据观察到的结果写出实验报告,并浅谈学习心得体会 四、实验要求与任务 根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→数学模型→算法与编程→计算结果→分析、检验和结论→心得体会) 1、1函数及图形 (1)在区间[-0.1,0.1]上作出 y = sin(x)/x 的图象,观察图象在 x = 0 附近的形状 (2)在同一坐标系内作出函数y = sin(x) 和它的展开式的前几构成的多项式函数y = x-x^3/3!,y = x-x^3/3!+x^5/5! . . . 的图象,观察这些多项式函数图象对 y = sin x 的图象逼近的情况. (3)分别取n =10,20,画出函数 y = sin(2k-1)x/(2k-1),k=1,2,...,n求和} 在区间[-3PI,3PI]上的图象.当N 趋向无穷时函数趋向什麽函数? (4)别取n = 5,10,15, 在同一坐标系内作出函数f(x) = sin x 与p(x) = x * (1-x^2/PI^2)*(1-x^2/(2^2*PI^2))*...*(1-x^2/n^2*PI^2))在区间[-2PI,2PI]上的图象,观察 p(x) 图象对 y = sin x的图象逼近的情况. 1、2数e 观察当n趋于无穷大时数列a n=(1+1/n)n和A n=(1+1/n)n+1的变化趋势: (1)n=10m,m=1,2,. . . ,7时的值,a n,A n观察变化趋势. (2)在同一坐标系内作出三个函数地图象y=(1+1/10x)10^x , y=(1+1/10x)10^x , y=e观察当 x 增大时

单片机实验指导书(1)

图3.1P1口输出实验原理图 六、实验程序 1.8个发光二极管循环闪亮,间隔时间为1秒。 ORG0000H LJMP MAIN ORG0100H MAIN:MOV SP,#60H MOV A,#01H; LOOP:MOV P1,A; LCALL DELAY; RL A; SJMP LOOP; DELAY:MOV R0,#10; DELY0:MOV R7,#100; DELY1:MOV R6,#250; DJNZ R6,$ DJNZ R7,DELY1 DJNZ R0,DELY0 RET END 2.8个发光二极管同时亮、灭,间隔时间为1秒。 ORG0000H LJMP MAIN ORG0100H MAIN:MOV SP,#60H MOV A,#0FFH; LOOP:MOV P1,A; LCALL DELAY;

CPL A; SJMP LOOP; DELAY:MOV R0,#10; DELY0:MOV R7,#100; DELY1:MOV R6,#250; DJNZ R6,$ DJNZ R7,DELY1 DJNZ R0,DELY0 RET END 2.P2口输入实验 一、实验目的 学习51单片机的32根I/O口的基本输入功能,以P2口为例,P0,P1,P3口均同理。 二、实验条件 TMD-2模块化单片机实验仪主机一台,串口线一条,PC机一台。 三、实验原理 如图3.2所示,将16个短路帽(DZ1组和DZ2组)全部都短接上,8个拨动开关(SW0~SW7)接P2口,8个发光二极管(LD0~LD7)接P1口。 图3.2P2口输入、P1口输出实验原理图 四、实验内容与要求 拨动8个开关,单片机通过P2口读入其状态数据,然后输出到P1口控制8个LED指 示灯。 五、实验步骤

新实验指导书

实验1:基本逻辑门电路功能测试(采用分立元件) 一、实验目的 1:掌握各种门电路的逻辑功能及测试方法。 2:学习用与非门组成其它逻辑门电路。 二、实验用的仪器、仪表 TEC —5实验箱 74LS00二输入四与非门 三态门74LS125 三、实验原理 与非门的逻辑功能是:当输入端中有一个或一个以上低电平时,输出端为高电平。只有当输入端全为高电平时,输出端才为低电平(即有“0”得“1”,全“1”出“0”)。 三态输出门是一种特殊的门电路。它与普通的逻辑门电路不同,它的输出状态除了高、低电平两种状态(均为低阻状态)外,还用第三种状态,即高阻态。处于高阻态时,电路与负载之间相当于开路。三态门主要用途之一是实现总线传输。三态输出门符号与功能表如下(此例以高有效的使能器件为例)。 四、实验内容 1:测试二输入与非门的逻辑功能 与非门的输入端接逻辑开关电平,输出端接发光二极管。按表1-2所示测试与非门,并将测试结果填入表中。 B A F ?= A B

2:学习用二输入与非门构成其他逻辑电路的方法,并测试。 ● 与门逻辑功能实现: 根据布尔代数的理论,B A B A F ?=?=,所以用2个与非门即可实现与门逻辑功能。输入A 、B 接逻辑开关,输出端接发光二极管。参考表1-1,设计表格,并将测试结果填入表中。 ● 或门逻辑功能实现: 根据布尔代数的理论,B A B A F +=?=,所以用3个与非门即可实现或门逻辑功能。输入A 、B 接逻辑开关,输出端接发光二极管。参考表1-1,设计表格,并将测试结果填入表中。 ● 异或门逻辑功能实现: 根据布尔代数的理论,B A B A F +=,根跟据此异或逻辑表达式经过变换,逻辑图如下,请自行验证此逻辑图的正确性,同时思考如果直接据逻辑表达式画逻辑图,效果如何,近而体会变换的作用。输入A 、B 接逻辑开关,输出端接发光二极管。参考表1-1,设计表格,并将测试结果填入表中。 3:测试三态门的逻辑功能 三态门输入端、使能端分别接逻辑开关,输出端接发光二极管。将测试结果填入表1-3中。 表1-3 A B A B

Linux操作系统实验指导书-4磁盘

《Linux操作系统》实验指导书

实验四 实验题目:磁盘管理 实验目的:熟悉并掌握磁盘管理常用命令;掌握利用虚拟机增加新硬盘,使用fdisk对磁盘分区操作;熟悉和了解磁盘显示信息内容;掌握使用卷组进行磁盘管理操作。 实验类型:综合 实验要求:必修 仪器设备:计算机 实验内容、方法、步骤: 1,使用GUI方式建立用户user01,具体属性如下: 登录shell为/bin/bash, 主目录/user01, 用户id: 520, 用户组grp01 2,使用修改配置文件方式建立用户user02,具体属性如下: 登录shell为/bin/bash, 主目录/user02, 用户id: 530, 用户组grp02 3,使用命令方式建立用户user03,具体属性如下: 登录shell为/bin/bash, 主目录/user03, 用户id: 530, 用户组grp03,附属组grp02 4,对user01,user02,user03,设置密码并登录。 一、磁盘和分区信息查看 1 fdisk查看当前系统硬盘及分区情况,在实验报告中说明当前的磁盘容量,分区数量、名称和大小,分区挂载点,分区使用方式(卷组名称、逻辑卷名称和大小)。 步骤:fdisk –l 2 显示当前文件系统使用情况,在实验报告中说明当前主要文件系统信息及使用情况(包括主要文件系统名称、挂载点、容量、使用量及百分比等)

步骤:df –h 二、添加新硬盘 内容:关闭虚拟机操作系统,添加2块硬盘,大小分别为5G和10G。开机后查看新硬盘是否成功添加。 步骤: 1 关机:init 0 2 添加新硬盘:右键单击虚拟机,选择setting(设置)。在Add中按照要求添加2块新硬盘(HardDisk) 3 开机后,打开终端。输入命令fdisk –l 或ls /dev/sd*查看新硬盘是否添加成功。 三、对新添加硬盘进行分区 内容: 1. 将第二块硬盘sdb分区(5G),要求分区1(sdb1)为主分区,类型为swap (82),大小为500M;分区2(sdb2)为主分区,类型为linux(83),大小为2G;分区3为扩展分区(sdb3),大小为sdb所有剩余容量;分区5为逻辑分区,类型为lvm(8e),大小为2G。分区后,查看sdb新添加所有分区,将截图添加到实验报告中。 2. 将第三块硬盘sdc分区(10G),要求分区1(sdc1)为扩展分区,大小为10G;

网络安全课程实验指导书

网络安全课程实验安排及指导书 2009-10-21

实验安排1、推荐必做实验 网络扫描 计算机病毒及恶意代码 防火墙实验 入侵检测系统 2、推荐选作实验 VPN配置 证书的申请和使用 windows安全配置实验

实验一:网络扫描实验 【实验目的】 了解扫描的基本原理,掌握基本方法,最终巩固主机安全 【实验内容】 1、学习使用Nmap的使用方法 2、学习使用漏洞扫描工具 【实验环境】 1、硬件PC机一台。 2、系统配置:操作系统windows XP以上。 【实验步骤】 1、端口扫描 1)解压并安装ipscan15.zip,扫描本局域网内的主机 2)解压nmap-4.00-win32.zip,安装WinPcap 运行cmd.exe,熟悉nmap命令(详见“Nmap详解.mht”)。 3)试图做以下扫描: 扫描局域网内存活主机, 扫描某一台主机或某一个网段的开放端口 扫描目标主机的操作系统 试图使用Nmap的其他扫描方式,伪源地址、隐蔽扫描等 2、漏洞扫描 解压X-Scan-v3.3-cn.rar,运行程序xscan_gui.exe,将所有模块选择扫描,扫描本机,或局域网内某一台主机的漏洞 【实验报告】 1、说明程序设计原理。 2、提交运行测试结果。 【实验背景知识】 1、扫描及漏洞扫描原理见第四章黑客攻击技术.ppt 2、NMAP使用方法 扫描器是帮助你了解自己系统的绝佳助手。象Windows 2K/XP这样复杂的操作系统支持应用软件打开数百个端口与其他客户程序或服务器通信,端口扫描是检测服务器上运行了哪些服务和应用、向Internet或其他网络开放了哪些联系通道的一种办法,不仅速度快,而且效果也很不错。 Nmap被开发用于允许系统管理员察看一个大的网络系统有哪些主机以及其上运行何种服务。它支持多种协议的扫描如UDP,TCP connect(),TCP SYN (half open), ftp proxy (bounce attack),Reverse-ident, ICMP (ping sweep), FIN, ACK sweep,X mas Tree, SYN sweep, 和Null扫描。你可以从SCAN TYPES一节中察看相关细节。nmap 还提供一些实用功能如通过tcp/ip来甄别操作系统类型、秘密扫描、动态延迟和重发、平行扫描、通过并行的PING侦测下属的主机、欺骗扫描、端口过滤探测、直接的RPC扫描、分布扫描、灵活的目标选择以及端口的描述。 一、安装Nmap Nmap要用到一个称为“Windows包捕获库”的驱动程序WinPcap——如果你经常从网上下载流媒体电影,可能已经熟悉这个驱动程序——某些流媒体电影的地址是加密的,侦测这些电影的真实地址就要用到WinPcap。WinPcap的作用是帮助调用程序(即这

高电压技术实验指导书1

高电压技术实验指导书1标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

高电压技术实验指导书 高电压专业实验室 2007-4-12

安全规则 1.实验前必须熟悉试验内容,并检查设备及仪表是否正常。 2.在合电源之前,务必有两人以上检查接线是否正确,接地是否可靠,做好分工,专人记录。 3.在高压电源和带有高压的设备周围围以遮栏,以便保持一定的安全距离,实验时应站在遮栏之外,不得向遮栏内探头或伸手。 4.在实验进行中不允许交谈或议论,有问题需要讨论时,要切断电源。 5.实验完毕,应先用接地棒使设备放电,尤其是在做完电容器或者电缆等大电容试品实验后,务必仔细放电,同时须将试验场地恢复整齐。 6.在未亲眼看到设备接地之前,不得接近或触摸高压设备。 7.使用升压设备时,升压必须从零开始,使用完毕后,要退回零位。 8.实验中发生事故或异常现象时,应立刻拉闸切断电源,放电后检查线路和设备,如果发生人身事故应立刻进行抢救。 凡在本高压实验室进行试验之人员必须遵守本规则,并保持实验室整洁及良好的工作秩序。

冲击电压放电 一、实验目的 1.了解冲击电压发生器的结构、产生冲击电压的原理和操作方法; 2.了解用分压器与示波器测量冲击电压的方法; 3.观察气体间隙放电、击穿现象; 4.观察在均匀电场和不均匀电场下的气体间隙击穿电压以及不同幅值冲击电压作用下击穿电压波形中放电时延的变化。 二、实验内容及要求: 1.测量冲击电压波形,了解用分压器与示波器测量冲击电压的方法; 2.观察在均匀电场和不均匀电场下的气体间隙击穿电压及电压波形,不 同电压下放电时延的变化,了解冲击电压下的放电时延特性。 3.回答思考题。 三、实验装置及接线图: 冲击电压发生器接线原理图如下图: 冲击电压发生器原理接线图 图中: T:高压试验变压器 D:高压硅堆 C:主电容 R b:充电回路保护电阻 R:充电电阻 g0:点火球隙 g1~g3:中间球隙 g4:隔离球隙 R g:阻尼电阻 R t:波尾电阻 R f :波头电阻 C f :包括负荷电容和电容分压器的电容

最新PLC实验指导书.pdf

PLC实验指导书 实验课程类别:课程内实验 实验课程性质:必修 适用专业:自动化 适用课程:《可编程控制器》、《电气控制与PLC》 实验用PLC机型:欧姆龙CPM1A和CPM2A 开课院、系及教研室:电气信息学院自动化及电气工程教研室 PLC硬件的连接和软件的使用 1.PLC实验系统硬件的组成和线路的连接 整个实验系统由PLC系统和实验区组成。 PLC系统包括OMRON型PLC主机CPM1A一台、适配器CPM1-CIFO1一个、串口线一 根(包括9芯针、孔接头各一个);或CPM2A一台,串口线一根。 实验区包括开关量输入区、混料实验区、交通灯实验区、电机控制实验区和电梯(直线) 实验区等,每个实验区有不同的输入按键、指示灯和相应的插孔。 另外,实验面板上面有24V电源插孔,24V和GND;还有一排输入端子排DIGITAL INPUT 00~23、输入的公共端子1M、2M、3M、4M接24V;输出端子排DIGITAL OUTPUT 00~15,其公共端子1L、1L接GND;另有插接线若干。 开关量信号单元介绍: 输入信号分为不带自锁按键和带自锁按键,各有8个,共16个,按键按下时是高电平还 是低电平由公共端决定,不带自锁按钮的公共端是COMS1,带自锁按键的公共端是 COMS2,按键的公共端子COMS1、COMS2接GND。 输出信号是2组输出指示灯和一个蜂鸣器声音信号,其中一组指示灯的信号是低电平点 亮,标示为LED1-LED4,另一组指示灯的信号是高电平点亮,标示为LED5-LED8。 声音信号的接口标示为BEEP,接通低电平信号时蜂鸣器响。 具体线路的连接如下: (1)电源开关下的两根线为220V电源线,与PLC主机的L1和L2相连。 (2)PLC输入端的0CH(0通道)00~11端子分别与实验面板上端子排的INPUT00~11相连,1CH(1通道)00~05端子分别与实验面板上端子排的INPUT12~17相连。 (3)PLC输出端的10CH(输出0通道)00~07端子分别与实验面板上端子排的OUTPUT00~07相连,11CH(1通道)00~03端子分别与实验面板上端子排的 OUTPUT10~13相连。 (4)需要联机调试或下载程序时将适配器与PLC主机相连接,用串口线将适配器与电脑的任意一串口相连接。 2.PLC编程软件的简要介绍 在工程工作区内,用户可以实现对以下项目的查看与操作: 符号:可编程控制器所使用的所有全局和本地符号。 I/O表:与可编程控制器相连的所有机架和主框的输入输出。 设定:所有有关可编程控制器的设置。

os实验指导书(新)

操作系统教程 实验指导书 阮越许文方

目录 实验一WINDOWS进程初识 (4) 1、实验目的 (4) 2、实验内容和步骤 (4) 3、实验结论 (5) 4、程序清单 (5) 实验二进程管理 (8) 背景知识 (8) 1、实验目的 (11) 2、实验内容和步骤 (11) 3、实验结论 (13) 4、程序清单 (13) 实验三进程同步的经典算法 (18) 背景知识 (18) 1、实验目的 (19) 2、实验内容和步骤 (19) 3、实验结论 (20) 4、程序清单 (21) 实验四存储管理 (25) 背景知识 (25) 1、实验目的 (29) 2、实验内容和步骤 (29) 3、实验结论 (35) 4、程序清单 (35) 实验五文件和设备管理 (40) 背景知识 (40) 1、实验目的 (42) 2、实验内容与步骤 (42) 3、实验结论 (45) 试验六文件系统设计试验 (46) 1、试验目的 (46) 2、实验内容与步骤 (46) 3、实验结论 (46) 4、对试验的改进以及效果 (47) 附录A:参考程序 (49) 附录B:文件系统模拟程序 (52)

52

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。

实验技能课实验指导书剖析

实验1-7 毕托管的标定 一、 实验原理 在理想不可压流体中,毕托管测速的理论公式为: 2 02U P P ρ-= 此式表明:知道了流场中的总压(0 P )和静压(P ),其压差即为动压;由动压,可 算出流体速度。 02() P P U ρ -= 毕托管的头部通常为半球形或半椭球形。直径应选用0.035d D ≤(D 为被测流体管道的内径总压孔开在头部的顶端),孔径为0.3d 。静压孔开在距顶端(3~5)d 处,距支柄(8~10)d 的地方,一般为8个均匀分布的0.1d Φ小孔(NPL 为7孔)。总压与静压分别由两个细管引出,再用胶皮管连接到微压计上,即可测出动压,从而可计算出流速。 图1毕托管测速原理图

若要测量流场中某一点的速度,需将毕托管的顶端置于该点,并使总压孔正对来流方 向,通过微压计就能得到该点的动压。在来流是空气的情况下,有 2 02 U P P h ργ=-=,(ρ 是空气的密度,γ是微压计中工作液体的重度,h 是微压计的读数)。但是由于粘性及毕托 管加工等原因, 2 02U P P ρ-= 不是正好满足的,需要进行修正。根据1973年英国标准BS-1042:Part2A1973的定义: 2 01 2P P C U ρ-= C -毕托管系数。所谓毕托管标定,就是要把C 的数值通过实验确定下来。 标定毕托管一般是在风洞中进行的,要求:(1)风洞实验段气流均匀,湍流度小于0.3%;(2)毕托管的堵塞面积小于实验段截面积的1/200;(3)毕托管插入深度h>2nd(n=8,d 为毕托管直径);(4)安装偏斜角小于2o;(5)以d 为特征长度的雷诺数必须大于250;(6) 最大风速不能超过 2000S d μ ρ(μ是空气动力粘度,S d 为静压孔直径)。这几点如能得到满 足,C 就决定于毕托管的结构,此时0 C C =称为毕托管的基本系数。流体力学实验室从英国进口了一支经过标定的NPL 毕托管,C=0.998。 毕托管进行标定时,将待标定的毕托管 与NPL 标准管安装在风洞实验段的适当位置上(总的原则是让两支管处于同一均匀气流区)因为是均匀流,则有 22C U P h ργ=?=标准 标准标准 22C U P h ργ=?=待标 待标待标 上面两式中,ρ、U 、γ均是同一的。两式相除,得 C h C h = 待标待标标准 标准 则 h C C h =待标待标标准 标准 0.9980.998 C h C h =∴ =标准待标待标标准 上式是毕托管标定的基本公式。通常是在10个不同风速下测量其C 待标 取其平均值;也 可以用10种不同风速下的 h 待标 和 h 标准 按最小二乘法求其基本系数。

[整理]15数字逻辑实验指导书1

------------- 数字逻辑与数字系统实验指导书 青岛大学信息工程学院实验中心巨春民 2015年3月

------------- 实验报告要求 本课程实验报告要求用电子版。每位同学用自己的学号+班级+姓名建一个文件夹(如2014xxxxxxx计算机X班张三),再在其中以“实验x”作为子文件夹,子文件夹中包括WORD 文档实验报告(名称为“实验x实验报告”,格式为实验名称、实验目的、实验内容,实验内容中的电路图用Multisim中电路图复制粘贴)和实验中完成的各Multisim文件、VerilogHDL源文件、电路图和波形图(以其实验内容命名)。

实验一电子电路仿真方法与门电路实验 一、实验目的 1.熟悉电路仿真软件Multisim的安装与使用方法。 2.验证常用集成逻辑门电路的逻辑功能。 3.掌握各种门电路的逻辑符号。 4.了解集成电路的外引线排列及其使用方法。 5. 学会用Multisim设计子电路。 二、实验内容 1.用逻辑门电路库中的集成逻辑门电路分别验证二输入与门、或非门、异或门和反相器的逻辑功能,将验证结果填入表1.1中。 注:与门型号7408,或门7432,与非门7400,或非门7402,异或门7486,反相器7404. 2.用 L=ABCDEFGH,写出逻辑表达式,给出逻辑电路图,并验证逻辑功能填入表1.2中。 ()' 三、实验总结 四、心得与体会

实验二门电路基础 一、实验目的 1. 掌握CMOS反相器、与非门、或非门的构成与工作原理。 2. 熟悉CMOS传输门的使用方法。 3. 了解漏极开路的门电路使用方法。 二、实验内容 1. 用一个NMOS和一个PMOS构成一个CMOS反相器,实现Y=A’。给出电路图,分析其工作原理,测试其逻辑功能填入表2-1。 表2-1 CMOS反相器逻辑功能表 2. 用2个NMOS和2个PMOS构成一个CMOS与非门,实现Y=(AB)’。给出电路图,分析其工作原理,测试其逻辑功能填入表2-2。 3. 用2个NMOS和2个PMOS构成一个CMOS或非门,实现Y=(A+B)’。给出电路图,分析其工作原理,测试其逻辑功能填入表2-3。 表2-3 CMOS或非门逻辑功能表 4. 用CMOS传输门和反相器构成异或门,实现Y=A B 。给出电路图,测试其逻辑功能填入表2-4。

过控实验指导书最新本科

《过程控制系统》 安阳工学院 电子信息与电气工程学院

一、实验目的 1.掌握双容水箱特性的阶跃响应曲线测试方法; 2.根据由实验测得双容液位的阶跃响应曲线,确定其特征参数K、T1、T2及传递函数;3.掌握同一控制系统采用不同控制方案的实现过程。 二、实验条件 1.THJ-3型高级过程控制系统实验装置; 2.计算机、组态王工控组态软件、RS232/485转换器1只、串口线1根; 3.万用表1只。 三、实验原理 图2-1 双容水箱对象特性测试系统

G(s)=G 1(s)G 2 (s)=1 2 1212 k k K T1T1(T1)(T1) s s s s ?= ++++ (2-1) 式中K=k 1 k 2 ,为双容水箱的放大系数,T 1 、T 2 分别为两个水箱的时间常数。 本实验中被测量为中水箱的液位,当上水箱输入量有一阶跃增量变化时,两水箱的液位变化曲线如图2-2所示。由图2-2可见,上水箱液位的响应曲线为一单调上升的指数函数(图2-2(a));而下水箱液位的响应曲线则呈S形曲线(图2-2(b) ),即下水箱的液位响应滞后了,它滞后的时间与阀F1-10和F1-11的开度大小密切相关。 图2-2 双容水箱液位的阶跃响应曲线 (a)中水箱液位(b)下水箱液位 双容对象两个惯性环节的时间常数可按下述方法来确定。在图2-3所示的阶跃响应曲线上求取: (1) h 2 (t)| t=t1 =0.4 h 2 (∞)时曲线上的点B和对应的时间t 1 ; (2) h 2 (t)| t=t2 =0.8 h 2 (∞)时曲线上的点C和对应的时间t 2 。 图2-3 双容水箱液位的阶跃响应曲线 然后,利用下面的近似公式计算式 阶跃输入量 输入稳态值 = ∞ = O h x ) ( K2 (2-2) 2.16 t t T T2 1 2 1 + ≈ + (2-3) ) 55 .0 74 .1( ) T (T T T 2 1 2 2 1 2 1- ≈ +t t (2-4) 0.32〈t 1 /t 2 〈0.46 由上述两式中解出T 1 和T 2 ,于是得到如式(2-1)所示的传递函数。 在改变相应的阀门开度后,对象可能出现滞后特性,这时可由S形曲线的拐点P 处作一切线,它与时间轴的交点为A,OA对应的时间即为对象响应的滞后时间τ。于是得到双容滞后(二阶滞后)对象的传递函数为: G(S)= )1 )(1 ( 2 1 + +S T S T K S eτ- (2-5)

操作系统实验指导

计算机专业 《操作系统》实验指导书网络和信息安全教研室

计算机专业《操作系统》实验指导书 实验一 Linux系统的安装 一、实验目的 1、深入认识磁盘分区 2、掌握Linux安装的基本过程 3、掌握多系统共存的系统安装方法 二、实验任务 在现有系统安装Redhat Linux系统,注意不要破坏现有系统。 三、实验指导 参考《Linux上机实践教程》第一章内容。 实验二 Linux系统的基本使用 一、实验目的 1、熟悉linux系统的启动、登入和退出 2、熟悉linux系统文件和目录的基本使用 3、熟悉其它常用命令及虚拟终端的使用 4、体会linux系统作为分时系统的特点 二、实验任务 启动、登入和退出linux系统 练习使用文件和目录操作的基本命令 使用它常用命令及虚拟终端 练习使用Vi编辑器 三、实验指导 参考《Linux上机实践教程》第二、三章内容。 实验三 windows 2000中进程的创建和控制 一、实验目的 1、加深对进程概念的理解,明确进程和程序的区别 2、进一步认识进程并发执行的实质 3、掌握windows 2000中进程创建和控制的编程方法 二、实验任务 创建一个windows窗口程序,含有4个菜单项,分别用来创建和撤消记事本进程和计算器进程。若相应进程已经创建了,再选择创建进程菜单,则弹出对话框提示进程已经创建;若进程已经撤消了,再选择撤消进程菜单,则弹出对话框提示进程已经撤消。注意考虑从主程序外

部启动和关闭进程的情况。 三、实验指导 1、Win32的进程的概念 进程是应用程序的运行实例,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。进程要完成什么事情的话必须至少拥有一个线程,由线程来负责执行包含在地址空间的代码。 2、Win32的进程的创建 Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。下表详细地列出了每个参数的类型和名称。 可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。 然后是标志参数,用以在dwCreationFlags参数中指明系统应该给予新进程什么行为。经常使用的标志是CREATE_SUSPNDED,告诉主线程立刻暂停。当准备好时,应该使用ResumeThread() API来启动进程。另一个常用的标志是CREATE_NEW_CONSOLE,告诉新进程启动自己的控制台窗口,而不是利用父窗口。 这一参数还允许设置进程的优先级,用以向系统指明,相对于系统中所有其他的活动进程来说,给此进程多少CPU时间。 接着是CreateProcess() 函数调用所需要的三个通常使用缺省值的参数。第一个参数是lpEnvironment参数,指明为新进程提供的环境;第二个参数是lpCurrentDirectory,可用于向主创进程发送与缺省目录不同的新进程使用的特殊的当前目录;第三个参数是STARTUPINFO数据结构所必需的,用于在必要时指明新应用程序的主窗口的外观。 CreateProcess() 的最后一个参数是用于新进程对象及其主线程的句柄和ID的返回值缓冲区。以PROCESS_INFORMA TION结构中返回的句柄调用CloseHandle() API函

建筑材料课程实验指导书教学内容

建筑材料课程实验指 导书

本课程实验的基础知识 1、建筑材料实验的抽样及处理 抽样检验就是通过一个样本来判断总体是否合格。选取试样是建筑材料检验的第一个环节,抽样方法的正确与否直接关系到所检验材料的整体结果,必须制定出一个抽样方案。同时通过检验还要制定出判定其指标的验收标准。这样才能使取样方法具有较高的科学性和代表性。 2、建筑材料实验影响因素,同一材料在不同的制作条件下或不同的实验条件下,会得出不同的实验结果,主要因素有仪器的选择,试件尺寸,试件的形状,表面状态,加荷速度,温度,湿度。 3、实验结果的分析处理及实验报告,在取得了原始的实验数据之后,为了达到所需要的科学结论,常需要对观测数据进行一系列的分析和处理,最基本的方法是数学处理方法。经数据处理后,编写或填写实验报告:从而确定实验结果。但是,当我们对同一物理量进行重复测量时,经常发现他们的数值并不一样,每项实验都有误差,随着科技水平及人们认识水平提高,误差可控制的比较小,但不能完全消除。为了科学的评价数据资料,必须得认识和研究误差,才可以达到以下目的: (1)正确认识误差的性质,分析误差产生的原因,以消除或减少测量误差; (2)正确处理数据,合理计算结果,以更接近于真实值的数据; (3)正确组织实验,合理设计或选用仪器和操作方法,以便在经济的条件下取得理想的结果。 本课程实验教学项目及其教学要求

一、实验目的 学习掌握材料密度的概念和意义,掌握材料密度的测定方法。 二、实验原理 材料内部一般均含有一些孔隙,为了获得绝对密实状态的试样,须将材料磨成细粉,以排除其内部孔隙,再用排液置换法求出其绝对密实体积。 三、主要仪器及耗材 李氏瓶、天平、温度计、玻璃容器、筛子、烘箱、小勺、漏斗等。 四、实验内容与步骤 1、将试样磨成粉末,通过900孔/cm2的筛后,再将粉末放入 105~110℃烘箱内,烘干至恒重。 2、将不与试样起反应的液体倒入李氏瓶中,使液面达到0~1mL刻度之间,记下刻度数,将李氏瓶置于水温20℃+2℃的盛水玻璃容器中。 3、用天平称取60-90g试样,用小勺和漏斗小心地将试样送入密度瓶中,直到液面上升到20mL左右。再称剩余的试样质量,计算出装入瓶中的试样质量m。 4、轻轻振动密度瓶使液体中的气泡排出,记下液面刻度,前后两次液面读数之差,即为瓶内试样所占的绝对体积V。 五、数据处理与分析 按下式计算密度ρ(精确至0.01g/ cm3): ρ=m/V

物流工程实验指导书1

物流工程实验指导书 一、物流系统规划与分析实验 1 实验目的 通过实验,使同学们了解物流系统规划与分析的原理、方法、步骤,掌握物流系统的建模技巧,并熟悉物流仿真系统的基本功能与操作。 2 实验要求 1)了解物流系统规划理论 2)了解物流仿真软件的基本功能 3)掌握物流系统分析流程和物流系统规划与分析的方法 4)通过分析,学会对物流系统的建模 5)学会物流系统仿真软件Flexsim的基本操作 3 实验所需装置 投影仪 1台 电脑 20台 话筒 1个 播放器 1个 Flexsim物流仿真系统 1套 4 实验内容 4.1某物流系统的规划分析 在第一个物流系统模型中,我们将研究三种产品离开一个生产线进行检验的过程。有三种不同类型的临时实体将按照正态分布间隔到达。临时实体的类型在类型1、2、3三个类型之间均匀分布。当临时实体到达时,它们将进入暂存区并等待检验。有三个检验台用来检验。一个用于检验类型1,另一个检验类型2,第三个检验类型3。检验后的临时实体放到输送机上。在输送机终端再被送到吸收器中,从而退出模型。图1-1是流程的框图。

图1-1 模型1流程框图 4.2 物流系统模型的建立 步骤1:从库里拖出一个发生器放到正投影视图中,如图1-2所示: 图 1-2

步骤2:把其余的实体拖到正投影视图视窗中,如图1-3所示: 图1-3 完成后,将看到这样的一个模型。模型中有1个发生器、1个暂存区、 3个处理器、3个输送机和1个吸收器。 步骤3:连接端口 下一步是根据临时实体的路径连接端口。连接过程是:按住“A”键,然后用鼠标左键点击发生器并拖曳到暂存区,再释放鼠标键。拖曳时你将看到一条黄线,释放时变为黑线。。 连接每个处理器到暂存区,连接每个处理器到输送机,连接每个输送机到吸收器,这样就完成了连接过程。 详细定义模型 每个实体都有其特有的图形用户界面(GUI),通过此界面可将数据与逻辑加入模型中。双击实体可打开叫做参数视窗的GUI。 对于这一模型,我们想要有三种不同的产品类型进入系统。为此,将应用发生器的“离开触发器”为每个临时实体指定一个1到3 之间的均匀分布的整数值,来作为实体类型。 步骤4:指定到达速率 双击发生器键打开其参数视窗。 所有的Flexsim实体都有一些分页或标签页,提供一些变量和信息,建模人员可根据模型的需求来进行修改。在这个模型中我们需要改变到达时间间隔和实体类型来产生3种实体。根据模型描述,我们要设定到达时间间隔为normal(10,2)。现在,按下到达时间间隔下拉菜单中的箭头,选择“正态分布”选项 该选项将出现在视窗里。如果要改变分布的参数,则选择模板按钮,之后可以改变模板中任何灰褐色的值。 选择模板按钮,将看到这一视窗 可以使用模板改变数值来调整分布,甚至可以插入一个表达式。在本模型中改变10为20。按确定键返回到参数视窗。 下面我们需要为临时实体指定一个实体类型,使进入系统临时实体的类型服从以1到3之间的均匀分布。最好的做法是在发生器的“离开触发器”中改变实体类型。 步骤5:设定临时实体类型和颜色 选择发生器触发器分页。在“离开触发器”框中,选择“Set Itemtype and Color (设定临时实体类型和颜色)”以改变临时实体类型和颜色。 在选定改变临时实体类型和颜色的选项后,按模板键。

相关文档