系统启动与Linux的初始化_1
boot 的起源:
the term bootstrap refers to a person who tries to stand up by pulling her own boots. (Understanding The Linux Kernel)
西方谚语: 拽着自己的鞋带站起来 (类似于我们说的:用手拽着自己的头发把自个拎起来)。
对于系统的启动犹如上面的谚语:即用自己的引导程序把自己启动起来。引导程序在硬盘分区中,引导程序必须加载到内存中才能被CPU
执行并完成后续内核的初始化过程,而只有内核才能完成加载工作,这就产生了矛盾。
第一阶段:BIOS载入内存
以下过程解决了类似“鸡生蛋,还是蛋生鸡”的过程:
计算机在加电的瞬间,操作系统尚未启动,RAM芯片(内存)包含的是无用的随机数据;在启动时,有一个特殊的硬件电路在CPU的一个
针脚上产生一个RESET逻辑值,之后(芯片)就把处理器的一些寄存器(包括CS=FFFFH和EIP=0000FFF0H)设置成默认值,接着
执行物理地址CS:EIP即OxFFFFFFF0~OxFFFFFFFF(为“影子内存”中的系统BIOS拷贝,共16byte)。
注:RESET的过程参考:
《IA-32 Intel Architecture Software Developer's Manual_Volume 3_Sysytem Programming Guide》
9.1.1 Processor Stat After Reset
BISO启动过程执行的四个步骤:
1) 加电自检(POST,Power-On Self-Test):对计算机硬件执行一系列的测试,检测目前有哪些设备和这些设备是否工作正常,
会显示诸如BIOS版本号的一些信息;
2) 初始化硬件设备,会显示系统中所安装的所有PCI设备的一个列表;
3) 根据用户在BIOS上预定义的访问次序,搜索操作系统MBR用于启动,BIOS设置的启动可能是硬盘、CD-ROM或软盘等的
第一个扇区(第0扇区,即系统MBR所在);
4) 一旦在以上设备中找到一个有效的设备,即刻将第一扇区的内容(MBR)拷贝到RAM的起始物理地址为Ox00007c00的地方,
然后指针跳转至Ox00007c00处,执行该段拷贝来的代码。
第二阶段:引导装入程序(Boot Loader)
MBR:主引导记录(512bytes)
Master Boot Record
Main Boot Record
组成结构:
446bytes: BootLoader(程序,引导加载器)
64bytes:
其中每16bytes:标记一个分区(即分区表)
2bytes: Magic Number
标记MBR是否有效
第三阶段:从磁盘启动Linux
第四阶段:操作系统(内核启动)
以上阶段另见: http://www.cnblogs.com/ant-colonies/p/6443838.html
系统启动与Linux的初始化_1的更多相关文章
- linux文件系统 - 初始化(二)
加载initrd(上) 一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可 ...
- linux文件系统 - 初始化(一)
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...
- linux文件系统初始化过程(5)---加载initrd(下)
一.目的 linux把文件分为常规文件.目录文件.软链接文件.硬链接文件.特殊文件(设备文件.管道文件.socket文件等)几种类型,分别对应不同的新建函数sys_open().sys_mkdir() ...
- linux文件系统初始化过程(2)---挂载rootfs文件系统
一.目的 本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统. rootfs是基于内存的文件系统,所有操作都在内存中完成:也没有实际的存储设备,所以不需要设备驱动程序 ...
- linux文件系统初始化过程(1)---概述
术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...
- linux系统初始化——文件系统初始化步骤
linux文件系统初始化步骤 System V init启动过程 概括地讲,Linux/Unix系统一般有两种不同的初始化启动方式. 1) BSD system init 2) System V in ...
- Linux启动初始化配置文件
Linux启动初始化配置文件(1)/etc/profile 登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ect/bashrc Ubuntu没有此文件,与之对应的 ...
- Linux内存初始化
start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. machine_specific_memory_setup max_low_pfn = setup_me ...
- 系统启动 之 Linux系统启动概述(2)
博客:http://blog.csdn.net/younger_china/article/details/51615916 Linu系统启动是一个"冗长乏味"的过程,那么我们现就 ...
随机推荐
- 如何将OpenTSDB源码导入eclipse
OpenTSDB的官网上介绍了如何将OpenTSDB源码导入eclipse,官方链接,但步骤超级繁琐,还有一个简便方法,下面以导入OpenTSDB2.0.0为例. 1. 下载OpenTSDB2.0.0 ...
- 转载:Android应用的自动更新模块
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- Selenium并行启动多个浏览器
如果你对 Selenium 自动化测试已经非常熟悉,你仅仅需要一个快速上手来使程序运行起来.本章节的内容能满足不同的技术层次,但是如果你仅仅需要一个可以快速上手的指引,那么就显得有点多.如果是这样,你 ...
- ViewPage+Fragment(仿微信切换带通知)
第一步 : 布局文件 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Li ...
- Learning Python 008 正则表达式-002 findall()方法
Python 正则表达式 - findall()方法 重点 findall()方法的使用 - 程序讲解 简单的符号的使用 正则表达式的库文件是re,先导入库文件: import re .的使用举例 # ...
- [转发]深入理解git,从研究git目录开始
转发学习的啦. 似乎很少有人在读某个git快速教程的时候会说:“这个关于git的快速教程太酷了!读完了用起git来超级舒服,并且我一点也不怕自己会破坏什么东西.” 对git的初学者来说,刚接触git时 ...
- 杭电acm 1049题
一道水题..... 大意是一条1inch的虫子在一个n inch的盒子的底部,有足够的能够每一分钟往上爬u inch,但是需要休息一分钟,这期间会往下掉d inch,虫子爬到盒子口即认为结束.要求计算 ...
- Windows下安装MySQL压缩zip包
MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之 ...
- p1345 奶牛的电信Telecowmunication
传送门 题目 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a ...
- Entity Framework Code-First(10.3):Property Mappings
Property Mappings using Fluent API: Here, we will learn how to configure properties of an entity cla ...