嵌入式操作系统进程.ppt
《嵌入式操作系统进程.ppt》由会员分享,可在线阅读,更多相关《嵌入式操作系统进程.ppt(122页珍藏版)》请在三一办公上搜索。
1、第五章操作系统进程,在Linux系统中,进程操作。需要掌握以下基本内容进程的基本概念Linux进程及进程创建Linux进程系统调用Linux进程调度,学习目标,主要内容,1,3,2,4,进程的基本概念,Linux系统进程,Linux进程的创建,Linux进程的系统调用,5,Linux进程调度,一、进程的基本概念,进程的基本概念进程的状态及转换进程的组成,在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。程序是一个普通文件,是机器代码指令和数据的集合,这些指令和数据存储在磁盘上的一个可执行映象(Executable Image)中。进程是程序的一次“动态执行”,也
2、就是说进程是“执行中的程序”。每一个进程都有自己的地址空间,包括文本区域、数据区域和堆栈区域。,1、进程的基本概念,一、进程的基本概念,进程是由正文段(Text)、用户数据段(User Segment)以及系统数据段(System Segment)共同组成的一个执行环境,它是一个动态实体。相对的,程序是硬盘上存放的一个文件(代码)。当程序被运行,它也就成为了进程。,1、进程的基本概念,一、进程的基本概念,线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统来说,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创
3、建一个或多个附加线程,就是所谓基于多线程的多任务。在Linux 2.6内核中,Linux采用了更为先进的线程模型:NPTL(Native POSIX Thread Library)。与传统的LinuxThreads线程模型比,NPTL与POSIX标准兼容,并且性能提升明显,也具备更好的可伸缩性。对Linux内核而言,线程和进程没有本质的区别,它们都是调度的基本单位(实际上,Linux内核基于进程机制实现线程),本书重点介绍进程的内容。,1、进程的基本概念,一、进程的基本概念,1、进程的基本概念,一、进程的基本概念,进程和程序区别和联系(1)动态性和静态性。(2)从结构上看每个进程的实体都是由程
4、序段和相应的数据段两部分构成的,这一特征与程序的含义相近。(3)一个进程可以涉及到一个或几个程序的执行;反之一程序可以对应多个进程,即同一程序段可在不同数据集合上运行,可构成不同的进程。,2、进程的状态及其转换,一、进程的基本概念,(1)运行状态:进程正在处理机上运行的状态,该进程已获得必要的资源,也获得了处理机,用户程序正在处理机上运行。(2)阻塞状态:进程等待某种事件完成(例如,等待输入/输出操作的完成)而暂时不能运行的状态,处于该状态的进程不能参加竞争处理机,此时,即使分配给它处理机,它也不能运行。(3)就绪状态:该进程运行所需的一切条件都得到满足,但因处理机资源个数少于进程个数,所以该
5、进程不能运行,而必须等待分配处理机资源,一旦获得处理机就立即投入运行。,2、进程的状态及其转换,一、进程的基本概念,2、进程的状态及其转换,一、进程的基本概念,3、进程的组成,一、进程的基本概念,进程实体一般由程序段、数据段和进程控制块(PCB)这三部分组成。其中进程的程序段就是该进程所对应的可执行程序。而数据段就是该程序运行过程中要用到的数据或工作区。,3、进程的组成,一、进程的基本概念,进程控制块作用每个进程有唯一进程控制块操作系统根据PCB对进程实施控制盒管理,记录进程动态、并发等运行特征PCB是进程存在的唯一标志当系统或父进程创建一个进程时,实际上就是为其建立一个进程控制块。进程控制块
6、既能标识进程的存在,又能刻画出进程的动态特征,它是一个进程仅有的被系统真正感知的部分。对操作系统而言,所有进程控制块将构成并发执行控制和维护系统工作的依据。,3、进程的组成,一、进程的基本概念,主要内容,1,3,2,4,进程的基本概念,Linux系统进程,Linux进程的创建,Linux进程的系统调用,5,Linux进程调度,二、Linux系统进程,Linux进程的基础进程的描述符进程的状态与转换进程队列指针进程队列的全局变量,1、Linux进程基础,二、Linux系统进程,Linux进程一般分为交互进程、批处理进程和守护进程三类。与Windows任务管理器一样,在Linux中可以通过ps命令
7、查看系统当前的进程,例如下面的命令列出系统所有的进程:rootlocalhost#ps-aux如果进程太多,可以把ps命令的输出保存到一个文件中:rootlocalhost#ps-aux mypsoutps是Linux进程管理中最重要的一个命令,它提供了很多的选项参数,1、Linux进程基础,二、Linux系统进程,ps的输出列说明,1、Linux进程基础,二、Linux系统进程,ps命令的选项参数,1、Linux进程基础,二、Linux系统进程,Linux进程状态,1、Linux进程基础,二、Linux系统进程,Linux系统中的进程都具有以下4个要素。(1)有一个程序正文段供其执行。(2)
8、有进程专用的系统堆栈空间。(3)有一个进程描述符,即在内核中的一个task_struct数据结构。有了这个数据结构,进程才能成为内核调度的一个基本单位,接受内核的调度。同时,该结构还记录着进程所占用的各项资源。(4)有一个独立的地址空间,即拥有专有的用户空间和专用的用户空间堆栈。,1、Linux进程基础,二、Linux系统进程,Linux的进程状态共有6种。(1)TASK_RUNNING:正在运行(己获得CPU)或准备运行(就绪态等待获得CPU)的进程。(2)TASK_INTERRUPTIBLE:可中断等待状态。进程处于等待队列中,一旦资源可用时被唤醒,也可以由其他进程通过信号(SIGNAL)
9、或中断唤醒。(3)TASK_UNINTERRUPTIBLE:不可中断等待状态。进程处于等待队列中,一旦资源可用时被唤醒,但不可以由其他进程通过信号(SIGNAL)或中断唤醒。(4)TASK_ZOMBIE:进程僵死状态。进程停止运行但是尚未释放PCB。(5)TASK_STOPPED:进程停止状态。可能被特定信号终止,也可能是受其他进程的跟踪调用而暂时将CPU出让给跟踪它的进程。(6)TASK_SWAPPING:页面被交换出内存的进程。,2、Linux进程描述符,二、Linux系统进程,Linux系统的每一个可调度实体都有一个进程描述符。进程描述符可以表示进程的各种状态信息,是内核操作进程的手段。
10、进程描述符用task_struct数据结构表示,该结构包含了一个进程所拥有的各种信息,非常庞大,在内核文件的includelinux sched.h中定义。task_struct就是Linux系统中的PCB。系统内核中还有一个task向量表,是指向系统中每一个task_struct数据结构的指针的task数组。因而task向量表就是Linux系统中的PCB表。在创建一个新进程时,系统在内存中申请一个空的task_struct区,即空闲PCB块,并填入所需信息,同时将指向该结构的指针填入到task数组中。,2、Linux进程描述符,二、Linux系统进程,Linux系统的PCB包括很多参数,每个
11、PCB约占1KB多的内存空间。用于表示PCB的结构task_struct简要描述如下:struct task_structvolatile long state;unsigned short uid;int pid;int processor;.;(见P100)传统上,这样的数据结构被叫作进程控制块(PCB process control block),2、Linux进程描述符,二、Linux系统进程,Task_struct结构的描述:进程标识进程状态(State)进程调度信息和策略标识号(Identifiers)进程通信有关的信息(IPC)进程链接信息(Links)时间和定时器信息(Time
12、s and Timers)文件系统信息(Files System)处理器相关的上下文信息,2、Linux进程描述符,二、Linux系统进程,2、Linux进程描述符,二、Linux系统进程,标识信息:用简单数字对进程进行标识pid_t pid;进程标识号pid_t pgrp;进程组标识号pid_t tty_old_pgrp;进程控制终端所在的组标识 pid_t session;进程所在的会话标识号 pid_t tgid;线程组号int leader;布尔量,标志,表示进程是否为会话主管 状态信息:描述进程动态的变化调度信息:描述进程优先级、调度策略等信息进程间通信信息:描述多个进程在同一任务上
13、协作工作虚拟内存信息:描述每个进程拥有的地址空间时间和定时器信息:描述进程在生命周期内使用CPU统计、计费等信息,进程标识符:每一个进程都有一个唯一的标识符,内核通过这个标识符来识别不同的进程。进程标识符PID也是内核提供给用户程序的接口,用户程序通过PID对进程发号施令。PID是32位的无符号整数,它被顺序编号每个进程都属于某个用户组task_struct结构中定义有用户标识符UID(user identifier)和组标识符GID(Group identifier)这两种标识符拥有系统的安全控制系统通过这两种标识符控制进程对系统中文件和设备的访问,2、Linux进程描述符,二、Linux系
14、统进程,3、Linux进程状态及转换,二、Linux系统进程,状态信息:Linux的进程状态 state(include/linux/sched.h)若进程可运行,则state的取值如下所示:#define TASK_RUNNING 0/*R执行态*/#define TASK_INTERRUPTIBLE 1/*S可中断睡眠*/#define TASK_UNINTERRUPTIBLE 2/*D不可中断睡眠*/#define TASK_ZOMBIE 4/*Z僵死状态,退出状态*/#define TASK_STOPPED 8/*T暂停状态或跟踪状态*/#define TASK_EXCLUSIVE 3
15、2/*T排他状态,不可独立使用,必须与TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE合用。EXIT_DEAD/*X退出状态,进程即将被销毁*/TASK_DEAD/*死亡状态*/,在内核源代码中的定义如下:/usr/src/linux/fs/proc/array.c static const char*task_state_array=R(running),/*0*/S(sleeping),/*1*/D(disk sleep),/*2*/T(stopped),/*4*/T(tracing stop),/*8*/Z(zombie),/*16*/X(dead)/*32
16、*/;内核 2.6.26 中的新状态定义#define TASK_KILLABLE#define TASK_STOPPED#define TASK_TRACED,3、Linux进程状态及转换,二、Linux系统进程,Linux的进程状态 state,二、Linux系统进程,状态信息:Linux有10个进程标志(process flags)。PF_ALIGNWARN 打印“对齐”警告信息。PF_PTRACED 被ptrace系统调用监控。PF_TRACESYS 正在跟踪。PF_FORKNOEXEC 进程刚创建,但还没执行。PF_SUPERPRIV 超级用户特权。PF_DUMPCORE dumpe
17、d core。PF_SIGNALED 进程被信号(signal)杀出。PF_STARTING 进程正被创建。PF_EXITING 进程开始关闭。PF_USEDFPU 该进程使用FPU(SMP only)。PF_DTRACE delayed trace(used on m68k)。,3、Linux进程状态及转换,进程间状态转换:,3、Linux进程的状态与转换,二、Linux系统进程,3、Linux进程的状态与转换,二、Linux系统进程,获得CPU,若申请不到某个资源,则调用sleep_on()或interruptible_sleep_on()睡眠,其task_struct挂到相应的等待队列。
18、sleep_on()或interruptible_sleep_on()将调用schedule()函数把睡眠进程释放的CPU分配给run-queue队列的某个就绪进程。状态为TASK_INTERRUPTIBLE申请的资源有效时被唤醒(如wake_up_interruptible()),也可以由信号(signal)或定时中断唤醒。而状态为TASK_UNINTERRUPTIBLE申请的资源有效时被唤醒(如wake_up(),唤醒后,进程状态改为TASK_RUNNING,并进入运行队列。进程执行系统调用sys_exit()或收到SIG_KILL信号而调用do_exit()时,进程状态变为TASK_ZO
19、MBIE,释放所申请资源。通过启动schedule()把CPU分配给其它就绪进程。若进程通过系统调用设置PF_SYSTRACE,则在系统进入ptrace(),状态变为TASK_STOPPED,CPU分配给其它就绪进程。只有通过其它进程发送SIG_KILL或SIG_CONT,才能唤醒进程,重新进入运行队列。,(1)分析不可被中断的睡眠进程:终端1)rootlocalhost state#vi testu.c#include void main()if(!vfork()sleep(100);rootlocalhost state#gcc testu.c-o testu./testu终端2)root
20、localhost state#ps aux|grep testuroot 24773 0.0 0.0 1336 224 pts/2 D 15:34 0:00./testuroot 24840 0.0 0.2 4816 640 pts/3 S 15:36 0:00 grep testu,3、Linux进程的状态与转换,二、Linux系统进程,(2)分析被跟踪或被停止的进程状态(T):终端1)rootlocalhost state#strace top终端2)rootlocalhost state#ps auxf|grep toproot 24978 4.3 0.2 1552 552 pts/2
21、 S 15:42 0:00|_ strace toproot 24979 2.6 0.3 5156 960 pts/2 T 15:42 0:00|_ toproot 24981 0.0 0.2 4812 636 pts/3 S 15:42 0:00 _ grep top,3、Linux进程的状态与转换,二、Linux系统进程,(2)分析进程的可中断睡眠态与运行态:终端1)rootlocalhost state#vi pisqrt.c编译链接后:rootlocalhost state#gcc-Wall-o pisqrt pisqrt.c-lm 监控pisqrt进程 rootlocalhost s
22、tate#watch-n 1 ps aux|grep pisqrt|grep-v ps|awk print$2|sort-k 8终端2)rootlocalhost state#strace./pisqrt.read(3,177ELF11100000000030301000200X1.,512)=512fstat64(3,st_mode=S_IFREG|0755,st_size=1572440,.)=0old_mmap(NULL,1279916,PROT_READ|PROT_EXEC,MAP_PRIVATE,3,0)=0 x49e000,3、Linux进程的状态与转换,二、Linux系统进程,#
23、include#include#include#include void run_status(void)double pi=M_PI;double pisqrt;long i;for(i=0;i100000000;+i)pisqrt=sqrt(pi);int main(void)run_status();sleep(10);run_status();exit(EXIT_SUCCESS);,(2)分析进程的可中断睡眠态与运行态:此时切换到终端1看pisqrt进程状态,此时为R状态:root 3792 99.9 0.0 1516 268 pts/2 R 02:40 0:01./pisqrtroo
24、t 3801 0.0 0.0 3700 672 pts/1 S 02:40 0:00 grep pisqrtroot 3791 1.0 0.0 1728 564 pts/2 S 02:40 0:00 strace./pisqr 之后pisqrt进程进入S状态,因为执行了sleep(10)函数,10秒之后pisqrt再次进入R状态,最终退出。,3、Linux进程的状态与转换,二、Linux系统进程,(3)分析进程的僵死态(Z):终端1)rootlocalhost state#vi testz.c编译链接后:rootlocalhost state#gcc-Wall-o testz testz.c监
25、控testz进程 rootlocalhost state#watch-n 1 ps aux|grep testz|grep-v ps|awk print$2|sort-k 8“终端2)rootlocalhost state#./testz查看终端1:root 5402 0.0 0.0 1380 240 pts/3 S 16:05 0:00|_./testz root 5401 0.0 0.0 0 0 pts/3 Z 16:05 0:00|_ testz 20秒后查看终端2:child pid=5401 parent pid=5402,3、Linux进程的状态与转换,二、Linux系统进程,#i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 操作系统 进程
链接地址:https://www.31ppt.com/p-6414956.html