进程调度算法与task_struct结构体

进程是实现多个程序并发执行,以提高资源利用率和系统吞吐量。

进程两个基本属性:1.进程是一个可拥有资源的独立单元。2.进程是一个课独立调度和分派的基本单元。

进程调度是操作系统中必不可少的一种调度。

一.进程调度的任务

(1)保存处理机的现场信息。如程序技术器、多个通用寄存器中的内容等。

(2)按算法选择进程

(3)把处理器分配给进程

二.进程调度机制

(1)排队器。将系统中的所有就绪进程按照一定的策略排成一个或多个队列。

(2)分派器。负责将选定的进程从就绪队列中取出。

(3)上下文切换器。进程切换的过程中会进行上下文的切换。

三.进程调度算法

1.轮转调度算法

是一种基于时间片的轮转调度算法。

(1)基本原理:将所有的就绪进程按先来先服务策略排成一个就绪队列,系统设置每隔一定时间产生一次中断,把CPU分配给队首进程,并执行一个时间片。

(2)进程切换时机:1.如果一个时间片没有完成,程序就已经完成,应立即将它从就绪队列删除,再执行队首程序。2.如果一个时间片已经完成而程序还没有完成,将该程序放在就绪队列的末尾。

(3)时间片的确定:略大于一次交互所需要的时间

2.优先级调度算法

把处理机分配给就绪数列中优先级最高的进程。这种算法也可以分为两种:

(1)非抢占式优先级调度算法:该算法规定,一旦把处理机分配给就绪数列中优先级最高的进程后,该进程便一直执行下去。

(2)抢占式优先级调度算法:把处理机分配给就绪数列中优先级最高的进程后,若中间出现了更高优先级的进程,处理机就会去处理优先级更好的进程。

3.多队列调度算法

该算法将系统中的进程就绪队列从一个拆分到若干个,将不同类型的进程固定分配在不同的就绪队列,不同的就绪队列实施不同的调度算法。

4.多队列反馈队列调度算法

原理:首先设置多个就绪队列,每个队列的优先级不同,第一个队列的优先级最高,以此类推;然后,使每个队列采用先来先服务调度算法,每个进程运行一个时间片,如果在一个时间片中进程未完成,就将该进程放在下一个队列的尾部等待;进程的调度是按队列优先级调度的,

5.基于公平原则的调度算法

(1)保证调度算法

它向用户的保证不是优先级的保证,而是性能的保证,一种是处理机分配的公平性,有n个相同类型的进程同时进行,保证每个进程都获得相同处理机时间的1/n。

(2)公平分享调度算法

这种算法是为每个用户的分配的处理机时间相同或时间比例相同,每个用户又按其的进程为单位。

四.实时系统的调度算法

1.实现实时调度的基本条件

(1)就绪时间

(2)开始截止时间和完成截止时间

(3)处理时间

(4)资源要求

(5)优先级

2.非抢占式调度算法

(1)非抢占式轮转调度算法

该算法规定,一旦把处理机分配给就绪数列中优先级最高的进程后,该进程便一直执行下去。直到进程完成,再调度下一个进程。

(2)非抢占式优先调度算法

该算法根据优先级排成一个队列。

3.抢占式调度算法

(1)基于时钟中断的抢占式轮转调度算法

在实时任务到达后,如果它的优先级高于当前任务的优先级,这时并不立即抢占处理机,而是等到时钟中断发生后,才将处理机分给新的进程。

(2)立即抢占的优先级调度算法

在实时任务到达后,如果它的优先级高于当前任务的优先级,这时立即抢占处理机。

4.最早截止时间优先算法

该算法根据任务的截止时间确定任务的优先级,任务的截止时间越早,优先级越高。

5.最低松弛度优先算法

该算法在确定任务的优先级时,根据的是任务的紧急程度,最低松弛度是根据进程必须完成时间与其本身的运行时间和当前时间之差所确定的。松弛度越低,优先级越高。

task_struct结构体的介绍参考下面网站:

http://blog.sina.com.cn/s/blog_65403f9b0100gs3a.html

时间: 2024-08-01 10:41:24

进程调度算法与task_struct结构体的相关文章

Linux进程管理之task_struct结构体

内核源码:Linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程是处于执行期的程序以及它所管理的资源(如打开的文件.挂起的信号.进程状态.地址空间等等)的总称.注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源. Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 本文将尽

Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】

Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_struct结构体,可以说她是linux内核源码中最复杂的一个结构体了,成员之多,占用内存之大. 进程状态 /* * Task state bitmask. NOTE! These bits are also * encoded in fs/proc/array.c: get_task_state().

进程控制块的task_struct结构

>进程控制块 在linux中进程信息存放在叫做进程控制块的数据结构中,每个进程在内核中都有?个进程控制块(PCB)来维护进程相关的信息,Linux内核的 进程控制块是task_struct结构体.在Linux中,这个结构叫做task_struct.      task_struct是Linux内核的一种数据结构,它会被装载到RAM?并且包含着进程的信息. 每个进程都把它的信息放在 task_struct 这个数据结构?, task_struct 包含了这些内容: >>>>&g

task_struct结构体字段介绍--Linux中的PCB

task_struct结构体 字段介绍 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程, task_struct是Linux中的[进程控制块PCB结构]的具体数据结构 这个结构体包含了一个进程所需的所有信息.它定义在linux-2.6.38.8/include/linux/sched.h文件中. 下面对task_struct这个结构体 进行各个字段的详细介绍 1. 调度数据成员(1) volatile long states;表示进程的当前状态:? TASK_RU

PCB之task_struct结构体

 task_struct结构描述  1. 进程状态(State) 进程执行时,它会根据具体情况改变状态 .进程状态是调度和对换的依据.Linux中的进程主要有如下状态,如表4.1所示. 内核表示 含义 TASK_RUNNING 可运行 TASK_INTERRUPTIBLE 可中断的等待状态 TASK_UNINTERRUPTIBLE 不可中断的等待状态 TASK_ZOMBIE 僵死 TASK_STOPPED 暂停 TASK_SWAPPING 换入/换出 表4.1          Linux进程的

[Linux]进程(十二)--task_struct结构体

[cpp] view plaincopy struct task_struct { volatile long state; /* -1 不可运行, 0 可运行, >0 表示停止 */ void *stack; atomic_t usage; unsigned long flags; /* 每进程标志 */ unsigned long ptrace; int lock_depth; /* 大内核锁深度 */ int prio, static_prio, normal_prio; struct l

12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!

1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer entered is [%s]\n",buff); return 0; } 答:上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致

linux内核学习之进程管理------task_struct结构体

struct task_struct { volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */ struct thread_info *thread_info; atomic_t usage; unsigned long flags;    /* per process flags, defined below */ unsigned long ptrace; int lock_depth;     /* Lock

linux内核中的struct rlimit结构体详解

   在linux内核中,对一个进程获取系统资源的数量进行了限制.那么linux内核是如何实现这种对一个进程的各种资源的限制呢?    linux使用struct rlimit结构体来实现的,rlimit是 resource limit的缩写.    struct rlimit           {               unsigned int rlim_cur;  /* soft limit */               unsigned int rlim_max;  /* ha