linux进程调度分析

本文探讨Linux中的进程调度,包括进程描述符、调度策略和时机。进程由task_struct结构表示,调度分为主动式(资源等待时暂停)和被动式(抢占式,包括用户抢占和内核抢占)。内核抢占提高了系统的实时性,但有特定场景不允许抢占,如中断、软中断等。调度步骤涉及清理、选择新进程、设置环境和上下文切换。
摘要由CSDN通过智能技术生成

linxu混混之牢骚

生命的意义就是在于它的变幻,你永远不会知道明天会发生什么事。 珍惜生命。。。。。

 

进程
linux中,进程有自己的独立的用户空间,和自己独立的内核空间(堆栈),使用一个task_struct结构来表示一个进程。一般用fork,vfork等函数建立。

线程:用户线程,内核线程
linux中,用户进程没有自己独立的用户空间,需要和别的线程共享用户空间。有自己独立的内核空间(堆栈),使用一个task_struct结构来表示。 在用户空间的应用程序中使用pthread_creat建立。
linux中,内核线程没有用户空间,他只能运行在内核空间,使用一个task_struct结构来表示。由于没有用户空间故mm_struct *mm==NULL。在内核使用kernel_thread创建。
另外: linux中,将线程称作轻量级进程(lightweight process),内核可以直接进行调度。
在《深入linux内核》书中有个比喻:假设一个象棋程序使用两个线程,其中一个控制图形化棋盘,等待选手移动并显示在屏幕上,另一个考虑棋的下一步移动。 由此可见,当第一个进程在等待的时候,第二个进程应该继续运行。但是如果象棋程序仅是一个单独的进程,第一个线程就不能简单的发出等待用户行为的堵塞系统调用;否则第二个进程也会被堵塞。 所以linux需要内核为别对线程进行单独的调度。
 
计算机语言中说: 进程是系统分配的最少单元,线程是程序运行的最小单元。
 

进程描述符:


每个一个进程,线程都会用一个task_struct结构来描述的,变量很多,挑重要的介绍:

task_struct
{
........
volatile long state;    //进程的状态,赋值范围:
/***************************************
*TASK_RUNNING--表示进程已经就绪,或已经运行。当一个进程被creat的时候就处于这个状态。
*TASK_INTERRRUPTIBLE---处于等待中的进程,当等待条件为真时被唤醒,可以被信号或中断wake。
*TASK_UNINTERRUPTIBLE---处于等待中的进程,当等待条件为真时被唤醒,但不可以被信号或中断唤醒。
*TASK_STOPPED当进程接受到SIGSTOP和SIGTSTP信号时,进程状态变成这个,但当接受到SIGCONT信号后,重新TASK_RUNNING.
*TASK_KILLABLE 相当于TASK_UNINTERRUPTBLE,但是可以被S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值