zoukankan      html  css  js  c++  java
  • 内存管理理论

    实模式内存管理的概念

            当一个程序运行的时候需要把程序所需要的物理内存空间一次性全部准备好(空间不足和内存安全问题)

             1.如果程序一启动就把程序所有需要的内存空间全部分配掉那么内存空间可能会被撑爆

             2.各个程序可以访问到其他程序的内存空间,导致安全问题

             

    内存分页和LRU算法

              1.程序在运行前由内核把程序切割成一块一块,每个程序块为固定的4K大小。然后按照程序块为单位把程序加载到内存空间中而不是一次性全部加载进来

               2.把整个物理内存也要切成一块一块,每一个块成为一个内存页.每个内存页也是固定4K大小.实现程序块和内存页大小对齐.

                

                 3.内存页的加载

                   程序刚运行的时候,只是把程序分好页表记录下来,同时通知进程调度器要运行程序的执行入口在页表的位置,然后只需要在物理内存中加载入口所在的页。加载
                   完成入口页后就可以开始执行指令,在执行的过程中如果发现需要其他程序页的数据再把需要的页数据加载到物理内存,如果内存中没有空余的内存页,那么内核就会先
                   使用LRU算法把最近使用最少的内存页保存到swap分区中后再把执行程序需要的页加载到内存页中
                    

    虚拟内存地址映射

              软(操作系统)硬件(MMU)结合寻找物理地址

              程序的虚拟内存地址 》 内核映射 》 物理内存地址  

              只有内核才知道每个应用程序所在的物理内存地址,程序自己只知道自己的虚拟地址,保证了操作系统的安全性
              程序的内部是分成一个段一个段的,每个段被分成一个页一个页

              逻辑地址
                    逻辑地址 + 段的基地址 = 线性地址

               线性地址
                      线性地址 + (OS+MMU) = 物理地址

               物理地址

               

    内核启动

          BIOS芯片
              1.bootloader程序固定存放在磁盘的第一个扇区
              2.加电后把磁盘的第一个扇区程序加载到内存的固定位置
              3.BIOS芯片只知道到内存的固定位置读取bootloader的第一条指令

  • 相关阅读:
    在虚拟机安装Oracle EF步骤
    ORACLE数据库入门级及操作杂记
    软技能-代码之外的生存指南读后感
    RabbitMQ 使用demo
    RabbitMQ 应用学习随笔
    mysql 发生死锁时,解决方法
    GBase存过--工作实战
    Oracle存储过程--工作实战
    浅谈Oracle、MySQL和Gbase的使用体验(一)
    seajs学习笔记
  • 原文地址:https://www.cnblogs.com/yxh168/p/15112152.html
Copyright © 2011-2022 走看看