启动部分
BIOS
计算机通电后,第一件事就是读取刷入ROM芯片的开机程序,这个程序叫做基本输入输出系统(Basic Input/Output System)
硬件自检
- BIOS程序首先检查,计算机硬件能否满足运行的基本条件,这叫做”硬件自检”(Power-On Self-Test)
- 如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止。如果没有问题,屏幕就会显示出CPU、内存、硬盘等信息。
启动顺序
- 硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。
- 这时,BIOS需要知道下一阶段的启动程序具体存放在哪一个设备
- BIOS需要有一个外部储存设备的排序,排在前面的设备就是优先转交控制权的设备。这种排序叫做”启动顺序”(Boot Sequence)
- BIOS按照”启动顺序”,把控制权转交给排在第一位的储存设备
主引导记录
- 计算机读取该设备的第一个扇区,也就是读取最前面的512个字节。如果这512个字节的最后两个字节是
0x55
和0xAA
,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给启动顺序
中的下一个设备 - 这最前面的
512
个字节,就叫做主引导记录
(Master boot record,缩写为MBR)
主引导记录的结构
主引导记录只有512个字节。它的主要作用是告诉计算机到硬盘的哪一个位置去找操作系统。
- 第1-446字节:是用来记录系统的启动信息的,调用操作系统的机器码
- 第447-510字节(64个字节):分区表(Partition table),分区表的作用,是将硬盘分成若干个区
- 第511-512字节:主引导记录签名(0x55和0xAA)
分区表
- 磁盘分区是使用分区编辑器在磁盘上划分几个逻辑部分
- 磁盘一旦划分成多个分区,不同类的目录与文件可以存储进不同的分区内
- 主引导记录因此必须知道将控制权转交给哪个区
- 分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做主分区
- 第1个字节:如果为0x80,就表示该主分区是激活分区,控制权要转交给这个分区。四个主分区里面只能有一个是激活的。
- 第2-4个字节:主分区第一个扇区的物理位置(柱面(Cylinder)、磁头(Heads)、扇区号(Sector)等等)
- 第5个字节:主分区类型,比如FAT32、NTFS等
- 第6-8个字节:主分区最后一个扇区的物理位置
- 第9-12字节:主分区第一个扇区的逻辑地址
- 第13-16字节:主分区的扇区总数
扇区
- 扇区是硬盘存储上的概念,机械硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区,若干个扇区就组成整个盘片
- 扇区是硬盘上最小的读写单位,这个是硬盘决定的,不是操作系统决定的
- 对现在的硬盘来说,逻辑扇区的大小等于物理扇区的大小,所以也并没有严格区分物理扇区和逻辑扇区
物理扇区
物理扇区就是底层硬件意义上的扇区
逻辑扇区
- 而在物理扇区之上,操作系统划分的逻辑扇区,是为了方便操作系统读取写入硬盘数据而设置的,其大小与具体地址,都可以通过一定的公式与物理地址对应
- 同时如果出现的坏扇区,系统可以通过逻辑扇区,将物理上的坏扇区地址,重新定位到硬盘上备用的好扇区上,这样也就延长了硬盘的使用寿命
硬盘启动
计算机的控制权就要转交给硬盘的某个分区了
四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做”卷引导记录”(Volume boot record,缩写为VBR)
操作系统
- 控制权转交给操作系统后,操作系统的内核首先被载入内存。
- 以Linux系统为例,先载入
/boot
目录下面的kernel
。内核加载成功后,第一个运行的程序是/sbin/init
。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代 - 然后,
init
线程加载系统的各个模块,比如窗口程序和网络程序,直至执行/bin/login
程序,跳出登录界面,等待用户输入用户名和密码。
硬件设备文件名
- 只要插入硬盘,Linux会自动检测和分配名称
- 一个硬盘可以分成多个分区,每个分区都会有一个系统分配的名称
- 第一块SCSI硬盘名称叫sda,它的第一个分区叫sda1
硬件 | 设备文件名 |
---|---|
IDE硬盘 | /dev/hd[a-d] |
SCSI/SATA/USB硬盘 | /dev/sd[a-p] |
光驱 | /dev/cdrom或/dev/hdc |
软盘 | /dev/fd[0-1] |
打印机(25针) | /dev/lp[0-2] |
打印机(USB) | /dev/usb/lp[0-15] |
鼠标 | /dev/mouse |
分区
- 磁盘分区是使用分区编辑器在磁盘上划分几个逻辑部分
- 磁盘一旦划分成多个分区,不同类的目录与文件可以存储进不同的分区内
- 分区表的长度只有64个字节,里面又分成四项,每项16个字节。所以,一个硬盘最多只能分四个一级分区,又叫做主分区
扩展分区
- 随着硬盘越来越大,四个主分区已经不够了,需要更多的分区. 但是,分区表只有四项,因此规定有且仅有一个区可以被定义成扩展分区(Extended partition)
- 所谓扩展分区,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做逻辑分区(logical partition)
- 为了突破4个分区的限制,就取出一个分区作为扩展分区
- 扩展分区最多只能有1个
- 主分区加扩展分区最多有4个
- 不能写入数据,只能包含逻辑分区,逻辑分区最多是23个
格式化
- 格式化是指根据用户选定的文件系统(如FAT16(2G),FAT32(4G)、NTFS、EXT2、EXT3、EXT4)对分区进行划分
- 目的是为了更好的写入和读取数据
- 主要是把整个分区切分成等大小的数据块,每个数据块是4KB,10K需要使用2个半的数据块。是存放文件的最小空间。
- 微软操作系统(DOS、WINDOWS等)中磁盘文件存储管理的最小单位叫做簇
- 簇(cluster)的本意就是一组,即一组扇区(一个磁道可以分割成若干个大小相等的圆弧,叫扇区)的意思。因为扇区的单位太小,因此把它捆在一起,组成一个更大的单位簇更方便进行灵活管理
- 在分区中划出一片用于存放文件分配表,目录表等用户文件管理的磁盘空间。
- ID
- 修改时间
- 权限
- 数据块位置
- 格式化会清空数据
挂载点
- 为了让Linux系统中可以访问这些分区,需要把这些分区挂载到对应的目录上
- 在Linux中是把目录称为挂载点
- 把目录和分区链接在一起的过程成为挂载
- /为根目录,必须挂载到一个分区上,默认所有子目录都会写入这个分区
- 同一级目录下面的所有子目录可以有自己的独立存储空间
- 必须有的分区
- / 根分区
- swap分区(交换分区,虚拟内存,一般为内存的2倍,不要超过2G)
- 推荐分区
- /boot (启动分区,200M) 单独分区,避免分区写满造成系统无法启动
挂载示例:
/dev/sd2
挂载到了/
目录上,也就是说向/
目录下在写文件就是往/dev/sd2
分区里写文件/dev/sd1
挂载到了/boot
目录上,也就是说向/boot
目录下在写文件就是往/dev/sd1
分区里写文件/dev/sd3
挂载到了/home
目录上,也就是说向/home
目录下在写文件就是往/dev/sd3
分区里写文件