• 操作系统学习之内存管理


    逻辑地址寻址空间(计算机有多少位)

    物理地址寻址空间:内存大小

    进程访问内存:基地址+界限地址  如果超过界限地址那么就会报异常

    程序执行三个阶段:编译阶段,加载阶段,运行阶段。

     程序可能在编译阶段就能获得物理地址,进而可以直接加载到内存执行。

    MMU:内存管理单元,实现虚拟地址(逻辑地址)到物理地址的转换。

    动态加载:程序只有需要被调用时才会被加载到内存,比如A程序需要调用B程序,但是A程序运行出错,那么B程序就不需要加载到内存了。

    动态链接库:系统库,链接到用户程序以便用户程序能过运行;动态链接库只有在程序运行时才会被加载到内存。

    共享库:实现库的兼容,因为库更新时,新库可能会导致新编译的程序(库更新之后编译程序)不兼容。

    进程进入内存有三种分配方案:首次适配,最优适配,最坏适配。

    内存分配:

    ①连续内存分配:两个进程所占用的内存之间是相连的

    操作系统将内存分成块:块与块之间的叫做外部碎片,快内部没使用或者不能使用的内存为内部碎片。

    使用连续内存分配会产生内部和外部碎片,因为在一个块内部可能有多个进程,这样会导致有一部分内存不能使用产生内部碎片

    ②非连续内存分配

    分段,分页

    分段是将内存分成多个段,将进程加载到对应段中

    分页是将内存分成大小相同的页,在同一页的程序能共享数据

    分页技术:分层,hash,倒置

    分页技术是实现逻辑地址到物理地址映射,而且物理页和虚拟页大小一样  计算公式:页码*页大小+页内偏移

    使用页表实现虚拟页码到物理页码的映射(指针)。

    分层:因为计算机内存发展成32位,64位,导致页表非常大(页是表示偏移地址,页表是表示虚拟页码到物理页码之间的映射,页表存储的就是页码)

    比如页大小位12位,使用32 位系统,页表大小位20位,可以分成10位页表,和10位页码,来表示以前20位的页码,而且因为采用了分层技术,一些用不到的逻辑地址页可以直接删除

    不使用分层需要保留逻辑地址页(因为逻辑地址页必须是连续的),采用分层方法可以不需要标志位位0(用不到的地址页)的逻辑地址页。

    hash技术:将物理内存地址映射为逻辑地址,所以一个逻辑地址就会对应多个物理地址(大大减小页表大小)(直接百度hash页表有详细的描述)

    倒置页表:将物理地址映射为逻辑地址,可以保证美一个逻辑地址都是可用的

    倒置

  • 相关阅读:
    Python 获取学校图书馆OAPC账号对应的身份证号码
    利用Python获取ZOJ所有题目的名字
    android wifi Beacon帧解析
    比较skb_clone和skb_cpoy
    查找链表的中间节点
    linux wifi wpa_cli及hostapd_cli命令总结
    android wifi I2C总线
    android wifi P2P CONNECT, INVITE和JOIN流程选择
    android wifi ANR问题分析总结
    android 编译代码注意事项
  • 原文地址:https://www.cnblogs.com/guosai1500581464/p/13071539.html
Copyright © 2020-2023  润新知