内存管理-关于局部置换算法的一些思考


这段时间在学习操作系统,看的是清华向勇,陈渝老师的视频,老师讲的很好很细致。

昨天看到局部置换算法,今天主要想说说自己的思考,如果看到这篇文章的你是想系统的学习局部置换算法,那暂且不要继续往下看了,去网上搜这两位老师的网课吧,你会收获更多。

如果你正在学习这部分知识并有了一定的了解,那不妨花个一两分钟看看下文,我们可以一起思考,一起讨论,如果文中有错误或不合理的地方,麻烦看到文章的你一定告诉我,谢谢啦。

最优算法:OPT (optimal)

optimal是最理想的情况,发生缺页时选择置换未来最长时间不被访问的页面,嗯理想很丰满现实很骨感,事实上我们是没法预测未来的,所以并不能准确知道每个页面下次会在什么时间访问,所以说optimal是没法实现的。

那么问题来了,都没法实现要它有啥用?它当然是有用的,它存在的意义就是给其他置换算法树立标杆,因为它是最理想的情况,把其他置换算法的置换结果和它作比较,就能分出好坏。小时候家长嘴里总有个“别人家的孩子”,没错,最优算法就是那个“别人家的孩子”。

先进先出算法:FIFO (First in, first out)

先进先出算法是比较笨拙也比较容易实现的,只需要用一个链表来记录在内存中的页面。看下面这个画的有点糙的图,假设运行一个程序时CPU只分配给这个程序能保存3个页面的内存空间,也就是说我们可以创建一个长度为3的链表来记录存在物理内存中的页面,下图棕色的线就是链表,图中描述了每次访问页面时链表的维护过程。

先进先出算法简易图.jpeg

使用先进先出算法完成页面置换很简单,发生缺页时找链表末端的页面置换就可以。这么看来置换的开销是不大的,但是从图中我们可以看出,这种算法日常访问时开销是极大的,每次访问都要修改链表。

最可怕的还不是持续不断的对链表的修改,可怕的是有可能刚把页面A置换到外村,下一个就要访问A,如果一个程序执行过程中这种情况比较多,还有可能造成belady现象,也就是说分配给程序的物理内存大了,发生缺页的次数反而增加了。

最近最久未使用算法: LRU(Least Recently Used)

最近最久未使用算法在一定程度上实现了最优算法,最优是想替换未来最不可能使用的,最近最久未使用是根据历史来预判未来。每次缺页时,都要去物理内存中统计每个页面上次访问的时间,最久未访问的,就要被拉到屠宰场干掉了,统计的过程是及其复杂的,因此这种算法置换时候的开销就很大了。

上述提到的三种算法,最优算法是不能实现的;先进先出算法置换开销小,但是访问开销大;最近最久未使用算法访问开销小,但是置换开销大,那么有没有比较折中的置换算法呢?

答案是:有的。我就不卖关子了,反正你google上随便一搜也能搜到的,时钟置换算法和最不常用算法就是更折中的算法,所以呢,未完待续......


时钟置换算法:CLOCK

前面提到对LRU和FIFO的折中,今天就来聊聊时钟置换算法,时钟置换算法的思想是置换最近未被访问的,但不像LRU一样在置换页面时做详细的统计,因此置换开销会降低。使用访问位标识每个页面,每次遇到访问位为0的就将其置换,这点和FIFO类似,但不像FIFO那么无脑。

具体的做法是,在页表中增加访问位,用来标识当前页面是否被访问过,当一个页面第一次被加载到内存中时,将其访问位初始化为0;当一个页面第一次被访问时,将其访问位置1。所有页表项构成一个环形链表,发生缺页中断时,从当前指针位置开始查找,如果访问位为1,将其置0,指针后移;如果访问位为0,置换该页面。

我们可以看一个例子,如下图,初始状态下,页面a, b, c, d 保存在内存中,均未被访问过,接下来页面的访问顺序是c, a, d, b, e, b, a, b, c, d,下图每个两行四列的表格中,第一行表示存在内存中的页面,第二行表示相应页面的访问位,红色箭头表示当前指针所处的位置。

时钟置换算法示例图
  • 上述过程我们只考虑了页面的访问,实际情况下我们不仅有读操作,也有写操作,我们在对内存中的页面进行置换时,如果该页面在内存中被修改过,那我们应该在置换的同时,将修改同步到外存中。针对这一现象,就出现了改进的时钟置换算法,旨在每次置换时跳过别修改的页面。
  • 改进的时钟置换算法在页表项中增加修改位,用来表示该页面是否被修改。当我们对内存中的页面进行写操作时,将该页面的修改位和访问位置1,如果是读操作,只将访问位置1。进行页面置换时,如果修改位为1,跳过该页面,只有当存在内存中所有页面的修改位都为1时,再进行将修改同步到外存的操作,这样就不需要频繁同步数据到外存。

最不常用算法:LFU(Least Frequently Used)

最不常用算法也是LRU的一种简化,只不过LRU关心的是时间,而LFU关心的是次数,LFU为每个页面设置一个计数器,用来统计该页面被访问的次数,发成缺页时,选择被访问次数最少的页面进行置换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 8.1虚拟存储的需求背景 虚拟内存是非连续内存分配的一个延续,非连续内存分配在存储空间内可以连续也可以不连续。虚拟...
    龟龟51阅读 5,826评论 2 6
  • 一、虚拟存储技术 所谓虚拟存储技术是指:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访...
    yjaal阅读 3,497评论 0 6
  • 1 内存寻址 1.1 物理地址、虚拟地址以及线性地址 物理地址: 物理内存的内存单元地址 虚拟地址: 程序员看到的...
    疯狂小王子阅读 2,781评论 3 21
  • 进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的...
    saviochen阅读 2,996评论 0 6
  • 是春天的第一缕风 把枝头含苞待放的那一枚火种点燃 一朵红色的火焰燃起来了 风刚一张口轻轻一吹 又一朵红色的火焰燃起...
    金指尖的花园阅读 251评论 0 4