博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《现代操作系统》学习笔记之存储管理之地址空间
阅读量:6801 次
发布时间:2019-06-26

本文共 875 字,大约阅读时间需要 2 分钟。

内存定位技术

  内存定位有三种方式:绝对地址、静态重定位和动态重定位。

  绝对地址:

  使用绝对地址是最简单的定位方式。例如在一个程序中,执行JMP 28就会跳转到内存的28号存储单元。无论程序在内存中的什么位置都是如此。显然这种定位方式不允许内存中同时存在两个程序,否则一个程序的程序计数器很可能会跳转到另一个程序的空间中。

  静态重定位:

  静态重定位的处理方法为在加载程序到内存中时,将程序中所有的地址都加上在内存中的起始地址。比如一个程序被加载到从1000号开始的内存空间,而且程序中有一条指令JMP 28,那么程序被加载入内存后这条指令会变成 JMP 1028。静态重定位的难点在于区分程序中哪些值是常量,哪些值是地址。

  动态重定位:

  使用动态重定位的cpu有两个特殊的寄存器:基址寄存器和界限寄存器。当一个进程运行时,程序的起始地址被装载到基址寄存器中,程序的长度被装载到界限寄存器中。当程序要进行内存操作时,cpu会首先将指令中的地址加上基址寄存器中的地址,再把地址送到内存总线。此外,cpu还会检查地址是否大于界限寄存器中的值。如果访问的地址超出了界限则会出错并停止访问。

 

交换技术

  交换就是把暂时不用的进程放到外存上,需要时再读入内存。

  有些进程的数据段可以增长。因此在把进程移入内存时通常会为它分配一些额外的空间。

 

空闲内存管理

  位图法:

  把内存空间划分成大小相等的块,用一个位图来记录这些块的使用情况。某一位为0代表对应的块空闲,1代表被使用。

  链表法:

  使用一个双向链表记录内存的使用情况。除了指向前后节点的指针外,链表的节点中还包含三个字段:标志位(标志内存是否空闲)、内存段的起始地址,内存段的长度。

  加载一个进程时,在链表中找到一个大于或等于进程大小的空闲段,修改空闲段节点,并插入进程段节点。

  进程被移出内存时,删除进程段节点,根据具体情况增加或合并空闲段节点。

                                                                                                                                                                                                                                                                                                                                                        

转载于:https://www.cnblogs.com/scrutable/p/6229150.html

你可能感兴趣的文章
heap&stack 区别
查看>>
hadoop hive安装手记(转)
查看>>
kinect新知
查看>>
堆实例
查看>>
ASP.NET中各个后缀名的含义
查看>>
always和always@(*)
查看>>
Android 中压力测试工具Monkey的用法(转)
查看>>
NYOJ-61 传纸条(一)
查看>>
乱码问题总结
查看>>
Raspberry pi raspbain系统下使用vim
查看>>
进程通信之共享内存
查看>>
通用单例模式
查看>>
Sharepoint学习笔记—习题系列--70-576习题解析 -(Q99-Q101)
查看>>
使用js 文件参数 以及IHttpModule实现服务验证asp.net 版的初步实现
查看>>
JavaScript操作Cookie
查看>>
转oracle 学习 - 表空间
查看>>
百度地图显示多个标注点
查看>>
robots.txt的介绍和写作
查看>>
11个实用jQuery日历插件
查看>>
MySQL slave状态之Seconds_Behind_Master
查看>>