- 论坛徽章:
- 0
|
一 加电
系统(x86)加电后,有一个特殊的硬件电路在cpu的一个引脚上产生一个RESET逻辑值,设置寄存器的值,cpu开始执行一特定的物理地址上的代码(即BIOS)
二 BIOS启动
BIOS进行设备初始化, 设置CMOS里的各项参数,启动自举程序, 查找主引导设备读取第一扇区的主引导记录(MBR),将MBR拷贝到内存的0x7c00处(CPU跳转到此处开始执行载入的代码)
三 运行BootLoader
Cpu执行MBR程序,检查磁盘分区列表,运行嵌入在MBR中的bootloader(stage1阶段),进行必要的初始化,然后将此处代码转移,将bootloader的stage2加载到此处,进行本阶段的初始化,检查内存映射等.如果是多操作系统,则根据选择来决定要启动的系统.找到活动分区后,将第一扇区的引导程序加载到内存开始执行,将内核映像(vmlinuz-xxx)及initrd(ramdisik)读入内存,将内核解压, 将/dev/initrd的内容拷贝到/dev/ram0,kernel将挂载 /dev/ram0作为初始化根文件系统,执行linuxrc(包含在initrd中),然后挂载正常的根文件系统,内核成功加载后,系统提示:”ok,booting the kernel”.
四 执行/sbin/init进程(ID为1)
根据/etc/inittab文件的配置信息,init进程进行一系列的外设初始化,为每个终端fork一个子进程,每个进程执行gettty,调用open以读写方式将终端(/dev/console)打开,设置文件描述符0,1,2
五 login程序
当输入用户名后,调用login读取密码进行身份验证,并做以下工作:
1 将当前工作目录改为用户的超始目录(chdir)
2 调用chown改变该终端的所有权
3 将该终端设备的访问权限改为用户读和写
4 调用setgid和initgroups设置进程的组ID
5 用login得到的信息初始化环境
6 login进程变为登录用户的用户ID,并调用该用户的登录shell
至此,一个用户的会话开始运行
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/40925/showart_336465.html |
|