1 张惠娟 副教授 Linux 进程管理. 2 内容 进程组成 进程环境 进程管理内容 进程控制块 进程状态 进程调度 进程控制 进程通信.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

面向侧面的程序设计 方林博士 本文下载地址:
高级服务器设计和实现 1 —— 基础与进阶 余锋
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Process Scheduling based on Linux3.2 孟宁 电话: 孟宁 V5 : 主页:
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
第 13 章 基于 proc 的 Linux 进程控制块 信息读取 山东科技大学操作系统教研组. 理解 proc 伪文件系统的基本概念和功能,掌握常见操作命令。 了解 Linux 进程控制块 task_strcut ,并理解其重要成员变量的含义。 理解基于 seq_file 机制的 proc 伪文件操作机制.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
操作系统 年级:2003春 专业:计算机应用专业.
实用操作系统概念 张惠娟 副教授 1.
第六讲 进程控制与调度 目的与要求:理解进程切换过程,理解进程调度原因及调度切换时机,掌握进程调度方式与实现及各种调度算法,弄清作业和进程的关系,了解线程的引入原因。 重点与难点:进程切换的实现与进程调度算法。 作业:7, 8, 10, 11, 19, 20。
4.1 调度的层次 4.2 Linux交换调度 4.3 Linux进程调度 4.4 小结 习题
Chapter 6 時序.
Oracle数据库 Oracle 子程序.
Lab2 syscall 参数问题 参数check在当前代码框架下并不具有任何含义, 它就只是个参数而已 参数不超过四个: 系统调用号
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
OpenMP简介和开发教程 广州创龙电子科技有限公司
存储系统.
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
临界区软件互斥软件实现算法.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2011
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2009
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
中国科学技术大学计算机系 陈香兰(0512- ) Sprint 2011
第六章 Linux内核.
操作系统原理 Operating System Principles
第2章 进程的描述与控制 2.1 进程及其描述 2.2 进程基本状态及其相互转换 2.3 进程控制 2.4 线程 进程的引入
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
如何生成设备节点 广州创龙电子科技有限公司
临界区软件互斥软件实现算法 主讲教师:夏莹杰
Windows 7 的系统设置.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
系统虚拟化 厉肖
第5章 Linux内核简介.
Linux内核源代码导读 中国科学技术大学计算机系 陈香兰(0551- )
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
2.3 进程及其实现 进程的定义和属性 进程的状态和转换 进程的描述 进程切换与模式切换
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
进程概念.
姚金宇 MIT SCHEME 使用说明 姚金宇
Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512- )
信号量(Semaphore).
数据报分片.
Ch7 uC/OS-II分析(2) 宋健建 南京大学软件学院 2006/11.
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
Google的云计算 分布式锁服务Chubby.
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 SEMAPHORE 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
Presentation transcript:

1 张惠娟 副教授 Linux 进程管理

2 内容 进程组成 进程环境 进程管理内容 进程控制块 进程状态 进程调度 进程控制 进程通信

3 进程组成 Linux 是一个多任务多用户操作系统,采用进 程模型。 进程都具有一定的功能和权限,运行在各自独 立的虚拟地址空间,彼此独立,且通过通信 机制实现同步互斥,通过调度程序实现合理 调度。

4 进程组成  正文段 存放进程要运行的程序,描述了进程要完成的功能  用户数据段 存放正文段在执行时所需要的数据和工作区  系统数据段 存放了进程的控制信息,其中最重要的数据结构 是 task_struct 。 进程组成

5 进程环境 Linux 进程有两种状态:内核态和用户 态 核心态又称系统态 Linux 在执行内核程序时是处于核心态下 用户态是进程的普通执行状态 一个进程在运行过程中,总是在两种执行状态之 间不断地转换。

6 进程虚拟地址空间分为:用户空间和系统空间。  用户空间 用户进程本身的程序和数据(可执行映象) 进程运行用户程序时使用的堆栈,即进程堆栈。 系统对进程进行控制和管理的信息,如进程控制块等  系统空间 内核被映射到所有进程的系统空间中。 只允许进程在核心态下访问。进程运行在用户态下时, 不允许直接访问系统空间。 进程只能通过系统调用转换为核心态后,才能访问系统 空间 进程环境

7 进程上下文 系统提供给进程处于动态变化的运行环境总和称为进 程上下文 系统上下文 系统完成自身任务时的运行环境称为系统上下文 内核在系统上下文中执行时不会阻塞。

8

9 进程管理内容 进程管理由进程控制块、进程调度、中断处 理、任务队列、定时器, bottom half 队列、 系统调用、进程通信等部分组成。 进程管理是 Linux 存储管理,文件管理,设备 管理的基础。

10 进程控制块 进程控制块是 Linux 系统最复杂的数据 结构之一。 Linux 在内存空间中开辟了一个专门区域存 放所有进程的进程控制块。 系统初始化后,建立第一个 task_struct 数 据结构 INIT_TASK 。 新进程创建时,系统从内存分配新 task_struct ,占据 1680 个字节。

11  进程状态和标志  进程标识 进程控制块

12  进程的族亲关系 进程控制块

13  进程间链接信息  进程调度信息 进程控制块

14  进程的时间信息  进程的虚存信息 进程控制块

15  进程的文件信息  与进程间通信有关的信息 进程控制块

16  其它信息 进程控制块

17 进程状态 定义了六种状态进程状态 #define TASK_RUNNING0 #define TASK_INTERRUPTIBLE1 #define TASK_UNINTERRUPTIBLE2 #define TASK_ZOMBIE4 #define TASK_STOPPED8 #define TASK_SWAPPING16

18

19 进程调度 调度方法 调度策略 调度参数 调度方法 调度时机

20  调度方法 Linux 进程调度方式 采用抢占调度方式 (内核不抢占) 进程分为普通进程和实时进程,分别采 用不同的调度策略,实时进程的优先级 高于普通进程。 进程调度

21  调度策略 进程调度

22  调度参数 policy 进程调度策略,可通过系统调用 sys_sched_setscheduler() 更改 ( kernel/sched.c )。 SCHED_OTHER 非实时进程,基于优先级的 轮转法 SCHED_FIFO 实时进程,用先进先出算法 SCHED_RR 实时进程,用基于优先权的轮转 法 进程调度

23 priority 进程优先级(静态),给出进程每次获取 cpu 后可使用的时间(按 jitty 计算)。通过系统调 用 sys_setpriority() 改变。 Linux 的基准时间( kernel/timer.c )。系统初 始化时清零,以后每隔 10ms 由时钟中断服务 程序, do_timer 增 1 。 进程调度

24 rt_priority 实时进程的优先级,可通过系统调用 sys_sched_setscheduler() 改变. Counter 进程动态优先级表示进程当前还可运行多久 进程开始运行时被赋为 priority 值,以后,每隔 一个 tick (时钟中断)递减 1 ,减到 0 时引起新 一轮调度。 重新调度将从 run-queue 队列中选出 counter 值 最大的就绪进程获得 cpu 。 进程调度

25 进程调度  调度方法 采用动态优先级法,调度对象是可运行队列。 进程在运行中, counter 代表动态优先级。 Linux 采取了加权的方法来保证实时进程优先于 普通进程。普通进程的权值就是它的 counter 的 值,实时进程的权值是它的 rt_priority 的值加 1000 。 调度过程中,调度程序检查可运行队列中所有进 程的权值,选择其中权值最大的进程做为下一个 运行进程。

26 static inline int goodness(struct task_struct * p, struct task_struct * prev, int this_cpu) { int weight; if (p->policy != SCHED_OTHER) return p->rt_priority; weight = p->counter; …… return weight; } 进程调度

27  调度时机 时机 1 :进程状态发生变化时 处于运行态下的进程要等待某种资源 运行态下的进程在程序执行完毕后,通过 调用内核函数 do_exit() 终止运行并转入僵 死态。 处于等待态的进程被唤醒后,将加入到可 运行队列中时 进程从运行态转入暂停态时 进程从暂停态成为可运行态时 进程调度

28 时机 2 当前进程时间片用完时 时机 3 进程从系统调用返回到用户态时 时机 4 中断处理后,进程返回到用户态时。 进程调度

29 进程控制 进程创建过程 进程状态间转换

30  进程创建过程 为新进程分配任务结构体内存空间 把父进程任务结构体拷贝到子进程任务结构体 为新进程在其虚拟内存建立内核堆栈 对子进程任务结构体中部分进行初始化设置 把父进程有关信息拷贝给子进程,建立共享关系 把子进程的 counter 设为父进程 counter 值的一半 把子进程加入到可运行队列中 结束 do_fork() 函数返回 PID 值 进程控制

31  创建过程具体描述 系统启动时创建第一个进程( 0 号进程) 此时,系统只有这一个进程:初始化进程,运行 在核心态 初始化结束时,初始进程启动一个核心进程: init 进程,也称为 1 号进程,然后执行空闲循环。 系统空闲时,调度程序运行这个空闲进程。这个 空闲进程的 task_struct 是唯一一个不是动态分配 而是在核心连接时静态定义的,为了不至于混淆, 叫做 init_task 。 进程控制

32 进程由 do_fork() 函数创建 int do_fork(unsigned long clone_flags, unsigned long usp, struct pt_regs *regs) { 为新进程申请 PCB 空间 ; if ( 申请不到 ) 返回错误, 退出 ; 为新进程申请核心堆栈 ; if ( 核心堆栈申请不到 ) 返回错误, 退出 ; 为新进程在 Task 向量表中找到空闲位置 ; /* 复制父进程 current PCB 中的信息,继承资源 */ ; p = current; 进程控制

33 /* 为防止信号、定时中断误唤醒未创建完毕的进 程,将子进程的状态设成不可中断的 */ p->state = TASK_UNINTERRUPTIBLE; /* 跟踪状态和超级用户特权是没有继承性的,因为在 root 用户为 普通用户创建进程时,出于安全考虑这个普通用户的进程不允 许拥有超级用户特权。 */ p->flags &= ~ (PF_PTRACED|PF_TRACESYS|PF_SUPERPRIV); /* 将进程标志设成初建,但暂时不能运行,在进程第一次获得 CPU 时,内核将根据此标志进行一定操作 */ p->flags |= PF_FORKNOEXEC; 进程控制

34 开始 Task_struct 的初始化工作,如初始化进程时钟、 信号、时间等数据 ; 继承父进程所有资源 : 拷贝父进程当前打开的文件 ; 拷贝父进程在 VFS 的位置 ; 拷贝父进程的信号量 ; 拷贝父进程运行的内存 ; 拷贝父进程的线程 ; 初始化工作结束,父进程将其将其唤醒, 挂入 running 队列中,返回子进程的 pid; 进程控制

35

36 进程状态间转换

37  转换说明 sleep_on(): TASK_RUNNING->TASK_UNINTERRUPTIBLE 拥有 CPU 的进程申请资源无效时,通过 sleep_on() ,将 进程从 TASK_RUNNING 切换到 TASK_UNINTERRUPTIBLE 状态。 sleep_on() 函数作用就是将 current 进程的状态置成 TASK_UNINTERRUPTIBLE, 并加到等待队列中。 一般来说引起状态变成 TASK_UNINTERRUPTIBLE 的资 源申请,都是对一些硬件资源的申请,如果得不到这些 资源,进程将不能执行下去,不能由 signal 信号或时钟 中断唤醒回到 TASK_RUNNING 状态。 进程状态间转换

38 interruptible_sleep_on() : TASK_RUNNING->TASK_INTERRUPTIBLE 拥有 CPU 的进程申请资源无效时,通过该函数将进程从 TASK_RUNNING 切换到 TASK_INTERRUPTIBLE 状态。 interruptible_sleep_on() 函数作用就是将 current 进程的状态 置成 TASK_INTERRUPTIBLE, 并加到等待队列中。 处于 TASK_INTERRUPTIBLE 状态的进程可在资源有效时被 wake_up() 、 wake_up_interruptible() 或 wake_up_process() 唤醒,或收到 signal 信号以及时间中断后被唤醒。 进程状态间转换

39 sleep_on_timeout() : TASK_RUNNING- >TASK_UNINTERRUPTIBLE interruptible_sleep_on_timeout (): TASK_RUNNING->TASK_INTERRUPTIBLE 虽然在申请资源或运行中出现了某种错误,但是 系统仍然给进程一次重新运行的机会。调用该函 数将进程从 TASK_RUNNING 切换到 TASK_INTERRUTIBLE 状态,并等待规定的时间 片长度, 再重新试一次。 进程状态间转换

40 wake_up() TASK_UNINTERRUPTIBLE-> TASK_RUNNING TASK_INTERRUPTIBLE-> TASK_RUNNING 处于 TASK_UNINTERRUPTIBLE 状态的进程不能由 signal 信号 或时钟中断唤醒,只能由 wake_up() 或 wake_up_process() 唤醒。 wake_up() 函数的作用是将 wait_queue 中所有状态为 TASK_INTERRUPTIBLE 或 TASK_UNINTERRUPTIBLE 的 进程 状态置为 TASK_RUNNING, 并将它们都放 running 队列中去,即唤醒所有等待在该队列上的进程 。 进程状态间转换

41 进程通信机制 支持大量的进程通信机制  锁机制  信号  管道  消息队列  信号量  共享内存

42  信号 操作系统通过信号向进程发送异步事件信号。 当一个事件发生时,如果需要通知进程,则系 统就为其生成一个信号,进程在接受到信号后, 可采取适当动作来处理信号。 在 linux 系统中,内核用一个字代表所有信号, 信号种类的树目和具体平台有关,如 32 位、 64 位。 信号是内核不可分割的一部分,不象其他 ipc , 是可选的。 进程通信机制

43 进程对信号的操作 忽略信号 阻塞信号 由进程处理信号 由内核进行默认处理 进程通信机制

44  管道( pipe ) 有名管道 一般为系统特殊文件方式, 使用的进程之间不一定 要有父子关系或兄弟关系. 无名管道 一般为内存方式, 使用的进程之间一定要有父子关 系或兄弟关系. 无名管道实现方法 两个 file 数据结构指向同一个临时 VFS INODE 节点 (本身指向内存中的一个物理页)实现。 进程通信机制

45 f_mode … f_inode f_op … f_mode … f_inode f_op … 写操作 读操作 数据页面 VFS inode 进程 1 的 file 结构进程 2 的 file 结构 进程通信机制

46 pipe_write() \fs\pipe.c 中定义了 pipe_write 函数 把字节从进程地址空间拷贝到共享数据页 如果管道被读进程锁定或者空间不够,当前进程睡眠,放 在管道 INODE 节点等待队列中,并调用调度程序,运行 另外一个进程。 写过程可以中断,所以可以接收信号。当管道中有足够空 间写数据或者锁定解除,写进程就会被读进程唤醒。 数据写完之后, VFS INODE 节点锁定解除,管道 INODE 节点的等待队列中的所有读进程都会被唤醒。 进程通信机制

47 pipe_write() 和写过程相似。 允许进行非阻塞读,即如果没有数据可读或者 管道被锁定,返回一个错误。这意味着进程会 继续运行。 另一种方式是在管道的 INODE 节点的等待队列 中等待,直到写进程完成。 如果管道进程都完成操作,管道 INODE 节点和 相应的共享数据页被废弃。 进程通信机制