操作系统启动原理(基于windods)
操作系统启动过程
1、通电后从主板ROM上读取BIOS,进行系统硬件自检
- BIOS烧录在主板的ROM上
- 硬件自检若出现故障,电脑会发出蜂鸣声
2、依照启动顺序将电脑控制权交给下一阶段启动程序
- 依照Boot Priority Order的顺序将控制权给下一个外部存储设备
3、读取主引导记录(MBR)
- 计算机读取该设备的第一个扇区(前512字节)主引导记录结构
- 1-446字节:调用操作系统的机器码
- 447-510字节:分区表
- 511-512字节:主引导签名记录(0x550xAA),表明该设备适用于启动的
- 1字节:0x80表示该主分区为激活分区,控制权要交给它,四个主分区里面只能有一个是激活的。
- 2-4字节:主分区第一个扇区所在物理位置(柱面、磁头、扇区号)
- 5字节:主分区类型
- 6-8字节:主分区最后一个扇区的物理位置
- 9-12字节:主分区第一个扇区的逻辑地址
- 13-16字节:主分区的扇区总数扇区总数决定了这个主分区的长度。也就是说,一个主分区的扇区总数最多不超过2的32次方。如果每个扇区为512个字节,就意味着单个分区最大不超过2TB。
4、硬盘启动
- 计算机的控制权交到存储设备(一般为硬盘)的某个分区
此处分为3种情况
- 卷引导记录计算机会读取激活分区的第一个扇区,叫做卷引导记录(VBR)。卷引导记录存有操作系统在这个分区里的位置
- 扩展分区和逻辑分区随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。具体过程看此处似乎很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种方式启动。
- 启动管理器在这种情况下,计算机读取”主引导记录”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的”启动管理器”(boot loader),由用户选择启动哪一个操作系统。比如 grub
5、操作系统
- 控制权转交给操作系统后,操作系统的内核首先被载入内存。
以Linux系统为例,先载入/boot目录下面的kernel。内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。然后,init线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login程序,跳出登录界面,等待用户输入用户名和密码。
参考自阮一峰的网络日志
MBR和GPT
由于磁盘容量越来越大,传统的MBR分区表(主引导记录)已经不能满足大容量磁盘的需求。传统的MBR分区表只能识别磁盘前面的2.2TB左右的空间,对于后面的多余空间只能浪费掉了,而对于单盘4TB的磁盘,只能利用一半的容量。因此,才有了GPT(全局唯一标识分区表)。
GPT
GPT:GUID Partition Table
GTP分区格式则较为新颖,也是为了逐渐取代MBR而生。谈到GTP分区,就不得不说到UEFI(是什么的缩写?),UEFI也是为了取代历史悠久的BIOS而出现的。GUID分区表格式,之所以被称作UEFI,是因为该分区格式为硬盘上的每一个分区都分配了“唯一”的数据标识符,或者称作”GUID”,意为一个随机长度的字符串,这样的随机性和长度组合,基本可以保障世界上每一个GPT的分区都不会相同。GPT分区没有MBR分区的限制,比如GPT的分区可以超越2TB的容量限制,并且分区的个数没有数量上限。而此时唯一的限制,就是操作系统对GPT分区的限制,比如,在WINDOWS系统条件下,GPT划分最多的分区数量为128,但是相应的,GPT分区也不再需要像MBR分区那样,为了多个分区而必须建立扩展分区。
兼容性
GPT分区通常为了保持对MBR分区的兼容性,从而包含一份所谓的”保护性MBR分区表“,这意味着如果你使用老版本的磁盘工具读取GPT分区,那么工具通常会将GPT分区视为一整块都是扩展分区的MBR硬盘。这一兼容机制是为了保证老版本的磁盘工具不会将GPT分区视为未分区磁盘,从而错误的为GPT重新进行MBR分区操作,而破坏原有数据。
参考自无聊小博
机械硬盘结构

机械硬盘主要由以下几部分组成:机械手臂(Boom),磁头(Head),转轴(Spindle),盘片(Platter)组成,在实际应用中又将盘片分成了磁道(Track),扇区(Sector)和柱面(Cylinder)。每一个盘片的结构如图

磁道
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始。
扇区
每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位。从DOS时代起,每扇区是128×22=512字节,现在已经成了业界不成文的规定。另外扇区的编号是从1开始,而不是0。
柱面
柱面是抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为0磁道,依此往里为1磁道,2磁道,3磁道….,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。
簇
物理相邻的若干个扇区称为簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。在Windows下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,如大小:15 字节 (15 字节), 占用空间:4.00 KB (4,096 字节)。这里的占用空间就是你机器分区的簇大小,因为再小的文件都会占用空间,逻辑基本单位是4K,所以都会占用4K。 簇一般有这几类大小 4K,8K,16K,32K,64K等。簇越大存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。NTFS格式的文件系统簇的大小为4K。
参考自csdn博客