006.Vmware-Linux Kernel 引导加载过程
来源:互联网 发布:移动工作站笔记本知乎 编辑:程序博客网 时间:2024/06/05 03:45
Date: 4-Mar-2011
By: Calvinlee1984@163.com
1. Linux 通过执行不同阶段的引导加载程序程序来引导操作系统,在完成内核等引导之后,最终会由调度器接管 CPU,其通过启用中断来周期性的抢占控制权,处理多个用户进程/客户进程。
2. Linux系统引导共分五步执行:
1) BIOS,包括POST及Runtime服务;
2) 被称为Stage1的MBR位于BIOS配置的磁盘0柱面1扇区,用于启动Stage2;
3) Stage2为Linux boot loader,主要有 LILO (Linux loader)和 GNU GRUB (Grand unified boot loader)两种 boot loader 程序,现主流为 GRUB;
4) Linux kernel(及initrd函数)引导,负责加载并解压 zImage/bzImage kernel 及 initrd 映像,并开始执行 kernel 初使化和引导程序/过程;
5) Init进程,用于启动 linux 配置的各项用户空间服务(demon)进程。
3.系统上电后首先被执行的是BIOS(Base Input/Output System),负责在一位于ROM/FLASH中预定地址开始执行引导程序,主要分二部分:
1) POST(Power On Self Test),负责接通电源时对硬件检测,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等;
2) Runtime,负责为操作系统提供主要与外设I/O有关的服务。
注:当 BIOS POST 执行完后,其将会从内存中清理,而 Runtime 服务会常驻内存,为操作系统提供一些底层的支持。最后 BIOS 将控制权交给MBR 程序。
4.MBR是一个512 Byte固定大小的映像,包括446 Byte的初始程序加载程序IPL的可执行代码和64 Byte的分区表(16 Byte * 4),最后以‘魔数’0xaa55结束
MBR引导程序会将扫描分区表,获得唯一活动分区后,将其中的引导程序读入 RAM 并开始执行。MBR启动的引导程序被称为第二阶段引导程序,是引导的主体,是引导加载的真正部分。Linux 中该阶段有两个流行的程序,LILO (较老)和 GRUB。通过 root 用户执行相关命令来通过 LILO/GRUB 生成默认配置的 MBR ,并写入到启动磁盘 0 柱面 1扇区位置上。
5.grub.conf分析 cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
//有一/boot分区
# all kernel and initrd paths are relative to /boot/, eg.
//所有的kernel及initrd都在/boot/下
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#boot=/dev/sda
default=0 //默认操作系统由default控制,0表第一个硬盘
timeout=5 //默认等待时间
splashimage=(hd0,0)/grub/splash.xpm.gz //启动菜单的背景图片xpm格式
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-5.EL) //启动项目的名称
root (hd0,0) //GRUB 的root分区指保存linux内核的分区->第一硬盘,第一分区
kernel /vmlinuz-2.6.9-5.EL ro root=LABEL=/ //指定载入的内核名称,后面是传递给内核的参数,ro表readonly
initrd /initrd-2.6.9-5.EL.img //指定initrd(初始化linux image)的位置
附:该Vmware-Linux分区表 fdisk -l
在LINUX下每个分区分别用一个目录名表示,从属于一个名为:“根目录”的目录中,用斜杠“/”表示,也称为根(root)。每个分区所在的目录称为该分区的“加载点”,表示计算机启动时将这个分区加载到该目录中。在安装过程中,必须划分一个分区用作根目录。
6.GRUB将默认的内核和initrd映像加载到内存中,接下来就是Kernel加载引导过程:
1) 执行对硬件作基本设置的例程: ./arch/x386/boot/header.S
2) 设置堆栈并清除BSS
3) 解压内核: ./arch/x386/boot/compressed/misc.c->decompress_kernel()
4) 启动swapper进程,初始化页表,启用CPU内存分页
5) 调用Linux kernel main函数,进入与体系结构无关的Linux内核部分./init/main.c这会调用一系列初始化函数来设置中断,执行进一步的内存配置,并加载已初始化的 RAM 盘。最后启动 init 进程,这是第一个用户空间进程(user-space process)./arch/x386/kernel/process.c ->kernel_thread()
6) 启动空任务,调度器接管控制权了(在调用 cpu_idle 之后)。通过启用中断,抢占式的调度器就可以周期性地接管控制权,从而提供多任务处理能力。
- 006.Vmware-Linux Kernel 引导加载过程
- ARMv7:Linux Kernel引导 <1>
- qemu linux kernel & vmware linux kernel
- LINUX引导过程
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- Linux 引导过程内幕
- LINUX引导过程
- LINUX引导过程
- Linux 引导过程内幕
- Linux引导过程概述
- Linux系统引导过程
- C# WebBrowser.DocumentCompleted 多次调用解决方法
- mysql 视图
- XP下通过cygwin架设SSH服务
- SPRING框架——由来和发展
- oracle同步sequence
- 006.Vmware-Linux Kernel 引导加载过程
- 关于nginx的Transfer-Encoding: chunked
- Android快速编译命令及相关make指令
- hbm.xml检索策略
- Axis2 WebService 客户端访问超时,尝试连接3次
- Android本地化开发技巧
- Android开发环境搭建
- UML
- 今天安装mysql时候出现错误MySQL conflicts with mysql-4.1.20-2.RHEL4.1.i386