操作系统实践(8)——从Loader到内核

[系列]OS学习-自己写操作系统(5)-loader的产生 终于从保护模式走出来了。太艰难了。 现在我们将正式从引导扇区开始,编写Loader和内核。 由于引导扇区只有512字节,不够完成初始化和载入内核的工作,所以我们要写一个Loader,从引导扇区跳到Loader,由loader完成一切准备工作,然后进入内核。 用bximage创建软盘,在freedos中使用format B格式化B盘,用ultraISO向软盘中加入文件 一、FAT12格式 阅读详情

到目前为止,我们写的代码都是用汇编写的,汇编的缺点就是,第一遍写完了,回头再过来看,又忘了,晦涩难懂。其实我感觉,写汇编的好处,就是能让自己去多了解一下cpu还有其它硬件的结构。硬件的的架构,决定软件的实现方式,硬件就好比基因,软件就是一个个的动物个体。


本次实践涵盖的内容包括《orange’s一个操作系统的实现》书中的第三章末尾、第四章、第五章。因为这些东西比较紧凑。

捋一下思路:
1. 中断与异常,在保护模式下是非常重要的一部分。
写过java代码的同学一定写过”try{}catch(Exception e)”进行异常捕获,也写过类似各种观察者模式类似”onEvent(event,handler)” 的代码。 中断与异常的处理,其实就是这种思想:a.用一个表格,注册一下各种事件发生的时候应该如何处理;2.当cpu执行时发生异常或者中断,就到这个表格中找到相应的处理程序进行处理。

2.用C语言写内核!
其实掌握了上面提到的异常与中断处理机制,接下去,要实现一个操作系统,完全可以用汇编接着写下去。但是,这实在让人崩溃,因为我们还有更好的方法,用C语言写! 书中第四章和第五章,主要目标就是这个。
有了这个目标,接下来就需要解决几个问题:
a. 内核代码会越来越多,而512字节的引导区明显会不够用,怎么办?
b. 如果使用C语言写代码,原有的汇编代码如何与C代码相互调用?
c. 用gcc或者其它编译工具编译后的目标文件,格式与nasm直接编译的汇编代码文件格式不一样,而我们还要把这些编译后的代码加载到内存然后执行它呢!怎么办?
d. 当我们的工程文件越来越多,怎么管理这么多文件?

书中提出的一种解决方案:

a. 引导区的512字节不够用,那就用这512字节的代码,把“Loader”加载到内存里,而“Loader”的任务就是,把“内核”加载到内存里,然后进入保护模式。我们的实践里,系统最后是刻录进一个1.44M的软盘里,所以书中简单介绍了一些FAT12文件系统的格式,重点的就是,如何把文件存进去,

专注于操作系统24之boot,loader,kernel 在第6篇文章中,我们已能导入操作系统内核(该内核非常小,姑且称为内核),但也只是在实模式下,没有进入保护模式。前面我们已经学习了关于保护模式的很多内容,所以让操作系统进入保护模式是非常简单的。这里先解释一下boot,loader,kernel的意思和作用。boot是引导程序,它的作用是把loader(loader专门用于加载kernel)加载到内存,执行loader。loader是加载程序,它的作 阅读详情

相关推荐

操作系统制作第二弹:boot与loader

本博客主要介绍的是boot程序与loader程序的编写,介绍了boot与loader编写的功能顺序

qq_43419761的博客 1424

Usb Boot Loader(1)

此前一直参考《一个操作系统的实现》这本书,遗憾的是书里面是以FAT12文件系统为例讲解的,于是打算用我FAT32格式的U盘实现一个Boot Loader。 这样就造成了一个问题,不能进行单步调试了,只能用打印字符的方式来看程序执行的结果,曾经出现一个小问题调了好久,也真是醉了。我是在Windows系统下用Nasm编写启动代码的。 准备条件: VMware Workstation、 Nasm、

BlackStone的博客 946

某音播放量查询,播放量接口研究,最新版本抓包,修改SO文件绕过SSL

本教程适用于某音27.8,64位版本,32为版本及某音旁侧版本修改方法大同小异,部分旁侧版本修改之后模拟器可能无法抓包,真机测试均可正常抓包,此方法修改后绝大部分包可以正常抓取,但部分包无法抓取,例如验证码,内置浏览器功能,如需抓取此类包可通过 Postern + Charles 实现。

byalipus的博客 1万+

微机原理与接口技术第六版周荷琴课后习题答案及解析(期末重点)

第二章 1.8086/8088CPU可直接寻址多少个内存(字节)单元?多少个I/O端口?它们的外部数据总线各有多少根? 8086/8088CPU使用的是20位地址总线,因此可以直接寻址2的20次方个内存单元(即1,048,576),每个单元大小为1字节,因此可以直接寻址2的20次方个字节的内存。 8086/8088CPU有64K个I/O端口,每个端口占用1字节的地址空间,因此可以直接寻址6...

Wmicheng的博客 1万+

手把手教你低成本复刻大疆C板缓启动电路(附原理图与选型清单)

本文详细介绍了如何低成本复刻大疆C板缓启动电路,包括核心器件选型、电路搭建与调试实战、参数优化方法论及进阶改进思路。通过替代型号和优化设计,实现功能相近的缓启动电路,成本不到原方案的1/3,适合电子爱好者、在校学生和预算紧张的硬件工程师。

weixin_29197051的博客 397

从零组装一台会‘看’的无人机:手把手教你配置NUC机载电脑与D435深度相机(环境搭建篇)

本文详细介绍了如何从零开始组装一台具备视觉能力的智能无人机,重点讲解了NUC机载电脑与D435深度相机的配置方法。通过Ubuntu系统安装、ROS环境搭建、深度学习框架配置等步骤,帮助开发者实现无人机的自主避障和目标跟踪功能。文章还提供了性能优化和常见问题解决方案,是无人机视觉系统开发的实用指南。

weixin_30915275的博客 396

SAP 凭证分割功能 - 概述&系统配置 - Chapter01/02

为何要进行凭证拆分(分割)?在启用凭证分割之前, 在财务凭证在过账时会自动带出默认的利润中心,这利 润中心一般是从其他对象派生出来的(比如从成本中心、WBS 或资产负债表科 目定义默认的利润中心等),但是某些情况下的财务过账是不会派生出利润中 心的,比如说应收或者应付。如果一笔销售凭证上有两个行项目,10 行对应的成品物料 A 的利润中心为 TPCA-100;公司项目Dr/Cr科目金额利润中心10001Dr应收账款20002Cr库存商品A1500TPCA-1003Cr。

weixin_46525734的博客 3952

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 960

手把手教你用SlowFast训练自定义手势识别数据集(附FFmpeg抽帧技巧)

本文提供了一份基于SlowFast架构训练自定义手势识别数据集的完整实战指南。文章重点剖析了数据准备的核心挑战,详细讲解了利用FFmpeg进行高、低帧率抽帧的技巧,并介绍了构建半自动标注流水线、生成符合SlowFast要求的AVA格式数据集文件的具体方法。最后,针对手势识别场景,给出了关键的模型训练配置与调优建议,帮助开发者高效完成从数据到模型的全流程。

s1t2u3的博客 909

从零开始:C#上位机集成YOLO完成摄像头目标追踪(保姆级教程)

新手入门C#上位机+YOLO做摄像头目标追踪,最忌讳的是“只抄代码,不懂逻辑”。这个教程不仅给了完整代码,还把核心原理和踩坑点都讲清楚了,新手跟着走,不仅能跑通demo,还能理解为什么这么写。如果你们在运行时遇到具体问题,比如模型导出失败、代码报错,都可以在评论区留言,我会一一解答。后续也可以出一期工业相机+YOLO目标追踪的教程,帮助大家把demo落地到实际生产中。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1025

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 操作系统实践(7)——分页机制
下一篇: 操作系统实践(9)——进程、多进程、系统调用、进程调度
小灰马
博客等级 码龄17年 55粉丝 42原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值