热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

操作系统:虚拟页式存储管理(缺页中断、页面置换算法)

1、基本工作原理1、基本工作原理在进程开始运行之前,不是全部装入页面,而是装入一个或者零个页面,之后根据进程运行的需要,

1、基本工作原理

1、基本工作原理
在进程开始运行之前,不是全部装入页面,而是装入一个或者零个页面,之后根据进程运行的需要,动态装入其他页面;当内存已满,而又需要装入
新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。在使用虚拟页式存储管理时需要在页表中增加一些内容:
页号、驻留位(中断位)、内存块号、外存地址、访问号、修改位驻留位:表示该页在外存还是内存;
访问位:表示该页在内存期间是否被访问过,又称R位;
修改位:表示该页在内存中是否被修改过,又称M位;

缺页中断处理

2、缺页中断
在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生中断,当发生中断时,系统必须在内存选择一个页面移出内存,
以便为调入新的页面让出空间,尽管每次可以随机选选择一个页面置换,但选择不常使用的页面会是系统性能好的多,减少不必要的额外
开销,就产生了页面置换算法。3、页面置换算法:
3.1理想页面(Optimal, OPT)置换算法
发生缺页时,有些页面在内存中,其中有一页将很快被访问(包含紧接着 的下一条指令的那页),而其他页则可能到10、
100或1000条指令后才会被访问,每个页都可以用在该页面首次被访问前所要执行的指令数进行标记。标记树最大的页应该被置换。举例:如果某页在八百万条指令内不会被使用,另外一页在六百万条指令不会被使用,则置换前一个页面。这个算法无法实现,因当缺页
中断时,系统无法知道各个页面下一次在什么时候被访问3.2先进先出置换算法(First In First Out, FIFO)
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是
该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。3.3最近最久未使用置换算法(Least Recently Used, LRU)
刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。 LRU算法普偏地适用于各种类型的程
序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。3.4第二次机会页面置换算法
FIFO算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法进行简单的修改:检查最老页面的R位,如果R位是0,那么
这个页面又老有没用,可以立即置换出去,如果是1,就清零R位,并将该页放到链表的尾端,修改它的装入时间使它就像装入的一样,
然后继续搜索。如果所有的页面都被访问过,那么该算法就被降为纯粹的FIFO算法。3.5时钟页面置换算法
由于第二次机会页面置换算法要经常在链表中移动页面,降低了效率。一个更好的办法,将所有的页面存在一个类似钟表面的环形链
表中。3.6最近未使用(NRU:Not Recently Used)
用R位和M位构造一个简单的页面置换算法:当启动一个进程时,它的所有页的两个位都由操作系统设置成0,R位被定期的清零,以
区别最近没有被访问的页和被访问了的页。
根据R位和M位,分为4类页面
第0类:没有被访问,没有被修改
第1类,没有被访问,被修改
第2类,被访问,没有被修改
第3类,被访问,被修改。
NRU算法随机地从编号最小的非空类中挑选一个页淘汰之。这个算法隐含的意思是,淘汰一个在最近一个时钟周期内没有被访问
的已修改页要比淘汰一个被频繁访问的干净的页好。4、Belady异常现象
从直觉上看,在内存中的物理页面数越多,程序的缺页次数应该越少,但是实际情况并不是这样。Belady在1969年发现一个反例,
使用FIFO算法时,四个页框时缺页次数比三个页框时多。这种奇怪的情况称为Belady异常现象。5、影响缺页次数的因素
1)分配给程序的物理页面数
2)页面的大小
3)程序的编制方法
4)页面置换算法

2、计算缺页次数

理想页面(Optimal, OPT)置换算法

理想页面

先进先出置换算法(First In First Out, FIFO)

FIFO

最近最久未使用置换算法(Least Recently Used, LRU)

LRU

在一个请求页式存储管理中,一个程序的页面走向为3,4,2,1,4,5,4,3,5,1,2,并采用LRU算法。设分配给该程序的存储块
数 S 分别为3 和 4,在该访问中发生的缺页次数 F

LRU


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 探讨如何通过高效的数据库查询和排序策略,优化基于GPS位置信息的附近用户搜索功能,以应对大规模用户数据场景。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 本文深入探讨了二叉搜索树(Binary Search Tree, BST)及其操作,包括查找、插入和删除节点。同时,文章还介绍了平衡二叉树(AVL树)的概念及调整方法,并详细讨论了如何判断两个序列是否构成相同的二叉搜索树。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
author-avatar
加肥的猫miao_115
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有