离散分配

分页(Paging),分段,段页式

一、分页

 
一个进程的物理地址可以是非连续的;
 
将物理内存分成固定大小的块,称为块(frame);

将逻辑内存分为同样大小的块,称为页(page);

将连续的页分配并存放到不连续的若干内存块中;

建立页表,记录每一页对应的存储块的块号,将逻辑地址转换为物理地址。

将产生内部碎片

 
 
地址转换方法
 
将逻辑地址转换为虚拟地址:
 
CPU生成的地址分成以下两部分:
1.页号(p):页号作为页表中的索引。页表中包含每页所在物理内存的基地址。
2.页偏移(d):与页的基地址组合就形成了物理地址,就可送交物理单元。
 
逻辑内存和物理内存的分页模型:
 
 
例如:
 
 
 
将逻辑地址转换为物理地址需要寄存器来支持,地址转换体系结构如下:
 
 
 

地址变换机构如下:

 
 
 

假定一页大小为1K(1024B),考察逻辑地址2056,地址变换过程工作原理如下所示:

 
 
 

转换过程分析:逻辑地址机内表示(以16位为例)

无需计算,只需用块号代替高位的页号,就可立即得到对应的物理地址
 
 
例如:
 
 
 
 
页表的实现
 
1.页表保存在内存中
2.页表基寄存器(PTBR)指向页表
3.页表长度寄存器(PTLR)指示页表的大小
4.在这种方式下,每次数据/指令的访问需要访问两次内存。一次访问页表,另一次访问数据/指令
5.两次内存访问问题可以用特别的快速查找硬件缓冲(TLB,称为快表或联想存储器或关联内存或翻译后备缓冲器)来解决。
 
带TLB的分页硬件原理如下:
 
 
 
 
页表结构:
①层次化分页
②Hash页表
 
①层次化分页
1.将逻辑地址空间分成多个页表
2.一种简单的方法是两层分页法
 
示意图如下:
 
 
 
两层分页方法实例:
逻辑地址(32位机器,页大小为4K)分成以下两部分:页号(20位),页偏移(12位)
页表又分成页,所以页号又进一步分成:10位页号,10位页偏移
因此,逻辑地址表示如下:
 
 
 
②Hash页表
 
1.处理超过32位地址空间的常用方法是使用Hash页表。
2.逻辑地址中的逻辑页号被放入hash页表中。hash页表的每一项都包括一个链接组的元素,这些元素hash成同一位置(碰撞)。
3.逻辑页号与链表中的每 一个元素的第一个域相比较。如果匹配,那么对应的块号就用来形成位置地址。如果不匹配,那么就对链表中的下一个域进行页码比较。
 
Hash页表实例:
 
 
 
 
二、分段
 
 
支持用户观点的内存管理方法
程序是若干段的集合:主程序,子程序,函数,方法,对象,局部变量,全局变量,堆栈,符号表,数组
 
用户角度的程序:
 
 
 
段的逻辑视角:
 
 
 
段的体系结构:
 
逻辑地址由两个元素组成:<段号,偏移>
 
段表:将二维的用户定义地址映射为一维物理地址。段表的每个条目都有段基地址和段界限。
基地址:包含段的起始地址
界限:指定段的长度
段表基地址寄存器(STBR)指向内存中的段表的位置
段表长度寄存器(STLR)指示程序所用的段的个数
段号S小于STLR的时候才是有效的
 
段硬件实现:
 
 
 
 
分段实例:
 

三、交换

进程可以暂时从内存中交换出来到备份存储上,当需要再执行时再调回到内存中。
备份存储 —— 通常是快速磁盘。这必须足够大,以便容纳所有用户的内存映象拷贝,它也必须提供对这些内存映象的直接访问。
 
换入、换出 - 是交换策略的一个变种,被用于基于优先权的调度算法中。如果一个更高优先级进程来了且需要服务,内存管理可以交换出低优先级的进程,以便可以装入和执行更高优先级的进程。当更高优先级进程执行完后,低优先级进程可以交换回内存以继续执行。
交换时间的主要部分是转移时间。总的转移时间与所交换的内存空间直接成正比。
交换的修改版本在许多系统中被采用。(如UNIX, Linux及Windows)
 
 
交换示意图:
 

OS存储器管理(二)的更多相关文章

  1. OS存储器管理(一)

    存储器的层次: 分为寄存器.主存(内存)和 辅存(外存)三个层次. 主存:高速缓冲存储器.主存储器.磁盘缓冲存储器, 主存又称为可执行存储器: 辅存:固定磁盘存储器.可移动的外部存储器: 其可长期保存 ...

  2. OS存储器管理(三) 虚拟存储器

    基本概念与实现 1)局部性原理 在一段时间内,运行的作业程序仅访问(涉及到)一部分作业代码,即不会涉及整个地址空间.即在一段时间间隔内,仅装入一部分代码,作业照样能正常运行 2)虚拟存储器的引入 作业 ...

  3. Intel 80386 微处理器的存储器管理

    一.存储器的管理       存储器的管理是一种硬件机制,微处理器在总线地址上对物理存储器进行寻址.但是,为了给程序提供比物理存储器容量更大的空间,就引入了虚拟存储器的概念,它在外存(比如磁盘)的支持 ...

  4. MMU——存储器管理单元

    更多文档参见:http://pan.baidu.com/s/1qW0hjwo MMU,全称Memory Manage Unit, 中文名——存储器管理单元. 许多年以前,当人们还在使用DOS或是更古老 ...

  5. linux基础-第十三单元 硬盘分区、格式化及文件系统的管理二

    第十三单元 硬盘分区.格式化及文件系统的管理二 文件系统的挂载与卸载 什么是挂载 mount命令的功能 mount命令的用法举例 umount命令的功能 umount命令的用法举例 利用/etc/fs ...

  6. 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  7. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  8. Django之学员管理二

    Django之学员管理二 学生表的一对多的增删改查 views.py def students(request): #select students.sid,students.name,classes ...

  9. Linux命令-磁盘管理(二)

    Linux命令-磁盘管理(二) Linux mmount命令 Linux mmount命令用于挂入MS-DOS文件系统. mmount为mtools工具指令,可根据[mount参数]中的设置,将磁盘内 ...

随机推荐

  1. 烂泥:学习ssh之ssh密钥随身携带

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 在上一篇文章<烂泥:学习ssh之ssh无密码登陆>中,我们讲解了如何使用ssh密钥,免密码登陆服务器. 这篇文章我们再来讲解,如何把已经生成的 ...

  2. C语言中链表任意位置怎么插入数据?然后写入文件中?

    链表插入示意图:(图是个人所画)因为链表指针指来指去,难以理解,所以辅助画图更加方便. 插入某个学号后面图: 定义的结构体: struct student { ]; //学生学号 ]; //学生姓名 ...

  3. Linux 下从头再走 GTK+-3.0 (五)

    实践中表明,纯粹利用 gtk 函数来创建 UI 是很繁琐的事,需要编写很多代码.怎样才能快速统一的建立 UI 布局呢? 可喜的是 GTK 提供了一个 GtkBuilder 用于快速创建界面.它读取一个 ...

  4. Linux 下从头再走 GTK+-3.0 (二)

    仅仅创建一个空白窗口是不够的,下面我们为创建的窗口添加一个按钮. 以 Hello,World!为例. 首先创建一个源文件:example2.c 内容如下. #include <gtk/gtk.h ...

  5. Django初体验(一):自定义表单提交

    注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义表单.对于自定义表单Post方式提交往往会带来由CSRF(跨站请求伪造)产生的错误"CS ...

  6. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  7. AC日记——紧急措施 openjudge 1.7 22

    22:紧急措施 总时间限制:  1000ms 内存限制:  65536kB 描述 近日,一些热门网站遭受黑客入侵,这些网站的账号.密码及email的数据惨遭泄露.你在这些网站上注册若干账号(使用的用户 ...

  8. .Net工程详解及项目版本管理

    前言 写这篇文章的目地是为了让更多的小伙伴对VS生成的工程有一个清晰的认识.在开发过程中,为了赶进度,并不是每个人都有学习的时间. 但如果上层项目管理人员对这些工程目录不熟悉的话,把VS编译的中间文件 ...

  9. for循环与for循环嵌套

    今天温习了下分支语句跟for循环,主要讲解了for循环嵌套,这里开始有点迷糊了,整理下思路在做练习 for循环嵌套用我自己的大白话来说就是一个外圈的for程序里面一个套着一个小的for程序,如果在范围 ...

  10. Maven系列一pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...