在开机时,由于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的祖先。

最新文章

  1. 浅析Java 泛型
  2. JSP实现 乘法口诀输出
  3. 纯CSS实现3D按钮效果
  4. iOS静态库.a文件制作和导入使用
  5. 160926、Java-SpringMVC统一异常处理
  6. Input gameobject vector3 c#
  7. 根据SimpleScheduleBuilder配置不同的SimpleTrigger触发器
  8. 实例讲解MySQL联合查询
  9. qt http 上传文件
  10. 在jQuery中Ajax的Post提交中文乱码的解决方案
  11. ecos的mvcl
  12. excel 下拉级联,重新选第一个,清空后一个已赋值,并且改变后一个下拉的内容。
  13. MD5 in JAVA
  14. Linux安装mysql 在/etc下没有my.cnf 解决办法
  15. HDU 1074 Doing Homework【状压DP】
  16. 廖雪峰Java8JUnit单元测试-1JUnit简介-1JUnit测试
  17. CC2530微处理器接口开发技术——信号灯的设计与实现
  18. Android开发过程中的坑及解决方法收录(二)
  19. mapper代理查询
  20. 一.html介绍

热门文章

  1. asp.net分割字符串的几种方法
  2. Windows Phone 8 Sync
  3. Equivalent Strings
  4. Java基础:继承,封装,多态,抽象类,接口
  5. Debug与Release的区别
  6. android api汇集
  7. webapp 公共样式
  8. 解决微信浏览器无法使用window.location.reload()刷新页面
  9. Kmeans方法
  10. Read4096