• 《现代操作系统》学习笔记之存储管理之地址空间


    内存定位技术

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

      绝对地址:

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

      静态重定位:

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

      动态重定位:

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

    交换技术

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

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

     

    空闲内存管理

      位图法:

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

      链表法:

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

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

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

                                                                                                                                                                                                                                                                                                                                                            

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: 北京大学软件分析课程2019,熊英飞, 03 数据流分析II
    Proj THUDBFuzz Paper Reading: 北京大学软件分析课程2019,熊英飞, 02 数据流分析I
    Proj THUDBFuzz Paper Reading: 北京大学软件分析课程2019,熊英飞, 01 intro
    Proj THUDBFuzz Paper Reading:Static Analysis-Based Approaches for Secure Software Development, 2018
    线段树-sum/max/min/区间更新
    HDU1166-ZKW树
    HDU1754-ZKW线段树
    x86/x64/x86_64/i386/ia32/ia64/amd/amd64 辨析
    Intel pin 2.14/CentOS 6 X86-64/安装
    centos6-honeyd安装&配置
  • 原文地址:https://www.cnblogs.com/scrutable/p/6229150.html
Copyright © 2020-2023  润新知