首页 > 系统服务 > 详细

centos(linux)启动流程

时间:2020-08-25 09:28:21      阅读:81      评论:0      收藏:0      [点我收藏+]

CentOS系统启动流程——基础知识

Linux系统的组成部分:

除去硬件部分linux系统由,内核+根文件系统组成。内核启动后不是在执行内核代码,就是在执行根文件系统下某个路径中的应用程序的代码(用户代码)。

内核主要功能:

简述

进程管理、内存管理、网络管理、文件系统、驱动程序、安全功能,这些功能就是通过系统调用输出的。

进程管理:

如一个父进程可以fork一个子进程,在必要时还可以将自己的数据复制给子进程一份。在子进程完成任务后还可以将其收回。

内存管理:

c语言编程是可以使用命令malloc函数申请一段内存,使用完成后通过free来释放内存

文件系统:

如打开,读取,编辑一个文件都是通过系统调用实现的。

Glibc

现在程序员在写程序的时候虽然需要发起系统调用,但是有些时候在编程时不是通过发起系统调用完成的,而是,调用把系统调用二次封装的离用户更近的库文件实现的。在linux叫做glibcGlibc是用户空间的内容了,如/usr/lib下的文件。

整个操作系统最核心的是内核、用户空间的应用程序以及必要库文件,其他的都是非必要。如man命令提供的帮助文档。

Lib(库):

库是函数的集合,一个功能模块,lib有其调用接口。通过函数名调用lib文件。库文件也是一个二进制文件,但是他不能独立运行,只能被调用。

过程调用:

procedure,没有返回值的函数

函数调用:

function,有返回值的函数

头文件:不同函数可接受的参数数量和类型不同,所以说每一个库中有多少个函数,每个函数可接受多少参数,以及每个参数类型都应该有一个文件对其加以描述,这个文件就是头文件。

内核设计流派:

单内核设计:如,Linux

把所有功能集成于同一个程序;每个功能都是在此程序中通过线程实现。这就是linux内核线程。一般来讲效率高,但是可能任何一个程序出现问题会影响整个系统

微内核设计:如,Windows, Solaris 

每种功能使用一个单独子系统实现;一般来讲效率比单内核设计低,但是一个子系统出现问题不会影响整个系统。

Linux内核特点:

微内核设计思想比单内核更前卫,但是linux也借鉴了微内核有点,在内核内部支持模块化。

支持模块化:

linux内核支持将每个功能设计为一个独立的功能模块。格式为*.ko

支持模块的动态装载和卸载。

动态装卸载的优点:(小、维护)

由于动态装卸载的存在,我们可以仅保留内核最基本和核心的功能,当需要某模块提供的功能时,只需要临时将其装载进内核。这样内核体系就变得非常小了。

我们知道硬件的驱动程序一般都是由内核提供的,如果内核模块不支持模块化的,得来的结果是:任何一个硬件驱动程序想要被使用,必须提前将其编写整合进内核。如果作为一个内核维护者,在没有充分检验情况下将别人开发的驱动整合进内核,万一有,此驱动带有恶意代码可能造成很大危害(例如对方植入病毒等)。造成内核崩溃,操作系统关闭等。而有了模块化后,任何一个厂商都可自行开发模块,作为用户,我们可以自行选择使用那些模块。维护工作也由厂商自己负责,以保证自己模块的安全性。这也是的linux能随时使用更多的硬件设备了

内核组成部分: 

核心文件:

/boot/vmlinuz-VERSION-release 。可以看到内核文件很小,是因为它将很多功能做成了模块

技术分享图片

模块文件:

/lib/modules/VERSION-release 。模块文件需要和内核版本严格匹配的。模块文件名就是核心文件的后缀名。*.ko文件就是内核模块

技术分享图片

Ramdisk

Init文件在centos56上不同:

Centos5使用的是initrd,即init ram disk

CentOS 5: /boot/initrd-VERSION-release.img ,基于内存的磁盘。

Centos6使用的是init ram file-system

CentOS 6: /boot/initramfs-VERSION-release.img ,基于内存的文件系统。

Ramdisk生成工具

Ramdisk是在安装系统时由工具自动生成的

Centos5使用的是initrd,由mkinitrd

Centos6使用的是initramfs,dracut

问题二:为什么centos56ramdisk 变成ramfs

  这要从,“内核中的特性之一:使用缓冲(写)和缓存(读)来加速对磁盘上的文件访问;”说起centos5中使用的是ramdisk是将内存当做磁盘使用,在linuxcpu 认为磁盘的访问速度太慢,为了加速磁盘访问,会将磁盘内容加载至内存,这样会造成这个“磁盘”会再次被加载到内存一次当做缓冲和缓存。两次缓存,使得资源访问变慢。而ramfs是将内存当做了文件系统。文件系统自己就可以管理自己的缓存和缓冲,避免了两次加载。

  除去核心文件和模块文件还有第三个文件它是非必要的,但是在很多场景中被用到了他就是ramdisk。例如linux开机后加载内核,由内核去加载根文件系统,但是内核中没有根文件系统驱动(都放在/lib/modules下)。/lib在根文件系统上。这就没法去加载硬件驱动。解决此问题有两种方法: 

1、直接将驱动编译进内核,但是驱动有千万种,都将他们编译进内核,会使内核变得太大。这样显然不合适

2、借助于外在的辅助机制。 将所有驱动硬盘的必要工具全部做成一个文件系统,这个文件系统称为虚拟文件系统。这个根文件系统仅仅包含了驱动硬盘的驱动和文件系统。在开机时此文件系统跟随内核一起加载至内存。内核先去加载虚拟文件系统,从虚拟文件系统加载到驱动磁盘的驱动 

问题三:这个虚拟根文件系统中存放的是哪一种驱动呢?是全部的驱动?还是只针对于本机硬盘设备的驱动?

  存放的是只适用于本机磁盘类型的驱动。所以虚拟根文件系统不是提前制作好的,而是在安装操作系统时,在安装最后一步自动生成的适用于自己的电脑的磁盘。

  这个虚拟文件系统是一个本地回环设备文件,并且该文件在系统启动时会自动加载到内存。在内存中把这个文件当做磁盘使用,从而使得内核能加载到临时根文件系统,并装载临时根文件系统中的驱动。随后进行根切换。将临时根切换为真正根。

 

centos(linux)启动流程

原文:https://www.cnblogs.com/wxxjianchi/p/9879502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!