20.内存换入-请求调页

【README】

1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐;

2.操作系统关于内存管理的核心是基于虚拟内存的分段和分页管理
3.而用内存换入和换出实现虚拟内存 ;


【1】虚拟内存

1)段页同时存在的内存管理图像


2)用户眼里的内存(就是虚拟内存)

 

【图解】

  • 用户可以随意使用该内存(虚拟内存),就像单独拥有4G内存;
  • 每个进程都有对应一个虚拟内存;
  • 虚拟内存中存放了程序段,包括数据段,代码段,栈段等;
  • 虚拟内存如何映射到物理内存,用户全然不知道;
  • 操作系统利用虚拟内存与物理内存的映射来给用户提供这种4G内存的假象或图像;

3)换入
换入就是在虚拟内存与物理内存的映射上进行工作;


【2】用换入换出实现大内存

  • 问题:虚拟内存4G,但物理内存实际只有1G,怎么办 ?
  • 解决方法:内存换入换出;

【2.1】换入实例

【图解】

  • 用户程序都在磁盘上,包括它的代码段,数据段,共计4G大小;
  • 场景1:执行到0~1G,操作系统把磁盘上0~1G的代码段 换入 到物理内存,并建立虚拟内存与物理内存的映射;用户可以随便使用0~1G虚拟内存空间;
  • 场景2:执行到3G~3.5G,操作系统把磁盘上3G~3.5G的数据段   换入  到物理内存,并建立虚拟内存与物理内存的映射;用户可以随便使用3G~3.5G虚拟内存空间;

【小结】
1)以上2个场景,用户感觉到 可以使用 0~1G范围的内存,也可以使用3G~3.5G范围的内存,用户感觉机器可以使用的内存空间是0~4G(但实际物理内存只有1G,却给了用户4G内存的假象);

2)请求的时候才映射(指令执行时需要寻址到3G~3.5G)
请求的时候才换入,用这种方法可以实现 0~4G 的一个规整的虚拟内存;


【2.2】请求调页(换入)

1)请求换入,建立映射(虚拟内存与物理内存的映射 );

  • 即 请求调入物理内存页,并建立虚拟内存与物理内存页的映射;


【图解】请求调页具体步骤
指令的逻辑地址为 段号+偏移(cs:ip);

  • 步骤1: 操作系统执行指令 load [addr], 根据逻辑地址addr的段号从段表中查询段基址(虚拟内存地址);
  • 步骤2: MMU根据段基址计算出逻辑页号,发现逻辑页号在页表中没有记录(如拿着3.5G内存地址的逻辑页号 到 0~1G中的页表查找 物理页号,肯定查无记录);
  • 步骤3: 因为页表中没有记录(缺页),或MMU发现缺页,则MMU发出页错误中断请求(缺页中断请求)(设置中断请求触发器的某1位为1),等待cpu处理;
  • 步骤4: CPU处理中断,执行中断处理程序,即执行页错误处理程序;
  • 步骤5: 页错误处理程序从磁盘找到需要的页,并读入到空闲物理内存页,并建立虚拟内存与物理内存的映射关系(在页表中添加一条记录);
  • 步骤6: 中断处理程序执行完成后,即请求调页完成后,CPU再次执行 load [addr] 指令,就能够正确把逻辑地址 addr 翻译到物理地址了;

综上:应用请求调页或物理内存页换入,就可以实现4G大小的虚拟内存供用户随便使用;

  • 补充1:MMU是一个硬件,可以代替程序把逻辑地址立即转为物理地址(相比软件,MMU硬件的地址翻译效率更高);
  • 补充2:虽然对用户来说感觉到的是4G内存,但使用过程中存在系统响应慢的情况,原因在于访问某些内存地址空间时,由于缺页可能导致操作系统请求调页(需要从磁盘读取数据到物理内存,比较耗时),调页需要耗费时间的;

2)问题:采用请求调页而不是请求调段,原因是什么 ?


段比页占用内存空间更大,请求调页占用内存空间小,内存利用率高;
当然,也可以请求调段,只不过性能可能偏低;


 【3】请求调页代码实现

1)一个实际系统的请求调页
请求调页代码,从缺页中断开始; 14号中断是缺页中断;

// 操作系统启动时,初始化14号中断(缺页中断)的中断处理程序为 page_fault 
void trap_init(void) 
{set_trap_gate(14, &page_fault);
}
// 修改idt表,新增中断与中断处理程序的关联关系 
#define set_trap_gate(n, addr)_set_gate(&idt[n], 15, 0, addr);  

 2)处理中断 page_fault

 【图解】

  • cr2寄存器: 用于存储页错误线性地址,记录是哪一页缺页了;(线性地址就是虚拟地址)
  • Call _do_no_page: 调用缺页处理函数 _do_no_page(),参数是 %cr2寄存器的值(注意压栈了)

3)缺页函数 do_no_page()
从磁盘中找到需要的页,并读入空闲的物理内存页,建立虚拟内存与物理内存的映射关系(页表);

// 缺页函数 do_no_page() 
//  在 linux/mm/memory.c 中
void do_no_page(unsigned long error_code, unsigned long address) 
{	// 获取逻辑页号address &= 0xfffff000; tmp = address - current->start_code; // 页面对应偏移量 if( !current->executagle || tmp >= current->end_data ) {get_empty_page(address); return ;}// 换入第1步: 申请一个物理空闲页 page = get_free_page();// 换入第2步: 从磁盘(或当前进程可执行文件所在设备 i_dev)上读取缺页数据到物理空闲页 (block read) bread_page(page, current->executable->i_dev, nr); // 换入第3步: 把物理页与虚拟地址建立映射(在页表中新增一条映射记录) put_page(page, address);  
} 

 补充:请求调页换入的3个步骤(非常重要*):

  • 步骤1:申请空闲的物理内存页;
  • 步骤2: 从磁盘读取缺页数据到物理内存页;
  • 步骤3: 建立虚拟内存与物理内存页的映射关系,即修改页表,新增一条映射记录;

4)put_page() 修改页表,新增一条映射记录 (仅了解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人点焊枪接线_用于焊接机器人焊枪工具点及工件坐标系标定装置及方法与流程...

本发明属于机器人焊接技术领域,涉及一种用于焊接机器人焊枪工具点及工件坐标系标定的装置及方法。背景技术:工业机器人是实施自动化生产线、工业4.0、智能制造车间、数字化工厂、智能工厂的重要基础装备之一。而据不完全统计,全世界在役的工业…

采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

前言 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这是一个对Entity Framework进行扩展的类库. 完全支持EF 5.0/6.0, GitHub地址 https://github.com/loresoft/EntityFramework.Extended, 最后一次更…

Oracle入门(十二J)之同义词

转载自 oracle同义词 一、创建同义词 --普通用法 create [or replace] [public] synonym [schema.] 同义词名称 for [schema.] object [dblink];--创建专有(私有)同义词 create synonym sysn_test for test;--创建公共同义词 create public synonym publ…

21.内存换出

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.有内存换入就有内存换出。 3.因为物理内存空间有限,n次(第n页)换入后导致物理内存用完,则n1次&…

antd vue表单上传文件_vue+axios+antD的上传图片踩坑

一开始使用了实验室大佬封装的axios结合formData进行图片上传,然而传递给后台的formData是空的,打印出来的form又确实是存在的,百度搜了一大推,于是借鉴了百度的做法。1.引入axios import axios from ‘axios‘;2.创建一个新的axios,const …

移动web开发调试工具AlloyLever介绍

简介 web调试有几个非常频繁的刚需:看log、看error、看AJAX发包与回包。其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持。如你所见: 特征 点击alloylever按钮之间切换显示或隐藏工具面板Console会输出所有用户…

Oracle入门(十三A2)之单行函数

一、函数介绍 功能:改变数据输出形式或进行数据运算输出二、单行函数函数格式 函数说明abs(n) 返回n的绝对值floor(n) 返回小于等于n的最大整数ln(n) 返回n的自然对数&#xff…

22.IO与显示器

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.显示器是输入型外设; 3.本章主要内容是讲 显示器是如何被驱动的;或操作系统是如何让用户来使用显示器的; 4.Pri…

d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?

(这是D3的数据)主板芯片组IntelHM76CPU系列英特尔酷睿i53代系列CPU型号Intel酷睿i53210MCPU主频2.5GHz最高睿频3100MHz总线规格DMI5GT/s三级缓存3MB核心类型IvyBridge核心/线程数双核...(这是D3的数据)主板芯片组Intel HM76CPU系列英特尔 酷睿i5 3代系列CPU型号Intel 酷睿i5 32…

[开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

一 ,为什么要造轮子 有兴趣的同学可以去各大招聘网站看一下爬虫工程师的要求,大多是JAVA,PYTHON甚至于还有NODEJS,C,再或者在开源中国查询C#的爬虫,仅有几个非常简单或是几年没有更新的项目。从我看的一些文…

Oracle入门(十三B)之高级查询(上)

下章:Oracle入门(十三C)之高级查询(下) 一、多表格查询 (1)定义将两个或两个以上的表格,按照一定的关系连接起来进行查询。(2)多表格查询分类 连接查询嵌套查…

23.键盘

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.键盘 是输出型外设; 【1】外设工作原理 【图解】外设工作原理: 步骤1:Cpu向外设控制器发出指令(如…

like左匹配索引失效_Mysql索引失效的情况

一、前提条件1、创建三张测试表:DROP TABLE IF EXISTS user;CREATE TABLE user (idint(11) NOT NULL,name varchar(25) DEFAULT NULL,ageint(11) NOT NULL DEFAULT 0,update_time datetime DEFAULT NULL,first_name varchar(25) DEFAULT NULL,last_name varchar(25)…

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心。最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示&#x…

24.原生磁盘的使用

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.磁盘操作抽象 第1层抽象:通过盘块号读写磁盘(或逻辑盘块号);第2层抽象:用队列缓存多个…

Oracle入门(十三C)之高级查询(下)

上章:Oracle入门(十三B)之高级查询(上) 四、常见组函数 SUM、AVG、COUNT、MIN、MAX分组函数忽略null 值。不能在WHERE 子句中使用组函数。MIN 和MAX 可用于任何数据类型;SUM、AVG只能用于数字数据类型五、子…

微软将降低Visual Studio对操作系统的影响

在过去几年中,为了将Visual Studio变成Windows上的第一开发工具,而不管用户的目标平台是什么,微软作出了重大努力。最近收购Xamarin及通过大力支持开源工具来支持非Windows设备,极大地增加了它对于各类开发人员的用处。这一做法的…

代码设置margintop_关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)...

关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)起因:在进行bootstrap的.navbar-brand内文字设置垂直居中时采用line-height高度,无法居中,发现源码.navbar-brand 设置了 padding: 15px 15px;(默认…

Oracle入门(九A)之用户的权限或角色

转载自 查看Oracle用户的权限或角色 前几天被问到一些关于权限和角色的问题,今天抽时间总结一下如何查看Oracle用户的权限或角色,在之前的博文中,写过 SYS,SYSTEM,DBA,SYSDBA,SYSOPER的区别与联系 以及 Oracle中定义者权限和调用者权限案例分…

25.从生磁盘到文件

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》,内容非常棒,墙裂推荐; 2.文件:煮熟的磁盘,或熟磁盘; 本节的主要内容是讨论 如何从文件得到盘块号; 3.磁盘操作抽象&#xf…