首页 > 系统相关 >小林coding学习笔记(内存页面置换算法)

小林coding学习笔记(内存页面置换算法)

时间:2024-09-16 15:02:04浏览次数:1  
标签:置换 coding 访问 算法 页表 页面 内存

缺页中断示意图

1 在CPU里执行一条查找某个页面A的指令,首先是虚拟内存,会到虚拟内存和物理内存的映射关系的页表中查询。
2 页表中不存在需要查找的页面A的有效信息。
3 则触发缺页中断信号给操作系统,操作系统收到缺页中断信号后,就会去磁盘里面查找该页面。
4 操作系统在磁盘中查到该页面后,如果物理内存存在空闲页,则会把该页面放到物理内存中去。
5 页面从磁盘放入物理内存中后,会将页表项改为有效的。
6 最后,CPU重新执行导致缺页异常的指令。之后就能正常查询了。
页表项字段如图

上述说的,是物理内存未满的情况,如果物理内存满了呢?此时就需要通过某种算法选取某个物理内存中的页框,将其放到磁盘上去,再把想要查询的页面从磁盘中放到物理内存上面。
内存页面置换算法:
1、最佳页面置换算法
置换在未来最长时间不访问的页面。
特点是很理想,实际中无法直到未来访问页面的情况,其作用是为了进行算法效率的衡量,因为这种算法是理想情况的最优页面置换算法。
2、先进先出置换算法
置换在内存中存放时间最长的页面
3、最近最久未访问置换算法(LRU,面试重点力扣题)
LRU最近最久未访问算法基本思路是,当发生缺页时,选择最长时间没有被访问的页面进行置换,该算法假设最长时间没有被访问的页面在未来的一段时间仍然不会被访问。
LRU这种算法的思想近似于最佳页面置换算法,最佳页面置换算法是根据未来的情况推测,而LRU是根据历史的情况来进行推测。
4、时钟页面置换算法
将页表项放在一个类似时钟的环形链表上,当表针指向一个访问位为0的页表项,则淘汰该页表项,将磁盘上的页面置换到内存中,表针向前移动,如果表针指向一个访问位为1的页表项,则将其访问位置0,表针向前移动,直到表针指向一个访问位为0的页表项。
5、最不常用页面置换算法
当发生缺页中断时,选择访问次数最少的那个页面,将其淘汰。

标签:置换,coding,访问,算法,页表,页面,内存
From: https://www.cnblogs.com/ZhangWuyue/p/18416283

相关文章

  • 使用 O(1) 额外内存删除二叉树
    这是一个naive的做法:voiddeleteTreeRec(TreeNode*root){if(root==NULL)return;deleteTreeRec(root->left);deleteTreeRec(root->right);cout<<"Deletingnode"<<root->data<<endl;deleteroot;}O(1)空......
  • 小林coding学习笔记(进程调度算法)
    //进程调度算法进程调度算法是CPU通过进程调度算法决定某个时刻去调用哪个进程到CPU上运行的算法1、先来先服务调度算法每次从就绪队列的队头调度到CPU上运行,直到进程退出或被阻塞,才会继续从队列中调度进程运行。特点:对短作业不利,对长作业有利,无法平衡短作业与长作业。2、最......
  • 小林coding学习笔记(1)-2024.09.16
    HTTP版本的区别变化HTTP1.1相较于HTTP1.0,多了长连接,可以支持同一个HTTP会话的复用,避免了频繁的建立与关闭的资源开销。//SSL/TLS的建立过程-四次握手1、客户端Hello客户端发送1支持的TLS协议版本2一个随机数用于后续产生会话密钥3支持的密码套件,如非对称加密RSA算法2、服......
  • 共享内存的理解
     目录直接原理原理图​编辑直接代码创建唯一键值代码 创建共享内存代码 共享内存的指令操作  简单封装补充指令集系统设计的只能本地进行通信;直接原理共享内存也是进程间通信的方案原理图理解:1.  所有图中所说的操作都是os所做的 2.  os必须提......
  • Linux内存管理知识-一篇文章了解堆和栈区别(进阶篇)
    前面已经介绍过,栈是由编译器在需要时分配的,不需要时自动清除的变量存储区。里面的变量通常是局部变量、函数参数等。堆是由malloc()函数分配的内存块,内存释放由程序员手动控制,在C语言为free函数完成。栈和堆的主要区别有以下几点:(1)管理方式不同栈编译器自动管理,无需程序员手......
  • 【油猴脚本】00008 案例 Tampermonkey油猴脚本,动态渲染表格-实现页面动态-添加表格列,
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • C++入门基础知识69(高级)——【关于C++ 动态内存】
    成长路上不孤单......
  • 内存管理-35-内存统计-1-各成员含义
    基于msm-5.4一、vm_zone_stat[]基础调用路径:clear_page_mlock//mlock.c传参(..,NR_MLOCK,..)mlock_vma_page//mlock.c传参(..,NR_MLOCK,..)account_kernel_stack//fork.c传参(..,NR_KERNEL_STACK_KB,..)scs_account//scs.c传参(..,NR_K......
  • SAP学习笔记 - 开发05 - Fiori UI5 开发环境搭建2 Fiori Tools插件安装,SEGW创建后台程
    上一章学习了FioriUI5的开发环境搭建 -安装VSCode -安装Node.js -安装SAPUI5SAP学习笔记-开发04-FioriUI5开发环境搭建-CSDN博客本章继续学习FioriUI5开发环境搭建-VSCode安装FioriTools插件-SEGW创建后台程序,注册服务,GatewayClient确认服务......
  • Python中的内存池机制
    在Python中,内存管理是一个复杂但至关重要的主题,它直接关系到程序的性能和稳定性。Python的内存管理机制包括对象的分配、追踪以及回收,其中内存池(MemoryPool)是这一机制中的一个重要组成部分。内存池机制通过预先分配和重用小块内存来减少内存分配和释放的开销,从而提高程序的执......