Chinaunix首页 | 论坛 | 博客
  • 博客访问: 996945
  • 博文数量: 829
  • 博客积分: 9980
  • 博客等级: 中将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 14:06
文章分类

全部博文(829)

文章存档

2011年(1)

2008年(828)

我的朋友

分类: LINUX

2008-08-29 14:16:45

 
 对于系统装载过程我们暂时不做介绍,我们假设内核已经被载入内存并且已经完成了异常表、中断表、调度程序、时钟、控制台、内存等初始化,最后进行进程管理器的初始化,从此内核可以开始使用真正的进程了。

  初始化完成后,内核创建第一个进程(初始进程),该进程作为系统的第0号进程,在进程描述符表中由task[0]或INIT_TASK表示。该进程进而再创建了一个进程去执行init()函数进行第二阶段的初始化操作,而初始进程(INIT_TASK)本身则去执行idle循环,可见初始进程在内核初始化后唯一的作用就是去使用空闲的CPU时间。

  第二阶段的初始化工作要比前一阶段轻松一点,因为现在是由一个真正进程完成它们的,而前一阶段都是由“硬件进程”手工去做的。该阶段,这个由INI_TASK创建的新进程需要初始化总线、网络并启动系统中的各种系统内核后台线程,然后再初始化外设、设置文件格式,在这之后,它要为进入系统做最后的准备——初始化文件系统,安装根文件,打开/dev/console设备,重定向stdin、stdout和stderr到控制台,然后搜索文件系统中的init程序,并使用execve()系统调用加载执行init程序。系统自此进入了用户态?br/>
  init程序接着将依照initab配置文件中的选项依次执行:

  1确定运行级别(1-6)

  2运行rc.sysinit脚本中的的系统服务,如激活交换分区,检查磁盘,加载硬件模块等

  3运行规定级别下的服务:/etc/rc.d/rc*.d/下的S打头的服务,如网络服务S*NETWORK。

  4在指定串口上运行getty程序,getty打开终端线,并设置模式,然后运行login程序。如果用户帐号和密码正确(需要通过/etc/passwd验证),则进入用户的工作目录,并按照其工作目录中的设置执行相应的shell。

  到这里用户才可以真正实用操作系统了。

  Idle进程是个奇怪的进程,它是在没有别的任务使用CPU时是才使用CPU的,它的存在价值据说可以延长CPU寿命。

  内核后台线程是种执行在内核态的进程,它们和用户进程一样受调度程序调度,系统利用它们周期性(不一定固定周期)地执行一些自身管理方面的“家务事”。主要的几种内核线程为:bdflush——清理被写过的内存缓冲区;kupdate——按时将内存缓冲区中的信息更新到磁盘中;Kswapd——将内存页交换到磁盘;keventd——关系系统事件;Ksoftirq——执行软件中断。

Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程Linux系统启动标准流程
阅读(275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~