操作系统实验指导书
else { dp++;
if(dp==total_vp) dp=0;
if(dp==old_dp)
for(j=0;j freepf_head=&pfc[pl[dp].pfn]; pl[dp].pfn=INVALID; freepf_head->next=NUL; } 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 printf(\ } 4.5 OPT算法 void OPT(total_pf) /*OPT(Optimal Replacement)ALGORITHM*/ 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==NUL) { for(j=0;j dist[j]=0; 23 操作系统实验指导书 d=1; for(j=i+1;j if(pl[page[j]].pfn!=INVALID) dist[page[j]]=d; d++; } max=-1; for(j=0;j max=dist[j];maxpage=j;} freepf_head=&pfc[pl[maxpage].pfn]; freepf_head->next=NUL; pl[maxpage].pfn=INVALID; } pl[page[i]].pfn=freepf_head->pfn; freepf_head=freepf_head->next; } } printf(\ } 4.6 主函数的编写 int main() { int S,i; srand((int)getpid()); S=(int)rand()90; for(i=0;i a[i]=S; /*任选一指令访问点*/ a[i+1]=a[i]+1; /*顺序执行一条指令*/ a[i+2]=(int)rand()90; /*执行前地址指令m’*/ a[i+3]=a[i+2]+1; /*执行后地址指令*/ S=(int)rand()90; } for(i=0;i page[i]=a[i]/10; 24 操作系统实验指导书 offset[i]=a[i]; } for(i=4;i<=32;i++) /*用户内存工作区从4个页面到32个页面*/ { printf(\ FIFO(i); LRU(i); OPT(i); LFU(i); NUR(i); printf(\ } return 0; } 5.拓展训练 比较上述几种算法,它们各有什么特点? 25 操作系统实验指导书 实验8文件管理实验 1.实验目的 熟悉实验环境,掌握Windows 2000/XP中相关API的使用方法;用c++编写一个程序,通过使用系统调用将一个文件中的数据复制到另一个文件中;熟悉Win32 API中与文件操作相关的系统调用CreatFile、ReadFile、WriteFile。 2.实验设备 安装了Windows系统的计算机。 3. 实验内容及要求 (1)在桌面建立两个文本文件in_test、out_test,in_test中有内容,out_test为空; (2)在Visual C++中建立编写源程序文件,使用系统调用将in_test中的数据复制到out_test中。 4.实验步骤 4.1在桌面建立两个文本文件 文件名为:in_test、out_test,in_test中有内容,out_test为空。 4.2在Visual C++中编程,实现文件内容的复制。 /*Name:file.cpp*/ #include #define BUFFER_LEN 5 //每次读写的字节数 int main(int arg,char *argv[]) { char buffer[BUFFER_LEN];//局部变量 //设置系统调用CreatFile的参数值 DWORD dawShareMode=0; LPSECURITY_ATTRIBUTES lpFileSecurityAttributes=NULL; HANDLE hTemplateFile=NULL; //系统调用ReadFile的参数设置 HANDLE sourceFile; DWORD numberofBytesRead; LPOVERLAPPED lpOverlapped=NULL; 26 操作系统实验指导书 //系统调用WriteFile的参数设置 HANDLE sinkFile; //管道名 DWORD numberofBytesWritten;//写入字节数 //打开源文件 sourceFile=CreateFile(\s,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY,hTemplateFile); if(sinkFile=INVALID_HANDLE_VALUE){ fprintf(stderr,\ExitProcess(1); } //打开目标文件 sinkFile=CreateFile(\s,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY,hTemplateFile); if(sinkFile=INVALID_HANDLE_VALUE){ fprintf(stderr,\ExitProcess(1); } //循环体 while(ReadFile(sourceFile,buffer,BUFFER_LEN,&numberofBytesRead,lpOverlapped)&&(numberofBytesRead>0)) { WriteFile(sinkFile,buffer,BUFFER_LEN,&numberofBytesWritten,lpOverlapped); } //关闭文件 CloseHandle(sourceFile); CloseHandle(sinkFile); ExitProcess(0); return 0; } 4.3 编译运行 5.拓展训练 实验中用到了哪些系统调用? 27