精华内容
下载资源
问答
  • 分页式地址转换
    2021-05-20 11:40:25

    专业资料

    实验二 设计一个分页内存管理的地址转换器

    班级:14级2班 姓名:侯XX 学号:201442060**

    实验目的

    用C/C++/JAVA实现分页内存管理中的逻辑地址转换成物理地址的过程。

    二、实验内容

    1)输入

    随机输入某页式系统的页面大小、页表以及逻辑地址。

    2)输出:通过设计的地址转换器输出以下内容。

    如果逻辑地址合法,请输出其相应的逻辑地址。

    反之,输出警告“越界访问”

    实验示例

    如:页表如下。

    输入:页面大小1024byte、逻辑地址3100byte、页表如下。

    输出: 其逻辑地址为7196byte

    页帧号 页

    页帧号

    页 号

    80

    8

    0

    4594730221

    4

    5

    9

    4

    7

    3

    0

    2

    2

    1

    输入:逻辑地址20000byte

    输出:越界访问

    实验原理

    页式管理系统中逻辑地址向物理地址的转换过程如下:

    1)计算出逻辑地址在逻辑空间的页号p和页内位移d。

    2)查看页号是否合法,若合法,则找出其在内存中存放的页帧号f。

    3)根据页帧和页内位移计算出物理地址.物理地址=f*页帧大小+d

    五、实验代码

    #include

    #include

    #define MAX 100

    typedef struct

    {

    int p;

    int f;

    }Page;

    int main()

    { int page_size;

    int logic_adress;

    int physical_adress;

    int d;

    int i,j,p;

    Page P[MAX];

    printf("请输入页中页号个数:\n");

    scanf("%d",&j);

    printf("请输入页表:\n");

    printf("页号 叶帧号\n");

    for(i=0;i

    {

    scanf("%d %d",&P[i].p,&P[i].f);

    }

    printf("请按顺序输入页面大小和逻辑地址:(单位:byte)\n");

    scanf("%d\t%d",&page_size,&logic_adress);

    d=logic_adress%page_size;

    p=logic_adress/page_size;

    if(p>j)

    {

    printf("越界访问!");

    }

    else

    {

    physical_adress=P[p].f*page_size+d;

    printf("物理地址为:(单位:byte)\n");

    printf("%d\n", physical_adress);

    }

    return 0;

    }

    ???果截?

    ?入 ?面大小 1024,??地址3100的?果截?:

    ?入 ?面大小1024,??地址20000的?果截?:

    更多相关内容
  • 4、扩充页表,变成请求的二维页表(增加存在位等)完成地址转换。 5、输入分配给本作业的块数,模拟作业执行的逻辑地址转换成页面调度次序; 6、分别采用OPT、FIFO、LRU置换算法,利用堆栈结构完成页面置换;记录...
  • 操作系中分页式管理总的逻辑地址到物理地址的映射转换算法 C语言
  • 在第1部分实验基础上实现进程的分页式内存分配和地址转换过程,并进一步实现请求分页式存储分配和地址转换过程。页面置换算法至少应实现先进先出(FIFO)、最近最久未使用(LRU)等算法。
  • 操作系统实验(四):c实现分页式存储管理地址转换和缺页中断

    一、【实验目的】
    ①掌握分页式存储管理地址转换和缺页中断。
    ②理解虚拟存储器概念。
    二、【实验内容】
    1.模拟分页式存储管理中硬件的地址转换和产生缺页中断
    分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存。
    作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式“绝对地址=块号×块长+单元号”计算出欲访问的主存单元地址。如果块长为2的幕次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
    2.用先进先出(FIFO)页面调度算法处理缺页中断
    在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断事件。如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要修改页表中对应页的标志。
    FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组来
    表示该作业已在主存的页面。假定作业被选中时,把开始的m个页面装入主存,则数组的元素可定为m个。
    三、【实验步骤】
    数据结构

    struct pageTable//页表信息结构体
    {
    int cunzai;//页标志,1表示该页已在内存,0表示该页不在内存
    long block;//块号
    long weizhi;//在磁盘上的位置
    int gengxin;//更新标志
    }pageList[PAGENUM];
    define PAGENUM 100//定义页数大小为100
    define BLOCKSIZE 128//定义块大小为128
    define BLOCKNUM 4//定义块数量为4
    P[BLOCKNUM];//假设内存中最多允许BLOCKNUM个页面

    实验代码

    #include <stdio.h>
    #include <string.h>
    
    #define PAGENUM 100//页大小为100 
    #define BLOCKSIZE 128//块大小为128 
    #define BLOCKNUM 4//块数量为4 
    
    struct PageTable//页表信息结构体
    {
     int cunzai;//页标志,1表示该页已在内存,0表示该页不在内存
     long block;//块号
     long weizhi;//在磁盘上的位置
     int gengxin;//更新标志
    }pageList[PAGENUM];
    long po;//队列标记
    long P[BLOCKNUM];//假设内存中最多允许BLOCKNUM个页面
    void InitVirtual()//内存空间初始化。
    {
     memset(pageList, 0, sizeof(pageList));//内存空间初始化
     /*分页式虚拟存储系统初始化*/
     pageList[0].cunzai = 1;
     pageList[0].block = 5;
     pageList[0].weizhi = 011;
     pageList[1].cunzai = 1;
     pageList[1].block = 8;
     pageList[1].weizhi = 012;
     pageList[2].cunzai = 1;
     pageList[2].block = 9;
     pageList[2].weizhi = 013;
     pageList[3].cunzai = 1;
     pageList[3].block = 1;
     pageList[3].weizhi = 021;
    }
    void AddTrans()
    {//模拟分页式存储管理中硬件的地址转换和产生缺页中断过程
     int stop = 0;
     long p, q;//p为页号,q为页偏移 
     char s[128];
     while(!stop)
     {
      printf("请输入指令的页号和业内偏移:\n");
      printf("注意:若想退出请输入“exit”\n");
      if(scanf("%ld%ld", &p, &q) !=2 )
      {
       scanf("%s", &s);
       if(strcmp(s, "exit") == 0)
       {
        stop = 1;//如果输入的为“exit”那么就退出,进入重选页面
       }
      }
      else
      {
       if(pageList[p].cunzai)//如果该页cunzai标志位为1,说明该页在主存中
       {
        printf("绝对地址=%ld\n", pageList[p].block * BLOCKSIZE + q);//计算出绝对地址,绝对地址=块号*块长(默认128)+单元号
       } 
       else
       {
        printf("*该页%ld不在页表中,产生缺页中断\n", p);//如果该页cunzai标志位为0,表示该页不在主存中,则产生了一次缺页中断
       }
      }
     }
    }
    
    void InitFifo()
    {
    //以下部分为用先进先出(FIFO)页面调度算法处理缺页中断的初始化,其中也包含了对于当前的存储期内容的初始化
     po = 0;
     P[0] = 0;
     P[1] = 1;
     P[2] = 2;
     P[3] = 3;//对内存中的4个页面初始化并使目前排在第一位的为0
     memset(pageList, 0, sizeof(pageList));//内存空间初始化
     pageList[0].cunzai = 1;
     pageList[0].block = 5;
     pageList[0].weizhi = 011;
     pageList[1].cunzai = 1;
     pageList[1].block = 8;
     pageList[1].weizhi = 012;
     pageList[2].cunzai = 1;
     pageList[2].block = 9;
     pageList[2].weizhi = 013;
     pageList[3].cunzai = 1;
     pageList[3].block = 1;
     pageList[3].weizhi = 021;
    }
    
    void Fifo()
    {
     long p = 0;
     long q = 0;
     long i = 0;
     char s[100];
     int stop = 0;
     while(!stop)
     {
      printf("当前数组P的值为:\n");
      for(i = 0; i < BLOCKNUM; i++)
      {//循环输出当前数组的数值,即当前在内存中的页面
       printf("P[%ld]=%ld\n", i, P[i]);
      }
      printf("请输入指令的页号、业内偏移、输入y或n是否为内存指令:\n");
      printf("注意:若想退出请输入“exit”\n");
      if(scanf("%ld%ld", &p, &q) != 2)
      {
       scanf("%s", &s);
       if(strcmp(s, "exit") == 0)
       {
        stop = 1;//如果输入为"exit"那么就退出,进入重选页面
       }
      }
      else
      {
       scanf("%s", &s);
       if(pageList[p].cunzai)
       {//如果该页cunzai标志位为1,说明该页在主存中
        printf("绝对地址=%ld\n", pageList[p].block * BLOCKSIZE + q);//计算绝对地址,绝对地址=块号×块长(128)+单元号
        if(s[0] == 'Y' || s[0] == 'y')
        {//内存指令
         pageList[p].gengxin = 1;//修改标志为1
        }
       }
       else//如果所输入的页不在内存中
       {
        if(pageList[P[po]].gengxin)//当前页面被更新过,把更新后的内容写回外存
        {
         pageList[P[po]].gengxin = 0;//将标志位复0
        }
        pageList[P[po]].cunzai = 0;//将cunzai标志位置0,表示当前页面已被置换出去
        printf("被置换出去的页面为%ld\n", P[po]);//显示根据FIFO算法被置换出去的页面
        printf("被调入的页面为%ld\n", p);//显示根据FTFO算法被调入的页面
        pageList[p].block = pageList[P[po]].block;//块号相同
        pageList[p].cunzai = 1;//将当前页面的标记置为1,表示已在主存中
        P[po] = p;//保存当前页面所在的位置
        po = (po+1) % BLOCKNUM;
       }
      }
     } 
    }
    
    void select()
    {//选择哪种方法进行
     long se;
     char s[128];
     while(1)
     {
      printf("请选择题号(1/2):\n");
      if(scanf("%ld", &se) !=1 )
      {
       scanf("%s", &s);
       if(strcmp(s, "exit") == 0)
       {//如果输入为exit则退出整个程序
        return;
       }
      }
      else
      {
       if(se == 1)
       {//如果se=1说明选择的是模拟分页式存储管理中硬件的地址转换和产生缺页中断
        InitVirtual();//初始化z
        AddTrans();//进行模拟
       }
       if(se == 2)
       {//如果se=2说明选择的是FFO算法来实现页面的置换
        InitFifo();//初始化
        Fifo();//进行模拟
       }
      }
     }
    }
    
    int main()
    {
     select();//选择题号
     return 0;
    }
    

    实验结果自行运行~

    展开全文
  • 请求分页式存储管理的地址转换过程实现.pdf请求分页式存储管理的地址转换过程实现.pdf请求分页式存储管理的地址转换过程实现.pdf请求分页式存储管理的地址转换过程实现.pdf请求分页式存储管理的地址转换过程实现.pdf...
  • 请求分页式存储管理的地址转换过程实现.docx请求分页式存储管理的地址转换过程实现.docx请求分页式存储管理的地址转换过程实现.docx请求分页式存储管理的地址转换过程实现.docx请求分页式存储管理的地址转换过程实现...
  • 请求分页式存储管理的地址转换过程实现
  • 4、扩充页表,变成请求的二维页表(增加存在位等)完成地址转换。 5、输入分配给本作业的块数,模拟作业执行的逻辑地址转换成页面调度次序; 6、分别采用OPT、FIFO、LRU置换算法,利用堆栈结构完成页面置换;记录...
  • 模拟分页式存储管理中硬件的地址转换和产生缺页中断.------很好用的程序和源代码
  • 结合操作系统(汤子瀛版)和王道版操作系统,对内存管理中,分页存储管理方式的地址转换进行整理总结(即根据逻辑地址寻找物理地址) 一、基本概念 1.逻辑地址:(工具书中的解释) (1)在有地址变换功能的...

    结合操作系统(汤子瀛版)和王道版操作系统,对内存管理中,分页存储管理方式的地址转换进行整理总结(即根据逻辑地址寻找物理地址)

    一、基本概念

    1.逻辑地址:(工具书中的解释)

    (1)在有地址变换功能的计算机中,访问指令给出的地址 (操作数) 叫逻辑地址,也叫相对地址

    (2)把用户程序中使用的地址称为相对地址即逻辑地址。

    :逻辑地址包含页号和页内偏移两部分,通过页内偏移的位数可以知道页面的大小。(在题目中,有时会给出十进制的数)

    2.物理地址:在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址

    :物理地址包含页帧号和页内偏移两部分,根据逻辑地址查找页表即可找到在内存中的页帧号,物理地址中的页内偏移同逻辑地址中的相同。

    3.页、页帧(页框)、块

    分页的思想:把主存空间分为大小相等且固定的块,块相对较小,作为主存的基本单位。进程中的块称为页,内存中称为页帧(页框),外存中直接称为块。

    4.页表、页表项

    (1)为了方便找到每个页号在内存中对应的物理块,系统为每一个进程建立一张页表。 注意是为每个进程建立一张页表。

    (2)页表中的每一项叫做页表项。

    注:根据页号的位数可以算出页表项数,根据页表项的大小和页表项数可以算出页表的大小。

    例:若页号有20位,页表项大小为4B,则页表大小为2的20次方*4B=4MB。题目中页表项大小一般会给出。

    注:注意区分页表长度和页表项长度

    (1)页表长度:页表中共有多少页

    (2)页表项长度:在页表中页地址占多大的存储空间

    5.页表寄存器

    在系统中通常设置一个页表寄存器,存放页表在内存中的始址F和页表长度M。进程未执行时,页表的始址和长度存放在进程控制块中,当进程执行时,才将页表始址和长度存入页表寄存器。

    二、地址转换(根据逻辑地址求出在内存中的物理地址)

    1.根据逻辑地址可找出页号

    (1 )若逻辑地址由二进制表示,根据页号位数(或逻辑地址位数-页内偏移位数)即可确定。

    (2)若逻辑地址由十进制表示,需要根据页号位数算出页号

    例:若逻辑地址为4000,当页内偏移为10位时,页号为4000/1k=3,当页内偏移为11位时,页号为4000/2k=1。

    2.判断是否越界

    比较页号和页表寄存器中的页表长度,若页号不在查找的页表中,越界中断。

    3.在页表中找出页号对应的物理块号

    页号对应的页表项地址=页号*页表项长度+页表起始地址

    4.求出在内存中的物理地址

    (1)在页表中找到页号对应的块号

    (2)块内偏移=页内偏移

    三、题目求解

    1.页面大小

    通过页内偏移的位数可以知道页面的大小

    2.页表大小

    页表长度*页表项大小

    3.根据十进制的逻辑地址求出页号在页表中的物理地址

    (1)页号的求法见上面(二、1)

    (2)页号求出后加上页表起始地址即可

    4.求物理地址

    参考二(地址转换)

    5.未完待续。。。

    展开全文
  • 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对...通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。
  • 创建请求页表,通过编程模拟缺页中断和地址变换,实现请求调页功能和页面置换功能。
  • 模拟分页式虚拟存储管理中地址转换和缺页中断[借鉴].pdf
  • 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及用先进先出(FIFO)页面调度算法处理缺页中断。 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。(题目四) 包含详细实验报告·
  • 实验四 页虚拟存储管理中地址转换和页中断 FIFO 一实验目的 深入了解页存储管理如何实现地址转换进一步认识页虚拟存储管理中如何处理缺页中断以及页面置换算法 二实验主要内容 编写程序完成页虚拟存储管理...
  • 基本分页分段的地址转换

    千次阅读 2020-05-07 17:46:12
    分页系统或分段、段页系统的地址转换 基于二进制/16进制逻辑地址转换 若给定16进制逻辑地址,先转换为二进制即可。 基于十进制逻辑地址转换 ...

    分页系统或分段、段页式系统的地址转换

    基于二进制/16进制逻辑地址的转换

    在这里插入图片描述

    若给定16进制逻辑地址,先转换为二进制即可。

    基于十进制逻辑地址的转换

    在这里插入图片描述

    展开全文
  • 模拟分页式存储管理中硬件的地址转换和产生缺页中断[文].pdf
  • 模拟分页式存储管理中硬件的地址转换和产生缺页中断。
  • // 模拟请求分页管理中地址转换和缺页中断处理 static ArrayList<page> arr = new ArrayList<page>(); //磁盘链表 static ArrayList<page> ye = new ArrayList<page>(3);//主存链表 ...
  • 存储-地址转换访问2次内存,第一次是页表,第二次是真正的物理内存。二级页表,访问3次内存两个例子的形式讲解逻辑地址到物理地址转换:(1)页系统页表: 页号: 0 1 2 3 4 5 块号: 3 5 x 4 1 2每页2KB 计算逻辑...
  • 操作系统【分页系统 习题(逻辑地址、物理地址 转换)】
  • 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断 选择页面调度算法处理缺页中断.doc
  • 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断选择页面调度算法处理缺页中断.wps
  • 当对读入的逻辑地址,划分为页号、页内 地址后,通过页表发现访问的页不在内存,转入“缺页中断处理” 程序去处理。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include...
  • 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。 二. 实验目的 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的...
  • 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。该程序是模拟存储管理的地址转换代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,671
精华内容 17,468
关键字:

分页式地址转换