Linux开机流程
2024-10-19 13:18:30
在开机时,由于80x86的特性CS(Code Segment)这个寄存器中放的都是1,而IP(Instruction Pointer)这个寄存器中全部放着0,换句话说,CS=FFFF而IP=0000。此时,CPU就依据CS和IP的值,到FFFF0H去执行那个地方所放的指令。这时候,由于FFFF0H已经到到了高位置的顶端,所以,FFFF0H这个地方总会放一个JMP指令,跳到比较低的位置。
接着,ROM BIOS就会做一些检查的动作,像内存、键盘等等,并在我们俗称的UMB(Upper Memory Block)之中扫描,看看是否有合法的ROM存在(比如SCSI卡上的ROM)。假如有就到里面去执行一些东西,执行完后再继续刚才的行程。到了最后,读取硬盘上的第一个sector。
在这里,假设各位由硬盘启动。因此,就硬盘的构造而言,它的第一个sector称为MBR(Master Boot Record)。因为一个sector是512bytes,而MBR这512bytes可分为两部分,第一个部分为Pre-Boot,占了446bytes;第二部分是Partition Table,占了66bytes。Pre-Boot的作用之一,就是去看看哪个Partition被标为Active,然后去读那个Partition的Boot区。
在Linux的启动方面,一般人最常把LILO或Grub放在MBR或Superblock,假如你把LILO或Grub放在MBR,此时你的屏幕就会出现启动项选择,接着就进行Load Kernel动作。在另一方面,假如你把LILO或Grub安装在Superblock,通常你还会有一个管理开机的程序,也许是放在MBR或者放在一个单独的Partition。再由这个管理开机的程序读取LILO或Grub,进而做Load Kernel的动作。到目前为止,Kernel被load到memory之后,接着又进行了一连串probe周边的动作,像串口、并口、软盘、声卡、硬盘、光驱等,接着mount root Partition。在这之后Kernel会启动init这个process。init这个process的PID为1,它是所有Process的祖先。
最新文章
- 浅析Java 泛型
- JSP实现 乘法口诀输出
- 纯CSS实现3D按钮效果
- iOS静态库.a文件制作和导入使用
- 160926、Java-SpringMVC统一异常处理
- Input gameobject vector3 c#
- 根据SimpleScheduleBuilder配置不同的SimpleTrigger触发器
- 实例讲解MySQL联合查询
- qt http 上传文件
- 在jQuery中Ajax的Post提交中文乱码的解决方案
- ecos的mvcl
- excel 下拉级联,重新选第一个,清空后一个已赋值,并且改变后一个下拉的内容。
- MD5 in JAVA
- Linux安装mysql 在/etc下没有my.cnf 解决办法
- HDU 1074 Doing Homework【状压DP】
- 廖雪峰Java8JUnit单元测试-1JUnit简介-1JUnit测试
- CC2530微处理器接口开发技术——信号灯的设计与实现
- Android开发过程中的坑及解决方法收录(二)
- mapper代理查询
- 一.html介绍