`

存储管理算法

阅读更多

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

A.     FIFO先进先出的算法

B.     LRR最近最少使用算法

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

D.     LFR最少访问页面算法

E.      NUR最近最不经常使用算法

 

 

 

代码:

#include<stdio.h>

#include<iostream.h>

#include <stdlib.h>

#include<time.h>

struct aa{

  int page;

  int count;

  aa* next;

  };

void main()

{

 time_t t;

 srand(unsigned(time(&t)));

 int i,n,j,ii,m,answer,ffalse,count,fangfa,temp1,min,nn,mm;

 double sum;

 aa *head,*tail,*temp,*table,*first,*ti;

/* nn=4;mm=1;

 for(nn=4;nn>32;nn++)

 {

  for(mm=1;mm>5;mm++)

  {*/

 cin>>m;

 //m=nn;

 cout<<endl;

 cout<<"fangfa:  1-FIFO;2-LRR;3-OPT;4-LFR;5-NUR"<<endl;

 cout<<"Mothed:";

 cin>>fangfa;

 //fangfa=mm;

 ffalse=0;

 answer=0;

 table=new(aa);

 temp=table;

 table->page=-1;

 table->count=0;

 head=table;

 for(ii=2;ii<=m;ii++)

 {

    table=new(aa);

    table->page=-1;

    table->count=0;

    temp->next=table;

    temp=table;

    if (ii==m){table->next=NULL;}

 }

 tail=table;

 temp=head;

 first=head;

 count=0;

 i=0;

 while(i<320)

 {

   min=400;

    if (count==0) {n=(rand()%320+1)%320; j=n/10;}

      if (count==1) {n=rand()%(n+1);j=n/10;}

      if(count==2) {j=((n+1)%320)/10;}

      if(count==3) {j=((rand()%(320-n-2))+n+2)/10;}

 

   table=head;

   temp=head;

   answer=0;

   min=400;

   if (fangfa==5)

     {

      while(table!=NULL)

       {

          if (table->page==j){answer=1;table->count=2;}

          table=table->next;

       }

      if (answer!=1)

        {

         table=head;

         while (table!=NULL)

             {

               if (table->count<min){temp=table;min=table->count;}

               table=table->next;

             }

         if (temp->page!=-1) ++ffalse;

         temp->page=j;

         temp->count=1;

        }

      table=head;

       if ((i%32)==0)

       {

      while(table!=NULL)

       {

          if (table->page!=-1) table->count=1;

         // if (table->page==j){answer=1;++(table->count);}

          table=table->next;

       }

      }

     }

   if ((fangfa==4)||(fangfa==3))

      {

      while(table!=NULL)

       {

          if (table->page==j){answer=1;++(table->count);}

          table=table->next;

       }

      if(answer!=1)

         {  table=head;

            while (table!=NULL)

             {

               if (table->count<min){temp=table;min=table->count;}

               table=table->next;

             }

               if (temp->page!=-1){

                     ++ffalse;

                     temp->page=j;

                    table=head;

                    while(table){

                      table->count=1;

                      table=table->next;

                    }

               }

               else{

            temp->page=j;

               ++(temp->count);

               }

          }

      }

   if (fangfa==2){

   while((table!=NULL)&&(fangfa==2))

   {

     if (table->page==j){answer=1;temp=table;}

     table=table->next;

   }

   if((fangfa==2)&&(answer==1))

     {

       //table=temp;

       temp1=temp->page;

       while (temp!=NULL)

      {

        temp->page=temp->next->page;

        temp=temp->next;

      }

      tail->page=temp1;

     }

     if((answer!=1)&&(fangfa==2))

      {

      if (first->page!=-1)

       ffalse=ffalse+1;

       first->page=j;

       temp=head;

       while (temp!=NULL)

      {

        temp->page=temp->next->page;

        temp=temp->next;

      }

      tail->page=j;

      }

     }

   table=head;

   while((table!=NULL)&&(fangfa==1))

   {

     if (table->page==j){answer=1;}

     table=table->next;

   }

    if ((answer!=1)&&(fangfa==1))

       {

         if (first->page!=-1)  ffalse=ffalse+1;

         first->page=j;

        if (first->next!=NULL) { first=first->next;}

           else   {first=head;}

       }

      ++i;

      ++count;

   if (count==4){count=0;}

 }

sum=1.0-ffalse/320.0;

/*cout<<nn<<" ";

if (fangfa==1) cout<<"FIFO:"<<sum<<" ";

if (fangfa==2) cout<<" LRR:"<<sum<<" ";

if (fangfa==3) cout<<" OPT:"<<sum<<" ";

if (fangfa==4) cout<<" LFR:"<<sum<<" ";

if (fangfa==5) cout<<" NUR:"<<sum<<" ";

if(mm==5) cout<<endl;*/

cout<<sum<<endl;

for(ti=head;ti!=NULL;ti=ti->next)cout<<ti->page<<"  ";

cout<<endl;

}

实验四  文件系统设计

1.目的和要求

本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

2.实验内容

DOS系统设计一个简单的二级文件系统。要求做到以下几点:

可以实现下列几条命令

LOGIN    用户登陆

DIR       列文件目录

CREATE   创建文件

DELETE   删除文件

OPEN     打开文件

CLOSE    关闭文件

READ     读文件

WRITE    写文件

列目录时要列出文件名,物理地址,保护码和文件长度。

源文件可以进行读写保护。

3.实验环境

同前

4.实验提示

①首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。

②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并以编号作为物理地址,在目录中进行登记。

5.实验运行结果

参考程序见下(本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录):

#include "stdio.h"

#include "string.h"

#include "conio.h"

#include "stdlib.h"

#define MAXNAME 25  /*the largest length of mfdname,ufdname,filename*/

#define MAXCHILD 50 /*the largest child*/

#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/

 

typedef struct  /*the structure of OSFILE*/

  {int  fpaddr;                /*file physical address*/

   int  flength;               /*file length*/

   int  fmode;   /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/

   char fname[MAXNAME];        /*file name*/

  } OSFILE;

 

typedef struct     /*the structure of OSUFD*/

  {char ufdname[MAXNAME];   /*ufd name*/

   OSFILE ufdfile[MAXCHILD];   /*ufd own file*/

  }OSUFD;

 

typedef struct  /*the structure of OSUFD'LOGIN*/

  {char ufdname[MAXNAME];       /*ufd name*/

   char ufdpword[8];            /*ufd password*/

  } OSUFD_LOGIN;

 

typedef struct     /*file open mode*/

  {int ifopen;     /*ifopen:0-close,1-open*/

   int openmode;   /*0-read only,1-write only,2-read and write,3-initial*/

  }OSUFD_OPENMODE;

 

OSUFD *ufd[MAXCHILD];

分享到:
评论

相关推荐

    分区式存储管理算法.rar

    在"分区式存储管理算法"这个主题中,我们将深入探讨该算法的工作原理、优缺点以及其实现方式。 首先,分区式存储管理主要有四种类型:单一分区、固定分区、动态分区和可变分区。单一分区是最简单的形式,整个内存被...

    操作系统-分区式存储管理算法.zip

    操作系统存储管理算法 首次适应、最佳适应、最差适应算法 输入: 1)当前内存空闲分区的序列,包括起始地址、空闲分区大小。 2)进程的分区请求序列。 输出要求: 1)三种算法的空闲分区队列。 2)三种算法的分配...

    一种面向智能芯片的快速存储管理算法.pdf

    存储管理算法在智能芯片领域发挥着至关重要的作用。随着芯片技术的快速发展,如何有效地管理和优化存储资源,减少资源浪费,提高存储空间的利用率成为了硬件开发工程师和芯片设计师必须面对的重要课题。本文提出了一...

    分页式存储管理算法 C语言 操作系统

    操作系统 中分页式存储管理算法的源代码 C语言编写

    2022年存储管理算法实验报告计算机操作系统教程第三版.doc

    本文档基于《计算机操作系统教程第三版》的内容,结合2022年的存储管理算法实验报告,深入探讨了存储管理的概念、分页式存储管理策略以及页面置换算法,并通过模拟实验来分析不同算法的性能表现,最终得出结论。...

    操作系统实验 作业调度算法、进程调度算法、分区式存储管理算法、页面调度算法

    三、分区式存储管理算法 分区式存储管理将内存划分为固定大小的区域,分配给进程使用。主要算法有最佳适应(Best Fit)、最差适应(Worst Fit)和首次适应(First Fit)。Best Fit尽量选择最小的空闲分区,减少内存...

    操作系统 存储管理算法实现(Android实现带界面)

    在这个实验中,我们关注的是在Android平台上实现存储管理算法,并结合用户界面来直观展示其工作过程。下面将详细讨论相关知识点。 1. **虚拟内存**:Android操作系统采用虚拟内存机制,每个应用都拥有自己的独立...

    操作系统课程设计之存储管理算法的实现

    为加深学生对于存储管理算法的理解并提高其实战能力,大学计算机操作系统课程设计中常将编程实现存储管理算法作为一项重要内容。本次课程设计要求学生实现三种主要的存储管理算法:分页、分段和段页式存储管理。 ...

    操作系统的存储管理算法(替换算法)

    本程序着重实现的是存储管理中的页面替换算法,这是解决虚拟内存问题的关键技术。 页面替换算法的主要目标是在物理内存(主存)有限的情况下,合理地将内存中的页面进行替换,以解决由于内存不足而引起的缺页中断。...

    一种优化的伙伴系统存储管理算法设计1

    【标题】:“一种优化的伙伴系统存储管理算法设计1” 【描述】:本文主要探讨了如何通过优化查找性能来改进伙伴算法,以提高操作系统内存管理中存储空间分配和回收的效率,尤其适用于实时系统的动态存储管理。 ...

    操作系统实验——分区式存储管理算法.docx

    操作系统实验——分区式存储管理算法 操作系统实验中,分区式存储管理算法是动态分区存储管理方式的核心内容。本实验报告通过动态分区分配方式,了解数据结构和分配算法,并进一步加深对动态分区存储管理方式及其...

    内存分配_课程设计:可变分区存储管理算法模拟.docx

    ### 内存分配_课程设计:可变分区存储管理算法模拟 #### 一、课程设计目的及背景 本次课程设计的主要目标是通过编程的方式模拟可变分区存储管理系统的内存分配与回收过程。可变分区存储管理是操作系统内存管理中一...

    《计算机操作系统》请求页式存储管理中页面置换算法的模拟设计

    《计算机操作系统》请求页式存储管理中页面置换算法的模拟设计 在计算机操作系统中,虚拟存储技术是实现存储管理的一种重要技术手段。虚拟存储技术可以将辅存和主存统一管理,在二者之间进行对换,从而形成物理上...

    存储管理——动态分区分配算法的模拟

    ### 存储管理——动态分区分配算法的模拟 #### 一、课程设计目的与背景 本次课程设计的主要目的是让学生深入理解并实现操作系统中的存储管理机制,特别是动态分区分配算法。通过对实际的操作系统(如Linux)代码的...

    操作系统 + 动态分区存储管理算法-首次适应算法 + 实验报告 + 源代码

    本科计算机专业操作系统课程实验报告—动态分区存储管理算法-首次适应算法。 编写程序,实现动态分区存储管理算法,模拟动态分区存储分配、回收和合并的过程,加深对动态分区存储管理的理解。 含实验报告及源代码。

    操作系统 + 动态分区存储管理算法-最佳适应算法 + 实验报告 + 源代码

    本科计算机专业操作系统课程实验报告—动态分区存储管理算法-最佳适应算法。 编写程序,实现动态分区存储管理算法,模拟动态分区存储分配、回收和合并的过程,加深对动态分区存储管理的理解。 含实验报告及源代码。

Global site tag (gtag.js) - Google Analytics