Linux系统一般有4个主要部分:
内核、shell、文件系统、应用程序
KERNEL 内核:负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
SHELL:系统的用户界面,提供了用户与操作系统进行交互操作的一种接口,是一个命令解释器
FILESYSTEMS 文件系统:简称FS,用于管理数据的存储和检索,常见的FS格式有,ext3、ext4、ntfs、fat、xfs、btrfs
应用程序: USER APP、PROGRAMS、UTILITIES、TOOLS
Linux系统启动的几个重要阶段
1. BIOS:基本输入输出系统 , 硬件主板固件
2. GRUB :引导程序 , 主要引导内核启动
3. Kernel : 内核
4. Initrd :虚拟根文件系统,启动中的跳板
5. systemd :系统 init 进程,初始化系统
6. lightdm :负责显示管理
BIOS(Basic Input Output System):基本输入输出系统。BIOS都存放在ROM中,通过烧录的方式烧录进ROM,其中的内容只能读不能改。BIOS的更新指重新烧录BIOS的内存。
• 上电自检:(POST:Power-On-Self-Test)是BIOS功能的一个主要部分。它负责完成对CPU、主板、内存、软硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等的检测。当计算机上的某一个硬件出现问题时,BIOS阶段就会报错,无法启动系统。
• Boot Squence:在完成POST自检后,BIOS将按照系统中设置启动顺序搜寻软硬盘驱动器及CDROM、网络服务器等有效的启动驱动器 ,继续读入操作系统的 GRUB 引导,将系统控制权交给 GRUB 引导。
系统启动流程—BIOS
GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux。
• 主要流程:解析GRUB程序的配置文件grub.conf,并依配置文件决定是否显示系统启动菜单。 然后加载内核和initrd文件至内存中,而后把系统控制权交给内核。
• grub 需要引导分区( boot ), boot 分区会存放内核镜像( vmlinuz ) ,initrd 镜像( initrd.img ) ,grub 配置文件( grub.cfg )
grub菜单
grub第二个选项的子菜单
按e进入编辑模式,ctrl+x或者F10进入系统引导
grub的启动配置文件(/boot/grub/grub.cfg),相关参数:
• boot 分区: set root='hd0,msdos1'
hd0 中的 0 代表第 1 块硬盘,msdos1 中的 1 代表硬盘的第 1 个分区
• linux : 加载内核 vmlinux 和内核参数
• initrd : 加载 initrd.img
• 启动参数: root=UUID=e78cf7f9-b..... (rootfs 主系统地址)
quiet (等价于loglevel=4),日志参数
splash启动屏幕显示动画
security 麒麟系统安全功能
一、简介:
内核(Kernel):负责管理系统的进程、内存、设备驱动程序、文件和网络系统
内核是image镜像文件,版本号为:5.4.18-32,体系结构为X86
二、微内核Microkernel 与宏内核Monolithic Kernel
• 宏内核(集成式内核、单体式内核):运行在单一地址空间的单一的进程。内核提供的所有服务,都以特权模式在内核地址空间中运作,这个地址空间被称为内核态(kernel space)
• 微内核:将系统服务的实现与系统的基本操作规则区分开来。将核心功能模块化,划分成几个独立的进程,各自运行。所有的服务进程,都运行在不同的地址空间。
vmlinuz启动:
• 初始化系统中各种设备的相关配置工作,其中包括CPU、I/O、存储设备等
• 解压 Initrd, 调用虚拟根文件系统的 init 脚本。
• 创建内核态 kernel_init 进程,等待 initrd 调用执行用户态的 init 进程
一、简介
initrd(Initial RAM Disk):在grub阶段被拷贝到了内存中,在内核中被解压,是一个临时的虚拟根文件系统。
• initrd(Initial RAM Disk)与 initramfs (Init Ram filesystem) 区别在于 initrd 将磁盘作为虚拟根文件系统,而 initramfs 将内存直接作为虚拟根文件系统。 Linux2.6 以后,均是以内存作为虚拟根文件系统,只是 Initrd 的名称被保留了下来。
• initrd.img 是 cpio 格式的压缩文件,解压缩后会得到 cpio 格式的文件。
二、作用
内核为了精简,只保留了最基本的模块,并没有各种硬件的驱动程序,而initrd虚拟根文件系统装载了必要的驱动模块。当Kernel启动时,内核从initrd中装载必要的驱动模块,完成硬件的初始化。直到挂载真正的rootfs主系统,将控制权转交给rootfs主系统。
initramfs系统:(grub参数中加上”break=init,console=tty1”可在屏幕上显示。如下图)
内容:init脚本文件,必要驱动模块,基本的依赖库
•
init脚本文件:
•
驱动模块:显卡模块等
•
依赖库:
initrd文件中init脚本(/usr/share/initramfs-tools/init)的主要启动流程:
• 挂载虚拟根文件系统 /proc , /sys , /dev , /dev/pts
• init-top 阶段:加载内核驱动, udev 事件处理。
• init-bottom 阶段:运行安全脚本, plymouth 动画显示
• init 阶段: 跳转到真正的 rootfs 主系统,执行一号 init 进程,即 systemd
Plymouth 提供美化启动图形界面的功能,它依靠内核设置显示器的原始分辨率,显示开关机动画。在系统开机、关机过程中生效,主要用于遮盖枯燥的系统log输出及后台流程,提升用户体验。
• Plymouth包括:客户端plymouth和服务端plymouthd
Linux下有三个特殊进程:
• idle进程(pid=0)
idle进程其前身是系统创建的第一个进程,0号进程,也唯一一个没有通过fork或者kernel_thread产生的进程,由系统自动创建,运行在内核态。0号进程在创建了init进程后,演变成为idle进程。
• init进程(pid=1)
init进程由0号进程创建。内核态调用用户态init程序,从而进入用户空间。init进程继续完成系统的初始化,是第一个用户进程,也是其他所有用户进程的父进程。
• kthreadd进程(pid=2)
kthreadd进程由idle通过kernel_thread创建,始终运行在内核空间,负责内核进程的调度和管理
用户态/sbin/init进程与systemd的关系
一、简介:
systemd(system daemon):是一个 Linux 系统基础组件的集合,提供了系统和服务管理。是运行为 PID 1的进程并负责启动其它进程。
内核初始化的最后一步就是启动 PID 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有的用户进程。init进程以守护进程(也就是服务)的方式存在,是所有其他进程的祖先。它负责组织和运行许多独立的或相关的初始化工作,如启动网络、声音、显示等等。从而让计算机系统进入某种用户预定义的运行模式,比如命令行模式或图形界面模式。
二、systemd的功能:
• 提供按需启动能力:某个服务被真正请求的时候才启动它。
• 跟踪和管理进程的生命周期:当进程创建子进程时,子进程会继承父进程的资源。当停止进程时,systemd 可以确保找到所有的相关进程。
• 启动挂载点和自动挂载的管理: 确保 挂载点在系统启动过程中被挂载。
• 实现事务性依赖关系管理:系统启动过程是由很多的独立工作共同组成的,保证所有相关的服务都可以正常启动而不会出现互相依赖,以至于死锁的情况。
• 日志服务:systemd 自带日志服务 journald, 用二进制格式保存所有日志信息,用户使用 journalctl 命令来查看日志信息。
lightdm(Light Display Manager):是一个全新的、轻量的Linux桌面的桌面显示管理器
display-manager.service是lightdm.service的软连接
systemd将系统启动和运行相关的对象,表示为各种不同类型的单元。并用target进行进行逻辑分组(依赖关系和顺序关系)
• sysinit.target:为系统运行环境做初始化
• basic.target: 在环境初始化完成后执行一些基本任务
• default .target :default.target是一个软链接,链接到不同的target表示进入不同的运行级别。 图形终端的graphical.target 和多用户字符终端multi-user.target
• Xorg : 负责屏幕的绘制
• lightdm-greeter: lightdm 子进程,专门创建 ukui-greeter
• ukui-greeter : 登录界面进程
• ukui-session : 桌面环境管理器
ukui-panel:桌面任务栏
ukui-menu:桌面菜单
ukui-kwin-*:桌面窗口管理器
进程是操作系统资源调度的基本单位,线程是任务的调度执行的基本单位
简单理解:进程是程序运行的过程,线程是程序运行中进行的任务
• 查看进程:
• 查看进程中的线程:
线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。
• 资源开销:每个进程都有独立的代码和数据空间,程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
• 包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
• 内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的
• 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
• 执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行