当前位置: 首页 > article >正文

操作系统真象还原整体观

操作系统真象还原整体观

说明

该整体观,适合于完成操作系统真象还原代码编写实践的同学。用于从繁复,庞杂的代码细节梳理出主线,完成认知简化与升华。

基于操作系统实践的整体观完美状态应是:讨论某个代码细节,能意识到这是为了完成什么目的,服务于什么样的操作系统原理与机制。当我们讨论某个操作系统原理与机制,能随时回到代码细节,想到大概用什么数据结构,什么算法去实现这些。

特别感谢

梁哲浩、王柔柔、徐琦、崔健、索九博、李瑞东

第一章

使用vmware + ubuntu+ bochs完成环境搭建。

问题问题意义答案(仅做参考)
vmware扮演了什么角色?理解vmware的功能vmware提供了一个虚拟化平台,运行在此平台中的操作系统不会影响到原系统。比如我们在这个平台中运行一个linux发行版,那么这个linux系统就与原windows系统隔离开。这样,我们既能够享受到windows的生活便利(比如游戏,日常软件),也能享受到linux的开发便利(Linux非常适合开发,但是日常使用欠缺)。能扮演这个角色的还有virtulbox,wsl。
ubuntu扮演了什么角色?理解ubuntu的功能ubuntu提供了便捷,高效的开发环境。开发我们的操作系统需要使用众多编译工具,如gcc(编译c语言代码),nasm(编译汇编代码)等,这些在ubuntu上安装与使用就是一行命令的事情。能扮演这个角色的还有众多其他Linux发行版,比如centos,deepin等。
bochs扮演了什么角色?理解bochs的功能模拟完整的 x86 硬件环境,并提供调试功能(如单步执行、查看寄存器/内存)。我们开发的是一个x86_32系统,自然需要模拟x86的硬件环境,而bochs就是扮演此角色。能扮演这个角色的还有qemu,但是qemu并不提供硬件级调试环境,无法更加细致的看到运行细节(单步执行机器指令,查看寄存器等操作),开发操作系统是必须掌握每一句代码会对机器产生什么影响。
三者如何共同发挥作用?理解三者之间的配合vmware+ubuntu提供了一个虚拟,且高效的开发环境。bochs模拟了x86环境,我们开发的操作系统就是在这个模拟的硬件环境上运行。

第二章

按照BISO的规定编写mbr,以实现BIOS能够找到mbr,识别mbr,加载mbr,最后跳转至mbr中执行。

BIOS是电源启动后运行的第一个软件,它在只读存储器ROM上,cpu在开机时cs:ip寄存器会被强行初始化为一个固定值,该固定值就是ROM中的BIOS入口,所以cpu在开机时就会直接执行BIOS。BIOS会进行硬件的检测与初始化,建立中断向量表便于后续可以通过int中断号来实现相关的功能调用,最后BIOS检测启动盘的0号盘面0号磁道1号扇面的内容,若此扇区的末尾2个字节是魔数0x55和0xaa,那么BIOS就会认为此扇区有MBR,接着BIOS就将此扇区的内容加载到物理地址0x7c00处,CPU跳转到0x7c00处执行MBR。

问题问题意义答案(仅做参考)
BIOS的英文全称与中文名称理解BIOS的功能basic input output operating system,基本输入输出系统。从名称中就可以看出,它是一个非常基本的系统,需要一开始就运行。
BIOS为什么能做到开机就运行理解BIOS为什么能一开始就被执行BIOS放在ROM中,而ROM中的内容不会断电消失。CPU开机时,其指令指针寄存器会强制初始化为一个固定值,该固定值就是ROM中的BIOS第一行代码。
ROM与RAM的关系理解二者区别与联系区别:ROM中的内容为只读,但是断电不会消失。RAM中的内容可擦写,断电会消失。
联系:ROM与RAM经过主板的统一编址,可以使用统一的地址进行访问。比如地址0-100访问的是RMA,地址100-200是ROM。
MBR英文全称与中文全称理解MBR的功能Master Boot Record,主引导记录。主的意思是计算机开机以后访问硬盘时所必须要读取的第一个扇区(因为这里存储了元数据,读硬盘先读元数据就像你看论文先看目录),引导的意思是用于引导计算机开机,记录的意思是内容。合起来的意思就是,放在第一个扇区中用于引导计算机开机的内容。
为什么MBR能被BIOS找到理解BIOS与MBR之间的约定因为MBR就放在硬盘第一个扇区中,这个位置是固定的,BIOS会来这里找MBR。
BIOS如何识别第一个扇区中的内容是MBR理解BIOS与MBR之间的约定MBR共512字节大小,最后两个字节是固定的魔术,这样BIOS就知道,哦,这个扇区中的内容是MBR
BIOS如何将接力棒交给MBR,或者换个问法,CPU是如何执行完毕BIOS后又执行MBR的理解BIOS与MBR之间的约定MBR的内容总共就512字节大小,BIOS将这部分内容加载到固定的内存位置后,直接跳转这个固定位置开始执行就行了
编写MBR代码时,为什么会填充大量的0理解BIOS与MBR之间的约定因为MBR是固定大小512字节,最后两字节为魔术。所以我们需要填充大量的0,将魔术挤到最后的两字节位置去

第三章

编写更强大的加载器loader,实现mbr找到、加载、跳转执行loader。

问题问题意义答案(仅做参考)
loader一看名字就是个加载器,MBR的也是用来加载的(加载loader),为什么MBR与loader功能重合理解loader与mbr的关系mbr与bios存在相关约定,导致其只有512字节,程序大小受限导致mbr功能受限。为了完成更多内容,所以我们需要一个功能更强大的加载器loader。所以mbr的使命就是来加载这个loader。就好像以前我们会用ie浏览器下载其他功能更强大的浏览器。
loader与mbr的关系,是不是像mbr与bios那样固定死了理解loader的灵活性不是,mbr去哪里找到loader,loader的大小,加载loader的物理内存地址,都是可以自己决定的,谁叫mbr的内容是我们自己写的呢?

第四章


http://www.kler.cn/a/546284.html

相关文章:

  • python 爬虫教程 0 基础入门 一份较为全面的爬虫python学习方向
  • 11、《Web开发性能优化:静态资源处理与缓存控制深度解析》
  • FFmpeg+SDL实现简易视频播放器
  • 计算机网络原理习题一
  • Spring Data Neo4j
  • 代购系统定制:构建高效、智能的跨境电商解决方案
  • 鸿蒙5.0实战案例:基于List的滑动丢帧性能问题分析思路案例
  • 蓝桥杯 Java B 组之枚举算法(暴力破解)
  • 网络IP地址冲突故障,快速解决方案!
  • yanshee机器人初次使用说明(备注)-PyCharm
  • 谭浩强C语言程序设计(5) 9章
  • 站群服务器和普通服务器有哪些不同之处?
  • Node.js 工具模块
  • 深入浅出理解HBase:大数据时代的“超级仓库”
  • 在 CentOS 系统中配置交换空间(Swap)解决内存不足
  • 《计算机视觉》——角点检测和特征提取sift
  • (萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
  • 【前端框架】Vue3 面试题深度解析
  • 【Elasticsearch源码解读】代码包结构概述
  • 怎么理解 Spring Boot 的约定优于配置 ?
  • C语言如何实现面向对象?——从结构体到自由函数的思考
  • 探索高通骁龙游戏超分辨率技术:移动游戏的未来
  • LeetCode 热门100题-合并区间
  • AWS Database Migration Service
  • 【MySQL】 基本查询(上)
  • 可可泛基因组-文献精读112