内核时操作系统中最基本的部分,它在系统启动时被加载到内存里面,然后留在内存中管理系统的资源、调度进程等。
- 内核可以管理进程、用户、内存等主要部分。
- 在编译过程中静态链接到主机的内核模块中。
- 有一种可加载的内核模块,在编译时没有链接到主机,但是在系统启动时或启动后被加载到动态加载到内核中。分析图如下:
内核在/boot目录下,引导顺序期间的内核处理由引导加载程序GRUB2加载到内核中,内核执行自解压,然后在内核中初始化。之后解压在内存中加载到inittramfs文件,内核会重新执行systemd程序。
inittramfs是一个小型的根文件系统,在引导时回加载到内存中。系统顺利运行之后会写在掉它,挂载系统真正的根目录。实际上inittramfs是载入到系统启动过程中会用到的一个模块。
内核在初始化时做了以下事情:
- 检测计算机里面的设倍。
- 发现设备后将设备的驱动程序初始化并加载内核中。
- 载入必要的驱动程序后,以只读的方式挂载到根目录文件系统中。
- 内核将载入第一个Linux内核中。
systemd守护进程
systemd是内核主动调用的第一个程序,它的主要功能就是准备软件环境,为用户使用系统做准备。在systemd的启动序列中可以通过default.target来设置系统启动到图形目标(graphical.tartget)还是多用户目标(muti-user.target)。图形目标将显示登录界面,用户可以登录到桌面环境;多用户目标将显示命令提示符,用户可以在没有桌面环境的情况下登录到GUI环境。
target可以为系统提供不同的目标服务,相当于Linux之前System V的运行级别。除了之前两个目标,还有rescue.target等不同的目标。systemd的启动顺序如下图:
systemd的目标扩展单元的扩展名是“.target”它取代了之前的运行级别(runlevel),允许用户在启动时只启动某一个特定的服务。运行级别可以用来定义操作系统当前正在运行的功能级别,级别从0到6具有不同的功能。另外,系统启动完成之后,会创建很多的进程。而systemd的目标单元之间的对应关系。
目标 | 说明 | 运行级别 |
default.target | 系统启动时的默认目标 | —— |
sysinit.target | 在系统启动时进行初始化的设置目标 | —— |
rescue.target | 管理员在发生故障或者维护时的使用目标,管理员输入root密码登录来执行维护工作 | 1 |
basic.target | 系统启动时进行基本设置的目标 | —— |
muti-user.target | 基于文本的多用户设置目标 | 3 |
graphical.target | 图形界面登录目标 | 5 |
如果你想查看自己系统中的目标是哪一个,可以使用systemctl命令查看,不过要在这个命令后边加一个子命令get-default才行。那如果想修改这个默认的目标该怎么办。可以利用另一个子命令set-default就可以。结果如下:
从上面可以看出属于图形化界面。
如果将当前正在运行的目标迁移到另外一个目标,需要执行systemctl命令的子命令isolate和init命令。
目标迁移 | systemctl isolate | init5 |
至graphical.target | systemctl isolate graphical.target | init3 |
移至muti-user.target | systemctl isolate muti-user.target | init3 |
转到rescue。target | systemctl isolate rescue.target | init1 |