zoukankan      html  css  js  c++  java
  • 操作系统原理之内存管理(第四章第一部分)

    内存管理的⽬标:实现内存分配和回收,提高内存空间的利用率和内存的访问速度

    一、存储器的层次结构

    寄存器:在CPU内部有一组CPU寄存器,寄存器是cpu直接访问和处理的数据,是一个临时放数据的空间。

    高速缓冲区:一般CPU都会从内存取数据到寄存器,然后进行处理,但由于内存的处理速度远远低于CPU,导致CPU在处理指令时往往花费很多时间在等待内存做准备工作,于是在寄存器和主内存间添加了CPU缓存,CPU缓存比较小,但访问速度比主内存快得多,如果CPU总是操作主内存中的同一址地的数据,很容易影响CPU执行速度,此时CPU缓存就可以把从内存提取的数据暂时保存起来,如果寄存器要取内存中同一位置的数据,直接从缓存中提取,无需直接从主内存取

    缓存命中率:寄存器并不是每次数据都可以从缓存中取得数据,假如寄存器要获取的不是同一个内存地址中的数据,那寄存器就必须直接绕过缓存从内存中取数据。所以并不是每次都能从缓存中取到数据,这种现象叫做缓存的命中率。命中就直接取缓存中的数据,否则从内存中取;可见缓存命中率的高低也会影响CPU执行性能。

    交互流程:当一个CPU需要访问主存时,会先读取一部分主存数据到CPU缓存(当然如果CPU缓存中存在需要的数据就会直接从缓存获取),进而在读取CPU缓存到寄存器,当CPU需要写数据到主存时,同样会先刷新寄存器中的数据到CPU缓存,然后再把数据刷新到主内存中。

    数据存储的局部性原理:

     局部性:在⼀段较短时间内,程序的执⾏仅限于某个部分,相应地它所访问的存储空间也局限于某个区域

    分类:

    • 时间局部性:某条指令⼀旦执⾏,不久 后该指令可能再次执⾏
    • 空间局部性:⼀旦程序访问了某个单元,不久 后附近的存储单元也将被访问

    二、 程序的链接和装入

    ⾼级语⾔程序  -》   编译、链接 -》   可执⾏程序

    程序的链接:将编译后的⽬标模块装配成⼀个可执⾏程序

    • 静态链接  程序运⾏前完成链接操作(程序运⾏前,⽤链接程序将⽬标模块链接成⼀个完整的装⼊模块。)       优:运⾏速度快
      • 链接程序的任务    1、对逻辑地址进⾏修改          2、变换外部调⽤符号
    • 动态链接  程序执⾏时进⾏链接操作(可将某些⽬标模块的链接推迟到这些模块中的函数被调⽤执⾏时才进⾏)      优:节省了空间

    程序的装⼊

    • 绝对装⼊⽅式:编译时产⽣物理地址的⽬标代码
    •  可重定位装⼊⽅式 (静态重定位):编译时地址是逻辑地址,装⼊时 通过重定位转换为物理地址 ( 重定位:程序装⼊时对⽬标程序中的指令和数据地址的修改过程叫重定位
    • 动态运⾏时装⼊⽅式(动态重定位):程序执时通过重定位转换为物理地址

     物理地址=逻辑地址+程序在内存中的起始地址

    三、 连续分配存储管理方式

    连续分配方式:为一个用户程序分配一个连续的内存空间。

    连续分配方式进一步分为:单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配。

    1、单一连续分配:任何时刻主存储器最多只有⼀个作业

    2、固定分区分配:每个分区⼤⼩固定不变(各个分区大小可以相同也可以不同),每个分区可以且仅可以装⼊⼀个作业

     固定分区说明表 :由固定分区说明表可以查看哪个分区空闲,哪个分区被占用

     3、动态分区分配:

      空闲分区表: 由空闲分区表可知 哪个分区已被占,哪个分区是空闲。(分区编号、分区大小、起始地址)

      空闲分区链:

    3.1、动态分区分配内存算法:

      1、⾸次适应算法:空闲分区链以地址递增的顺序链接, 从链⾸开始查找 ,直⾄找到第⼀个满⾜要求的空闲分区, 从该分区中划出⼀块内存给进程 ,剩下的仍留在空闲链中。

     外部碎⽚:分配后留在空闲链上的。首次适应算法会产生该碎片。

     内部碎⽚:由于空闲的区域比申请的大一点点,系统就直接把多余的这一点也分配给你。

      2、循环⾸次适应算法:从上次找到的空闲分区的下⼀个空闲分区开始查找。 优点:空闲区分布均匀

      3、 最佳适应算法:空闲分区链以分区⼤⼩递增的顺序链接,从链⾸开始查找, 直⾄找到第⼀个与进程请求的空间⼤⼩ 最接近的空闲分区。

     3.2、动态分区回收内存的流程

    1)释放⼀块连续的内存区域    2)如果被释放的区域与其他空闲区相邻,则合并空闲区      3)修改空闲分区链

     

    *************************************************************************************

     

    **********************************************************************************************

     

    *****************************************************************************************

     系统区用于驻留操作系统,用户区用于分配给用户进程使用

    为了防止工作用户程序对操作系统的破坏,保证系统的安全、可靠,在操作系统中应该考虑设置存储器保护机制。在单用户、单任务操作系统中较常用的方法是设置一个基址寄存器和一个界限寄存器。

    界限寄存器:存放装入用户区程序的地址范围

    基址寄存器:存放程序在物理内存中最小地址的是基址寄存器

  • 相关阅读:
    常用256安全色
    PHP获取中英文混合字符串的字数
    windows 2012 443端口无法访问解决随记!
    SQL提取时间段内数据
    正则表达式匹配
    PclZip library能够压缩与解压缩Zip格式
    安装IIS或证书上服务提示安装程序无法复制文件 ftpsvc2.dl的解决办法
    tomcat
    版本控制gitlab
    rsync
  • 原文地址:https://www.cnblogs.com/jalja/p/11440808.html
Copyright © 2011-2022 走看看