《Linux高级系统编程》教学教案—03进程

上传人:sat****105 文档编号:290121231 上传时间:2022-05-09 格式:DOC 页数:4 大小:108.50KB
返回 下载 相关 举报
《Linux高级系统编程》教学教案—03进程_第1页
第1页 / 共4页
《Linux高级系统编程》教学教案—03进程_第2页
第2页 / 共4页
《Linux高级系统编程》教学教案—03进程_第3页
第3页 / 共4页
《Linux高级系统编程》教学教案—03进程_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《《Linux高级系统编程》教学教案—03进程》由会员分享,可在线阅读,更多相关《《Linux高级系统编程》教学教案—03进程(4页珍藏版)》请在金锄头文库上搜索。

1、 Linux高级系统编程教学设计课程名称: Linux高级系统编程_授课年级: _授课学期: _教师姓名: _ 课程名称第3章 进程计划学时4学时内容分析本章主要介绍进程的基本概念、进程编程教学目标与教学要求要求学生了解进程的概念、掌握进程的相关属性信息、掌握进程的创建及进程的回收方法、掌握进程的内存、调度、资源使用方法教学重点进程的基本概念、进程编程教学难点进程编程教学方式课堂讲解及ppt演示教学过程第一课时(进程的基本概念、进程编程)内容回顾1. 回顾上节内容,引出本课时主题。本章将介绍Linux中相对重要的内容-进程,并对进程的属性进行探究,包括进程的结构、状态、类型、控制、调度、内存等

2、问题。尤其是调度、内存问题,这是本章的难点。读者应掌握进程的使用,熟练函数接口,能够完成关于进程的编程内容,实现功能需求。从而引出本节的内容。2. 明确学习目标(1) 能够掌握多任务机制(2) 能够掌握进程与程序(3) 能够掌握进程的状态(4) 能够掌握进程组与会话组(5) 能够掌握进程优先级(6) 能够掌握进程的调度策略(7) 能够掌握进程的虚拟内存(8) 能够掌握虚拟内存管理(9) 能够掌握进程的内存布局(10) 能够掌握进程的创建(11) 能够掌握exec函数族知识讲解 多任务机制多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务。Linux是一个支

3、持多任务的操作系统,比起单任务系统它的功能增强了许多。多任务操作系统使用某种调度策略支持多个任务并发执行。事实上,(单核)处理器在某一时刻只能执行一个任务。每个任务创建时被分配时间片(几十到上百毫秒),任务执行(占用CPU)时,时间片递减。操作系统会在当前任务的时间片用完时调度执行其他任务。由于任务会频繁地切换执行,因此给用户多个任务同时运行的感觉。多任务操作系统中通常有3个基本概念:任务、进程和线程。任务指的是一个逻辑概念,指由一个软件完成的活动,或者是为实现某个目的而进行的一系列操作。通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,子任务是进程或线程。例如,一

4、个杀毒软件的一次运行是一个任务,目的是保护计算机系统不受各种病毒的侵害,这个任务包含多个独立功能的子任务(进程或线程),包括实时监控功能、定时查杀功能、防火墙功能以及用户交互功能等。任务、进程和线程之间的关系如图所示。同时,它们也是后续章节的重点内容。 进程与程序进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,它是操作系统进行资源分配和调度的基本单元。一次任务的运行可以发激活多个进程,这些进程相互合作来完成该任务的一个最终目标。本节将阐述进程定义,并澄清其与程序之间的区别。程序是包含了一系列信息的文件,这些信息描述了运行时创建一个进程,包括如下内容。(1)二进制格式标识:每个

5、程序文件都包含用于描述可执行文件格式的元信息。内核利用此信息来解释文件中的其他信息。现在,大多数Linux采用可执行连接格式(Executable and Linkable Format,ELF)。(2)机器语言指令:对程序进行编码。(3)程序入口地址:标识程序开始执行时的起始指令位置。(4)数据:程序文件包含的变量初始值和程序使用的字面常量。(5)符号表及重定位表:描述程序中函数和变量的位置及名称。这些表格有多种用途,其中包括调试和运行时的符号解析(动态链接)。(6)共享库和动态链接信息:程序文件所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态链接器的路径名。(7)其

6、他信息:程序文件还包含许多其他信息,用以描述如何创建进程。进程是程序动态执行的过程,具有并发性、动态性、交互性和独立性等主要特性。(1)并发性是指系统中多个进程可以同时并发执行,相互之间不受扰。(2)动态性是指进程都有完整的生命周期,而且在进程的生命周期内,进程的状态是不断变化的,而且进程具有动态的地址空间(包括代码、数据和进程控制块等)。(3)交互性是指进程在执行过程中可能会与其他进程发生直接和间接的通信,如进程同步和进程互斥等,需要为此添加一定的进程处理机制。(4)独立性是指进程是一个相对完整的资源分配和调度的基本单位,各个进程的地址空间是相互独立的,因此需要引入一些通信机制才能实现进程之

7、间的通信。由此可知,进程和程序是有本质区别的。程序是一段静态的代码,是保存在非易失性存储器上的的指令和数据的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序的一次执行过程,包括了动态创建、调度、执行和消亡的整个过程,它是程序执行和资源管理的最小单位。可以用一个程序来创建许多进程。或者反过来说,许多进程运行的可以是同一程序。 进程的状态内核将所有进程存放在双向循环链表(进程链表)中,链表的节点都是task_struct结构体,称为进程控制块的结构。该结构包含了与一个进程相关的所有信息,如进程的状态、进程的基本信息、进程标识符、内存相关信息、父进程相关信息、与进程相关的终端信息、当前

8、工作目录、打开的文件信息、所接收的信号信息等。下面将详细阐述task_struct结构体中最为重要的两个域:state(进程状态)和pid(进程标识符)。1. 进程状态Linux中的进程有以下几种主要状态。(1)运行态(TASK_RUNNING):进程当前正在运行,或者正在运行队列中等待调度。(2)可中断的睡眠态(TASK_INTERRUPTIBLE):进程处于阻塞(睡眠)状态,正在等待某些事件发生或能够占用某些资源。处在这种状态下的进程可以被信号中断。接收信号或被显式地唤醒呼叫(如调用wake_up系列宏wake_up、wake_up_interruptible等)唤醒之后,进程将转变为TA

9、SK_RUNNING状态。(3)不可中断的睡眠态(TASK_UNINTERRUPTIBLE):此进程状态类似于可中断的睡眠状态(TASK_INTERRUPTIBLE),只是它不会处理信号,把信号传递到这种状态下的进程不能改变其状态。只有在它所等待的事件发生时,进程才被显式地唤醒呼叫唤醒。(4)停止态(TASK_STOPPED):进程的执行被暂停,当进程收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU等信号,就会进入暂停状态。(5)僵尸态(EXIT_ZOMBIE):子进程运行结束,父进程未退出,并且未使用wait()函数族(如使用waitpid()函数)等系统调用来回收子进程的

10、资源。处在该状态下的子进程已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其父进程收集。(6)消亡态(EXIT_DEAD):进程退出,不占用任何资源,更不会被调度,该状态不可见。2. 进程标识符Linux内核通过唯一的进程标识符(进程的身份证号)PID(Process ID)来标识每个进程。PID存放在task_struct结构体的pid字段中。当系统启动后,内核通常作为某一个进程的代表。一个指向task_struct结构体的宏current用来记录正在运行的进程。current经常作为进程描述符结构指针的形式出现在内核

11、代码中,例如,current-pid表示处理器正在执行的进程的PID。当系统需要查看所有的进程时,则调用for_each_process()宏,这将比系统搜索数组的速度要快得多。在Linux中获得当前进程的进程号(PID)和父进程号(PPID)的系统调用函数分别为getpid()和getppid()。 进程组与会话组Linux系统中,进程是以组的形式(进程之间的层次关系)进行管理的。如进程组和会话组。进程组是一组相关进程的集合,会话组是一组相关进程组或进程的集合。进程组ID的类型与进程ID一样。一个进程组有一个进程组首进程,也可称之为该进程组的组长,其进程ID为该进程组的ID。一个会话组有一个

12、会话组首进程,也可称之为会话组组长。其进程ID为该会话组的ID,进程的会话成员关系是由会话组ID(SID)确定的。1. 进程组每个进程都有一个用数字表示的进程组ID,表示该进程所属的进程组。获取一个进程组的ID可以通过getpgrp()函数与getpgid()函数能够获得一个进程的进程组ID。#include pid_t getpgid(pid_t pid); pid_t getpgrp(void); /* POSIX.1 version */ pid_t getpgrp(pid_t pid); /* BSD version */2. 会话组会话组是一组进程组或进程的集合。getsid()函数

13、用于获得进程号为参数pid的进程所属的会话组的组ID。如果参数pid为0,则返回调用进程所属的会话组ID。#include pid_t getsid(pid_t pid); 进程的优先级Linux系统中,进程得以执行,必须获得CPU的控制权,即进程必须得到CPU的处理。然而一个进程往往并不能一直获得CPU的“青睐”。如果一个进程一直响应任务不退出,并一直占有CPU的控制权,这将是一件很“可怕”的事情。因此Linux系统通常则采用一些调度策略来实现进程对于CPU控制权的合理分配。Linux和大多数其他UNIX实现一样,调度进程使用CPU的的默认模型是循环时间共享算法。在这种模型下,每个进程轮流使

14、用CPU一段时间,这段时间被称为时间片。循环时间共享算法满足了交互式多任务系统两个重要需求。(1)公平性:每个进程都有机会用到CPU。(2)响应性:一个进程在使用CPU 之前无须等待太长时间。在循环时间共享算法中,进程无法直接控制何时使用CPU以及使用CPU的时间。在默认情况下,每个进程轮流使用CPU直至时间片被用光或自己自动放弃CPU(如进程睡眠)。如果所有进程都试图尽可能多的使用CPU,那么它们使用CPU的时间差不多是相等的。进程的特性nice值允许进程间接地影响内核的调度算法。每个进程都有一个nice值,其取值范围为-20(高优先级)19(低优先级),默认值为0。在传统的UNIX实现中,

15、只有特权进程才能够赋给自己(或其他进程)一个负(高)优先级。非特权进程只能降低自己的优先级,即赋一个大于默认值0的nice值。这样做之后它们就对其他进程“友好(nice)”了,这个特性的名字也由此而来。 进程的调度策略上一节中介绍了进程时间片的问题,以及影响时间片的nice值。其中涉及到一个相对重要的的概念,即进程的调度策略。在多进程的并发的环境中,虽然在概念上来说有多个进程在同时执行。但是在单个CPU下,实际上任意时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态,因此如何确定在任意时刻由哪个进程执行,则属于进程调度策略的问题。进程的调度策略是操作系统进程管理的一个重要组成部分。其任务是选择下一个将要运行的进程。下面将简单介绍两种进程的调度策略。1. SCHED_RR策略对于在SCHED_RR策略,优先级相同的进程以循环时间分享的方式执行。进程每次使用CPU的时间为一个固

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

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

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