最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

操作系统实验报告-存储管理实验

来源:动视网 责编:小OO 时间:2025-10-03 19:35:17
文档

操作系统实验报告-存储管理实验

存储管理实验一.实验目的及要求:通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验环境:操作系统:WindowsXP编译环境:VisualC++6.0三.算法描述由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交
推荐度:
导读存储管理实验一.实验目的及要求:通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验环境:操作系统:WindowsXP编译环境:VisualC++6.0三.算法描述由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交
存储管理实验

一.实验目的及要求:

通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。

通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。  

 

二 . 实验环境:

操作系统:Windows XP

编译环境:Visual C++ 6.0

三.算法描述

由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。

  作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。

  每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。

  作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。

  各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。 

  每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。

四.  实验步骤: 

核心源码:

void acceptment2(RECT *head,RECT *back1)

{

    RECT *before,*after;

    int insert ;

    insert=0;

    before=head;

after=head->next;

if(head->next==NULL) /*如果可利用区表为空*/

    {

head->size=back1->size;

head->next=back1;

       maxblocknum++;

back1->next=NULL;

    }

    else

    {

       while(after!=NULL) /*与上一块合并*/

if(back1->address==after->size+after->address)

       {

before->next=after->next;

back->size=after->size+back1->size;

   free(after);

   after=NULL;

       }

       else

       {

after=after->next;

before=before->next;

       }

       before=head;

after=head->next;

       while(after!=NULL)

if(after->address==back1->size+back1->address) /*与下一块合并*/

       {

back1->size=back1->size+after->size;

before->next=after->next;

   free(after);

   after=NULL;

       }

       else

       {

before=before->next;

after=after->next;

       }

       before=head;/*将回收结点插入到合适的位置*/

after=head->next;

       do{

if(after==NULL||(after->size>back1->size))

   {

before->next=back1;

back1->next=after;

      insert=1;

   }

   else

   {

before=before->next;

after=after->next;

   }

       }while(!insert);

if(head->sizesize) /*修改最大块值和最大块数*/

       {

head->size=back1->size;

   maxblocknum++;

       }

       else

if(head->size==back1->size)

      maxblocknum++;

    }

}

/*分配函数*/

RECT *assignment(RECT *head,int application)

{

    RECT *after,*before,*assign;

    assign=(RECT*)malloc(sizeof(RECT)); /*分配申请空间*/

assign->size=application;

assign->next=NULL;

if(application>head->size||application<=0)

assign->address=-1; /*申请无效*/

    else

    {

       before=head;

after=head->next;

while(after->size       {

before=before->next;

after=after->next;

       }

if(after->size==application) /*结点大小等于申请大小则完全分配*/

       {

if(after->size==head->size)

      maxblocknum--;

before->next=after->next;

assign->address=after->address;

   free(after);

       }

       else

       {

if(after->size==head->size) maxblocknum--;

after->size=after->size-application; /*大于申请空间则截取相应大小分配*/

assign->address=after->address+after->size;

   if(tolower(way)=='b')/*如果是最佳适应,将截取后剩余结点重新回收到合适位置*/

   {

before->next=after->next;

      back=after;

      acceptment2(head,back);

   }

       }

       if(maxblocknum==0) /*修改最大数和头结点值*/

       {

   before=head;

head->size=0;

   maxblocknum=1;

   while(before!=NULL)

   {

if(before->size>head->size)

      {

head->size=before->size;

         maxblocknum=1;

      }

      else

if(before->size==head->size)

     maxblocknum++;

before=before->next;

   }

       }

    }

    assign1=assign;

    return assign1; /*返回分配给用户的地址*/

}

void acceptment1(RECT *head,RECT *back1)/*首先适应*/

{

    RECT *before,*after;

    int insert;

    before=head;

after=head->next;

    insert=0;

    while(!insert) /*将回收区插入空闲区表*/

    {

       if((after==NULL)||

((back1->address<=after->address)&&

(back1->address>=before->address)))

       {

before->next=back1;

back1->next=after;

   insert=1;

       }

       else

       {

before=before->next;

after=after->next;

       }

    }

if(back1->address==before->address+before->size)/*与上一块合并*/

    {

before->size=before->size+back1->size;

before->next=back1->next;

       free(back1);

       back1=before;

    }

if(after!=NULL&&(after->address==back1->address+back1->size))

    {   /*与下一块合并*/

back1->size=back1->size+after->size;

back1->next=after->next;

       free(after);

    }

if(head->sizesize) /*修改最大块值和最大块个数*/

    {

head->size=back1->size;

       maxblocknum=1;

    }

    else

if(head->size==back1->size)

   maxblocknum++;

}

/*检查回收块的合法性,back1为要回收的结点地址*/

int backcheck(RECT *head,RECT *back1)

{

    RECT *before,*after;

    int check=1;

if(back1->address<0||back1->size<0)

       check=0;/*地址和大小不能为负*/

before=head->next;

    while((before!=NULL)&&check)/*地址不能和空闲区表中结点出现重叠*/

if(((back1->addressaddress)

&&(back1->address+back1->size>before->address))

||((back1->address>=before->address)

&&(back1->addressaddress+before->size)))

   check=0;

       else

before=before->next;

    if(check==0)

       printf("输入回收空间地址错误或输入的回收空间是空闲状态。!!\\n");

    return check;   /*返回检查结果*/

}

3.、实验截图:

 

文档

操作系统实验报告-存储管理实验

存储管理实验一.实验目的及要求:通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验环境:操作系统:WindowsXP编译环境:VisualC++6.0三.算法描述由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top