操作系统实验报告_第1页
操作系统实验报告_第2页
操作系统实验报告_第3页
操作系统实验报告_第4页
操作系统实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统试验汇报书院部名称:学生姓名:专业名称:班级:学号:时间:TOC\o"1-2"\h\z\u试验一:巡回置换算法(2课时) 2试验二:生产者与消费者问题(4课时) 3试验三:存放管理(4课时) 7试验一:巡回置换算法(2课时)试验内容巡回置换指k属于[1:n]时,k=p[…p[k]…]置换。设i=1,2,3,4,5,6,7;p[i]=4,7,3,1,2,5,6;p[i]巡回置换算法描述:beginlocalx,k;//x,k为局部变量//k=1;whilek<=7dox=k;repeatprint(x);x=p[x];untilx==k;k++;odend要求经过程序设计得出其运算结果。试验过程及分析clc,clear;p=[4732156];k=1;whilek<=7b=[];x=k;b=[bx];x=p(k);whilex~=k;b=[bx];x=p(x);endk=k+1;bend4、试验小结:知道了循环控制试验二:生产者与消费者问题(4课时)试验过程及分析#include<stdio.h>#include<stdlib.h>#include<time.h>#include"pthread.h"#include"semaphore.h"#ifndef_OSCONFIG_#define_OSCONFIG_#ifdef_WIN32#include<windows.h>#defineCLOCK(t)t=clock()#defineSLEEP(millisecond)Sleep(millisecond)#pragmacomment(lib,"pthreadVC2.lib")#else#include<sys/time.h>#include<unistd.h>timevala;#defineCLOCK(t)gettimeofday(&a,0),t=(a.tv_sec*1000+a.tv_usec/1000)#defineSLEEP(millisecond)usleep((millisecond)*1000)#endif#endif#ifndef_BUFFER_#define_BUFFER_typedefintbuffer_item;#defineBUFFER_SIZE5buffer_itembuffer[BUFFER_SIZE];intcurrentSize=0;intcurrentIndex=0;intinsert_item(buffer_itemitem){returncurrentSize<BUFFER_SIZE?(buffer[(currentIndex+currentSize++)%BUFFER_SIZE]=item,1):0;}intremove_item(buffer_item*item){return(currentSize&&buffer[currentIndex]==*item)?(--currentSize,currentIndex=(currentIndex+1)%BUFFER_SIZE,1):0;}#endifpthread_mutex_tmutex;sem_tfull;sem_tempty;clock_tthreadStart;#definePTIMESPANMAX5000void*producer(void*params){intid=*(int*)params;while(true){SLEEP(rand()%PTIMESPANMAX);buffer_itemrnd=rand();longbegin,end;CLOCK(begin);printf("%ld:\tProducer%d\tproduced%d\n",(long)(begin-threadStart),id,rnd);sem_wait(&empty);pthread_mutex_lock(&mutex);(CLOCK(end),insert_item(rnd))?printf("%ld:\tProducer%d\thaveput%d\tafter%d\tmilliseconds\n",end-threadStart,id,rnd,end-begin):printf("%ld:\tProducer%d\tReportError!\n",end-threadStart,id);pthread_mutex_unlock(&mutex);sem_post(&full);}}#defineCTIMESPANMAX5000void*consumer(void*params){intid=*(int*)params;while(true){SLEEP(rand()%CTIMESPANMAX);longbegin,end;CLOCK(begin);printf("%ld:\tConsumer%d\twanttoconsume\n",begin-threadStart,id);sem_wait(&full);pthread_mutex_lock(&mutex);buffer_itemitem=buffer[currentIndex];(CLOCK(end),remove_item(&item))?printf("%ld:\tConsumer%d\tconsumed%d\tafter%d\tmilliseconds\n",end-threadStart,id,item,end-begin):printf("%ld:\tConsumer%d\tReportError!\n",end-threadStart,id);pthread_mutex_unlock(&mutex);sem_post(&empty);}}intmain(intargc,char*argv[]){srand(time(0));pthread_mutex_init(&mutex,NULL);sem_init(&full,0,BUFFER_SIZE);sem_init(&empty,0,BUFFER_SIZE);inti=0;for(i=0;i<BUFFER_SIZE;i++)sem_wait(&full);intsleepTime=0;intproducerCount=0;intconsumerCount=0;if(argc==4){sscanf(argv[1],"%d",&sleepTime);sscanf(argv[2],"%d",&producerCount);sscanf(argv[3],"%d",&consumerCount);}else{printf("Howlongtosleepbeforeterminating:");scanf("%d",&sleepTime);printf("Thenumberofproducerthreads:");scanf("%d",&producerCount);printf("Thenumberofconsumerthreads:");scanf("%d",&consumerCount);}CLOCK(threadStart);for(i=0;i<producerCount;i++){pthread_tpid;pthread_create(&pid,NULL,producer,(void*)&i);SLEEP(1);}for(i=0;i<consumerCount;i++){pthread_tpid;pthread_create(&pid,NULL,consumer,(void*)&i);SLEEP(1);}SLEEP(sleepTime);printf("Endoftime\n");return0;}关于处理pthread.h找不到问题:1.在你班位置,找到include文件夹,把里面三个头文件复制到"C:\ProgramFiles\MicrosoftVisualStudio\VC98\Include"位置。2.在你班位置,找到lib文件夹,把里面全部文件复制到"C:\ProgramFiles\MicrosoftVisualStudio\VC98\lib"位置.3.在你班位置,找到lib文件夹,找到pthreadvc2.dll,复制到"C:\WINDOWS\system32"位置,只有这么,你程序才能够正确运行。4、试验小结:试验三:存放管理(4课时)页面置换算法程序代码:#include<stdio.h>#include<string.h>#include<iostream.h>constintMAXSIZE=1000;constintMAXQUEUE=3;typedefstructnode{intloaded;inthit;}page;pagepages[MAXQUEUE];intqueue[MAXSIZE];intquantity;voidinitial(){ inti; for(i=0;i<MAXQUEUE;i++) { pages[i].loaded=-1; pages[i].hit=0;} for(i=0;i<MAXSIZE;i++) { queue[i]=-1; } quantity=0;}voidinit(){ inti; for(i=0;i<MAXQUEUE;i++) { pages[i].loaded=-1; pages[i].hit=0; }}voidreadData(){ FILE*fp; charfname[20]; inti; cout<<"请输入页面流文件名:"; cin>>fname; if((fp=fopen(fname,"r"))==NULL) { cout<<"错误,文件打不开,请检验文件名"; } else { while(!feof(fp)) { fscanf(fp,"%d",&queue[quantity]); quantity++; } } cout<<"读入页面流:"; for(i=0;i<quantity;i++) { cout<<queue[i]<<""; }}voidFIFO(){ inti,j,p,flag; intabsence=0; p=0; cout<<endl<<""<<endl; cout<<"先进先出调度算法(FIFO)页面调出流:"; for(i=0;i<quantity;i++) {flag=0; for(j=0;j<MAXQUEUE;j++) { if(pages[j].loaded==queue[i]) {flag=1;} } if(flag==0) { if(absence>=MAXQUEUE) {cout<<pages[p].loaded<<"";} pages[p].loaded=queue[i]; p=(p+1)%MAXQUEUE; absence++; } } absence-=MAXQUEUE; cout<<endl<<"总缺页数:"<<absence<<endl;}voidLRU(){ intabsence=0; inti,j; intflag; for(i=0;i<MAXQUEUE;i++) {pages[i].loaded=queue[i];} cout<<endl<<""<<endl; cout<<"最近最少使用调度算法(LRU)页面流:"; for(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论