第六十一讲——linux的详细启动流程 本文共有12817个字,关键词: 为了更深层次的理解,再次对linux启动流程进行了解。 当我们在按下开机键的时候,机器会进行自我检测,POST加电自检,自检的程序是出厂的时候就设置好了,在加电自检的时候会将固化在ROM中的程序(指令)映射到物理内存当中,此时CPU就能够读取到RAM中的指令,进行硬件自检的流程,各个硬件,包括CPU、散热风扇是否正常,如果自检通过,则会根据BIOS中定义的设备启动顺序(boot sequence),去找操作系统所在的位置,如果没有启动顺序,设备就会混乱,所以计算机是按照设定好的顺序自上而下的取寻找启动设备的MBR(硬盘的第一个为512字节的扇区,但是当存储设备的容量大于2T的时候,设备采用的是GPT格式),MBR中有一段占据446byte的引导程序(boot loader),boot loader主要用于通过MBR中的分区表查找活动分区,也就是说boot loader能够找到操作系统所在的分区,并加载分区上的操作系统的内核。 当BIOS中设定的启动顺序中的第一个设备不存在MBR的时候,会从第二个设备上寻找,但是当第一个设备上存在MBR但是MBR已损坏时,是不会继续到第二个设备上寻找MBR,这一点我们必须要搞清楚,也就是说,按照BIOS中设定的顺序,存在MBR扇区的设备即为被认定的启动设备。 boot loader接管硬件后BIOS会退出,装在选定的磁盘分区上的内核,我们需要知道的是,内核一般是压缩存放的,boot loader加载完内核到内存后完成解压缩,而后将控制权转交给内核,这个时候内核取代了硬件的整体控制权,此时boot loader 完成工作退出。 kernel在接管硬件的时候必须要能够识别CPU、内存,我们之前说过,驱动程序能够使硬件更好的工作,因此内核在接管硬件时必须要去尝试探测每一个硬件,看看这个硬件的特性是什么,能不能够被驱动,能不能正常工作。 内核能提供文件系统,所以以前常说文件系统时内核的功能。 实现进程的管理 实现内存的管理 实现网络的管理 提供安全功能 提供驱动程序 当内核全面接管硬件以后,会启动init进程(/sbin/init),init是一个可执行的二进制程序,我们需要注意的是,init是用户空间的一个主导程序。因此,所有在用户空间所启用的进程都是由init来管理的,当我们需要和硬件打交道的时候才会切换到内核空间。 POST—>BIOS(boot sequence)-->MBR(boot loader)-->init(/sbin/init) 根所在的分区叫rootfs(根文件系统) 在linux中,根是访问其他任何存储设备的入口,当根挂载完毕就要启动操作系统了。 /bin,/sbin是操作系统自身启动就要用到的,不能独立分区。 kernel启动完成后会自动挂载根文件系统,以实现自引用,我们必须要告诉内核,根在上面位置,我们可以向内核传递一个参数,告诉内核,根在哪一个设备上。这一切的前提是内核能够驱动分区,否则是不能够访问rootfs的,这也就意味着内核必须能够探测到硬件分区,并能够访问这个分区。 如果我们将驱动程序做进内核,内核的体积会变得相当庞大,启动内核时所消耗的资源也就会越多,因此,这些驱动很显然是不能直接做进内核中的,他们是内核的功能,但不应该全部都放进内核。 在linux上,内核是由独特的结构的,从内核的设计结构来说,有两种。 一是单内核:将文件系统、进程管理等做进内核,由一个内核来管理,也就是说,内核靠一个进程来完成所有的功能。 二是微内核:内核很小,只有一个核心,将各种外围的功能做成它的子系统,当需要用到这个功能的时候就调用子系统,将子系统装载进内核。 对于但内核来说,任何一个功能出现问题则会殃及池鱼,因为它们是一体的,但是它的逻辑是相对简单的。 对于微内核来说,模块损坏不会引起全局的动荡,但是微内核因为分为多个模块,因此多模块之间的协调是很复杂的。 在实际的运用上,微内核实现的难度对冲了它所具有的的优势,linux属于单内核,对线程的支持并不是特别的好,线程(LWP:轻量级进程) Windows、solaris属于微内核,从根本上来说,微内核的设计才是真正意义上支持多线程。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-30 评论 1867 次浏览