系统启动与Linux的初始化

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

时间: 2024-10-02 14:28:35

系统启动与Linux的初始化的相关文章

linux文件系统 - 初始化(二)

一.目的 本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd. initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序.在linux初始化的初级阶段,它提供了一个基本的运行环境.当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd. 如果是嵌入式设备,那么最终的文件系统就是initrd. 二.cpio文件格式 initrd常用的的文件格式是cpio,cpio格式记录了文件系统的结构和内容. cpio格式具

linux系统初始化& 优化总结文档

16条优化汇总 1-不用root管理,以普通用户的名义通过sudo授权管理 2-更改默认的远程连接ssh服务端口,22-->55113,禁止root用户远程连接,只监听内网ip(使用vpn,视情况而定) 3-定时自动更新服务器时间,使其和互联网时间同步 4-配置yum更新源,从国外更新源下载安装软件包 5-关闭selinux及防火墙(生产环境中,如果使用了外部ip一定要调整防火墙) 6-调整文件描述符的数量,进程及文件的打开都会消耗文件描述符 7-定时自动清理邮件目录垃圾文件,防止innodes

linux文件系统 - 初始化(一)

术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 struct super_block:超级块 struct dentry:目录 struct inode:索引节点 一.目的 linux文件系统主要分为三个部分:文件系统调用:虚拟文件系统(VFS):挂载到VFS的实际文件系统. 其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树.

linux 服务器初始化优化脚本

linux 服务器初始化优化脚本 ---------------------------------------------------------------------------------------- #!/bin/bash ## Writes By Tian ## Ver 1.1.0 at 20180705 #关闭 ctrl + alt + del (linux 6.x ) echo "关闭 ctrl + alt + del ......." sed -i "s/

Linux启动初始化配置文件

Linux启动初始化配置文件(1)/etc/profile 登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ect/bashrc Ubuntu没有此文件,与之对应的是/ect/bash.bashrc bash.bashrc 是交互式shell的初始化文件. (3)~/.profile 某个用户读取的配置. 若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~ /.bash_login,若前两者不存在,读取~ /.prof

Linux内存初始化(一)

一.前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众.另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成在十几秒的镜头中,可以让观众很快的了解一个事物的发展脉络.对应到技术层面,慢镜头有点类似情景分析,把每一行代码都详细的进行解析,了解技术的细节.快镜头类似数据流分析,勾勒一个过程中,数据结构的演化.本文采用了快镜头的方法,对内存初始化部分进行描述,不纠缠于具体函数的代码实现,只是希望能给大家一个概略

linux系统初始化--​配置主机网络

配置主机网络 安装完成linux 系统后,我们需要为主机配置一个可用的网络地址 下面以配置eth0接口为例来说明下 说明 在RHEL7中重新定义了Linux网卡的命名规则,不再遵循原来的eth[0,1,--].下面的例子中全部使用RHEL6的示例. 关于RHEL7的网卡命名原则 在进行centos7的pxe安装测试中发现了网卡命名不再遵从来有的命名规则而启用了最新的命名方式,官网文档描述如下: 在 Red Hat Enterprise Linux 7 中,systemd 和 udevd 支持大量

linux文件系统 - 初始化(三)

一.目的 内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs.proc文件系统,加载了磁盘驱动程序驱动程序等.接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件.加载磁盘文件系统.从rootfs切换到磁盘根文件系统等工作. 由于在不同的linux发行版中,init的实现方式差异很大,不能将所有的发行版都分析一遍,因此本文选取ubuntu12.04发行版来描述如何从rootfs切换到磁盘根文件系统. 二.创建磁盘设备文件 init程序使

Linux内存初始化(二)identity mapping和kernel image mapping

一.前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程.想要了解一些概述性的.框架性的东西可以参考内存初始化文档. 本文的代码来自ARM64,内核版本是4.4.6,此外,阅读本文最好熟悉ARMv8中翻译表描述符的格式. 二.create_table_entry 这个宏定义主要是用来创建一个中间level的translation table中的描述符.如果用linux的术语,就是创建PGD.