Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章

上传人:E**** 文档编号:89348123 上传时间:2019-05-23 格式:PPT 页数:168 大小:745.50KB
返回 下载 相关 举报
Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章_第1页
第1页 / 共168页
Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章_第2页
第2页 / 共168页
Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章_第3页
第3页 / 共168页
Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章_第4页
第4页 / 共168页
Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章_第5页
第5页 / 共168页
点击查看更多>>
资源描述

《Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章》由会员分享,可在线阅读,更多相关《Linux原理与结构 教学课件 ppt 作者 郭玉东 全书 第7章(168页珍藏版)》请在金锄头文库上搜索。

1、,第七章 进 程 管 理,7.1 进程管理结构 7.2 进程创建 7.3 进程调度 7.4 进程终止,在操作系统所营造的虚拟时空中,活动的主角是进程。进程(Process)是执行中的计算机程序、是用户在操作系统中的代理(替用户工作)、是操作系统中一切活动的发起者、是内核的主要服务对象。 操作系统内核的主要任务是保证进程更好地运行,毫无疑问,进程管理是操作系统工作的核心。进程管理部分所管理的对象是进程,所管理的资源是处理器,要达到的主要目标是提高处理器的利用率,尽可能减少处理器资源的浪费;平衡进程之间的关系,尽可能公平、合理地分配处理器资源;提高进程的运行速度,尽可能缩短进程的周转周期;,提高系

2、统的反应能力,尽可能缩短进程的响应时间;提高进程的抗干扰性,实现进程间的隔离与保护;提供进程之间的同步、互斥和通信手段,维护资源的一致性,协调进程的前进步伐并允许进程间相互通信等等。 作为操作系统中的主体,进程有自己的生命周期。除第0号进程之外,系统中的其它进程都是动态创建的。新进程可以与父进程执行同样的程序,也可在运行过程中加载并执行新的程序。进程在运行过程中访问到的所有地址构成了它的虚拟地址空间,进程的程序、数据等都存储在虚拟地址空间中。为进程管理虚拟地址空间的是虚拟内存管理器,为进程提供处理器的是调度器。,运行中的进程需与其它进程互斥、同步和通信。完成任务的进程需要终止。因而进程管理子系

3、统又被分割成进程创建、进程调度、进程终止、进程虚拟内存管理、进程互斥与同步、进程间通信等部分。,在早期的Linux系统中,进程扮演着两个角色,一是资源分配的实体,二是调度运行的实体。Linux以进程为单位分配资源,包括内存、设备等,又以进程为单位调度运行(处理器仅分配给进程)。获得了足够资源又获得了处理器的进程可以执行它的程序,等待资源尤其是等待处理器资源的进程无法执行程序,只能暂停等待。,7.1 进程管理结构,新版本的Linux借鉴了其它操作系统的成功经验,允许将进程的上述两个角色分开,资源分配的实体仍被称为进程,但调度执行的实体被改称为线程(Thread)或轻量级进程(Lightweigh

4、t Process)。Linux以进程为单位分配资源,以线程为单位调度运行。属于一个进程的所有线程称为一个线程组,一个线程组中的所有线程共享进程的资源,如内存、文件、信号处理、设备等。然而Linux又没有严格区分它的进程和线程。缺省情况下,Linux创建的都是进程,只有在特别声明时,新创建的进程才被作为创建者的同组线程。一个线程组中的第一个线程通常被作为进程创建,,称为领头进程,也就是该线程组的进程,拥有资源。线程组中的其它线程通常是被领头进程特别创建的进程,与领头进程共享资源,但它们是领头进程的兄弟而不是儿子,与领头进程拥有同一个父进程。在表示上,进程与线程完全一致,调度器同等对待进程与线程

5、。传统意义上的Linux进程既是进程又是线程,它的线程组中仅有自己一个成员。在以下的讨论中,除非特殊需要,不再专门区分进程和线程。,进程的行为取决于它执行的程序,但进程又不等同于程序,用程序的代码和数据均无法刻画进程,必须为进程定义专门的管理结构。操作系统通常用进程控制块(Process Control Block,PCB)描述进程,也通过进程控制块管理进程。进程控制块是进程存在的唯一标识,其中含有进程的描述信息和控制信息,是进程动态性的集中体现。不同操作系统对进程控制块的叫法也不相同,Linux将自己的进程控制块称为task_struct。 除task_struct结构之外,Linux还为每

6、个进程定义了一个系统堆栈。当进程运行在用户态时,它使用用户堆栈,当进程运行在核心态时,它使用系统堆栈。,由于每个进程都会在核心态运行,因而每个进程都必须有系统堆栈。在早期的版本中,进程的系统堆栈与它的task_struct结构共用8 KB的物理内存,task_struct结构位于首部,系统堆栈位于尾部。当处理器在核心态运行时,它的ESP总是位于当前进程的系统堆栈中,因而将ESP的低13位清0就可得到当前进程的task_struct结构。 在随后的发展中,task_struct结构越来越大,已不适合再驻留在系统堆栈中,因而Linux为每个进程另外准备了一个thread_info结构,用于替代ta

7、sk_struct驻留在进程的系统堆栈中。结构thread_info中的task指针指向进程的task_struct结构,而结构task_struct中的stack指针指向进程的thread_info结构,如图7.1所示。,图7.1 进程的系统堆栈与管理结构,结构thread_info中还包含如下信息: (1) 标志flags,记录需要引起特别注意的信息,如有待处理信号、需再调度等。 (2) 处理器号cpu,记录运行该进程的当前处理器号。 (3) 抢占计数preempt_count,表示当前进程是否在处理中断、是否允许抢占等,如图4.8所示。 (4) 虚拟地址上限addr_limit,规定了进

8、程可用的最大虚拟地址。,(5) 执行域exec_domain,如进程执行的是在其它操作系统中编译的程序,该域记录一些特殊的转换关系,如系统调用号、信号编号等。 宏current是当前进程的task_struct结构,其定义如下: register unsigned long current_stack_pointer asm(“esp“) _used; static inline struct thread_info *current_thread_info(void) return (struct thread_info *) (current_stack_pointer ,#define

9、current (current_thread_info()-task) 当然可以为每个处理器定义一个指针变量用于指向它的当前进程的task_struct结构,但根据ESP寄存器直接计算要更加便捷,尤其是在多处理器环境中。 在进程的管理结构中,最重要的是task_struct结构,其中的内容可大致分为进程标识、认证信息、调度信息、进程状态、进程上下文、虚拟地址空间、文件目录、文件描述符表、信号处理方式、名字空间等。,1. 进程标识 虽然用task_struct结构或指向task_struct结构的指针都可唯一地标识一个进程,但这两种方法都仅能在内核中使用。用户使用的进程标识应该是简洁、稳定的,

10、Linux将其称之为进程标识号(Process Identification,PID)。系统中的每个进程都有一个PID。初始进程init_task的PID是0,其它进程的PID是在创建时临时分配的。在早期的版本中,PID是一个小整数(16位),目前的PID是一个整数(32位)。,Linux用一个位图记录PID的使用情况,位图的大小决定了PID号的最大值,在目前的版本中,PID号可达4194303个。如果系统中仅有一个名字空间,那么进程与PID是一一对应的。如果系统中有多个名字空间,一个进程可以有多个PID,多个进程也可以有同样的PID,但在同一个名字空间中,进程与PID仍然是一一对应的。为了解

11、决多名字空间带来的问题,Linux专门定义了pid结构来记录一个进程的不同PID,并定义了Hash表pid_hash来加速PID到task_struct结构的转换。,为了区分不同的线程组,Linux又定义了线程组标识号TGID(Thread Group ID)。一个线程组的TGID就是它的领头进程的PID。一个线程组中的所有进程拥有同样的TGID,但却有不同的PID。如果一个线程组中仅有一个进程,那么它的TGID就等于PID。事实上,TGID等价于POSIX标准中的进程ID,而PID则等价于POSIX标准中的线程ID。一个线程组中的所有进程通过task_struct结构中的thread_gro

12、up域排成一个队列,其中各进程的group_leader都指向线程组的领头进程,如图7.2所示。,图7.2 进程、线程与线程组,另外,为了方便对进程的管理,Linux 还定义了进程组(process group)和会话(session)。系统中的每个进程都属于一个进程组,每个进程组又属于一个会话。进程组和会话分别由领头进程标识,同一进程组的所有进程拥有同样的组标识PGID,同一会话中的所有进程拥有同样的会话标识SID。同一会话中的进程通过该会话的领头进程和一个终端相连,该终端即是这个会话的控制终端。,2. 认证信息 认证信息就是进程的证书,其中包含有关进程安全的各种标识。在早期的Linux中,

13、进程的认证信息直接记录在task_struct结构中,包括用户标识(UID)、用户组标识(GID)和进程的权能(capability)等。新版本的Linux将认证信息包装在证书结构cred中,其中包含多组信息,如: (1) 4组UID和GID,其中uid和gid标识创建进程的用户,euid和egid标识当前有效的用户,fsuid和fsgid标识文件系统用户,suid和sgid用于备份。 (2) 4组权能,标识进程的能力,包括继承、许可、有效的权能及权能的边界集。,(3) 密钥和密钥环,用于加解密处理。 (4) Linux安全模块(LSM),如SELinux,其中包含多种特定的安全检查操作。 (

14、5) 结构user_struct,记录用户的统计信息,如拥有的进程数、打开的文件数、挂起的信号数、锁定的内存量等。 在进程进行某些可能影响系统安全的操作之前,Linux会根据它的认证信息检查操作的合法性,并拒绝非法的操作。,3. 调度策略 Linux的进程分成两大类,普通进程和实时进程。Linux的实时属于软实时(Soft real-time),实时进程的优先级总是高于普通进程,会比普通进程得到更好的服务,但没有严格的死线(Deadline)限制。 进程的调度策略标识了进程的类型和调度方式。在Linux中,每个进程都有一个调度策略,记录在struct_struct结构的policy域中。Lin

15、ux定义了五种调度策略,分别是: (1) SCHED_NORMAL用于标识普通进程,采用CFS调度算法。,(2) SCHED_BATCH用于标识普通的批处理进程,采用CFS调度算法。批处理进程运行在后台,完成处理器密集型任务,很少交互,不需要被太多关注。 (3) SCHED_IDLE用于标识最低优先级的普通进程,采用CFS调度算法。 (4) SCHED_FIFO用于标识实时进程,采用先进先出调度算法,不记时间片。 (5) SCHED_RR用于标识实时进程,采用Round Robin调度算法,按时间片轮转。,4. 优先级和权重 优先级用于标识进程的重要程度。调度器在选择下一个投入运行的进程时要参

16、考它的优先级。进程一次可运行的时间长度(时间片)通常也取决于它的优先级。 Linux为进程定义了140个优先级,其中099用于实时进程,100139用于普通进程。值越小表示优先级越高。普通进程的缺省优先级是120。每个进程都有多个优先级,记录在它的task_struct结构中,如下: (1) rt_priority是进程的实时优先级。与常规定义不同,值越大表示优先级越高。,(2) static_prio是进程的静态优先级,其初值继承自创建者进程,并可被系统调用修改,但不会被调度器自动调整。 (3) normal_prio是进程的常规优先级,其初值继承自创建者进程。通常情况下,普通进程的normal_prio = static_prio,实时进程的normal_prio = 99 - rt_priority。 (4) prio是进程的动态优先级,其初值继承自创建者进程的常规优先级,但可被调度器自动调整,普通进程的优先级甚至可以被提升到99以内。 由于历史的原因,

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

当前位置:首页 > 高等教育 > 大学课件

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