博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核线程和进程的区别
阅读量:6789 次
发布时间:2019-06-26

本文共 652 字,大约阅读时间需要 2 分钟。

 

前言:

从 内核的角度来说,它并没有线程这个概念。Linux把所有线程都当做进程来实现。内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。相反, 线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程 (只是该进程和其他一些进程共享某些资源,如地址空间)

一.内核线程

1.内核经常需要在后台执行一些操作。这种任务可以通过内核线程 (kernel thread)完成。

2.内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,(实际它的mm指针被设置为NULL)

3.内核线程只在内核空间运行,从来不切换到用户空间去。内核进程和 普通进程一样,可以被调度,也可以被抢占

4.内核线程也只能由其他内核线程创建。在现有内核线程中创建一个新的内核线程的方法如下:

intkernel_thread(int (*fn)(void *),void *arg, unsigned long flags)

新的任务也是通过向普通的clone()系统调用传递特定的flags参数而创建的。在上面的函数返回时,父线程退出,并返回一个指向子线程task_struct的指针。子线程开始运行fn指向的函数,arg是运行时需要用到的参数。

5.一般情况下,内核线程会将它在创建时得到的函数永远执行下去(除非系统重启)。改函数通常由一个循环构成,在需要的时候,这个内核线程就会被唤醒和执行吗,完成了当前任务,它会自行休眠。

转载地址:http://xzsgo.baihongyu.com/

你可能感兴趣的文章
关于学习的一些困惑
查看>>
RedHat系统怎么设置或更改屏幕分辨率
查看>>
spring mybatis整合配置文件
查看>>
02(maven+SSH)网上商城项目实战之数据库设计(PMD)
查看>>
谈Docker安全合规建设
查看>>
LR中的关联
查看>>
nginx配置php连接
查看>>
调整状态学会放下与五月份的个人计划
查看>>
Oracle中如何将姓名中有空格的字段更新成没有空格的?
查看>>
OpenStack主要逻辑模块–Keystone身份验证服务
查看>>
Java中ConcurrentHashMap的实现
查看>>
如何从零开始学习hadoop?
查看>>
有关tomcat的性能调优【待完善】
查看>>
QA和软件测试员的区别
查看>>
windows 批处理常用指令 -- 持续更新
查看>>
Jenkins+Shell+Docker实现自动化CI/CD发布Java项目
查看>>
【转】Java经典问题:传值与传引用?
查看>>
xp扩容C盘后盘符丢失的资料怎么找到
查看>>
CVE-2017-12617
查看>>
SSH管理服务
查看>>