Linux内核初始化过程简要介绍(转)

本文详细介绍了Linux系统的启动过程,包括四个主要阶段:Boot PROM阶段、Boot Programs阶段、Kernel Initialization阶段和Init阶段。从主引导程序bootblk到内核组件genunix及unix的加载过程均有涉及。
Linux内核初始化过程简要介绍(转)[@more@]

  全部引导过程是四步

  1:boot PROM phase

  2:boot Programs phase

  3:kernel initialization phase

  4:init phase

  system初始化,检测内存和cpu,检查设备和创建设备树,设置console

  kernel初始化过程

  kernel self -initialization 内核自检

  loading of kernel modules 载入内核模块

  reading of the kernel configuration file in /etc/system 读内核配置文件

  staring of the /sbin/init process 运行/sbin/init进程

  bootblk是用于装载第二个引导程序ufsboot的主引导程序

  bootblk是被PROM的boot设备的引导扇区装载的

  ufsboot程序是用了装载两部分核心genunix和unix的

  installboot是用来在磁盘分区上安装bootblk的

  genunix is the platform-independent generic kernel file ,while unix is the platform-specific kernel component.

  整个的引导过程:

  PROM from the boot sector of the boot device--&gtbookblk--&gtufsboot--&gtgenunix(是一个独立平台的普通内核文件) and unix(是一个特殊平台内核文件)--&gt其它

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-940276/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-940276/

Linux系统中线程的初始化过程涉及多个关键步骤,从线程的创建到资源的分配和执行上下文的设置,整个过程内核和用户空间的库(如pthread库)共同协作完成。 线程的初始化始于调用`clone()`系统调用。`clone()`是Linux提供的一个系统调用,用于创建新的进程或线程。当创建线程时,`clone()`的参数会指定共享的资源,例如`CLONE_VM`(共享虚拟内存)、`CLONE_FS`(共享文件系统信息)等。与创建进程不同的是,线程不需要独立的地址空间,而是与同属一个进程的其他线程共享地址空间。因此,线程的创建比进程更轻量级,资源开销更小[^3]。 在用户空间,线程通常通过`pthread_create()`函数创建,这是POSIX线程(pthread)标准的一部分。`pthread_create()`内部会调用`clone()`系统调用,并设置线程的栈、调度属性等。线程的栈是线程私有的,每个线程都有自己的栈空间,用于存储函数调用时的局部变量和返回地址。此外,线程还拥有独立的程序计数器(PC)和寄存器集合,以确保线程可以独立执行代码[^1]。 线程的调度信息和状态由内核维护,内核通过线程的描述符(如`task_struct`结构)管理线程的生命周期。线程描述符中包含了线程的执行上下文、优先级、调度策略等信息。线程初始化完成后,会被加入到进程的线程组中,成为该进程的一个执行单元。 在多线程环境中,线程的初始化还需要考虑线程安全问题。例如,线程的局部存储(Thread Local Storage, TLS)需要在初始化时分配独立的存储区域,以避免多个线程访问同一数据时发生冲突。此外,线程的同步机制(如互斥锁、条件变量等)也需要在初始化阶段进行配置,以确保线程间的安全协作[^5]。 以下是一个简单的线程创建示例,展示了如何使用`pthread_create()`创建一个线程: ```c #include <pthread.h> #include <stdio.h> // 线程执行的函数 void* thread_function(void* arg) { printf("Thread is running\n"); return NULL; } int main() { pthread_t thread_id; // 创建线程 if (pthread_create(&thread_id, NULL, thread_function, NULL) != 0) { perror("Failed to create thread"); return 1; } // 等待线程结束 pthread_join(thread_id, NULL); printf("Thread has finished execution\n"); return 0; } ``` 在上述代码中,`pthread_create()`函数负责初始化线程并将其加入到进程的线程组中。线程执行`thread_function`函数,并在执行完成后通过`pthread_join()`等待线程终止。 ### 线程的资源管理 线程初始化完成后,操作系统需要为其分配必要的资源。线程共享进程的虚拟内存、文件描述符、信号处理等资源,但每个线程拥有独立的栈空间和执行上下文。这种共享机制使得线程间的通信和协作更加高效,但也带来了线程安全问题,需要通过锁机制(如互斥锁、读写锁等)来保证数据一致性[^5]。 ### 线程的调度 线程的调度由内核的调度器负责。Linux采用抢占式调度策略,确保线程能够公平地使用CPU资源。线程的调度优先级、策略(如SCHED_FIFO、SCHED_RR等)在初始化时由用户或默认值设定。调度器根据这些信息决定线程的执行顺序,并在适当的时候进行线程切换。 ### 线程的销毁 线程的销毁可以通过`pthread_exit()`函数显式地结束线程的执行,或者在线程函数返回后自动终止。销毁线程时,内核会释放线程占用的资源(如栈、线程描述符等),并更新进程的线程组信息。如果主线程结束,整个进程也会随之终止,除非有其他线程仍在运行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值