linux-thread
wh8_2011
这个作者很懒,什么都没留下…
展开
-
Linux内核线程(一)
我们经常会遇到一些情况,需要内核在后台执行某些操作,这时我们可以使用kernel threads来实现,kernel threads也是standard processes,但是它们仅仅存在于内核空间。Kernelthreads与normal processes的重要区别就是kernelthreads没有地址空间,因此它们的mm指针就是NULL。Kernel threads仅仅在内核空间中活动,不转载 2016-08-05 07:37:19 · 334 阅读 · 0 评论 -
Linux内核线程
内核线程是直接由内核本身启动的进程。内核线程实际上是将内核函数委托给独立的进程,与系统中其他进程“并行”执行(实际上,也并行于内核自身的执行),内核线程经常被称为内核“守护进程”。它们主要用于执行下列任务: l 周期性地将修改的内存页与页来源块设备同步。 l 如果内存页很少使用,则写入交换区。 l 管理延时动作 l 实现文件系统的事务日志。 内核线程转载 2016-08-05 07:47:36 · 440 阅读 · 0 评论 -
Linux内核线程
1.内核线程介绍: 内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成——独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。 内核线程只能由其它的内核线程创建,Linux内核转载 2016-08-05 07:57:00 · 433 阅读 · 0 评论 -
Linux内核多线程(二)
Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFS转载 2016-08-05 09:41:42 · 355 阅读 · 0 评论 -
Linux内核多线程(三)
内核多线程是在项目中使用到,自己也不熟悉,遇到一个很囧的问题,导致cpu运行100%。 这是写的第一个内核线程程序,通过全局变量来实现两个内核线程之间的通信。但是这里遇到致命错误,就是:每当 wait_event_interruptible()被wake_up_interruptible 唤醒之后线程就进入死循环。后面发现是线程不会主动的自己调度,需要显式的通过schedule 或者 sched转载 2016-08-05 09:42:31 · 328 阅读 · 0 评论 -
Linux内核多线程(四)
接上 一篇文章 ,这里介绍另一种线程间通信的方式:completion机制。Completion机制是线程间通信的一种轻量级机制:允许一个线程告诉另一个线程工作已经完成。为使用 completion, 需要包含头文件 。 可以通过以下方式来创建一个 completion : DECLARE_COMPLETION(my_completion); 或者, 动态创建和初始化:转载 2016-08-05 09:43:26 · 283 阅读 · 0 评论 -
Linux内核多线程(五)
自己创建的内核线程,当把模块加载到内核之后,可以通过:ps –ef 命令来查看线程运行的情况。通过该命令可以看到该线程的pid和ppid等。也可以通过使用kill –s 9 pid 来杀死对应pid的线程。如果要支持kill命令自己创建的线程里面需要能接受kill信号。这里我们就来举一个例,支持kill命令,同时rmmod的时候也能杀死线程。 #include #inclu转载 2016-08-05 09:44:25 · 299 阅读 · 0 评论 -
Linux内核多线程——补充(各种平台下的多线程)
这里主要实现两个线程间通信,当flag = 10 之后通知另外一个线程(也就是“Linux内核多线程(二)”中的程序的各种平台实现)。 首先是C++ 11 的方式: #include #include #include #include #include #include using namespace std; const int M = 10; int main转载 2016-08-05 09:45:07 · 469 阅读 · 0 评论