⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 虚拟存储器管理.c

📁 操作系统课程的虚拟存储的模拟。简单版。很好用
💻 C
字号:
#include "stdio.h"

struct Page_Table
{
   int Page_ID;
   int Page_Flag;
   int MainBlock_ID;
   int Modify;
   int Out_Address;
   }Page_Table[8]={
                   {0,1,5,1,011},
                   {1,1,8,1,012},
                   {2,1,9,0,013},
                   {3,1,10,0,015},
                   {4,0,NULL,NULL,017},
                   {5,0,NULL,NULL,025},
                   {6,0,NULL,NULL,212},
                   {7,0,NULL,NULL,213},
                   };
                   
int main()
{
   int P[4]={0,1,2,3};
   int i;
   int L,offset;
   int K=0;
   int J;
   int choice1,choice2,choice3;
   int  absolute_address;

   while(1)
   {
      printf("输入页号:\n");
      scanf("%d",&L);
      printf("输入偏移量:\n");
      scanf("%d",&offset);
      start:
      if(Page_Table[L].Page_Flag==1)
      {
         absolute_address=Page_Table[L].MainBlock_ID*64+offset;
         printf("绝对地址:%d\n",absolute_address);
         printf("保存指令?(y/n)\n");
         getchar();
         scanf("%c",&choice1);
         if(choice1=='y')
         Page_Table[L]. Modify=1;
         getchar();
         printf("还有后继指令?(y/n)\n");
         scanf("%c",&choice2);
         if(choice2=='y')
         continue;
         else
         return 0;
         }
      else
      {
         printf("该页不在主存,产生缺页中断!\n");
         printf("该页修改过吗?( 即修改标志Modify是否为1)\n");
         J=P[K];
         if(Page_Table[J]. Modify==1)
         {
            P[K]=L;
            K=(K+1)%4;
            printf("调页%d到磁盘\n",J);
            }
         printf("调进页%d\n",L); 
         Page_Table[L].Page_Flag=1;
         Page_Table[L].MainBlock_ID=Page_Table[J].MainBlock_ID;
         Page_Table[J].Page_Flag=0;
         Page_Table[J].MainBlock_ID=NULL;
         goto start;
         }
      }
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -