• 03.操作系统内存管理


    1.存储管理

      1.确保足够内存
      2.回收其他程序可以用
      3.确保剩余的内存可以取出一段内存使用
    
    • 1
    • 2
    • 3

    2.单一连续分配(单用户,单进程使用)

       1.系统区(系统使用)
       2.用户区(用户使用)
    
    • 1
    • 2

    3.固定分区分配

      每个分区只给一个进程使用
    
    • 1

    4.动态分区分配

       1.空闲表数据结构
          0没有使用1已经使用
       2.空闲链数据结构 双向链表
          连续的空间就当成一个节点
       3.动态分区分配算法
           1.首次适应算法ff(循环适应算法是他的升级,由上次的尾部开始搜索)
               从首部开始,找到空闲大小大于的的空间(但首部堆积)
           2.最佳适应算法bf(找到最合适的内存大小)
              会避免大材小用,对表从小到大排序
           3.快速适应算法qf 
              要几个空闲表保存不同容量的区域
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.内存回收的过程

        1.空闲区位于回收区上面 -->扩大空闲区
        2.空闲区位于回收区在下面-->合并两个区作为一个节点
        3.空闲区1 回收区 空闲区2-->合并3个节点 ,第一个区地址为这个节点地址
        4. .... 空闲区  ...  (已经满了)  -->插入空闲区链表节点
    
    • 1
    • 2
    • 3
    • 4

    6.段页式存储管理(管理进程的存储空间)

    1.页式存储管理(字块[物理上]==页面[逻辑上] 相同大小)
           1.页面过大难以分配,过小会产生碎片(等比例划分)
           2.页面大小 512B-8K
           3.页表是物理位置与逻辑的位置的表 ,页面 字块
           4.多级页表 分子表
       2.段式存储管理(非等分来分)
            1.段号+基址(开始地址)+段长
       3.区分
               页表是一维的,段是二维的
               页是物理单位.段是逻辑单位
               页是由硬件决定的,段可动态变化
               分页提高内存利用率,分段是根据用户需求的(可视化,可管理)
       4.段页式存储管理(综合以上优点)(多个页面对应一个段)
            段号+段内页号+页内地址   +  段表 +页表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    7.虚拟内存(游戏内存大而实际内存小,却可以运行)(暂时放到磁盘里,需要放在内存中)

      速度接近内存 成本接近辅存
    
    • 1

    8.程序的局部性原理(只能在局部访问和存取数据)

    9.虚拟内存的置换算法

      1.先进先出
      2.最不经常使用算法
      3.最近最少使用算法
      4.主存(内存)替换的时机(缺页的时候)
    
    • 1
    • 2
    • 3
    • 4

    10.buddy(伙伴)内存管理算法

    1.基于2进制 效率高
    2.处理内存(页)外碎片(没有分配出去,大小无法分配给进程的内存)
              页内碎片(分配出去了,相当于没有被充分利用的东西)
    3.内存分配原则 向上取整为2的幂的大小(申请更大的内存,就减少页外碎片)
       70k-->128k
       129k-->256k
    4.伙伴 两个相邻就是
    5.管理流程
      分配: 100k
       1.100取二幂 128k  如没有128k的内存
       2.找到适合大小的内存块
       3.大小适合,如 (其他的他的幂2不满足大小)1m的满足 则拆分这个内存块,到足够大  如128k
      回收: 如上的逆过程
       1.判断内存伙伴在空闲链表
       2.  伙伴在链表上 合并 256-->512k-->1M
       3.插入空闲链表
    6.缺点内存外碎片变为内存内碎片
       优点 提升了内存空间管理
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    11.swap交换空间(磁盘的一个分区)(内存满用这个)

     1.作用
           冷启动内存依赖(不使用的内存放在这)
           系统睡眠依赖
           大进程空间依赖
     2.swap空间与虚拟内存区别
        物理内存方面     进程内存方面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    关于广域网与局域网介绍及数据交换
    DC综合基本概念:set_compile_directives
    知识图谱:推理【单跳查询(1-hop)、路径查询(2-hop、3-hop)、联合查询(conjunctive query)】
    吃瓜教程2|线性模型
    C#与C++数据类型的相互转换。 C#使用非托管的dll,如何封送类,结构体、联合体,不同类型的数组、以及封送回调方法?
    Linux下安装开源杀毒软件ClamAV对服务器进行查杀
    英雄算法7月19号
    iOS全埋点解决方案-控件点击事件
    【翻译】Seastar 教程(三)
    mac M2芯片在使用Android studio 编译问题bad cpu type in executable android
  • 原文地址:https://blog.csdn.net/weixin_47039303/article/details/126089089