操作系统--内存管理

摘要:
页表项具有有效的无效位。1表示它在内存中,0表示它不在内存中。2.当发现页面不存在时,响应是什么?

内存管理:

  1. 单一分区分配:

    用于单用户、单任务的操作系统,主存被分为两部分:驻留操作系统(内存低端)、用户进程(内存高端)

  2. 多分区分配:

    满足多道程序的最简单的存储管理方案,将内存划分成若干个连续区域,称为分区;每个分区只能存储一个程序,并且程序也只能在它所驻留的分区中运行

    分区方法分为固定分区和动态分区,分区分配算法:First-Fit、Best-Fit、Worst-Fit、Next-Fit

    这种分配策略会同时存在外部碎片和内部碎片,可通过紧缩减少碎片

  3. 页式内存管理:

    允许进程的物理地址空间可以是不连续的

    逻辑地址空间中划分为页(数据块),物理地址空间划分为页帧,从逻辑地址映射到物理地址空间使用页表

    因此,每一次的数据/指令访问需要两次内存访问,可使用快表(TLB),使访问降到一次

    页表:分级页表、哈希页表、反向页表

    这种分配策略会同时存在外部碎片和内部碎片

  4. 段式内存管理:

    允许进程的物理地址空间可以是不连续的

    适应用户的角度,使用段表映射地址

    由于段的长度可变(区别于页),所以就面临动态分配问题,同样使用First-Fit、Best-Fit、Worst-Fit、Next-Fit算法

    这种分配策略只会存在外部碎片

  5. 段页式内存管理:

    先段式后页式,Linux就是这样,一个程序先被划分为若干程序段,对每一分段又分成若干个固定大小的页

虚拟存储管理:

  通过换入换出页(段),使得进程的逻辑空间比实际占有的内存空间大得多,从而使得内存中可以驻留更多的进程(用户)

  但总的虚拟地址空间不大于物理内存和外存交换区容量之和

  1. 如何知道一个进程的某个页面在不在内存?

    页表项有一个有效-无效位,1表示在内存,0表示不在内存

  2. 发现某个页面不存在之后,有什么响应?

    产生缺页中断,要求熟悉缺页中断之后的响应流程(页面置换过程)

  3. 如果发生缺页,但此时内存中无空闲块,此时将哪个页面换出?(页面置换算法)

    这个页面置换算法要求缺页中断的次数尽可能的小

    1. FIFO算法(先来先出):容易导致Belady现象,即内存中分配的页帧越多,缺页中断的次数反而增加

    2.Optimal算法:选择未来不再使用的,或在离当前最远位置上出现的页面被置换,由于后面的数据实际不可知,所以这种算法不可实现,但通常用来作为作为对比,来衡量其他算法的效率

    3. LRU算法(最近最少使用):选择内存中最久未使用的页面被置换,这是局部性原理的合理近似,性能接近最佳算法,但由于需要记录页面使用时间的先后顺序,时间开销太大

    4. 近似LRU算法:

      1. first chance 算法:利用页表项的引用位,随机选取该位为0的页面置换

      2. second chance 算法(clock算法):同样利用引用位,遇“1”置“0”,并依然留在内存中,遇“0”置换

      3. ehanced second chance 算法:同时利用引用位和修改位,依据两者的组合淘汰页面

    5. 页面缓冲算法: 对FIFO算法的改进,通过对被置换页面的缓冲,有机会不通过访问磁盘,就找回刚被置换的页面(Windows和Linux的页面置换算法就是基于页面缓冲算法的)

  4. 那么一开始在内存中给每个进程分配多少页帧?

    在为进程分配帧时,首先应该考虑的问题是:能保证进程正常运行所需的最少帧数(也成最小物理块)

    内存中分配页帧采用的算法:

      1. 平均分配算法

      2. 按比例分配算法:根据进程的大小按比例分配

      3. 优先权分配算法:优先权高的进程适当增加份额

    当然,分配策略也可以分为固定分配和可变分配策略

    置换策略分为全局置换和局部置换

  系统抖动:进程忙于换入换出页面,从而使进程的程序没有往下执行或者执行得很慢(硬盘的指示灯一闪一闪)

    解决方法:1. 挂起若干进程

         2. 在CPU调度中引入工作集算法:选择工作集窗口大小,例如10000条指令,进程Pi的工作集Wssi = 最近一次工作集窗口内页面引用的总数,则页帧总需求数为All(Wssi),如果改数大于内存中页帧总数,就挂起一个进程,从而防止系统抖动。          

免责声明:文章转载自《操作系统--内存管理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇质量属性分析PHP 字符串长度计算函数strlen() 正确的计算 中文汉字长度的方法 与mb_strlen()应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android避免OOM(内存优化)

Android内存优化是性能优化很重要的一部分,而如何避免OOM又是内存优化的核心。 Android内存管理机制 android官网有一篇文章 Android是如何管理应用的进程与内存分配 Android系统的Dalvik虚拟机扮演了内存垃圾自动回收的角色。 OOM介绍(out of memory 内存溢出) Android和java中都会出现由于不良代...

网格搜素算法的使用

GridSearchCV网格搜索算法, 经常用于调优模型参数,遍历多个模型参数,带入模型,进行训练,从中找出评分最高的模型。 GridSearchCV(参数1,参数2,参数3,参数4=none) 参数1:模型算法   参数2:需要调优的参数 参数3:评分标准 参数4:k折交叉验证法,默认为空 GridSearchCV的方法: grid.best_estim...

[转载]最小生成树-Prim算法和Kruskal算法

转载地址:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html  自己在学,感觉这个讲的很不错,就转载了。 Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点...

内存管理:01存储器层次结构

         在日常的编程中,我们简单的把存储器系统看成一个线性的字节数组,但实际的存储系统并不是这样的。          存储器系统是一个由具有不同容量,不同成本,不同访问时间的若干存储设备组成的层次结构,从上到下依次是:寄存器,高速缓存存储器,主存,硬盘,网络文件。层次越高,容量越小,成本越高,访问时间越短,高层的存储设备是底层存储设备的缓存区。...

揭秘阿里巴巴的客群画像

阿里巴巴一直在面向未来探索B类新电商模式,并从2019年开始重点构建“新供给、新链接、新营销”三新体系。买家是三新体系的核心,缺少买家维度的数字化经营体系是不完整的。平台场景目标群体及场景间买家差异性尚不明确,客群矩阵就是为场景中控解决这一业务痛点、提高场货分发效能而专门设置的算法研究主题。同时,客群矩阵也是用户增长和算法特征的核心数据。鉴于客群矩阵如此...

二分图的最大匹配、完美匹配和匈牙利算法(转载)

摘自: http://www.renfei.org/blog/bipartite-matching.htm 最大匹配数:最大匹配的匹配边的数目 最小点覆盖数:选取最少的点,使任意一条边至少有一个端点被选择 最大独立数:选取最多的点,使任意所选两点均不相连 最小路径覆盖数:对于一个 DAG(有向无环图),选取最少条路径,使得每个顶点属于且仅属于一条路径。路径...