自己动手写操作系统学习笔记(一)---MBR,PBR,BPB,文件系统
本来是想去学NASM的,又发现CSDN论坛中有人有FASM写简单的系统,由于熟悉FASM所以还是用这个吧。
结合书本又查阅了下资料,现在我们所使用的计算机引导过程应该是这样的:
BIOS->MBR->活动分区->PBR->OS LOADER->加载内核
MBR=Master Boot Record,结构如下:
;主引导记录,512字节
struct STRUCT_MASTER_BOOT_RECORDCodes rb 446Partition1 STRUCT_PARTITION_TABLEPartition2 STRUCT_PARTITION_TABLEPartition3 STRUCT_PARTITION_TABLEPartition4 STRUCT_PARTITION_TABLE;结束标志=0x55AAFlag dw ?
ends
这也就是为什么一个硬盘最多有四个分区(主分区和扩展分区,不算逻辑分区)。
此结构包含了分区表结构,如下:
;分区表结构=16字节
struct STRUCT_PARTITION_TABLE;分区状态,0=未激活,0x80=激活State db ?;起始磁头号BeginHead db ?;起始扇区(低6位)和柱面号(高10位)BeginSC dw ?;分区类型FSID db ?;结束磁头号EndHead db ?;结束扇区和柱面号,同BeginHeadEndSC dw ?;相对扇区地址InfoAreaSectors dd ?;总扇区数Sectors dd ?
ends
BIOS把MBR加载到0x7C00地址后会跳转到Codes的代码处执行。
而Codes的作用就是寻找活动分区,并把其PBR加载到0x7C00处,跳转到它的代码中。
PBR=Partition Boot Record,结构如下:
;分区引导记录=512字节
struct STRUCT_PARTITION_BOOT_RECORD;短跳转代码CodeJmp rb 3;厂商名(字符串)OEMName rb 8;BIOS_PARAMETER_BLOCKBPB STRUCT_BIOS_PARAMETER_BLOCK_FAT;中断13的驱动器号DrvNum db ?;磁头号(书上说这一字节是保留的)Head db ?;扩展引导标记=0x29BootSig db ?;卷序列号VolID dd ?;卷标(字符串)VolLab rb 11;文件系统类型(字符串)FileSysType rb 8;代码,数据等Others rb 448;标志=0x55AAFlag dw ?
ends
PBR描述了此分区的属性,如果这个分区是活动的,则会获得CPU控制权(由MBR转移过来的)。
此结构包含了另一个结构BPB,如下:
;FAT磁盘参数表,25字节,FAT12和FAT16应该是一样的
struct STRUCT_BIOS_PARAMETER_BLOCK_FAT;每扇区字节数BytsPerSec dw ?;每簇扇区数SecPerClus db ?;Boot记录占用多少扇区RsvdSecCnt dw ?;共有多少FAT表NumFATs db ?;根目录文件数最大值RootEntCnt dw ?;扇区总数TotSec16 dw ?;介质描述符Media db ?;每FAT扇区数FATSz16 dw ?;每磁道扇区数SecPerTrk dw ?;磁头数(面数)NumHeads dw ?;隐藏扇区数HiddSec dd ?;如果TotSec16=0则由这个记录扇区数TotSec32 dd ?
ends
这个是FAT的,好像12、16、32都是一样的,但NTFS的就不知道了,有心人知道的话麻烦告知一下。
MBR加载活动分区的PBR后会跳转到JmpCode中,虽说是个短调转,但主体代码是在Others中。
活动分区的PBR的作用就是寻找OS LOADER,加载到内存,转移控制权。
为什么要那么麻烦呢?因为一个扇区为512字节,不足以存放加载系统内核的代码,如果代码是作为硬盘数据存在的,则没有这个限制。
后面的内容就不说了,我现在还没写好MBR和PBR呢,争取成品能够兼容windows的MBR。
待续。。。。。。
自己动手写操作系统学习笔记(一)---MBR,PBR,BPB,文件系统相关推荐
- 自己动手写Docker学习笔记
零.前言 本文为<自己动手写 Docker>的学习,对于各位学习 docker 的同学非常友好,非常建议买一本来学习. 书中有摘录书中的一些知识点,不过限于篇幅,没有全部摘录 (主要也是懒 ...
- 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ]
✅ 操作系统完结篇 文章目录 一.导语 二.文件系统的基础知识点 2.2 文件.记录和数据项 2.3 文件类型 2.4 文件系统模型 三.文件的逻辑结构与存取方法 3.1 文件的逻辑结构 3.2 文件 ...
- 《自己动手写操作系统》读书笔记——初识保护模式
<自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...
- 自己写操作系统学习总结
怎样自己写一个简单的操作系统? https://www.zhihu.com/question/20207347 我写的时候一些经历: 第一次写的时候3000行左右的就无法调试了,当时主要参考了linu ...
- 磨刀不误砍柴工 —— 自己动手写操作系统 入门导引
磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...
- 磨刀不误砍柴工 ——《自己动手写操作系统》入门导引
磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...
- 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)
自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...
- 操作系统学习笔记目录(暂时不全223)
操作系统学习笔记目录章节汇总 (暂时不全,目前只有第一章+第二章-浅谈线程,进程-2020.3.6) 文章目录 操作系统学习笔记目录章节汇总 1.打开钢琴的盖子(序章) 1.1-操作系统的概念(定义) ...
- Linux操作系统学习笔记【入门必备】
Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...
- ROS机器人操作系统学习笔记(三)ROS通信架构
ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...
最新文章
- 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化
- 运维利器-ClusterShell集群管理操作记录
- linux 采集cpu 内存,Linux环境获取(cpu、内存、网卡流量等)系统性能数据
- 以ABP为基础架构的一个中等规模的OA开发日志
- Java 虚拟机部分面试题
- 循环数组对象 php,PHP循环遍历stdClass对象的数组
- The Architecture of Open Source Applications
- 版本控制工具历史的10个里程碑
- [Node.js] mySQL数据库 -- NPM包
- 【hive】怎么解决Hive中metaData 字符集中文问题?--详细步骤
- 亡命逃窜(nyoj523广搜)
- php数据字段多怎么存,一个保存时间的字段怎么存储数据
- Eero并入Amazon:确保用户隐私政策依然不变
- 解决谷歌浏览器flash插件已被屏蔽
- JAVA 实现批量PDF 打印,线程池多线程执行(附完整代码)
- 微信公众号网页授权登录多域名的解决
- 怎么做网站教程html文本文档,HTML新手教程
- AccessViolationException
- 1278_FreeRTOS_借助prvAddCurrentTaskToDelayedList接口理解delayed task
- 【无标题】学习贪吃蛇代码
热门文章
- 数据分析(入门篇)-第三章-Show出你的数据-Part2(水晶易表)
- 《时间的玫瑰》书中的精髓:知名投资人但斌眼中的价值投资是什么?我们如何秉承价值投资的原则选择有价值的股票?
- redis数据类型命令
- Wide Deep模型
- 【点云处理之论文狂读经典版7】—— Dynamic Edge-Conditioned Filters in Convolutional Neural Networks on Graphs
- 【OCR 文字识别】Python中一个不错的OCR库-EasyOCR
- 使用Sequelize实现文章和评论的一对多关系并实现评论的按时间排序
- Day16_IO框架1(File类, IO流, 字节流字符流, IO异常, Properties)
- 可变剪切|rmats
- java编写个人所得税_个人所得税JAVA算法