本来是想去学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,文件系统相关推荐

  1. 自己动手写Docker学习笔记

    零.前言 本文为<自己动手写 Docker>的学习,对于各位学习 docker 的同学非常友好,非常建议买一本来学习. 书中有摘录书中的一些知识点,不过限于篇幅,没有全部摘录 (主要也是懒 ...

  2. 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ]

    ✅ 操作系统完结篇 文章目录 一.导语 二.文件系统的基础知识点 2.2 文件.记录和数据项 2.3 文件类型 2.4 文件系统模型 三.文件的逻辑结构与存取方法 3.1 文件的逻辑结构 3.2 文件 ...

  3. 《自己动手写操作系统》读书笔记——初识保护模式

    <自己动手写操作系统>读书笔记--初识保护模式 http://www.cnblogs.com/pang123hui/archive/2010/11/27/2309930.html 书本第三 ...

  4. 自己写操作系统学习总结

    怎样自己写一个简单的操作系统? https://www.zhihu.com/question/20207347 我写的时候一些经历: 第一次写的时候3000行左右的就无法调试了,当时主要参考了linu ...

  5. 磨刀不误砍柴工 —— 自己动手写操作系统 入门导引

    磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...

  6. 磨刀不误砍柴工 ——《自己动手写操作系统》入门导引

    磨刀不误砍柴工 刺猬@http://blog.csdn.net/littlehedgehog <自己动手写操作系统>其实阅读所需要的前提不过只是C和汇编了,里面涉及到很多操作系统的东西.于 ...

  7. 自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

    自己动手写操作系统(开篇) 自己动手写操作系统(字符显示) 说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多 了解过计算机启动的同学肯定知道,当计算机启动的时 ...

  8. 操作系统学习笔记目录(暂时不全223)

    操作系统学习笔记目录章节汇总 (暂时不全,目前只有第一章+第二章-浅谈线程,进程-2020.3.6) 文章目录 操作系统学习笔记目录章节汇总 1.打开钢琴的盖子(序章) 1.1-操作系统的概念(定义) ...

  9. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

  10. ROS机器人操作系统学习笔记(三)ROS通信架构

    ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...

最新文章

  1. 华为dra路由方式分为relay和proxy_华为云计算(3)——网络虚拟化
  2. 运维利器-ClusterShell集群管理操作记录
  3. linux 采集cpu 内存,Linux环境获取(cpu、内存、网卡流量等)系统性能数据
  4. 以ABP为基础架构的一个中等规模的OA开发日志
  5. Java 虚拟机部分面试题
  6. 循环数组对象 php,PHP循环遍历stdClass对象的数组
  7. The Architecture of Open Source Applications
  8. 版本控制工具历史的10个里程碑
  9. [Node.js] mySQL数据库 -- NPM包
  10. 【hive】怎么解决Hive中metaData 字符集中文问题?--详细步骤
  11. 亡命逃窜(nyoj523广搜)
  12. php数据字段多怎么存,一个保存时间的字段怎么存储数据
  13. Eero并入Amazon:确保用户隐私政策依然不变
  14. 解决谷歌浏览器flash插件已被屏蔽
  15. JAVA 实现批量PDF 打印,线程池多线程执行(附完整代码)
  16. 微信公众号网页授权登录多域名的解决
  17. 怎么做网站教程html文本文档,HTML新手教程
  18. AccessViolationException
  19. 1278_FreeRTOS_借助prvAddCurrentTaskToDelayedList接口理解delayed task
  20. 【无标题】学习贪吃蛇代码

热门文章

  1. 数据分析(入门篇)-第三章-Show出你的数据-Part2(水晶易表)
  2. 《时间的玫瑰》书中的精髓:知名投资人但斌眼中的价值投资是什么?我们如何秉承价值投资的原则选择有价值的股票?
  3. redis数据类型命令
  4. Wide Deep模型
  5. 【点云处理之论文狂读经典版7】—— Dynamic Edge-Conditioned Filters in Convolutional Neural Networks on Graphs
  6. 【OCR 文字识别】Python中一个不错的OCR库-EasyOCR
  7. 使用Sequelize实现文章和评论的一对多关系并实现评论的按时间排序
  8. Day16_IO框架1(File类, IO流, 字节流字符流, IO异常, Properties)
  9. 可变剪切|rmats
  10. java编写个人所得税_个人所得税JAVA算法