Linux启动与Linux进程

Linux启动与Linux进程

在学习Linux,关于Linux启动和进程的一点学习分享给大家。之后还会有一文为Linux虚拟文件系统VFS的学习分享。

Linux操作系统的启动过程和进程树的形成

图1.Linux引导过程
Linux 引导过程在 20,000 英尺处的视图
操作系统启动之前一定是BIOS(Basic Input-Output System)最先启动来引导,CPU硬件逻辑中,加电后会将CS置为0xF000、IP置为0xFFF0,也就是说PC中存入0xFFFF0( F000:FFF0H ),正是BIOS所在的位置。之后会进行 Power On Self Test 自检进行设备检查,最后开始引导启动Linux操作系统,真正有趣的就开始了。
BIOS由两部分组成:POST和Daemon运行时服务,BIOS按照硬件逻辑设计的顺序搜索处于活动状态并且可以引导的设备,设备可以是软盘、CD-ROM、网络上的某个设备,USB 闪存等等,通常Linux会从硬盘上的某个分区引导,其中有位于 0 道 0 柱面 1 扇区(即硬盘上第一个扇区(512Bytes/扇区))的MBR为主引导加载程序,当Linux从硬盘上被引导时,MBR被加载到RAM,然后BIOS将控制权交给MBR。

图2.MBR
MBR 剖析
MBR主引导加载程序从Partition分区表中查找可用的活动分区读入RAM并执行,作为次引导加载程序,主引导MBR和次引导可以分别称为第一阶段和第二阶段引导加载程序,次引导也是内核加载程序,用以加载 Linux 内核和初始 RAM 磁盘,这两个阶段的加载程序在x86中称为Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。将次阶段的引导加载程序加载到内存,就可以操作文件系统了,之后将内核映像和初始RAM磁盘initrd映像加载到内存中,LILO就将控制权交给了内核。
「initrd: 与内核绑定的,实际根文件系统可用之前挂载到系统中的一个初始根文件系统。https://www.ibm.com/developerworks/cn/linux/l-initrd.html」
内核映像不是一个可执行的内核,是一个压缩的内核映像(zImage),内核映像前面有一个程序,它控制内核解压和初始RAM磁盘initrd解压,并将其移入高端内存,然后此程序启动内核引导。

图3.Linux内核i386引导的主要函数流程
Linux 内核 i386 引导的主要函数流程
关于高端内存/低端内存
来到了新的关键点,head.S这些汇编语言源程序用来初始化,之后的./init/main.c就是Linux内核的main函数!到这里,Linux启动后的第一个「用户空间进程(user-space process)」init(/sbin/init)诞生,这里也是进程树的起点,之后调度器就接管了控制权,任务交给了进程调度,通过下面所有的进程相关的算法和内容,一步步创建新的子进程,构建起进程树。

Linux进程的创建过程

fork(),of course.

Linux的进程状态和状态转换

Linux中进程有六种状态:

  1. R,运行状态(Running/Runnable):在运行队列里,可能在运行也可能在等待。

  2. S,睡眠状态(Sleeping):浅度睡眠,可以被中断。

  3. D,磁盘睡眠状态(Disk sleep):深度睡眠,不可被中断,比如磁盘写入时。

  4. T,停止状态/追踪停止状态(Stopped/tracing stop):通过SIGSTOP的signal信号停止进程,SIGCONT继续。

  5. Z,僵尸状态(Zombie):进程在推出过程中资源全被收回,只剩task_struct空壳。

  6. X,死亡状态(Dead):kernel⾥的do_exit()返回的状态,而不能在任务列表看到。

Linux操作系统中的几种典型的实际使用的进程调度方法

linux的调度程序由两个调度器组成:主调度器周期性调度器(两者又统称为通用调度器(generic scheduler)核心调度器(core scheduler)),主要有下面几种调度算法。

调度方法 描述 调度器类
SCHED_NORMAL 适用于普通进程 CFS
SCHED_BATCH 采用分时策略,根据动态优先级(可用nice()API设置) CFS
SCHED_IDLE 优先级最低,系统空闲时适用 CFS-IDLE
SCHED_FIFO 先入先出,适用于实时进程 RT
SCHED_RR 轮转,适用于实时进程 RT
SCHED_DEADLINE 基于Earliest Deadline First (EDF) 调度算法 DL

小记

别的平台好像没事,markdown排好了版导进了csdn总会变难看,考虑换自己的网站了。

2023-10-29,回看时图片已经失效,原来是IBM的网站改组了。
从官网找了半天,比如搜linuxboot之类的都没搜到,用中文搜“Linux 引导过程在 20,000 英尺处的视图”反而搜到了一堆乱转载的文章。好吧,也算是侵权转载的一点贡献了。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×