《操作系统-真象还原》阅读总结/遗憾离场/加倍努力 出人头地

news2024/10/6 6:00:41

文章目录

    • 关于我又被老天算计
    • 奇奇怪怪的 BUG
    • 调试 BUG 的心理历程
    • 最后两天通宵调试程序的宵夜
    • 阅读建议
    • 本书所有笔记
    • 最后

关于我又被老天算计

2022-09-14 读这本书,原计划是 2022-12-15 之前完成的,我自信能完成,因为11月下旬我已经开始阅读第十四章了。但意外来了,收到学校通知,因为疫情原因,所以将考试时间提前到了12月底,规定12月底回家。此时我还不慌,因为我最后半个月复习和完成大作业完全来得及,读书计划还是不变。

但最终还是人算不如天算,我记得那时是12月4号,收到小道消息说下周考试,后来也确认了确实是的,我当时就:

image-20230107192155288

虽然基本上都学过,因此也不算很慌,随即我转念一想,便:

image-20230107193243655

至于大作业,虽然没学过软测,但我有开发经验,所以就进行了一波瞎扯,有了思路倒是做的很快,软测我用了两天,不过答辩出了点意外,我记得老师要我讲两个BUG,我当时脑子没清醒,加上这个大作业已经写完一个星期了,人是懵的,就选了修改密码的两个BUG讲了,其实我是要讲几个开发比较常见但却容易忽略的,例如文件上传、CSRF等。
我大作业只写了一半,但是我最后的期末分数倒是不低的(惊讶是因为旷课一学期,后面两个月有时也会去上课,所以平时分比较少),估计是老师看了我这一部分的内容或是因为我是一个人一组吧,哈哈。

至于考试的科目,那就简单了,高分通过,欧耶 \(o)/~


奇奇怪怪的 BUG

欧了,言归正传,学校的事情解决了之后,我大概是 20 号开始重新回来看书,花了几天时间复习了一下前面的内容,一直到 2023-01-05 我看到了最后一章倒数第三节 15.5 加载用户进程,但这小节我遇到了很大的问题,这小节代码敲完了后,运行后我遇到了一些问题,首先我是解决了这个问题:

image-20230107195320875

导致这个问题的原因是申请的内存空间虚拟地址和 prog_no_arg 文件中 program header table 的段产生了冲突,我这里第一个段没问题,而第二个段需要加载到 B 地址,但系统申请的地址恰好与要加载的那个地址一样,因此我猜测申请了空间后,由于对该空间的写入操作,导致原本的数据出了问题,而最后通过 sys_free 释放这个空间的时候,因为本身内存管理是采用 area 分配的,其中分配的是内存块 mem_block,我们申请的那个空间就是 mem_block,其地址恰好是 B,最终释放空间也是释放的 mem_block,但此时由于将 prog_no_arg 的段加载到了 mem_block 的这个位置,导致原本的数据出现了错误,最终得出 large 非法,我这里是一个负值。

注意:写这篇文章已经7号了,过了两天了,因此 BUG 我也是凭借回忆写的,如有错误还请见谅。

上面的异常还好,但下面的这个异常,完全可称之为“灵异事件”。

image-20230107201238299

大致 BUG 的产生流程是这样的:

  1. 从 file_read 调用 ide_read 前,我的 area -> desc -> free_list 是 0xA(假设)。
  2. 调用完 ide_read 后,我的 xxx -> free_list 变成 0xB(不是我要的)。
  3. 上面是收集 all_blocks,下面是 while 读取数据。
  4. 使用 ide_read 读取数据,在 idea_read 内部我的 xx -> free_list 又变成了 0xA。
  5. ide_read 完成后,回到 while 中,此时 xx -> free_list 又 tmd 变成了 0xB。

因为释放空间需要 0xA,而最后得到 0xB,或许因此导致 PF 缺页异常。

这真的太太太灵异了!!!

我猜测可能是文件系统的问题。

调试 BUG 的心理历程

整本书下来,我都是 Bochs + 一大堆的 print 来解决的,就像上面的两张图一样,调试的过程我只能说…苦不堪言…

在和群友探讨时,我发现居然可以用 vscode 调试内核代码,但可惜的是需要借助 Qemu 来实现,可这本书是 Bochs,当然我也尝试过将其迁移,但我没接触过 Qemu 以及 gdb,因此我在尝试了几个小时后我便放弃了 😔。

我调试了差不多两天的时间(通宵肝!😢),已经尽力了,我百度了也gitee和github找过相关的代码,结果让我惊讶的是,居然都没有编写第十五章的代码,又或者就是停留在了和我一样的最后三小节里。当然也有凭借自己的能力去修改成功通过的,但很抱歉我很菜。

如果我要迁移到 Qemu,那就要花更多的时间去学习 Qemu 和 gdb,其中的配置、使用过程中遇到的问题、bug 等所需要的时间太多了,再则就是这本书我已经学了 97%,剩下的 %3 相比之下就显得没那么重要了,因为我这新的一年还有很多很多事情要做,所以思虑再三,最终还是不得不放弃最后的三小节 😭。

最后两天通宵调试程序的宵夜

image-20230107210822199

《喜洋洋与灰太狼》好好看 😋!

阅读建议

对于本书,我建议先看下面两本:

  1. 《汇编语言》—— 王爽
  2. 《X86汇编-从实模式到保护模式》—— 李忠、王晓波

至于X86那本我只是把前面的实模式快速的过了一遍,因为这些内容在《汇编语言》里几乎都讲过了,因此我着重看了“保护模式”那一块的内容。
但后面的内容有些会用到前面的,所以自己做好准备,用到的时候看一看就行。

接下来就是多看多敲多练咯~

本书所有笔记

  • 《操作系统-真象还原》06. 完善内核
  • 《操作系统-真象还原》07. 中断
  • 《操作系统-真象还原》08. 内存管理系统
  • 《操作系统-真象还原》09. 线程
  • 《操作系统-真象还原》10. 输入输出系统
  • 《操作系统-真象还原》11. 用户进程
  • 《操作系统-真象还原》12. 进一步完善内核
  • 硬盘 / 硬盘控制器主要端口寄存器 / Controller Register
  • 《操作系统-真象还原》14. 文件系统
  • 《操作系统-真象还原》15. 系统交互

可以发现第六章前面没有,因为…学过了,在之前的笔记中有记录,所以就没写。(或许可以考虑去翻一翻我的专栏?)

最后

说起来,在学校学习挺心累的…,在学校的琐事太多,时间一点都不连续,哎,可是又不得不服从这规则,期间还因为旷课写了一篇1K字保证书,抄了我1小时,艹

这本书是我的第二本操作系统书籍,之前看了《Orange’s一个操作系统的实现》2009 年出的,而这《操作系统-真象还原》这本是 2016 年出的,不得不说确实是有点旧了…

但读下来还是学到了非常多的东西,受益良多呀,哈哈。

这本书共759页,于2023年1月7日阅读至727页,余32页无期 😤!

代码仓库:https://gitee.com/lovexiaoling/lab-os-true-image-restore


最后,祝愿看到这篇文章的你能顺利的读完这本书,并且学到东西!😘
加倍努力,出人头地!

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

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

相关文章

【Linux】初识进程

文章目录进程控制块的引入初识进程控制块(PCB - Process Control Block)什么是PCBLinux下的PCB初见进程ps指令查看进程kill指令挂掉进程通过系统调用接口得到进程的ID(进程标识符)从根目录下的proc文件查看进程通过fork函数创建子进程进程控制块的引入 首先,听到进…

事故复盘 | 对不同的ID更新操作竟然也引发死锁?

对不同的ID更新操作竟然也引发死锁? 文章目录对不同的ID更新操作竟然也引发死锁?背景分析初步分析 - 怀疑程序并发问题进一步分析 - 怀疑主键缺失行级锁失效再进一步分析 - 是否存在死锁条件解决方案复盘附录示例的死锁日志常用故障排查 SQL参考链接背景…

webassembly学习

webassemblywebassembly学习基本理论webassembly介绍wasm介绍基本信息wasm会替换javascript么ASM.js(wasm的前身)将 WebAssembly 作为编程语言的一种尝试wasm应用场景wasm运行原理周边生态WASI 操作系统接口wasi介绍wasmwasi(服务端&#xff…

平台总线式驱动开发——基本框架

1. 总线、设备和驱动 硬编码式的驱动开发带来的问题: 垃圾代码太多结构不清晰一些统一设备功能难以支持开发效率低下 1.1 初期解决思路:设备与驱动分离 struct device来表示一个具体设备,主要提供具体设备相关的资源(如寄存器地…

ES为什么要移除types类型

文章目录elasticsearch(集群)中可以包含多个索引index(数据库) ,每个索引中可以包含多个类型types(表) ,每个类型下又包含多个文档Document(行) ,每个文档中又包含多个字段Field&…

姿态估计评价指标

PCK 正确估计出关键点的百分比 (Percentage of Correct Keypoints),现在已基本不用。 PCKik∑iδ(did≤Tk)∑i1PCK_i^k\frac{\sum_i\delta(\frac{d_i}{d}\leq T_k)}{\sum_i1} PCKik​∑i​1∑i​δ(ddi​​≤Tk​)​ 检测出的关键点与其对应…

1 机器学习之线性回归

学习笔记自,慕课网 《Python3 入门人工智能》 https://coding.imooc.com/lesson/418.html#mid33109 麻雀虽小,五脏俱全 1.1 回归分析 1.2 线性回归问题求解 1.3 寻找最合适的 a、b,引入损失函数的概念 尽可能使损失函数最小即找到了最合适的…

(重要)实数域上一切范数等价的证明

证明:实数域上一切范数等价编辑切换为居中添加图片注释,不超过 140 字(可选)首先需要明确范数等价的条件,这里的条件等价于夹逼,就是A小于等于B,B小于等于A,那么A肯定等于B。利用这个…

【MySQL】InnoDB存储引擎的行结构

文章目录前言1、MySQL的体系结构2、InnoDB逻辑存储结构3、InnoDB记录行结构3.1、概述3.2、语法操作3.3、Compact行格式3.3.1、示意图3.3.2、记录的额外信息3.3.3、记录的真实数据3.3.4、定长字段补充3.4、行溢出前言 MySQL服务器上负责对表中数据的读取和写入工作的部分是存储…

【博学谷学习记录超强总结,用心分享|产品经理基础总结和感悟14】

TOC 第三章, 内容服务平台优化思考 前文中,我们粗略分析了用户阅读内容的诉求和创作者编制内容的诉求,本章笔者尝试结合用户诉求分析平台的内容分发策略,结合创作者诉求分析创作者后台设计思路,创作者后台分析主要从…

Java实现支付宝支付,内网穿透,支付功能实现-57

一:支付业务 1.1 支付宝业务简介 1)网页跳转到支付宝收银台页面。用户可以使用支付宝App扫一扫屏幕二维码,待手机提示付款后选择支付工具输入密码即可完成支付; 2)如果不使用手机支付,也可以点击上图右侧…

Visual Studio解决方案中添加src文件夹的方法

如标题,这个听起来是一个愚蠢的问题,但如果在Visual Studio想添加一个src文件夹,而命名空间不包含src的话,似乎还真不容易。 如果在Visual Studio里新建一个空白解决方案,然后右键解决方案->添加->新建解决方案…

鲲鹏BigData Pro解决方案中Hive组件的部署

1 介绍 本博文基于《鲲鹏Bigdata pro之Hive集群部署》的实验手册进行,目的是方便Hive学习者重用(从本文复制)相关的指令、配置和代码。同时,会对相关的Bash命令解释,达到增进理解的目的。 2 Hive组件的部署 部署的前…

探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter-参数解析

前言 上回,我们大概讲了下HandlerAdapter。今天带大家来认识一下,我们最常用的RequestMappingHandlerAdapter。不过只能给大家先开个头,讲下参数解析。 RequestMappingHandlerAdapter 在介绍HandlerAdapter时,我们就知道Handle…

自己动手写编译器:从NFA到DFA

上一节我们完成了使用NFA来识别字符串的功能。NFA有个问题就是其状态节点太多,使用起来效率不够好。本节我们介绍一种叫“子集构造”的算法,将拥有多个节点的NFA转化为DFA。在上一节我们描述的epsilon闭包操作可以看到,实际上所有由epsilon边…

「ARM32」MMU和页表的映射过程详解

在ARM32中,MMU主要完成虚拟地址到物理地址的映射,并且能够控制内存的访问权限,而页表是实现上述功能的主要手段。页表又分为一级页表、二级页表,在ARM64中甚至还有三级页表。为了便于理解,本章主要讲述一级页表完成段映…

centos7 安装Mysql详细教程

centos7 弃用了Mysql,默认安装了MariaDB,MariaDB是Mysql一个分支,所以要想在centos上安装Mysql,需要先进行卸载MariaDB,避免冲突 本次教程所用环境: 腾讯云服务器:centos7Mysql5.7 1. 卸载Ma…

dubbo源码实践-protocol层-invoker理解

1概述Invoker官方解释:Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个…

Python 机器学习最常打交道的 27 款工具包

为了大家能够对人工智能常用的 Python 库有一个初步的了解,以选择能够满足自己需求的库进行学习,对目前较为常见的人工智能库进行简要全面的介绍。 1、Numpy NumPy(Numerical Python)是 Python的一个扩展程序库,支持大量的维度数组与矩阵运算…

Maix Bit(K210)保姆级入门上手教程

Maix Bit(K210)快速上手 这是K210快速上手系列文章,主要内容是,设备连接,环境准备,运行第一个程序 阅读文章前提:python基础,K210是使用Micropython脚本语法的,因此需要一些python…