linux内核本身是单进程,Linux内核本身和进程的区别 内核线程、用户进程、用户线程...

这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程。

实内核本身不是以进程形式存在的,最多在初始化的过程中表现得就像一个进程,但是内核绝对没有进程的数据结构task_struct,可以严格跟进程区分

开 。自从创建init

进程之后,内核就不再主动占有cpu了。只有当进程主动要求和中断到来时,内核才动一动,很快又把cpu还给合适的进程,不是想象中的,以后台服务进程的

形式存在。

Linux上进程分3种,内核线程(或者叫核心进程)、用户进程、用户线程

内核线程拥有 进程描述符、PID、进程正文段、核心堆栈

当和用户进程拥有相同的static_prio 时,内核线程有机会得到更多的cpu资源

内核线程的bug直接影响内核,很容易搞死整个系统

内核线程不需要访问用户空间内存,这是再好不过了。所以内核线程的task_struct 的mm域为空

但是刚才说过,内核线程还有核心堆栈,没有mm怎么访问它的核心堆栈呢?这个核心堆栈跟task_struct的

thread_info共享8k的空间,所以不用mm描述。

但是内核线程总要访问内核空间的其他内核啊,没有mm域毕竟是不行的。

所以内核线程被调用时,内核会将其task_strcut 的active_mm指向前一个被调度出的进程的mm域

,在需要的时候,内核线程可以使用前一个进程的内存描述符。

因为内核线程不访问用户空间,只操作内核空间内存,而所有进程的内核空间都是一样的。这样就省下了一个mm域的内存。

用户进程拥有 进程描述符、PID、进程正文段、核心堆栈 、用户空间的数据段和堆栈

用户线程拥有 进程描述符、PID、进程正文段、核心堆栈,同父进程共享用户空间的数据段和堆栈

用户线程也可以通过exec函数族拥有自己的用户空间的数据段和堆栈,成为用户进程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核中,进程线程是两种不同的执行实体。 一个进程是一个独立的执行位,它拥有自己的内存空间、文件描述符、进程标识符等。每个进程都有自己的地址空间和资源,通过进程间通信(IPC)机制可以实现进程之间的数据交换和协作。 而线程是在进程内部创建的轻量级执行位,它与创建它的进程共享相同的内存空间和文件描述符。线程可以访问进程的全局变量和堆栈,并能够通过共享内存进行通信,因此线程间的数据共享更为方便快捷。 区别主要体现在以下几个方面: 1. 资源开销:进程创建和销毁时需要分配和释放独立的内存空间和资源,而线程的创建和销毁则相对较快。 2. 调度:进程作为独立执行位,由操作系统进行调度,而线程则由进程内部的线程调度器进行调度。 3. 通信和同步:进程间通信需要使用额外的机制(如管道、消息队列、共享内存等),而线程之间可以通过共享内存直接进行数据交换,同步和通信更为方便。 4. 安全性:由于线程共享同一进程的资源,所以线程之间的操作需要更加小心谨慎,防止出现数据竞争等问题。 5. 执行效率:线程的创建、销毁和切换开销较小,执行效率更高。 总的来说,进程线程有各自的优势和适用场景。进程适合并发执行独立任务,而线程适合在同一进程内并发执行多个子任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值