做拍福利爱福利视频网站中国设计之家官网

bicheng/2026/1/20 23:40:13/文章来源:
做拍福利爱福利视频网站,中国设计之家官网,推广之家,小程序开发各平台对比目录 Task 1: Eliminate allocation from sbrk()Task 2: Lazy allocationTask 3: Lazytests and Usertests 在学习了 page fault 这一节课后#xff0c;了解了操作系统是如何结合 page table 和 trap 利用 page fault 来实现一系列的神奇的功能。这个 lab 就是在 XV6 中实现 l… 目录 Task 1: Eliminate allocation from sbrk()Task 2: Lazy allocationTask 3: Lazytests and Usertests 在学习了 page fault 这一节课后了解了操作系统是如何结合 page table 和 trap 利用 page fault 来实现一系列的神奇的功能。这个 lab 就是在 XV6 中实现 lazy allocation 机制。 xv6 默认是 eager allocation也就是用户程序一旦调用 sbrk内核会立刻分配应用程序所需要的物理内存。这个实验就是将其修改为 lazy allocation用户在调用 sbrk 时不会立刻分配物理内存只是做一个记录等到程序真正读写这个内存 page 时才会因触发 page fault 而让内核分配一个实际的物理内存并修改到 page table 中。 Task 1: Eliminate allocation from sbrk() 这个 task 让我们删除 sbrk 的系统调用实现函数 sys_sbrk() 中分配物理内存的代码内核只需要增大 myproc()-sz 这个值即可。 myproc()-sz 这个值记录的当前用户进程已申请的 heap 的最大地址 代码kernel/sysproc.c uint64 sys_sbrk(void) {int addr;int n;if(argint(0, n) 0)return -1;addr myproc()-sz;// if(growproc(n) 0)// return -1;myproc()-sz n;return addr; }make qemu 后执行 echo hi 这里会发生 page fault在下面的 task 中我们将处理发生的 page fault并为其分配物理内存 page 且修改对应的 page table。 Task 2: Lazy allocation 这个 task 需要修改代码来处理 page fault 并为用户程序分配物理内存。 当 page fault 发生时程序会通过 trap 机制进入 usertrap() 函数我们可以在这里实现相关的而逻辑。SCAUSE 寄存器记录了本次 trap 发生的原因当寄存器的值为 13 或 15 时表示因 load 或 store 指令访问一个地址但没找到相应 PTE 而发生 page fault所以我们需要在 usertrap() 函数中判断 SCAUSE 寄存器的值并实现相应的 page fault 处理逻辑。 首先在 usertrap() 函数kernel/trap.c中添加对 page fault 的识别并调用 page fault handler 来处理 添加并实现 page_fault_handler() 函数代码紧跟在 usertrap 函数后面就可以 // // handle page fault // void page_fault_handler(struct proc * const p) {uint64 va r_stval(); // 触发 page fault 的虚拟地址if (p-sz va || va p-trapframe-sp) { // 如果 va 高于 sbrk 申请的地址或者低于栈顶地址p-killed 1;} else {uint64 ka (uint64) kalloc();if (ka 0) { // 如果物理内存不足p-killed 1;} else {memset((void*) ka, 0, PGSIZE); // 为这块地址填充 0va PGROUNDDOWN(va); // round the faulting virtual address down to a page boundary.// 将 va - ka 的 mapping 添加到 user page table 中if (mappages(p-pagetable, va, PGSIZE, ka, PTE_W | PTE_X | PTE_U | PTE_R) ! 0) {kfree((void*) ka);p-killed 1;}}} }还存在一个问题因为用户申请的内存并没有一定分配实际的物理内存所以在对申请但未分配的内存做 unmap 时会产生错误因此需要对 unmap 的代码进行修改当想要释放一个未分配的 page 时代码中只需要直接忽视就可以了vm.c 完成以上修改后make qemu 之后就可以正常运行 echo hi 了 Task 3: Lazytests and Usertests 前一个 task 实现了一个简单的 lazy allocation执行 echo hi 是没问题了但在更复杂的场景下仍然有许多需要考虑的事情本 task 要求完善 lazy allocation 并能够通过 lazytests 和 usertests 两个测试。 首先为了实现的方便这里将实际分配物理内存的代码逻辑封装到 alloc_memory_page() 函数kernel/vm.c中 // 分配一个实际物理内存并映射到 va 中将这个 mapping 添加到 page table 中 uint64 alloc_memory_page(uint64 va, pagetable_t pagetable) {uint64 ka (uint64) kalloc();if (ka 0) { // 如果物理内存不足return 0;}memset((void*) ka, 0, PGSIZE); // 为这块地址填充 0va PGROUNDDOWN(va); // round the faulting virtual address down to a page boundary.if (mappages(pagetable, va, PGSIZE, ka, PTE_W | PTE_X | PTE_R | PTE_U) ! 0) {kfree((void*) ka);return 0;}return ka; }这个函数通过 kalloc() 来分配一个物理内存 page并将其映射到 va 中然后将这个 mapping 添加到 page table 中。当成功时函数返回分配的物理内存地址当失败时内存不足或添加 mapping 失败函数返回 0。 我们将这个 alloc_memory_page() 函数的声明放到 defs.h 头文件中。 有了这个 alloc_memory_page 函数我们在上一个实验写的 page fault handler 就可以简化一下了分配物理内存的逻辑改为调用 alloc_memory_page 即可 // // handle page fault // void page_fault_handler(struct proc * const p) {uint64 va r_stval();if (p-sz va || va p-trapframe-sp) { // 如果 va 高于 sbrk 申请的地址或者低于栈顶地址p-killed 1;} else {if (alloc_memory_page(va, p-pagetable) 0) { // 当分配内存或添加 mapping 失败就直接杀死该进程p-killed 1;}} }修改 uvmummap() 函数当无法从 page table 中找到 va 的 PTE 时或者 PTE 未映射时直接跳过 我们还需要正确处理 fork 时父进程向子进程 copy 内存的逻辑这里需要修改 uvmcopy() 函数也是在页表不存在或 PTE 未映射时直接跳过 还有一种情况是当用户程序把通过 sbrk() 申请的内存但还未实际分配的内存地址传递给系统调用时kernel 可能会在 copyin 和 copyout 这两个函数中访问这个内存地址而 kernel 内是无法像用户程序那样走 page fault handler 来 lazy allocation 的所以我们必须在 copyin 和 copyout 函数内也实现“访问用户程序传来的内存地址时做 lazy allocation”的逻辑 这里 copyout 通过 walkaddr 来将 va 借助 user page table 来翻译得到 pa但由于我们采用了 lazy allocation 机制所以这里可能无法找到 PTE 映射所以当没有找到 PTE 映射时我们需要立刻为其分配物理内存并修改 user page table这也是上图红方框内代码的逻辑。对于 copyin 函数所做的修改类似 至此我们完成了 lazy allocation测试如下 运行 lazytests 运行 usertests

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

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

相关文章

建设银行内部网站6安蓉建设总公司网站

DEM模块配置详解 - 上 一、Autosar中DEM模块简介1.DEM对其他模块的依赖2.DEM模块架构2.1 DEM模块Dem Satellite(s) 和Master2.2 诊断事件处理2.2.1 基于计数器的算法2.2.2 基于时间的算法三、配置错误项处理3.1 容器DemEventParameter3.2 容器DemOperationCycleRef3.3 容器DemO…

可以跟关键词密度过高的网站交换友情链接吗下列哪种是网页制作工具

结束昨日435期JSTO“探索学习的新视界:硬核工具分享”,有伙伴分享的提升效率的AI工具,也有自我发现团队问题解决的工具,伙伴们都在各自的领域实践、吸收、反馈、复盘。这次的团队学习不仅是知识的传递,更是一场脑力激荡…

沧州网站推广汕头百度快速优化排名

上次讲了常用的接口:C初阶:初识STL、String类接口详细讲解(万字解析) 今天就来进行模拟实现啦 文章目录 1.基本结构与文件规划2.构造函数(constructor)2.1构造函数2.1.1无参有参分开2.1.2利用缺省参数合起来 2.2拷贝构…

ctf wordpressseo是啥

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 先决条件 本教程假设您已经在Debian 7或类似的Linux发行版(如Ubuntu)上设置了您的droplet(VPS&#…

不要钱做网站软件python网站建设

前言 本文接上一篇文章《斯坦福机器人Mobile ALOHA的关键技术:动作分块ACT的算法原理与代码剖析》而来,当然最开始本文是作为上一篇文章的第二、第三部分的 但因为ACT太过关键,除了在上一篇文章中写清楚其算法原理之外,还得再剖…

教育培训网站源码 模板 php培训机构网站源码培训学校网站源码个人网站开发制作教程

一、 Comparator 类 Comparator 类常作为 sorted() 方法的参数传递给 sorted 方法,用来解决给集合排序,自定义排序规则的问题 。 那从这个角度看,这个类肯定很常用了,一般都不喜欢自己写排序方法,而且自己写的肯定还…

asp做的网站数据库在哪里如何创建属于自己的网站

文章目录 一、充分了解AI技术的应用范围和优势二、创意策划,确定作品主题和风格三、素材收集,丰富作品内容四、特效制作,提升作品视觉效果五、配音处理,增强作品表现力六、作品发布,扩大作品传播范围《AI短视频制作一本…

wordpress付款插件保定网站优化招聘

文章目录 前言鸿蒙生态科普调研人员画像高校助力鸿蒙高校鸿蒙课程开设占比教研力量并非唯一原因 企业布局规划全盘接纳仍需一段时间企业对鸿蒙的一些诉求 机构入场红利机构鸿蒙课程开设占比机构对鸿蒙的一些诉求 鸿蒙实际体验高校用户群体高度认同与影响体验企业用户群体未来可…

网站公司网站建设深圳龙岗企业网站建设

背景 在实际的业务场景里,用会话文本构建模型(机器学习/深度学习)来做意图分类之类的任务时,经常会出现人工打标不够准确的问题,标签都不准确的话模型当然无法学习到有效信息了。这个问题真的非常头疼…除了与业务沟通…

芜湖网站备案咨询电话简洁大方网站模板

奶牛编号 jozj 2932 题目大意 求出有m个1的01串中字典序第n大的字典序 输入样例 7 3输出样例 10110数据范围 1⩽M⩽101 \leqslant M \leqslant 101⩽M⩽10 1⩽N⩽1071 \leqslant N \leqslant 10^71⩽N⩽107 解题思路 我们先从01串长度入手: 先对m1m 1m1的特…

重庆网站的建设现在哪个公司家庭网络好用

参考 stackflow相关讨论 原理 通过参考链接,可知探测Stack的最大深度是先在stack中填充不常用的特定值,然后实时检测这些值哪些发生了变化,变化的表示使用到了这个空间,如果程序完全遍历后,有些值还是没变&#xff…

网站开发与设计百度网址导航

周一,A股商场低开低走,沪指收盘失守2800点。截至收盘,上证综指跌2.68%,报2756.34点;深证成指跌3.5%,报8479.55点;创业板指跌2.83%,报1666.88点。沪深两市合计成交额7941亿元&#xf…

成都网站建设多少费用软件开发平台搭建

WPA-hashcat渗透 WPA-hashcat渗透1.hashcat介绍2.渗透姿势1.查看网卡2.开启监听模式3.扫描wifi4.抓包保存5.进行冲突模式攻击6.重新连接wifi7.生成hccap文件8.破解WPA-hashcat渗透 严重声明:cpu加速都是幌子,aricrack-ng也用cpu,不然用爱跑的? 1.hashcat介绍 Hashcat系列…

早晨网站建设wordpress 餐饮 主题

本文是关于聚类算法的第二篇K-means&#xff0c;感兴趣的同学可以前往http://ihoge.cn/2018/clustering.html 阅读完整版。 二、K-means 1. 算法步骤 <1> 选择KK个点作为初始质心 <2> Repeat: <3> 将每个点指派到最近的质心,形成K" role="pre…

百度seo公司整站优化软件用多说的网站

外边距折叠(collapsing margins) 毗邻的两个或多个margin会合并成一个margin&#xff0c;叫做外边距折叠。 规则如下: 两个或多个毗邻的普通流中的块元素垂直方向上的 margin会折叠浮动元素 / inline-block元素 / 绝对定位元素 / 行内元素的margin不会和垂直方向上的其他元素…

公司网站建设注意什么省内新闻最新消息

功能需求 在 SwiftUI 开发的 App 界面中,有时我们需要在全局层面向用户展示一些消息: 如上图所示:我们弹出的全局消息横幅位于所有视图之上,这意味这它不会被任何东西所遮挡;而且用户可以点击该横幅关闭它。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求…

西双版纳网站建设开发公司网站建设网站优化相关资讯文章

参考&#xff1a;逆向-IDA工具的基本使用 地址&#xff1a;https://qingmu.blog.csdn.net/article/details/118862881 目录1、文件的打开与关闭2、窗口介绍&#xff1a;图形 文本 其他窗口2.1、图形界面&#xff1a;2.2、文本界面&#xff1a;2.3、反汇编窗口2.4、 十六进制窗口…

高端网站价格wordpress导航栏美化

目录: Spring Boot 整合 "Servlet三大组件" &#xff1a;1. 使用 "组件注册" 的方式 "整合Servlet三大组件" ( 实际操作为 : 创建自定义的"三大组件"对象 结合刚创建"的自定义组件对象"来 将 XxxRegistrationBean对象 通过…

桂林哪里做网站门户网站系统建设项目投标书

一、实验目的 1、加深对离散信号频谱分析的理解&#xff1b; 2、分析不同加窗长度对信号频谱的影响&#xff1b; 3、理解频率分辨率的概念&#xff0c;并分析其对频谱的 影响&#xff1b; 4、窗长和补零对DFT的影响 实验源码&#xff1a; 第一题&#xff1a; % 定义离散信…

商丘哪里做网站重庆行业网站建设

Vue.js 一个核心思想是数据驱动。所谓数据驱动&#xff0c;是指视图是由数据驱动生成的&#xff0c;我们对视图的修改&#xff0c;不会直接操作 DOM&#xff0c;而是通过修改数据。它相比我们传统的前端开发&#xff0c;如使用 jQuery 等前端库直接修改 DOM&#xff0c;大大简化…