课堂练习4.4:页式虚存
4-7 课堂练习4.4:页式虚存
缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的缺页处理机制。

第1关版本 0 内核的第一次缺页页故障
任务描述
本关任务:分析版本 0 内核的第一次缺页页故障,回答下列问题: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的第 2 块(每块 1KB )的头 16 字节的内容是什么? 3.引发该页故障的线性地址是什么?该进程的代码段起始地址是多少? 4.该页故障处理前,该线性地址对应的页目录项的地址和值分别是什么? 5.该页故障处理时,申请到的空闲页帧的起始地址是什么?该页帧的头 16 字节的内容是什么? 6.该页故障处理过程中、读入硬盘数据后,上述页帧的头 16 字节的内容是什么? 7.该页故障处理过程中、修改对应的页表项后,上述线性地址对应的页表项的值是什么?
相关知识
为了完成本关任务,你需要掌握: 1.如何跟踪到缺页页故障的发生; 2.如何跟踪可执行文件的执行; 3.如何显示 bochs 虚拟机硬盘中某个可执行文件的内容; 4.在 gdb 中如何知道引发缺页页故障的线性地址是多少; 5.函数 do_no_page 的处理过程是怎样的; 6.在 gdb 中如何查看当前进程的(用户)代码段的起始地址; 7.如何分析线性地址空间到物理地址空间的映射关系; 8.如何计算一个线性地址对应的物理地址; 9.如何计算一个线性地址的高 10 位和中间 10 位的值; 10.页目录项和页表项的格式是什么; 11.如何查看某个页目录项的值; 12.在 gdb 调试时,如何知道某页帧的头 16 字节的内容。
实验准备
本关卡使用版本 0 内核进行分析,内核文件为 ~/os/linux-0.11-lab/0 。
编程要求
分析版本 0 内核的第一次缺页页故障,回答下列问题:将第一关答案填写在/data/workspace/myshixun/第一关.txt。 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的第 2 块(每块 1KB )的头 16 字节的内容是什么? 3.引发该页故障的线性地址是什么?该进程的代码段起始地址是多少? 4.该页故障处理前,该线性地址对应的页目录项的地址和值分别是什么? 5.该页故障处理时,申请到的空闲页帧的起始地址是什么?该页帧的头 16 字节的内容是什么? 6.该页故障处理过程中、读入硬盘数据后,上述页帧的头 16 字节的内容是什么? 7.该页故障处理过程中、修改对应的页表项后,上述线性地址对应的页表项的值是什么?
实验过程及答案
实验过程
默认为0内核所以本次不需额外配置
cd os/linux-0.11-lab ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
[/usr/root]hexdump /bin/sh | less
输入q退出
再次进入gdb调试
答案

第2关第一次使用零页的缺页页故障
任务描述
本关任务回答问题:在版本 0 内核中处理第一次使用零页的缺页页故障时: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的未初始化数据段( BSS )的起始虚拟地址( VMA )是什么? 3.引发该页故障的线性地址是什么? 4.该页故障处理前,该线性地址对应的页表项的地址和值分别是什么? 5.该页故障处理后,上述线性地址对应的页表项的值是什么?该线性地址被映射到的零页(新页帧)的起始地址是什么? 6.该新页帧的头 16 个字节是什么?
相关知识
为了完成本关任务,你需要掌握: 1.如何跟踪到缺页页故障的发生; 2.如何跟踪可执行文件的执行; 3.如何分析一个可执行文件的结构和指令; 4.如何将文件放入 bochs 虚拟机; 5.在 bochs 虚拟机中如何编辑文件; 6.如何将一个文件从 bochs 虚拟机拷入 Ubuntu 容器; 7.在 gdb 中如何知道引发缺页页故障的线性地址是多少; 8.函数 do_no_page 的处理过程是怎样的; 9.在 gdb 中如何查看当前进程的(用户)代码段的起始地址; 10.如何分析线性地址空间到物理地址空间的映射关系; 11.如何计算一个线性地址对应的物理地址; 12.如何计算一个线性地址的高 10 位和中间 10 位的值; 13.页目录项和页表项的格式是什么; 14.如何查看某个页目录项的值; 15.在 gdb 调试时,如何知道某页帧的头 16 字节的内容。
实验准备
本关卡使用版本 0 内核进行分析。
编程要求
本关任务回答问题:在版本 0 内核中处理第一次使用零页的缺页页故障时: 1.该页故障由几号进程引发? 2.在该故障发生前,该进程执行的最后一个可执行文件是什么?该可执行文件的未初始化数据段( BSS )的起始虚拟地址( VMA )是什么? 3.引发该页故障的线性地址是什么? 4.该页故障处理前,该线性地址对应的页表项的地址和值分别是什么? 5.该页故障处理后,上述线性地址对应的页表项的值是什么?该线性地址被映射到的零页(新页帧)的起始地址是什么? 6.该新页帧的头 16 个字节是什么?
实验过程及答案
实验过程
默认为0内核所以本次不需额外配置
cd os/linux-0.11-lab ./rungdb
另开一个终端
cd os/linux-0.11-lab ./mygdb
进入虚拟机
点yes
然后一直c,直到第一次跳到376行
答案

4-8 课堂练习4.4:页式虚存
缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的缺页处理机制。
第1关可执行文件的执行
任务描述
本关任务:在 bochs 虚拟机中编译程序 01.c ,可以得到一个可执行文件。请分析该程序的运行,回答下列问题: 1.执行该文件的 execve 系统调用刚开始执行时,当前进程的用户虚空间是什么?该空间的第一个页表项和最后一个页表项分别是什么? 2.执行该文件的 execve 系统调用执行结束时,该进程的用户虚空间是什么?该空间占据几个页目录项?第一个页目录项的地址和值分别是什么? 3.该可执行文件的代码段和数据段的长度之和是多少?
相关知识
为了完成本关任务,你需要掌握: 1.如何跟踪可执行文件的执行; 2.如何确定一个进程的用户虚空间范围; 3.如何分析一个可执行文件的结构和指令; 4.如何将文件放入 bochs 虚拟机; 5.在 bochs 虚拟机中如何编辑文件; 6.如何将一个文件从 bochs 虚拟机拷入 Ubuntu 容器; 7.如何显示 bochs 虚拟机硬盘中某个可执行文件的内容; 8.如何计算一个线性地址对应的物理地址; 9.如何计算一个线性地址的高 10 位和中间 10 位的值; 10.页目录项和页表项的格式是什么; 11.如何查看某个页目录项的值。
实验准备
本关卡使用版本 0 内核进行分析,01.c 文件存放在/data/workspace/myshixun/exp1下。
编程要求
本关任务:在 bochs 虚拟机中编译程序 01.c ,可以得到一个可执行文件。请分析该程序的运行,回答下列问题: 1.执行该文件的 execve 系统调用刚开始执行时,当前进程的用户虚空间是什么?该空间的第一个页表项和最后一个页表项分别是什么? 2.执行该文件的 execve 系统调用执行结束时,该进程的用户虚空间是什么?该空间占据几个页目录项?第一个页目录项的地址和值分别是什么? 3.该可执行文件的代码段和数据段的长度之和是多少?
实验过程及答案
实验过程
直接简单粗暴手动把
/data/workspace/myshixun/exp1的01.复制到os/linux-0.11-lab/b
cd os/linux-0.11-lab ./run![]()
点yes
打开gdb
然后一直c
转到虚拟机
回到gdb
答案

第2关可执行文件的加载
相关文章:
课堂练习4.4:页式虚存
4-7 课堂练习4.4:页式虚存 缺页异常在 Linux 内核处理中占有非常重要的位置,很多 Linux 特性,如写时复制,页框延迟分配,内存回收中的磁盘和内存交换,都需要借助缺页异常来进行。 本实训分析 Linux 0.11 的…...
javascript实现Stack(栈)数据结构
上一篇文章我们理解了List这种数据结构,知道了它的特点和一些使用场景,这篇文章我们就来看一下栈这种数据结构,这里的栈可不是客栈哦,哈哈 栈其实和List非常像,使用javascript实现都是基于数组来实现 尝试理解Stack …...
Layui深入
1、代码: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>注册页面</title> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; …...
网络层--TCP/UDP协议
目录 一、TCP/UDP协议介绍 1、UDP(User Datagram Protocol)--用户数据报协议 1.1 UDP报文格式 1.2 UDP协议的特性 2、TCP(Transmission Control Protocol )--传输控制协议 2.1 TCP报文格式 2.2 TCP协议的特性 2.3 TCP三次握手 2.4 四次挥手 三、TCP和UDP的区别 四、t…...
前端发送请求之参数处理---multipart/form-data与application/x-www-form-urlencoded
Content-Type就是指 HTTP 发送信息至服务器时的内容编码类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据。 其实前后端发送请求的方式有 text/plain、application/json、application/x-www-form-urlencoded、 multipart/form-data等&…...
解决Ubuntu16.04没声音
第一步:安装 PulseAudio Volum Control Ubuntu没有声音(听不到声音)的解决方法 第二步:No cards available for configuration 【解决Ubuntu18.04没声音:No cards available for configuration】 完美解决…...
12.14每日一题(备战蓝桥杯归并排序)
12.14每日一题(备战蓝桥杯归并排序) 题目 归并排序 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。 第二行包含 n 个整数&…...
面试__Java常见异常有哪些?
java.lang.IllegalAccessError:违法访问错误。当一个应用试图访问、修改某个类的域(Field)或 者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.InstantiationError:实例化错误。当…...
linux 网络子系统 摘要
当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的M…...
java发起http、https请求,并携带cookie、header,post参数放body并可选关闭ssl证书验证,高可用版
公司有个需求是发起https请求对接国家数据接口,需要带header、cookie,并关闭ssl证书验证,搜了很多文章,都说用HttpsURLConnection发起请求,但不知为啥在封装body参数的时候一直报400封装出错,也欢迎指出不足…...
windows系统nodeJs报错node-sass npm ERR! command failed
报错信息 npm WARN deprecated request2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated tar2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asa…...
从零构建属于自己的GPT系列5:模型部署1(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…...
电脑篇——360浏览器打开新标签页自定义,和关闭360导航(强迫症福音)
1.点击“”按钮打开新标签页时会自动打开“资讯聚合”页面,如下图。 如何让我们打开新标签页可以自定义呢(如我这般强迫症必须要新打开的页面干干净净)? 方法:点击号打开新标签页后,在新标签页界面上找到…...
常见的Linux基本指令
目录 什么是Linux? Xshell如何远程控制云服务器 Xshell远程连接云服务器 Linux基本指令 用户管理指令 pwd指令 touch指令 mkdir指令 ls指令 cd指令 rm指令 man命令 cp指令 mv指令 cat指令 head指令 编辑 tail指令 编辑echo指令 find命令 gr…...
ESXI 6.7升级update3
一、适用场景 1、企业已有专业服务器,通过虚拟化环境搭建了vm server; 2、备份整个vm server时,需要使用ovftool工具完成,直接导出ovf模板时报错; 3、升级EXSI6.7的build 8169922版本为update 3版本后,已保…...
bugku--source
dirsearch扫一下 题目提示源代码(source) 也就是源代码泄露,然后发现有.git 猜到是git泄露 拼接后发现有文件 但是点开啥也没有 kali里面下载下来 wegt -r 下载网站的所有内容 ls 查看目录 cd 进入到目录里面 gie reflog 引用日志使用…...
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError 文章目录 Maven项目的Jar包打包问题-没有主清单属性&&ClassNotFoundException 与 NoClassDefFoundError1、问题出现1.1、Jar包运行:没有主清单属性解决方…...
2023-12-14 二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数
二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数 104. 二叉树的最大深度 思想:可以使用迭代法或者递归!使用递归更好,帮助理解递归思路!明确递归三部曲–①确定参数以及返回参数 ②递归结束条件 ③单层逻辑是怎么样…...
利用闭包与高阶函数实现缓存函数的创建
缓存函数是一种用于存储和重复利用计算结果的机制。其基本思想是,当一个函数被调用并计算出结果时,将该结果存储在某种数据结构中 (通常是一个缓存对象)以备将来使用。当相同的输入参数再次传递给函数时,不再执行实际的计算,而是直…...
P1042 [NOIP2003 普及组] 乒乓球 JAVA 题解
题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作&…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...






































然后一直c











