课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习软件编程开发技术,而今天我们就一起来了解一下,Linux系统的启动过程,希望通过对本文的阅读,大家对于Linux的学习有更多的了解。
当计算机电源通电后,BIOS会进行开机自检(Power-On-Self-Test,POST),对硬件进行检测和初始化。因为操作系统的启动会使用到磁盘、屏幕、键盘、鼠标等设备。下一步,磁盘中的一个分区,也被称为MBR(MasterBootRecord)主引导记录,被读入到一个固定的内存区域并执行。这个分区中有一个非常小的,只有512字节的程序。程序从磁盘中调入boot独立程序,boot程序将自身复制到高位地址的内存从而为操作系统释放低位地址的内存。
复制完成后,boot程序读取启动设备的根目录。boot程序要理解文件系统和目录格式。然后boot程序被调入内核,把控制权移交给内核。直到这里,boot完成了它的工作。系统内核开始运行。
内核启动代码是使用汇编语言完成的,主要包括创建内核堆栈、识别CPU类型、计算内存、禁用中断、启动内存管理单元等,然后调用C语言的main函数执行操作系统部分。
这部分也会做很多事情,先会分配一个消息缓冲区来存放调试出现的问题,调试信息会写入缓冲区。如果调试出现错误,这些信息可以通过诊断程序调出来。
然后操作系统会进行自动配置,检测设备,加载配置文件,被检测设备如果做出响应,就会被添加到已链接的设备表中,如果没有相应,就归为未连接直接忽略。
配置完所有硬件后,接下来要做的就是仔细手工处理进程0,设置其堆栈,然后运行它,执行初始化、配置时钟、挂载文件系统。创建init进程(进程1)和守护进程(进程2)。
init进程会检测它的标志以确定它是否为单用户还是多用户服务。在前一种情况中,它会调用fork函数创建一个shell进程,并且等待这个进程结束。后一种情况调用fork函数创建一个运行系统初始化的shell脚本(即/etc/rc)的进程,这个进程可以进行文件系统一致性检测、挂载文件系统、开启守护进程等。
然后/etc/rc这个进程会从/etc/ttys中读取数据,/etc/ttys列出了所有的终端和属性。对于每一个启用的终端,这个进程调用fork函数创建一个自身的副本,进行内部处理并运行一个名为getty的程序。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。