我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:全民彩票 > 多级反馈 >

Task_struct结构体

归档日期:05-02       文本归类:多级反馈      文章编辑:爱尚语录

  inux系统中的每个进程都有一个名为task_struct的数据结构,它相当于“

  内核在为每个进程分配Task_struct结构的内存空间时,实际上一次性分配两个连续的 内存页面(共8KB),其底部约1KB空间存放Task_struct结构,上面的7KB空间存放进程系统空间堆栈。 如图所示 :

  在进行剖析task_struct的定义之前,我们先按照我们的理论推一下它的结构:

  4、因为要插入进程树,必须有联系父子兄弟的指针, 当然是task_struct型

  (2)long counter //任务运行时间计数(递减)(滴答数),运行时间片。

  (4)long signal //信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。

  * TASK_RUNNING:正在运行或在就绪队列run-queue中准备运行的进程,实际参与进程调度。

  * TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号(signal)或定时中断唤醒后进入就绪队列 run-queue。

  * TASK_UNINTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,不可由其它进程通过信号(signal)或定时中断唤醒。

  * TASK_ZOMBIE:表示进程结束但尚未消亡的一种状态(僵死状态)。此时,进程已经结束运行且释放大部分资源,但尚未释放进程控制块。

  *TASK_STOPPED:进程被暂停,通过其它进程的信号才能唤醒。导致这种状态的原因有二,或者是对收到SIGSTOP、SIGSTP、 SIGTTIN或SIGTTOU信号的反应,或者是受其它进程的ptrace系统调用的控制而暂时将CPU交给控制进程。

  大多数进程都使用虚拟内存空间。Linux系统必须了解如何将虚拟内存映射到系统的物理内存。

  1)、信号机制是在软件层次上对中断机制的一种模拟。系统预先规定若干不同类型的信号,各表示发生了不同的事件,每个信号对应一个编号。进程遇到相应的事件或出现特定的要求(进程终止或出现某些错误——非法指令,地址越界等),就把一个信号写到相应进程Task_struct结构。接收信号的进程在运行中检测自身是否收到了信号,如过已收到,则转去执行预先规定好的信号处理程序。处理后,返回原先正在执行的进程。

  管道是Linux中最常用的IPC机制。一个管道就是链接两个进程的一个打开文件。

  管道文件不属于用户直接命名的普通文件,它是利用系统调用的pipe()创建的、在同族进程间进行大量的信息传送的打开文件。

  每个管道只有一个内存页面作缓冲区,按环缓冲方式使用。就是每读或写到页面的末端,就又回到开头。

  由于管道缓冲区只限于一个页面,因此,当写进程有大量数据要写时,每写满一个页面,就要睡眠等待,等读进程从管道中读走一些数据而腾出空间时,读进程唤醒写进程,写进程就继续写入数据。对读进程,缓冲区有数据就读出,没有数据就睡眠,等待写进程向缓冲区中写数据;当写进程写入数据后,就唤醒正在等待的读进程。

  (1)、消息通信:一个进程可以通过系统调用建立一个消息队列,然后任何进程都可以通过系统调用向这个队列发送消息或从队列中接收消息,实现进程间信息传递。

  (2)、共享内存:一个进程可以通过系统调用设立一片共享内存,然后其他进程就可以通过系统调用将该内存区映射到自己的用户地址空间。

  (3)、信号量:信号量机制可以实现进程间的同步,保证若干进程对共享的临界资源的互斥。(信号量是系统内的数据结构,它的值代表着可以使用的资源的数量,可以被一个或多个进程进行检测和设置)

  在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。下面介绍几种常用的调度算法。

  在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

  FCFS调度算法属于不可剥夺算法。从表面上看,它对所有作业都是公平的,但若一个长作业先到达系统,就会使后面许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按FCFS原则处理。

  FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

  (2)短作业优先(SJF)调度算法 短作业(进程)优先调度算法是指对短作业(进程)优先调度的算法。短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。

  该算法对长作业不利,由表2-3和表2-4可知,SJF调度算法中长作业的周转时间会增加。更严重的是,如果有一长作业进入系统的后备队列,由于调度程序总是优先调度那些 (即使是后进来的)短作业,将导致长作业长期不被调度(“饥饿”现象,注意区分“死锁”。后者是系统环形等待,前者是调度策略问题)。

  由于作业的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

  在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

  1)非剥夺式优先级调度算法。当某一个进程正在处理机上运行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在运行的进程继续运行,直到由于其自身的原因而主动让出处理机时(任务完成或等待事件),才把处理机分配给更为重要或紧迫的进程。

  2)剥夺式优先级调度算法。当一个进程正在处理机上运行时,若有某个更为重要或紧迫的进程进入就绪队列,则立即暂停正在运行的进程,将处理机分配给更重要或紧迫的进程。

  静态优先级。优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确 定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。

  动态优先级。在进程运行过程中,根据进程情况的变化动态调整优先级。动态调整优先 级的主要依据为进程占有CPU时间的长短、就绪进程等待CPU时间的长短。

  (5)时间片轮转调度算法 时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

  在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

  时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。

  (6)多级反馈队列调度算法(集合了前几种算法的优点) 多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,如图2-5 所示。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。例如,为提高系统吞吐量和缩短平均周转时间而照顾短进程;为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程;同时,也不必事先估计进程的执行时间。

  相关函数getenv,putenv,unsetenv,首先要说明的是,通过此函数并不能添加或修改shell进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。

  函数说明:setenv函数用来改变环境变量或增加环境变量的内容,参数name为环境变量名称字符串,参数value则为变量的内容,参数overwrite用来决定是否要改变已存在的环境变量。如果没有此环境变量,则无论overwrite为何值均添加此环境变量。

  返回值:若此环境变量存在,overwrite不为0时,原内容会被改为参数value所指的变量内容,当overwrite为0时,则参数会被忽略。返回值执行成功则返回0,有错误发生时,返回-1

  函数说明:getenv()用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。getenv函数的返回值存储在一个全局二维数组里,当你再次使用getenv函数时不用担心会覆盖上次的调用结果。

  返回值: 执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符的第一个字节是null。

  首先要说明的是,通过此函数并不能添加或修改 shell 进程的环境变量,或者说通过setenv函数设置的环境变量只在本进程,而且是本次执行中有效。如果在某一次运行程序时执行了setenv函数,进程终止后再次运行该程序,上次的设置是无效的,上次设置的环境变量是不能读到的。

  首先什么是进程?1进程是程序的一个执行的实例;2进程是正在执行的程序3进程是能分配处理器并由处理器执行的实体按内核的观点来谈进程:它所担当分配系统资源(CPU时间,内存)的实体。进程的两个基本的...博文来自:IT小书生的博客

  task_struct结构体是Linux下的进程控制块PCB,PCB里包含着一个进程的所有信息。要了解task_struct结构体,就必须要知道什么是进程。进程可以有以下几个定义: 一个正在执行的程序...博文来自:Bit Up

  在进程世界中,CPU访问协调裁决的过程被称为调度(Scheduling)。一、进程调度的目标:a.进程响应时间快b.加强交互性能c.保证公平和避免饥饿d.SMP调度e.软实时调度二、进程区分为三类:a...博文来自:Bystander_J

  (一)进程调度的任务:(1)保存处理机的现场信息,如程序计数器、多个通用寄存器中的内容(2)按照某种算法选取进程,将其状态改为运行状态(3)把处理器分配给进程,由分派程序把处理器分配给该进程,将进程控...博文来自:Cris

  引言:    在Linux的内核的五大组成模块中,进程管理模块时非常重要的一部分,它虽然不像内存管理、虚拟文件系统等模块那样复杂,也不像进程间通信模块那样条理化,但作为五大内核模块之一,进程管理对我们...博文来自:秋叶原 && Mike 麦克

  长期以来,Linux一直把具有较好的平均系统响应时间和较高的吞吐量作为调度算法的主要目标。但近年来,鉴于嵌入式系统的要求,Linux2.6在支持系统的实时性方面也做出了重大的改进。 Linux进程的时...博文来自:Yngz_Miao的博客

  一、进程的状态:1、操作系统中:进程是一个动态的实体,所以他是有生命的。从创建到消亡,是一个进程的整个生命周期。在这个周期中,进程可能会经历各种不同的状态。一般来说,所有进程都要经历以下的3个状态:(...博文来自:magoyang的博客

  1:引言进程就是程序动态运行的实例,它是承担分配系统资源的实体。我们也可以把进程当成是由一组元素组成的实体,进程的两个基本的元素时程序代码和与代码相关联的数据集合。在进程执行时,都可以被表征为一下元素...博文来自:leap的博客

  网上有很多解析task_struct结构体的文章,可是都没有说这个结构体到底在哪里?这个结构体位于头文件shced.hcd/find-namesched.h显示结果如下注意只有位于内核中的includ...博文来自:csdn_kou的博客

  进程1、进程的概念首先在linux操作系统下,当你触发任何一个事件时,系统都将它定义为一个进程,并且给予这个进程一个ID,即PID。那么如何产生一个进程呢?简单来说就是“执行一个程序或命令”。2、进程...博文来自:Maple的博客

  大家都知道进程吧,那么进程到底是什么呢?进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。初学者经常会把进程和程序搞混,注意,程序并不是进程。实际上两...博文来自:Amber的博客

  本文的重点是剖析task_struct,在这之前我们需要先了解一下进程的概念和Linux下进程控制块PCB。1.首先什么是进程?1.1进程可以这样描述:1进程是程序的一个执行实例;    2进程是...博文来自:的博客

  在正式介绍task_struct结构体成员时,先简要介绍一下什么是task_struct。广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。进程控制块每个进程在内核...博文来自:Number_0_0的博客

  我们知道,进程是程序的动态运行实例。且CPU会对这些进程进行调度,使得程序得以执行。那么如果有多个进程同时要求执行,CPU如何判断该执行哪一个,执行多长时间等等问题呢。学习过操作系统的话,应该能知道对...博文来自:pointer_y的博客

  task_struct:是Linux内核的一种数据结构。它放在RAM(运行内存)里并包含着进程的信息。每个进程都把自己的信息放在task_struct数据结构里。task_struct字段分析如下:t...博文来自:scmuzi18的博客

  一.task_struct是Linux内核的一种数据结构,其实就是Linux下的对进程控制块PCB定义的一个结构体,它放在RAM(运行内存)里并包含了一个进程所需的全部信息。二.下面对task_str...博文来自:ZangFX的博客

  Linux中进程控制块每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。task_struct是Linux内核的一种数据结构,...博文来自:T_tangcのblog

  如何通过进程id查找进程的描述符task_struct?在实际的工作中,我的驱动中需要通过读取写进内存中的进程id值查找对应的进程是否还在运行,或者是已经退出。通过阅读内核代码,内核中已有相应...博文来自:weijitao的博客

  在介绍task_struct,我们要先来看几个概念一:进程的概念   1.从用户角度来看:进程是程序的一次动态执行过程   2.从内核角度看:                 3.那PCB结构中的数据...博文来自:ningningmingming的博客

  ⏞进程概念是操作系统的基础,也是Linux的核心部分,这篇文章调研task_struct结构体,帮助our理解结构体中的各个字段的含义。Linux内核通过一个被称为进程描述符的task_struct结...博文来自:何进鸿

  一、什么是进程进程,就是程序的一个执行实例,或正在执行的程序。详细介绍请看点击打开链接那么进程在Linux中有几种状态呢?如下:1、R处于运行或可运行状态,即进程正在运行或在运行队列(可执行队列)中等...博文来自:honeyJ

  一、task_struct结构描述1.进程状态(State)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。(1)可运行状态处于这种...博文来自:Meditation

  一、task_struct结构描述1.进程状态(State)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换的依据。Linux中的进程主要有如下状态,如表4.1所示。(1)可运行状态处于这种...博文来自:xyouyubl的博客

  到现在我还没有看到cred被加入内核的mainline,可惜啊,不过我个人认为它是很不错的,其精髓就是补丁上的那一句,就是将权力和授权分离,这句话看似有点不知所云,难道权力不就是授权吗?其实是不一样的...博文来自:Netfilter,iptables/OpenVPN/TCP guard:-(

  进程控制块进程就是程序动态运行的实例,它是承担分配系统资源的实体。我们也可以把进程当成是由一组元素组成的实体,进程的两个基本的元素时程序代码和与代码相关联的数据集合。task_struct是Linux...博文来自:wpeaceminusone的博客

  task_struct结构体字段介绍Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,task_struct是Linux中的【进程控制块PCB结构】的具体数据结构这个结构...博文来自:番茄都是西红柿

  进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。L...博文来自:yangle4695的博客

  进程状态/调度数据成员(State)这个信息中可细分为6中状态,分别为:TASK_RUNNING:处在这个状态的进程,不是在运行就是准备运行,只是等待运行本进程的资源到位。即准备运行的进程只要得到...博文来自:心之所向,一如既往

  简介计算机体系中控制进程的模块我们把它叫做进程控制模块,即PCB。它是对进程控制的唯一手段也是最有效的手段。在Linux中PCB是由task_struct数据结构来定义的,当我们调用fork()时,系...博文来自:MBuger的博客

  前言上一篇我们谈论了task_struct这个结构体,它被叫做进程描述符,内部成员包含了很多与进程相关的信息,今天我们来看一下其中一个被叫做内存描述符的结构体——mm_struct,抽象的来描述lin...博文来自:宇哲

  Linux下的进程也好,线程也罢,在内核中统统都以任务(task)的面目示人,他们用一样的内核数据结构来表示。 拓展:内核中用一个非常大的结构体来表达进程或者线程(统称任务task),下面是这个结构体...博文来自:林世霖的技术博客

  (1):什么是进程?每个进程在内核中都有一个进程控制块(pcb)来维护进程相关的信息,Linus内核的进程控制块是task_struct的结构体;Linus主要的进程状态有以下几种:(2):进程标示符...博文来自:f2016913的博客

  进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 ...博文来自:fern_girl的博客

  背景概念task_stuct结构体被称为进程描述符,用来管理进程Linux内核的进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。可以说它是lin...博文来自:double_happiness的博客

  在linux中每一个进程都由task_struct数据结构来定义.task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段.当我们调用fork()时,系统会为我们产生一...博文来自:wxt_hillwill的博客

  linux中的进程代表着处于执行期的程序以及它所管理资源的总称,因此,进程与程序是两码事,task_str是linux内核的一种数据结构,会被装载到RAM里并且包含着进程的信息,linux中每一个进程...博文来自:r_pppp的博客

  内核源码:linux-2.6.38.8.tar.bz2  目标平台:ARM体系结构   进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并...博文来自:swlhmq的专栏

  最近写了一个小程序,打算做成deb发布,折腾了两天,终于找到了一个简单的deb制作方法 1、首先要编译好程序,获得程序的可执行文件 2、新建一个文件夹,例如在用户目录下新建mydeb文件夹 3、在my...博文来自:youngyang的专栏

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  最大多普勒频移越大,相干时间越小,能容忍的符号时间越短,越容易产生符号间干扰,信号越容易发生快速变化,若相干时间小于符号时间,这时候的信道就属于快衰落信道(快时变);反之,则属于慢衰落信道(慢时变)...博文来自:u010237785的博客

  今日遇见一个开超市的朋友,真没想到在高校开超市一个月可以达到月净利润50K,相比起我们程序员的工资,真是不可同日而语,这个世道啊,真是做程序员不如经商开超市,我们高科技的从业者,真是造不...博文来自:尹成的技术博客

  遗传算法,核心是达尔文优胜劣汰适者生存的进化理论的思想。 我们都知道一个种群,通过长时间的繁衍,种群的基因会向着更适应环境的趋势进化,牛B个体的基因被保留,后代越来越多,适应能力低个体的基因被淘汰,...博文来自:ljp1919的专栏

  一、组合模式适用场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式对部分对象和整体对象进行管理。二、组合模式结构 抽象构件(Conponent)角色:所有类的共有接口,定义了叶子和...博文来自:小小本科生成长之路

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  前段时间看了一些关于LSTM方面的论文,一直准备记录一下学习过程的,因为其他事儿,一直拖到了现在,记忆又快模糊了。现在赶紧补上,本文的组织安排是这样的:先介绍rnn的BPTT所存在的问题,然后介绍最初...博文来自:天道酬勤,做一个务实的理想主义者

  最近用软碟通制作了一个win7原版映像,但是在装新系统的时候发现了一个问题,进入安装界面后,显示没有找到驱动器,但是明明是差了U盘的,通过“shift+f12”调出命令行窗口,输入disk list命...博文来自:g_newbie的博客

  一、场景 当需要生产一辆汽车时,我们需要为其装配发动机、轮胎、座椅等等部件,这个装配过程是比较复杂的而且也需要较高的组装技术。而建造者模式(Builder Pattern)就是为了将...博文来自:小小本科生成长之路

本文链接:http://jomsell.com/duojifankui/84.html