zoukankan      html  css  js  c++  java
  • 存储器管理1

    第四章 存储器管理

    4.1.1 多层结构的存储器系统

    1.存储器的多层结构:存储层次至少具有三级(CPU寄存器,主存,辅存),高档计算机,根据具体功能细分为寄存器,高速缓存,主存储器,磁盘缓存,固定磁盘,可移动存储介质。

     

    1. 可执行存储器(寄存器和主存储器)

    4.1.2主存储器与寄存器

    1. 主存储器(内存或主存,用于保存进程运行时的程序和数据,也称可执行存储器)
    2. 寄存器(对寄存器的访问速度最快)

     

    4.2  程序的装入和链接

    用户程序运行的步骤:.c->.obj->.exe

     

    4.2.1  程序的装入

    方式

    时间

    外存

    内存

    特点

    实现

    绝对装入

    编译

    物理

    物理

    固定

    软件

    可重定位

    装入

    逻辑

    物理

    不固定

    软件

    动态装入

    运行

    逻辑

    逻辑

    不固定、可移动

    硬件

     

    静态地址重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的项均已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故成为静态重定位。

    优点:无需硬件支持

    缺点:1)程序重定位之后就不能在内存中搬动了;2)要求程序的存储空间是连续的,不能把程序放在若干个不连续的区域中。

     

    动态地址重定位:不是在程序执行之前而是在程序执行过程中进行地址重定位。更确切的说,是在每次访问内存单元前才进行地址变换。动态重定位可使装配模块不加任何修改而装入内存,但是它需要硬件一定位寄存器的支持。

    优点:1)目标模块装入内存时无需任何修改,因而装入之后再搬迁也不会影响其正确执行,这对于存储器紧缩、解决碎片问题是极其有利的;2)一个程序由若干个相对独立的目标模块组成时,每个目标模块各装入一个存储区域,这些存储区域可以不是顺序相邻的,只要各个模块有自己对应的定位寄存器就行。

    缺点:需要硬件支持。

     

    4.2.2  程序的链接

    1.静态链接:在程序运行之前,将各目标模块和所需函数链接成完整的连续的模块。

    2.装入时动态链接:装入时进行,优点是便于对程序模块进行修改和更新,并且可以对外存中的目标模块实现共享。

    3.运行时动态链接:链接在运行时进行,除了便于对程序模块进行修改和更新,并且可以对外存中的目标模块实现共享外,还会加快程序的装入过程,提高内存利用率。

    4.3 连续分配方式存储管理

    1.单一连续分配

    只适用于单用户、单任务的操作系统,内存分为系统区和用户区,系统区OS使用,位于内存的低端,用户区用户使用,仅能存放一道作业

    优点是管理简单,开销小,缺点是资源利用率很低

    2.固定分区分配

    系统分区,每区一道作业,大小固定

     

    可以使多道程序共存于内存,但收到分区个数的限制,由于程序与分区大小不符,造成内存存储空间浪费,称为内部碎片。用户的分区大小收到分区大小的严格限制。

    1. 可变(动态)分区分配

    用户申请,动态划分分区,大小刚好满足程序需要

    分配算法:

    (1)首次适应算法:将空闲分区按照起始地址递增的次序排列,每次分配均从空闲分区表或者空闲分区链首开始顺序查找满足要求的分区。

    (2)循环首次适应算法:将空闲分区按照起始地址递增的次序排列成循环链表,每次分配均从上次分配的位置之后开始查找。会使空闲分区分布的更均匀,减小查找的开销,但是缺乏大的空闲分区。

    (3)最佳适应算法:按大小递增的次序排列,将能满足要求的最小空闲分区分配出去,会使内存区留下大量小空闲分区。

    (4)最坏适应算法:按大小递减的次序排列,将能满足要求的最大空闲分区分配出去,产生碎片几率最小,但是会使内存区缺乏大的空闲分区。

     

    4. 回收算法(E

     

    假设进程P2的起始地址为70KB,大小30KB,则空闲区上空条件为:起始地址+30=70,下空条件为:起始地址=70+30

     

    算法:

     

    ①上占下占:新增一个空区;

     

    ②上空下占:修改上空区的长度;

     

    ③上占下空:修改下空区的起始地址和长度;

     

    ④上空下空:修改上区的长度(三合一),删掉下区。

     

    5. 伙伴系统

     

    伙伴系统是对固定分区和动态分区方式的一种折衷方案。

     

    在伙伴系统中,内存块大小为2^S KBL<=S<=U2^L为可分配的最小空间,2^U KB为可分配的最大空间,通常是整个内存空间的大小。

     

    Linux内核中引入了伙伴系统算法(buddy system)。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。

     

    假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。

     

    页框块在释放时,会主动将两个连续的页框块合并为一个较大的页框块。

     

    6. 可重定位分区分配

     

    对内存空间进行紧凑。

     

    7. 对换

     

    把内存中暂时不能运行的进程或暂时不用的程序或数据,调到外存上,以便腾出足够的内存空间,再把具备运行条件的进程或进程需要的程序或数据调入内存。

     

    从逻辑上扩充内存空间。

     

    系统必须实现以下功能

     

    (1)对换空间的管理。其主要目标是提高进程换入换出的速度,经常设置在高速的磁盘,采取简单的连续分配方式。

     

    (2)进程的换入。找出就绪但是已经换出的进程。

     

    (3)进程的换出。选择处于阻塞状态并且优先级最低的进程。

     

  • 相关阅读:
    Python基础笔记:线程与进程
    Python爬虫笔记:爬取豆瓣图书TOP250单页数据
    Python爬虫笔记:爬取单个页面
    【转】WCHAR,CHAR,TCHAR的区别
    CString转换为LPSTR和LPSTR转化为CString
    关于反射调用方法的一个log
    Java框架的思考
    Java中反射性能测试
    oracle extend
    ubuntu maven环境安装配置
  • 原文地址:https://www.cnblogs.com/giaogiaogiao/p/12558039.html
Copyright © 2011-2022 走看看