嵌入式操作系统14进程管理课件

上传人:我*** 文档编号:144685351 上传时间:2020-09-13 格式:PPT 页数:132 大小:916KB
返回 下载 相关 举报
嵌入式操作系统14进程管理课件_第1页
第1页 / 共132页
嵌入式操作系统14进程管理课件_第2页
第2页 / 共132页
嵌入式操作系统14进程管理课件_第3页
第3页 / 共132页
嵌入式操作系统14进程管理课件_第4页
第4页 / 共132页
嵌入式操作系统14进程管理课件_第5页
第5页 / 共132页
点击查看更多>>
资源描述

《嵌入式操作系统14进程管理课件》由会员分享,可在线阅读,更多相关《嵌入式操作系统14进程管理课件(132页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统 进程管理,李春杰,主要内容,进程的概念 进程组成 进程环境 进程状态 进程控制块 进程控制,进程的定义,较典型的进程定义有:4种 进程是程序的一次执行。不是程序。 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 进程是执行中的程序。 在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。,进程的定义,进程同程序的比较 程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执

2、行过程,它是一个动态的概念。 程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。 进程更能真实地描述并发,而程序不能 进程是由PCB、程序段和数据段三部分组成的 进程具有创建其他进程的功能,而程序没有 同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程,进程的定义,进程与程序的异同 (1)每个进程实体中包含了程序段和数据段这两个部分,因此说进程与程序是紧密相关的。但从结构上看,进程实体中除了程序段和数据段外,还必须包含一个数据结构,即进程控制块PCB。 (2)进程是程序的一次执行过程,因此是动态的;动态性还表现在进

3、程由创建而产生、由调度而执行、由撤消而消亡,即它具有一定的生命周期。而程序则只是一组指令的有序集合,并可永久地存放在某种介质上,其本身不具有运动的含义,因此是静态的。,进程的定义,进程的特征 (1) 结构特征 进程控制块(PCB)+程序段+相关的数据段=进程实体 (2) 动态性最基本特征 进程:进程实体的一次执行过程,有生命周期。 程序:程序是一组有序指令的集合,是静态的概念,进程的特征 (3) 并发性 多个进程实体同存于内存中,在一段时间并发运行; 程序不能并发执行 (4) 独立性 进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位,而程序则不是。 (5) 异步性 进程按各自独立

4、的、不可预知的速度向前推进,Linux进程,Linux是一个多任务多用户操作系统, 一个任务(task)就是一个进程(process)。每一个进程都具有一定的功能和权限,它们都运行在各自独立的虚拟地址空间。 进程虚拟地址空间 在Linux中,进程是系统资源分配的基本单位,也是使用CPU运行的基本调度单位。 存放在磁盘上的可执行文件的代码和数据的集合称为可执行映象(Executable Image)。 当一个程序装入系统中运行时,它就形成了一个进程。,进程的组成,进程是由正文段(text)、用户数据段(user segment)和系统数据段(system segment)组成的一个动态实体。 正

5、文段中存放着进程要执行的指令代码,具有只读的属性, 用户数据段是进程在运行过程中处理数据的集合,它们是进程直接进行操作的所有数据, 以及进程使用的进程堆栈。 系统数据段存放着进程的控制信息。其中包括进程控制块PCB 。,进程结构体,进程控制块PCB是名字为task_struct的数据结构,它称为任务结构体 任务结构体中容纳了一个进程的所有信息,是系统对进程进行管理和控制的有效手段,是系统实现进程调度的主要依据。 当一个进程被创建时,系统就为该进程建立一个task_struct任务结构体。当进程运行结束时,系统撤消该进程的任务结构体。 进程的任务结构体是进程存在的唯一标志。 Linux在内存空间

6、中开辟了一个专门的区域存放所有进程的任务结构体。 进程结构体又叫做进程描述符,Linux中每一个进程由一个task_struct数据结构来描述(进程控制块PCB) 进程描述符放在动态内存中而且和内核态的进程栈放在一个独立的8KB的内存区中 并让第一个页框的起始地址是8K的倍数 好处:通过esp就能引用进程描 述符,进程环境,核心态和用户态 Linux的进程处理机上运行时,处理机提供了两种不同的的执行状态,核心态(kernel mode)和用户态(user mode)。 核心态又称系统态,它具有较高的特权,能执行所有的机器指令,包括由操作系统执行的特权指令,能访问所有的寄存器和存储区域,能直接控

7、制所有的系统资源。 Linux在执行内核程序时是处于核心态下。 用户态是进程的普通执行状态,在用户态下进程具有较低的特权, 只能执行规定的机器指令,不能执行特权指令。进程在用户态下只能访问进程的存储空间。在用户态下进程不能与系统硬件相互作用,不能访问系统资源。,进程环境,进程空间和系统空间 用户空间(各自独立的) 用户进程本身的程序和数据(可执行映象) 进程运行用户程序时使用的堆栈,即进程堆栈。 系统对进程进行控制和管理的信息,如进程控制块等 系统空间(共享的) 内核被映射到所有进程的系统空间中。 只允许进程在核心态下访问。进程运行在用户态下时,不允许直接访问系统空间。 进程只能通过系统调用转

8、换为核心态后,才能访问系统空间,进程环境,进程上下文 把系统提供给进程的处于动态变化的运行环境总和称为进程上下文。系统中的每一个进程都有它自己的上下文。 进程因时间片用完或因等待某个事件而阻塞时,进程调度需要把CPU的使用权从当前进程交给另一个进程,这个过程称为进程切换(procdss switching)。 进程的切换又称为上下文切换(context switching).。,进程环境,系统上下文 在系统内核为用户进程服务,例如进程执行一个系统调用时,进程的执行状态要从用户态转换为核心态。但是,此时内核的运行仍是进程的一部分,所以说这时内核是运行在进程上下文中。 系统在完成自身任务时的运行环

9、境称为系统上下文(system context)。 内核在系统上下文中执行时不会阻塞。,进程环境,进程的状态5个,运行态:进程正在使用CPU运行的状态。处于运行态的进程又称为当前进程(current process)。 可运行态:进程已分配到除CPU外所需要的其它资源,等待系统把CPU分配给它之后即可投入运行。 等待态:又称睡眠态,它是进程正在等待某个事件或某个资源时所处的状态。 等待态进一步分为可中断的等待态和不可中断的等待态。处于可中断等待态的进程可以由信号(signal)解除其等待态。处于不可中断等待态的进程,一般是直接或间接等待硬件条件。 它只能用特定的方式来解除,例如使用唤醒函数wa

10、ke_up()等。 暂停态:进程需要接受某种特殊处理而暂时停止运行所处的状态。通常进程在接受到外部进程的某个信号进入暂停态,例如,正在接受调试的进程就处于这种状态。 僵死态:进程的运行已经结束,但它的任务结构体仍在系统中。,进程的状态,进程的管理模式,Linux进程的任务结构体(控制块),当一个进程被创建时,系统就为该进程建立一个task_struct任务结构体。 当进程运行结束时,系统撤消该进程的任务结构体。 进程的任务结构体是进程存在的唯一标志。 进程的任务结构体为内核管理进程,提供了内核所需了解的进程信息。 include/linux/sched.hstruct task_struct

11、数据结构很庞大,task_struct (include/linux/sched.h)组成示意,Linux进程的任务结构体,Task_struct结构的描述: 进程标识 进程状态(State) 进程调度信息和策略 进程通信有关的信息(IPC) 进程链接信息(Links) 时间和定时器信息(Times and Timers) 文件系统信息(Files System) 处理器相关的上下文信息,Linux进程的任务结构体,进程的状态和标志 进程的状态:可运行态、暂停态、等待态 进程的标志:表明当前进程执行的状态如进程正初始化,正以root身份执行等,Linux进程的任务结构体,2进程的标识,Linu

12、x进程的任务结构体,进程的族亲关系 :,0号进程是所有进程的父进程, 0号创建init进程,init完成相关初始化,执行相关程序。,Linux进程的任务结构体,进程间的链接信息 进程的调度信息,Linux进程的任务结构体,进程的时间信息 进程的虚存信息,Linux进程的任务结构体,进程的通信信息,进程的文件信息,Linux进程的任务结构体,其它信息,Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构: Thread_info 进程的内核堆栈,Thread_union,C语言允许用如下的一个union结构来方便的表示这样的一个混合体,从内核堆栈获得thread_i

13、nfo,根据thread_info描述符和内核态堆栈之间的配对,内核可以很容易的从堆栈寄存器的值获得thread_info的指针,archarmkernelentry-header.S,includeasm-armthread_info.h,current宏获得当前进程描述符,includeasm-armCurrent.h,主要内容,进程的概念 进程组成 进程环境 进程状态 进程控制块 进程控制,进程控制,进程标识 进程链表 进程的等待 进程的唤醒 进程的切换 进程的创建 进程的撤销,标识一个进程,使用进程描述符地址 进程和进程描述符之间有非常严格的一一对应关系,使得用32位进程描述符地址标识

14、进程非常方便 使用PID (Process ID,PID)进程标识符 得数来标识进程 每个进程有一个PID号 每个进程的PID都存放在进程描述符的pid域中 新创建的进程通常是前一个进程的PID加1,用户如何获得一个进程的pid,系统调用getpid tgid进程线程组的标示符值 getpid返回组pid(tgid与pid的值相同) printf(process PID:%dn,(int)getpid();,标识当前进程,current宏 current宏获取当前正在运行的进程描述符的指针,current-pid返回当前正在运行的进程的PID值,进程链表,为了对给定类型的进程(比如所有在可运行

15、状态下的进程)进行有效的搜索,内核维护了几个进程链表 所有进程链表,task_struct中的 struct task_struct *next_task, *prev_task,进程链表,for_each_task宏扫描整个进程链表,SET_LINKS和REMOVE_LINKS宏用来分别在进程链表中插入和删除一个进程描述符。,#define SET_LINKS(p) do (p)-next_task = 父进程指向新的子进程p /确保p为最年幼进程 while (0),p_opptr 指向原始的父进程 p_pptr 指向当前的父进程 p_cptr 指向最年轻的子进程 p_ysptr 指向弟进

16、程 p_osptr 指向兄进程,TASK_RUNNING状态的进程链表,当内核调度程序寻址一个新的进程在cpu上运行时,必须只考虑可运行进程,因为扫描整个进程链表效率很低 引入了可运行状态的双向循环链表,也叫运行队列 进程描述符使用用来实现运行队列 如果该进程的优先权为K,run_list字段把该进程链入优先权为K(取值范围0-139)的可运行进程链表中,可运行队列,Active代表活动进程链表 Expired代表过期进程链表,TASK_RUNNING状态的进程链表,dequeue_task(p,array)函数从运行队列中删除进程P的描述符 enqueue_task(p,array)函数从运行队列中加入进程P的描述符 Array是个指针指向相关运行队列的数据结构,等待队列,进程必须经常等待某些事件的发生,如等待释放系统资源,或等待时间经过固定间隔等,故此引入等待队列的概念。 等待队列实现了在事件上的条件等待:希望等待特定事件的进程把自己放进合适的等待队列中,并放弃控制权。 等待队列表示一组睡眠的进程,当某一条件为真时,内核唤醒它们。

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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