linux系统调用启动流程
时间: 2023-08-18 15:11:00 浏览: 56
Linux 系统启动流程大致如下:
1. BIOS 检查硬件并加载启动程序。
2. 启动程序负责加载内核(kernel)。
3. 内核加载完成后,初始化硬件和核心服务。
4. 加载并启动 init 系统,这是第一个用户级进程。
5. init 系统根据配置文件启动其它服务和进程。
6. 完成所有启动过程后,系统进入用户登录界面。
相关问题
linux smp启动流程
Linux SMP(Symmetric MultiProcessing,对称多处理)启动流程如下:
1. BIOS或者UEFI的启动程序会加载bootloader,例如GRUB。
2. GRUB加载内核映像文件(vmlinuz)到内存中,并将控制权交给内核。
3. 内核初始化各个子系统,如物理内存管理、进程管理、文件系统、网络等。
4. 内核初始化各个CPU核心,包括检测CPU数量、初始化每个CPU的局部变量和栈等。
5. 内核调用start_kernel()函数,在该函数中继续初始化各个子系统。
6. 内核创建第一个内核线程(idle进程),并将其绑定到一个CPU核心上。
7. 内核启动其他CPU核心,每个核心都执行和第一个核心类似的操作,但只有第一个核心创建idle进程,其他核心会在启动时等待内核分配任务。
8. 内核初始化调度器,将进程分配到不同的CPU核心上运行。
linux内核启动流程详解
Linux内核的启动流程可以分为以下几个步骤:
1. 入口点确定:在链接文件vmlinux.lds中,通过ENTRY(stext)可以找到Linux内核的入口点,即stext。stext定义在arch/arm/kernel/head.S文件中。
2. 初始化设置:内核入口点stext首先会执行一些初始化设置,例如设置中断向量表、设置栈指针等。
3. 启动内核:接下来,stext会调用start_kernel函数,这是Linux内核的入口函数。start_kernel函数主要完成一些基本的系统初始化工作,例如初始化内核数据结构、设置页表等。
4. 创建init进程:在start_kernel函数中,会调用kernel_thread函数创建kernel_init进程,也就是init内核进程。init进程的PID为1。init进程最初是运行在内核态的,然后它会在根文件系统中查找名为"init"的程序,并通过运行这个程序实现从内核态到用户态的转变。
5. 初始化子系统:接下来,init进程会开始初始化各个子系统,例如内存管理子系统、进程管理子系统、设备驱动子系统等。每个子系统都有相应的初始化函数,用来初始化子系统的数据结构、注册设备驱动等。
6. 启动用户空间:在初始化子系统完成后,init进程会启动用户空间的第一个进程,通常是/bin/init或/sbin/init。这个进程会执行系统的初始化脚本,加载其他用户进程,并开始运行用户程序。
总之,Linux内核的启动流程包括入口点确定、初始化设置、启动内核、创建init进程、初始化子系统和启动用户空间等步骤。通过这些步骤,Linux内核能够完成系统的初始化和用户程序的加载,实现整个系统的正常运行。