Linux中的进程及调度PPT幻灯片课件

上传人:日度 文档编号:134495740 上传时间:2020-06-05 格式:PPT 页数:29 大小:341.50KB
返回 下载 相关 举报
Linux中的进程及调度PPT幻灯片课件_第1页
第1页 / 共29页
Linux中的进程及调度PPT幻灯片课件_第2页
第2页 / 共29页
Linux中的进程及调度PPT幻灯片课件_第3页
第3页 / 共29页
Linux中的进程及调度PPT幻灯片课件_第4页
第4页 / 共29页
Linux中的进程及调度PPT幻灯片课件_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Linux中的进程及调度PPT幻灯片课件》由会员分享,可在线阅读,更多相关《Linux中的进程及调度PPT幻灯片课件(29页珍藏版)》请在金锄头文库上搜索。

1、2 9Linux中的进程及调度 2 9 1TSS及Linux实现TSS是一个具有104字节的数据结构 用以记录一个任务的关键胜的状态信息包括 任务切换前该任务各通用寄存器的内容任务切换前该任务各个段寄存器 包括es cs ss ds fs和gs 的内容 在务切换前该任务EFLAGS寄存器的内容 任务切换前该任务指令地址寄存器EIP的内容 指向前一个任务的TSS结构的段选择码 当前任务执行IRet指令时 就返回到由这个段选择码所指的任务 1 该任务的LDT段选择码 它指向任务的LDT 控制寄存器CR3的内容 它指向任务的页面目录 三个堆栈指针像LDT IDT等一样 TSS也要在段描述表中有个表项

2、 CPU中还增设了一个任务寄存器服 TR 指向当前任务的TSS 相应地 还增加了一条指令LTR 对TR寄存器进行装入操作 还有 在IDT表中 除中断门 陷阱门和调用门外 还定义了一种任务门 然而从执行效率考虑 Linux并没有按照i386提供的硬件机制转化 Linux内核只是按照i386要求设置了TR及TSS 内核中并不使用任务门 也不允许使用JMP或CALL指令实施任务切换 2 2 9 2Linux进程控制块PCB Linux内核利用一个数据结构 task struct 标志一个进程的存在 表示每个进程的数据结构指针形成了一个task数组 Linux中 任务和进程是两个相同的术语 这种指针数

3、组有时也称为指针向量 这个数组的大小默认为512 表明在Linux系统中能够同时运行的进程最多可有512个 当建立新进程的时候 Linux为新的进程分配一个task struct结构 然后将其指针保存在task数组中 task struct结构的组成主要可分为如下几个部分 3 进程运行状态信息用户标识信息标识号调度信息信号处理信息进程内部状态标志进程链信息等待队列时间与定时器打开的文件以及文件系统信息内存管理信息进程间通信信息上下文信息tss taskstatesegment 4 1 进程运行状态 Linux进程共有如下六种状态 TASK RUNNING TASK INTERRUPTIBLE

4、TASK UNINTERRUPTIBLE TASK ZOMBIE TASK STOPPED TASK SWAPPING 5 2 用户标识信息 Linux使用用户标识符与组标识符来判断用户进程对文件和目录的访问许可 每个进程的task struct中均有四对标识符 uid gideuid egidsuid sgidfsuid fsgid 6 3 标识号 1 pid惟一地标识一个进程 2 pgrp进程所处的进程组的标识 pid与pgrp用以判断进程是否具有外设的访问权 3 session进程所处的会话的标识 4 leader会话的首进程标志 5 groups NGROUPS 与UNIX类似 一个进

5、程可能同时属于许多个进程组 Linux使用该数组来存储进程所在的各个进程组id 这些进程组的最多个数为NGROUPS 可以通过 defineNGROUPS 1来取消这项功能 另外 进程还有一个隐含的id 就是它在task数组中的索引 该索引指向进程的TSS段描述符以及LDT LocalDirectoryTable 段描述符在GDT GlobleDirectoryTable 中的位置 7 4 调度信息Linux有三种调度策略 SCHED OTHER适用于一般进程 基于优先级的轮转法 一般进程的优先级较实时进程低 SCHED FIFO用于实时进程 先进先出 FirstInFirstout 如ksw

6、apd进程 HED RR用于实时进程 轮转调度 RoundRobin Linux根据以下信息进行调度 1 longcounter与longpriority2 unsignedlongrt priority3 unsignedtimeout 8 5 信号处理信息在Linux中 信号种类的数目和具体的平台有关 因为内核用一个字代表所有的信号 因此字的位数就是信号种类的最多数目 1 进程可以选择对某种信号所采取的特定操作阻塞信号由进程处理的信号由内核进行默认处理 2 信号及其结构unsignedlongsignal与unsignedlongblockedsignal用以记录当前挂起的信号 block

7、ed用以记录当前阻塞的信号 挂起的信号指尚未进行处理的信号 阻塞的信号指进程当前不处理的信号 如果产生了某个当前被阻塞的信号 则该信号会一直保持挂起 直到该信号不再被阻塞为止 9 structsignal struct intcount structsigactionaction 32 structsignal struct sig 10 count为该signal struct的引用计数 当使用CLONE SIGHAND标志来创建一个子进程时 父进程与子进程共享一个signal struct count计数加1 在进程退出时 判断该signal struct是否还有其它进程引用 只有coun

8、t为0 方可删除该结构 action 32 中指定了进程处理所有这32个信号的方式 如果某个sigaction结构中包含有处理信号的例程地址 则由该处理例程处理此信号 反之 则根据结构中的一个标志或者由内核进行默认处理 或者只是忽略该信号 11 6 进程链信息与等待队列structtask struct next task prev task所有进程的双向链表指针 其根为task0 即init task 在设置init task的task struct结构时 将这两个指针都指向它自身 structtask struct next run prev run所有运行进程的双向链表指针 组成了运行队

9、列 其根也为task0 structtask struct p opptr初始的父进程指针 父进程可能由于退出或其它原因 而将其子进程转移到其它进程 如taskl 名下 structtask struct p pptr父进程指针 init task的这个指针指向它自身 12 5 structtask struct p cptr最新的子进程指针 init task的这个指针指向它自身 6 structtask struct p ysptr左兄弟进程指针 7 structtask struct p osptr右兄弟进程指针 8 structwait queue wait chldexit等待队列

10、用于系统调用wait 等待子进程的返回 13 7 时间与定时器longutime stime进程在用户态 核心态下的运行时间 longcutime cstime分别为进程所有子孙进程utime与stime的总和 子进程退出时 将发送信号SIGCHLD给父进程 然后父进程更新这些数据 longstart time进程创建的时间 14 Linux用指针current保存当前正在运行的进程的task struct 每当产生一次时钟中断 在i386上 外部中断 0 中断号为0 x20 Linux就会更新current所指向的进程的时间信息 如果当前执行任务的进程是内核处理程序 例如进程调用系统调用时

11、那么系统就将时间记录为进程在系统模式下花费的时间 否则记录为进程在用户模式下花费的时间 除了为进程记录其消耗的CPU时间外 Linux还支持和进程相关的间隔定时器 当定时器到期时 会向定时器的所属进程发送信号 进程可使用三种不同类型的定时器来给自己发送相应的信号 如表2 11所示 15 表2 11定时器类型 16 unsignedlongit real value it prof value it virt value三种计时器各自的定时长度 unsignedlongit real incr it prof incr it virt incr三种计时器各自的到期时间 Linux对Virtual

12、和Profile定时器的处理是相同的 在每个时钟中断 定时器的计数值减1 直到计数值为0时发送信号 17 8 打开的文件以及文件系统信息structfs struct intcount unsignedshortumask structinode root pwd structfs struct fs其中 count为该fs struct的引用计数 当使用CLONE FS标志来创建一个子进程时 父进程与子进程共享一个fs struct count计数加1 进程退出时 判断该fs struct是否还有其它进程引用 只有count为0 方可删除该结构 18 root与pwd包含指向两个VFS索引节

13、点的指针 这两个索引节点分别是进程的主目录以及进程的当前目录 索引节点中有一个引用计数器 当有新的进程指向某个索引节点时 该索引节点的引用计数器会增加计数 未被引用的索引节点的引用计数为0 因此 当包含在某个目录中的文件正在运行时 就无法删除这一目录 因为这一目录的引用计数大于0 19 9 内存管理信息structmm struct mmmm struct结构中主要包括进程代码段 数据段 BSS段 调用参数区与环境区的起始结束地址 以及指向structvm area struct结构的指针等 20 10 上下文信息TSS taskstatesegment structthread struct

14、tss保存进程运行的环境信息 如 通用寄存器中断向量 中断入口地址及程序状态字 21 11 执行域structexec domain exec domainunsignedlongpersonalityLinux可执行遵循iBCS2基于i386结构的其它系统的程序 这些程序都有一些差别 在这个exec domain结构中反映出要模拟运行的其它UNIX的信息 personality用于记录这个程序对应的UNIX的版本 对于标准的Linux进程 personality值为PER LINUX 22 12 内核栈unsignedlongkernel stack page用户进程在系统调用时使用的内核栈

15、 unsignedlongsaved kernel stack在系统调用vm86时 用于保存旧的内核栈 13 进程间通信信息structsem undo semundostructsem queue semsleeping用以实现UNIXSYSV的进程间通信机制 23 14 其它信息structrlimitrlim RLIM NLIMITS 对进程使用资源的一些限制 charcomm 16 本进程所执行的程序的名字 经常用于调试 intexit code exit signalexit code记录进程的返回码 在进程退出时 将exit signal信号发送给父进程 intdumpable用于

16、标志接收到某个信号时 是否执行内存卸出 memorydump intdid exec为了遵循POSIX标准 在调用setpgid时 用以判断进程是否通过系统调用execve 而重新装载执行 structlinux binfmt binfmt用于装载可执行程序的结构 其中的装载函数指针可以设置为不同的装载函数 24 2 9 3进程的创建与退出 Linux并不确切区分进程与线程 而将线程定义为执行上下文 它实际只是同一个进程的另外一个执行上下文而已 对于调度 仍然可以使用进程的调度程序 Linux的内核进程 使用内核函数kernel thread创建 一般被称做线程 Linux为此提供了两个系统调用 一个是fork 另一个是clone 25 1 进程创建Linux进程的创建分为两部分即进程的复制与目标程序的执行 第一步是从已经存在的父进程中复制出一个子进程 所谓复制 只是进程的基本资源的复制 第二步是目标程序的执行2 进程的退出通过系统调用exit 便可以使进程终止执行 26 2 9 4进程的调度 1 Linux调度的时机自愿方式调度 在内核里面 一个进程可以通过schedule 启动一次

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号