zoukankan      html  css  js  c++  java
  • 操作系统笔记------存储管理(1)

    程序的装入

    虚拟技术

    逻辑地址(相对地址,虚地址):用户程序经过汇编或编译后形成目标代码;
    目标代码采用相对地址形式:首地址为0;其余指令中地址以相对于首地址的偏移为地址;
    物理地址(绝对地址,实地址):内存中存储单元的地址,可直接寻址。
    不能用逻辑地址在内存中读取信息。

    地址重定位(地址映射)

    为了保证CPU执行指令时可正确访问存储单元,需将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。

    绝对装入方式

    编程时,直接确定内存位置,但是不灵活,不支持多道程序设计技术。这种装入方式导致程序在内存中的位置是固定的,一旦指定的位置被占用,程序就无法运行。内存利用率不高。

    可重定位装入方式

    编程时使用逻辑地址,运行时使用物理地址;装入时,进行地址重定位;特点是灵活,支持多道程序设计技术。


    在程序装入时,对目标程序中的指令和数据地址进行修改(重定位的过程),这种重定位的过程在装入一次完成,之后不再改变程序在内存中的位置(静态重定位)。
    静态地址重定位:当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换。一般在装入内存时由软件完成

    动态运行时装入方式

    编程时,使用逻辑地址,运行时使用物理地址;运行时进行地址重定位;特点是灵活;支持多道程序设计技术。 可重定位装入方式虽然可以将进程装载到内存的任何一个地方,但是在实际的运行中却不能进行位置的移动,一旦移动就必须重新对其进行重定位,动态运行时装入保证了运行时程序在内存中的移动,其将重定位的时间细化到了程序中每一条指令的运行时。

    动态地址重定位:在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射。一般为了提高效率,此工作由硬件地址映射机制来完成。硬件支持,软硬件结合完成),硬件上需要一对寄存器的支持。

    在运行的时候再逐条的进行地址的重定位。

    程序的链接

    静态链接

    编程时,链接所有模块;

    装入时动态链接

    装入时,链接所有模块;

    运行时动态链接

    运行时,根据需要链接模块;

    内存连续分配

    连续分配方式:为程序分配一段连续存储
    空间。
    离散分配方式:为程序分配若干段连续的
    存储空间。

    单一连续分配

    内存分为两个区域:一个供操作系统使用,一个供用户使用,在一段时间内,只有一个用户进
    程在内存


    三种典型内存布局:

    设置基址寄存器、限界寄存器来控制访问区间。

    固定分区分配

    OS初始化阶段,将用户区划分为若干固定大小的内存区域(分区);每个分区可放一个程序运行;一个分区内的程序执行结束,可调入另一个程序执行;划分为几个分区,则允许几个程序同时在内存运行;分区大小和位置可不同;

    分区说明表用于管理内存中的空闲区域,实现简单,但是“内零头”严重

    内零头:分配给进程,而进程未用到的内存部分。
    外零头:未分配给进程,但因为太小而无进程能用。

    动态分区分配

    OS初始化阶段,将用户区划分为一个大的空白分区;每个程序运行时,划分出一个大小合适的分区;程序执行结束,其所在的分区撤消;(按连续分配的方式,根据程序的大小分配内存空间)

    空闲分区表

    空闲分区链


    开始和末尾都含有状态位,表示上一个或者下一个区域是否被分配。

    分区分配算法

    首次适应算法

    地址递增顺序排列空闲分区链;分配内存时,总是从低地址端开始扫描空闲区;找到的第一个大小合适的分区,就分割分配;否则失败。
    特点:高址端有大空闲区概率大;低址端迅速被划分,碎片出现速度快;

    循环首次适应算法

    地址递增顺序排列空闲分区链;设置当前指针;分配内存时,从指针所指位置开始扫描空闲区;找到的第一个大小合适的分区,就分割分配;否则失败。这里如果访问到了链尾区域,就把指针指向链头再寻找。
    相比与首次适应算法,每次开始寻找的初始位置由链头变成了上次访问的位置,循环遍历直至找到符合条件的空闲区。
    特点:碎片分布均匀;高址端有大空闲区概率小;

    最佳适应算法

    大小递增顺序排列空闲分区链;分配内存时,从链首开始扫描空闲区;找到的第一个大小合适的分区(较小的区域),就分割分配;否则失败。
    特点:碎片迅速出现;“最佳” 匹配;

    最坏适应算法

    大小递减顺序排列空闲分区链;分配内存时,总是分配链首空闲区(较大的区域);否则失败。
    特点:碎片出现最慢(分割后剩下的分区是最大的);“最坏” 匹配;

    分区回收算法

    “碎片”问题

    经过一段时间的分配回收后,内存中存在很多很
    小的空闲块。它们每一个都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片造成存储资源的浪费。

    可重定位分区分配

    采用动态分区分配方式;并且引入“紧凑”机制,合并小的碎片空闲区;使用动态地址重定位;

  • 相关阅读:
    扫描线算法
    [Baltic 2001]Mars Maps
    Lost Cow
    李超线段树
    多种方法求解Pku3468 A Simple Problem with Integers
    陈老师的福利
    leetcode 673. 最长递增子序列的个数
    #10043.「一本通 2.2 例 1」剪花布条
    PTA7-1
    6-1 实验三哈夫曼树 (15分)
  • 原文地址:https://www.cnblogs.com/yanzs/p/13788255.html
Copyright © 2011-2022 走看看