欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    四川大学linux第4章unix进程管理及进程通信.ppt

    • 资源ID:51605854       资源大小:594KB        全文页数:152页
    • 资源格式: PPT        下载积分:40金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要40金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    四川大学linux第4章unix进程管理及进程通信.ppt

    第第4章章 Linux进程管理及进程通信进程管理及进程通信刘刘 循循4.1 Linux进程及描述进程及描述4.1.1 Linux系统中的进程Linux操作系统是多进程并发环境,进程和进程之间的关操作系统是多进程并发环境,进程和进程之间的关系呈现为多级结构,如图系呈现为多级结构,如图4.1所示。所示。loggerupdatecronlpschedgeety root(进程程0)init(进程程1)swapper(对换进程)程)shellshellshell图4.1 进程多程多级结构关系构关系4.1 Linux进程及描述进程及描述最上层的进程是系统的根进程,也称为最上层的进程是系统的根进程,也称为0进程,是系统所进程,是系统所有进程的起点,在系统引导时创建。根进程通过系统函有进程的起点,在系统引导时创建。根进程通过系统函数调用数调用fork创建初始化进程创建初始化进程(init进程,也称为进程,也称为1进程进程)。跟进程在创建初始化进程之后,变为对换进程跟进程在创建初始化进程之后,变为对换进程(swapper)存在,其功能为完成内存与外存之间的进)存在,其功能为完成内存与外存之间的进程对换工作。程对换工作。初始化进程通过系统函数调用初始化进程通过系统函数调用fork创建一系列的系统进创建一系列的系统进程,如程,如logger、update、cron、lpsched、getty进程进程等。这些进程长期运行在系统中,被称为驻守进程等。这些进程长期运行在系统中,被称为驻守进程(daemon进程)。如果系统承担网络服务功能,则还进程)。如果系统承担网络服务功能,则还需包含网络服务进程,如需包含网络服务进程,如httpd、sendmail、ftp等。等。getty进程负责用户登录,监视每个终端上的用户注册情进程负责用户登录,监视每个终端上的用户注册情况。当用户登录进入系统后,便生成相应的子进程,即况。当用户登录进入系统后,便生成相应的子进程,即shell进程。进程。4.1 Linux进程及描述进程及描述所有进程都会生成一个或多个子进程。除根进程之外,所有进程都会生成一个或多个子进程。除根进程之外,所有进程都有一个父进程。所有进程都有一个父进程。为了管理方便,为了管理方便,Linux操作系统给每个进程分配一个唯一操作系统给每个进程分配一个唯一的进程标识符的进程标识符pid。操作系统通过进程标识符管理进程。操作系统通过进程标识符管理进程。无论何时,当用户注册登录后,系统为用户创建一个无论何时,当用户注册登录后,系统为用户创建一个shell进程(即用户的进程(即用户的login shell),键入一个命令或执),键入一个命令或执行一个程序时,行一个程序时,shell进程会产生一个相应的子进程;在进程会产生一个相应的子进程;在子进程中还可以创建子进程,待用户退出(子进程中还可以创建子进程,待用户退出(exit)后,)后,又把控制权还给又把控制权还给shell进程。进程。进程拥有者的标识符为进程的用户标识符。用户标识符进程拥有者的标识符为进程的用户标识符。用户标识符反映了用户在系统中的地位,决定了用户进程的各种特反映了用户在系统中的地位,决定了用户进程的各种特权,如进程对文件的存取权限等。子进程会继承父进程权,如进程对文件的存取权限等。子进程会继承父进程的用户标识符。的用户标识符。4.1 Linux进程及描述进程及描述所有进程都会生成一个或多个子进程。除根进程之外,所有进程都会生成一个或多个子进程。除根进程之外,所有进程都有一个父进程。所有进程都有一个父进程。为了管理方便,为了管理方便,Linux操作系统给每个进程分配一个唯一操作系统给每个进程分配一个唯一的进程标识符的进程标识符pid。操作系统通过进程标识符管理进程。操作系统通过进程标识符管理进程。无论何时,当用户注册登录后,系统为用户创建一个无论何时,当用户注册登录后,系统为用户创建一个shell进程(即用户的进程(即用户的login shell),键入一个命令或执),键入一个命令或执行一个程序时,行一个程序时,shell进程会产生一个相应的子进程;在进程会产生一个相应的子进程;在子进程中还可以创建子进程,待用户退出(子进程中还可以创建子进程,待用户退出(exit)后,)后,又把控制权还给又把控制权还给shell进程。进程。进程拥有者的标识符为进程的用户标识符。用户标识符进程拥有者的标识符为进程的用户标识符。用户标识符反映了用户在系统中的地位,决定了用户进程的各种特反映了用户在系统中的地位,决定了用户进程的各种特权,如进程对文件的存取权限等。子进程会继承父进程权,如进程对文件的存取权限等。子进程会继承父进程的用户标识符。的用户标识符。4.1 Linux进程及描述进程及描述如果进程的拥有者和进程运行所对应的代码文件拥有者如果进程的拥有者和进程运行所对应的代码文件拥有者具有相同的用户标识符,则称该用户标识符为有效用户具有相同的用户标识符,则称该用户标识符为有效用户标识符。标识符。直接从终端读写的进程为前台进程,正在运行却又无法直接从终端读写的进程为前台进程,正在运行却又无法直接从终端读写的进程为后台进程。任何时候,一个终直接从终端读写的进程为后台进程。任何时候,一个终端只有一个前台进程但可以拥有多个后台进程。端只有一个前台进程但可以拥有多个后台进程。如果要调度一个进程在后台进程运行,运行时在执行的如果要调度一个进程在后台进程运行,运行时在执行的程序名后加程序名后加“&”(注意:程序名和符号(注意:程序名和符号“&”之间需要之间需要有空格),如:有空格),如:$./httpd&表示启动进程表示启动进程httpd在后台运行。在后台运行。4.1.2 进程状态及其转换进程状态及其转换54可中断睡眠可中断睡眠(interruptible)不可中断睡眠不可中断睡眠(uninterruptible)76 僵死僵死(zombie)停止停止(stopped)终止终止 终止终止123 就绪就绪(running)核心态运行核心态运行(running)用户态运行用户态运行(running)调度调度返回返回系系统统函函数数调调用用或中断或中断 睡眠睡眠 睡眠睡眠 唤醒唤醒 唤醒唤醒中断中断图图4.2 Linux进程状态及转换进程状态及转换4.1.2 进程状态及其转换进程状态及其转换Linux操作系统采用如下的进程状态描述进程的动态过程:操作系统采用如下的进程状态描述进程的动态过程:(1)就绪就绪(Running):进程处于预备运行状态,等待系统分配:进程处于预备运行状态,等待系统分配处理器;处理器;(2)核心态运行核心态运行(Running):进程运行在操作系统核心空间。:进程运行在操作系统核心空间。在用户程序中如果有系统函数调用,则进程状态会从用户在用户程序中如果有系统函数调用,则进程状态会从用户态执行转入核心态执行。任何一个进程都不可能抢占一个态执行转入核心态执行。任何一个进程都不可能抢占一个处于核心态执行的进程,除非处于核心态执行的进程正从处于核心态执行的进程,除非处于核心态执行的进程正从核心态到用户态切换;核心态到用户态切换;(3)用户态运行用户态运行(Running):进程运行在用户空间。处于用户:进程运行在用户空间。处于用户态运行的进程可被抢占;态运行的进程可被抢占;(4)可中断睡眠(可中断睡眠(interruptible):由于进程):由于进程CPU运行时发运行时发生了需要等待生了需要等待I/O事件或进程通信时需要相互配合而等待,事件或进程通信时需要相互配合而等待,此时,进程会在内存中处于一种相对静止状态。如果等待此时,进程会在内存中处于一种相对静止状态。如果等待的事件已经完成,此时进程可被唤醒,被唤醒后的进程转的事件已经完成,此时进程可被唤醒,被唤醒后的进程转入内存就绪状态;入内存就绪状态;4.1.2 进程状态及其转换进程状态及其转换(5)不可中断睡眠(不可中断睡眠(uninterruptible):进程在内存中处于):进程在内存中处于一种相对静止状态,此时进程不会被唤醒。产生不可中断一种相对静止状态,此时进程不会被唤醒。产生不可中断睡眠的原因一般是睡眠进程还未进入睡眠,而唤醒它的进睡眠的原因一般是睡眠进程还未进入睡眠,而唤醒它的进程的唤醒操作已经发生。由于错过了唤醒操作,当睡眠进程的唤醒操作已经发生。由于错过了唤醒操作,当睡眠进程进入睡眠后则不能唤醒了。不可中断睡眠状态较少使用,程进入睡眠后则不能唤醒了。不可中断睡眠状态较少使用,可用于进程必须等待时。可用于进程必须等待时。(6)僵死(僵死(zombie):由于父进程死亡而被终止的进程,虽):由于父进程死亡而被终止的进程,虽然进程已经死亡,但没有释放系统资源,如没有释放内存然进程已经死亡,但没有释放系统资源,如没有释放内存和和task_struct结构等,所以被称为处于僵死状态。如果结构等,所以被称为处于僵死状态。如果系统中处于僵死状态的进程很多,则会引发系统资源短缺系统中处于僵死状态的进程很多,则会引发系统资源短缺问题。用命令问题。用命令“ps el”可查看进程状态,如果进程状态可查看进程状态,如果进程状态标识是标识是Z,则进程处于僵死状态。,则进程处于僵死状态。有些处于僵死状态的进程,用命令有些处于僵死状态的进程,用命令“kill-9”也不能杀死。也不能杀死。例如,如果系统在例如,如果系统在shutdown时,屏幕显示信息时,屏幕显示信息:some process wouldnt die。则表明系统中存在不能被。则表明系统中存在不能被reboot发出的发出的“kill 9”杀掉的进程,这些进程很可能处于僵杀掉的进程,这些进程很可能处于僵死状态;死状态;4.1.2 进程状态及其转换进程状态及其转换(7)停止(停止(stopped):进程被停止。如果进程接收到信号,):进程被停止。如果进程接收到信号,如信号如信号SIGSTOP 或或 SIGTSTP 等时,进程则进入停止状等时,进程则进入停止状态。正在被调试的进程可能处于停止状态。当停止状态的态。正在被调试的进程可能处于停止状态。当停止状态的进程接收到进程接收到SIGCONT信号之后,将再次成为可运行进程。信号之后,将再次成为可运行进程。通常,将处于内核态运行和用户态运行的进程状态统一称为通常,将处于内核态运行和用户态运行的进程状态统一称为进程的运行态。进程的运行态。4.1.2 进程状态及其转换进程状态及其转换4.1.3 进程映像与进程上下文一个程序经过编译和链接之后,成为可执行文件。操作一个程序经过编译和链接之后,成为可执行文件。操作系统核心将可执行文件作为进程的实体装入内存时,进系统核心将可执行文件作为进程的实体装入内存时,进程实体分为正文段、数据段和堆栈段。程实体分为正文段、数据段和堆栈段。正文段由程序中的代码构成;正文段由程序中的代码构成;数据段由程序运行所用到的数据构成;数据段由程序运行所用到的数据构成;堆栈段由函数调用传递参数、保留现场、存放返回地址堆栈段由函数调用传递参数、保留现场、存放返回地址和局部变量构成。和局部变量构成。在程序运行过程中,堆栈段由操作系统创建并不断刷新。在程序运行过程中,堆栈段由操作系统创建并不断刷新。堆栈段分为核心堆栈和用户堆栈两种。核心堆栈为进程堆栈段分为核心堆栈和用户堆栈两种。核心堆栈为进程在核心态下运行的工作区;用户堆栈为进程在用户态下在核心态下运行的工作区;用户堆栈为进程在用户态下运行的工作区。运行的工作区。4.1.2 进程状态及其转换进程状态及其转换进程控制块分为常驻内存和非常驻内存两部分。进程控制块分为常驻内存和非常驻内存两部分。常驻内存部分为进程描述符,非常驻内存部分为常驻内存部分为进程描述符,非常驻内存部分为USER区,也称为区,也称为U区。进程描述符可由核心访问,区。进程描述符可由核心访问,U区只能由区只能由在核心态运行的进程访问。在核心态运行的进程访问。每个进程都有一个每个进程都有一个U区。为了便于访问区。为了便于访问U区,操作系统会区,操作系统会用一个固定的虚地址对应用一个固定的虚地址对应U区。内核将正处于核心态运区。内核将正处于核心态运行进程的行进程的U区地址映射到该固定虚地址上。区地址映射到该固定虚地址上。虽然每个进程都有虽然每个进程都有U区,不同进程的区,不同进程的U区有不同的地址,区有不同的地址,但是,内核每次都将正在核心态下运行的进程的但是,内核每次都将正在核心态下运行的进程的U区映区映射到固定的地址,进程访问射到固定的地址,进程访问U区总可以用相同的地址。区总可以用相同的地址。4.1.2 进程状态及其转换进程状态及其转换U区中的主要信息有:区中的主要信息有:(1)与进程对应的用户标识符;与进程对应的用户标识符;(2)记录进程已打开文件的文件描述符;记录进程已打开文件的文件描述符;(3)描述进程位于文件系统的当前目录和根目录;描述进程位于文件系统的当前目录和根目录;(4)具有系统函数调用结果的返回值字段和出错字段;具有系统函数调用结果的返回值字段和出错字段;(5)记录进程与子进程在用户态和核心态运行时的时间;记录进程与子进程在用户态和核心态运行时的时间;(6)各种输入各种输入/输出参数,如进程要读写的数据量、用户地址输出参数,如进程要读写的数据量、用户地址空间中的数据地址、读写文件的字节数、读写方式、缓空间中的数据地址、读写文件的字节数、读写方式、缓冲区长度及地址等;冲区长度及地址等;(7)限制进程大小的字段及限制进程读写文件大小的字段;限制进程大小的字段及限制进程读写文件大小的字段;(8)对进程所创建的所有文件设置的许可权方式字段的屏蔽对进程所创建的所有文件设置的许可权方式字段的屏蔽模式;模式;(9)指向进程表的指针。指向进程表的指针。4.1.2 进程状态及其转换进程状态及其转换进程上下文是进程的环境,当一个进程在执行时,可以进程上下文是进程的环境,当一个进程在执行时,可以看成系统在进程的上下文中执行。通常把进程上下文理看成系统在进程的上下文中执行。通常把进程上下文理解为进程映像,进程切换被认为是进程上下文的切换。解为进程映像,进程切换被认为是进程上下文的切换。进程上下文由用户级上下文、寄存器上下文和系统级上进程上下文由用户级上下文、寄存器上下文和系统级上下文组成。下文组成。用户级上下文由进程的正文、数据、用户栈和共享存储用户级上下文由进程的正文、数据、用户栈和共享存储区组成,占据进程的虚地址空间。区组成,占据进程的虚地址空间。寄存器上下文由程序计数器、处理器状态寄存器、栈指寄存器上下文由程序计数器、处理器状态寄存器、栈指针和通用寄存器组成。针和通用寄存器组成。系统级上下文由进程表表项(进程描述符)、正在核心系统级上下文由进程表表项(进程描述符)、正在核心态运行进程的态运行进程的U区、进程区表表项和区表、页表、核心区、进程区表表项和区表、页表、核心栈。栈。4.1.2 进程状态及其转换进程状态及其转换4.1.4 进程描述符与进程表 进程描述符是进程描述符是Linux系统用于描述进程的数据结构,系统用于描述进程的数据结构,是操作系统管理进程最重要的依据。进程描述符包含的是操作系统管理进程最重要的依据。进程描述符包含的信息可以归纳为以下几大类:信息可以归纳为以下几大类:4.1.2 进程状态及其转换进程状态及其转换1.进程的运行信息进程的运行信息进程标示信息进程标示信息进程的标识符进程的标识符(pid);进程的父进程标识符(进程的父进程标识符(ppid););进程的父进程组标识符(进程的父进程组标识符(pgrp););进程的会话号(进程的会话号(session););进程的会话头(进程的会话头(leader););进程的用户标识符(进程的用户标识符(uid););进程的有效用户标识符(进程的有效用户标识符(euid););进程保存的用户标识符(进程保存的用户标识符(suid););进程的用户组标识符(进程的用户组标识符(gid););进程的有效组标识符(进程的有效组标识符(egid););进程的保存组标识符(进程的保存组标识符(sgid););4.1.2 进程状态及其转换进程状态及其转换进程状态描述进程状态描述在在include/linux/sched.h中,将进程的状态描述具体化:中,将进程的状态描述具体化:TASK_RUNNING为为0;TASK_INTERRUPTIBLE为为1;TASK_UNINTERRUPTIBLE为为2;TASK_STOPPED为为4;TASK_ZOMBIE为为8;TASK_DEAD为为16。当进程的状态描述为当进程的状态描述为-1时,表示进程不可运行。时,表示进程不可运行。4.1.2 进程状态及其转换进程状态及其转换进程在内存中的分布信息:进程在内存中的分布信息:进程的代码段地址(进程的代码段地址(start_code););进程的代码段长度(进程的代码段长度(end_code,字节数);,字节数);进程的代码长度加进程的数据段长度(进程的代码长度加进程的数据段长度(end_data,字节数);,字节数);进程的总长度(进程的总长度(brk,字节数);,字节数);进程的堆栈段地址(进程的堆栈段地址(start_stack););进程运行时间片递减计数(进程运行时间片递减计数(counter););进程运行优先数(进程运行优先数(priority:数字越大优先级越低);:数字越大优先级越低);发送和接收信号的信号位图(发送和接收信号的信号位图(signal),每个比特位代表一种信),每个比特位代表一种信号;号;信号将要执行的操作和标志信息结构信号将要执行的操作和标志信息结构(sigaction32);进程信号屏蔽码(进程信号屏蔽码(blocked););进程执行停止的退出码,由停止进程的父进程收取(进程执行停止的退出码,由停止进程的父进程收取(exit_code););4.1.2 进程状态及其转换进程状态及其转换2进程的时间信息进程的时间信息报警定时时间(报警定时时间(alarm););用户态运行时间(用户态运行时间(utime););系统态运行时间(系统态运行时间(stime););子进程用户态运行时间(子进程用户态运行时间(cutime););子进程系统态运行时间(子进程系统态运行时间(cstime););进程开始运行时刻(进程开始运行时刻(start_time););4.1.2 进程状态及其转换进程状态及其转换3.进程运行的部分硬件设备信息进程运行的部分硬件设备信息进程使用协处理器标志(进程使用协处理器标志(used_math:是,否);:是,否);进程使用终端设备号进程使用终端设备号(tty:-1 表示没有使用表示没有使用);进程的文件系统信息;进程的文件系统信息;文件创建属性屏蔽位(文件创建属性屏蔽位(umask););当前工作目录当前工作目录i 节点结构(节点结构(m_inode*pwd););根目录根目录i节点结构(节点结构(m_inode*root););执行文件执行文件i节点结构(节点结构(m_inode*executable););执行时关闭文件句柄位图标志(执行时关闭文件句柄位图标志(close_on_exe););文件结构指针表(文件结构指针表(file*filpNR_OPEN,表项号为文件描述,表项号为文件描述符值,最多符值,最多32 项);项);4.1.2 进程状态及其转换进程状态及其转换4进程局部信息进程局部信息进程的局部描述符表(进程的局部描述符表(desc_struct ldt3:空:空null为为0,代码段代码段cs为为1,数据和堆栈段,数据和堆栈段ds&ss为为2);进程状态段信息结构(进程状态段信息结构(tss_struct tss););4.1.2 进程状态及其转换进程状态及其转换例例 在在linux 0.11版本中,进程描述符用结构(版本中,进程描述符用结构(task_struct)表示,)表示,在文件在文件linuxsched.h中定义,其源代码如下:中定义,其源代码如下:struct task_struct long state;long counter;long priority;long signal;struct sigaction sigaction32;long blocked;int exit_code;unsigned long start_code;unsigned long end_code;unsigned long end_data;unsigned long brk;unsigned long start_stack;long pid;long father;long pgrp;long session;long leader;unsigned short uid;unsigned short euid;unsigned short suid;unsigned short gid;unsigned short egid;unsigned short sgid;long alarm;long utime;long stime;long cutime;long cstime;long start_time;unsigned short used_math;int tty;unsigned short umask;struct m_inode*pwd;struct m_inode*root;struct m_inode*executable;unsigned long close_on_exec;struct file*filpNR_OPEN;struct desc_struct ldt3;struct tss_struct tss;4.1.2 进程状态及其转换进程状态及其转换 其中,任务状态结构其中,任务状态结构tts保存了进程的处理器状态,指定了构保存了进程的处理器状态,指定了构成进程执行空间的各个段,定义为:成进程执行空间的各个段,定义为:struct tss_struct long back_link;/*16 high bits zero*/long esp0;long ss0;/*16 high bits zero*/long esp1;long ss1;/*16 high bits zero*/long esp2;long ss2;/*16 high bits zero*/long cr3;long eip;long eflags;long eax,ecx,edx,ebx;long esp;long ebp;long esi;long edi;ong es;/*16 high bits zero*/long cs;/*16 high bits zero*/long ss;/*16 high bits zero*/long ds;/*16 high bits zero*/long fs;/*16 high bits zero*/long gs;/*16 high bits zero*/long ldt;/*16 high bits zero*/long trace_bitmap;/*bits:trace 0,bitmap 16-31*/struct i387_struct i387;4.1.2 进程状态及其转换进程状态及其转换进程表是进程描述符的组织形式,为了方便查询进程进程表是进程描述符的组织形式,为了方便查询进程描述符信息,描述符信息,Linux的进程表有两种形式:的进程表有两种形式:索引方式和链接方式。索引方式和链接方式。索引方式:以进程标识符为索引进行检索,每个进程描述索引方式:以进程标识符为索引进行检索,每个进程描述符占用进程表的一个表项。符占用进程表的一个表项。链接方式:通过指针将处于相同状态的进程的进程描述符链接方式:通过指针将处于相同状态的进程的进程描述符链接在一起。这种组织形式存在多个进程描述符队列。链接在一起。这种组织形式存在多个进程描述符队列。4.2 进程控制进程控制4.2.1 创建进程在在Linux操作系统中,系统函数操作系统中,系统函数fork()创建新进程。创建新进程。新进程成为创建进程的子进程,创建进程为新进程的父新进程成为创建进程的子进程,创建进程为新进程的父进程。进程。新进程除继承父进程的资源外,还拥有自己的数据空间新进程除继承父进程的资源外,还拥有自己的数据空间和运行指针。和运行指针。4.2 进程控制进程控制系统函数系统函数fork的实现步骤为:的实现步骤为:(1)如果有足够资源,为新进程创建进程标识符(如果有足够资源,为新进程创建进程标识符(pid)和进程)和进程描述符,并将其组织到进程表或链接到进程队列;描述符,并将其组织到进程表或链接到进程队列;(2)创建新进程在内核执行所需要的新内核空间;创建新进程在内核执行所需要的新内核空间;(3)将父进程描述符拷贝到新进程描述符;将父进程描述符拷贝到新进程描述符;(4)修改新进程描述符:将新进程标识符写到新进程描述符,创修改新进程描述符:将新进程标识符写到新进程描述符,创建到父进程的链接,初始化进程创建时间,需要运行时间建到父进程的链接,初始化进程创建时间,需要运行时间等新进程私有信息;等新进程私有信息;(5)对新进程创建一个文件表,对父进程文件表中的文件创建新对新进程创建一个文件表,对父进程文件表中的文件创建新的文件描述符,使得新进程可以使用父进程当前已打开的的文件描述符,使得新进程可以使用父进程当前已打开的文件;文件;(6)为新进程创建数据段并将父进程的数据段拷贝到其中;为新进程创建数据段并将父进程的数据段拷贝到其中;(7)拷贝虚拟存储表;拷贝虚拟存储表;(8)将新进程的状态设置为就绪状态,从系统函数调用中返回;将新进程的状态设置为就绪状态,从系统函数调用中返回;4.2 进程控制进程控制在在Linux核心中,系统函数核心中,系统函数fork创建新进程的源代码程创建新进程的源代码程序为序为fork.c(位于(位于linux/kernel/),是),是sys_fork()(在(在kernel/system_call.s 中定义)系统函数的辅助处理函中定义)系统函数的辅助处理函数集,主要利用了三个数集,主要利用了三个C函数:函数:find_empty_process()和和copy_process()和和verify_area()实现。实现。find_empty_process()函数为取得一个空的进程标识函数为取得一个空的进程标识符。符。copy_process()函数为创建并复制进程的代码段和数函数为创建并复制进程的代码段和数据段以及环境。据段以及环境。verify_area()函数为进程内存区域验证与内存分配。函数为进程内存区域验证与内存分配。由于由于fork函数运行在系统核心空间,因此,在函数运行在系统核心空间,因此,在fork.c程程序中,序中,linux的核心程序的核心程序panic.c(位于(位于linux/kernel/)用于处理内核出错。如果内核程序发生错误,则会调用用于处理内核出错。如果内核程序发生错误,则会调用panic(),显示错误并停机。这样的处理对于所有的系统函(),显示错误并停机。这样的处理对于所有的系统函数调用都是必要的。数调用都是必要的。关于系统函数关于系统函数fork的具体应用,参见第的具体应用,参见第6.3节。节。4.2 进程控制进程控制4.2.2 结束进程进程代码运行结束或进程中有系统函数调用进程代码运行结束或进程中有系统函数调用exit都会结都会结束进程。束进程。进程结束需要完成一系列的清理工作,特别是释放进程进程结束需要完成一系列的清理工作,特别是释放进程所占用的一切资源并通知其父进程。所占用的一切资源并通知其父进程。4.2 进程控制进程控制系统函数系统函数exit()的实现步骤如下:的实现步骤如下:(1)根据进程局部描述符,调用函数根据进程局部描述符,调用函数free_page_tables()(在(在mm/memory.c中定义中定义)释放进程代码段和数据段所占的内存页,释放进程代码段和数据段所占的内存页,并清除进程描述符和进程表中的表项;并清除进程描述符和进程表中的表项;(2)如果进程有子进程,将子进程交给父进程。如果子进程已经处如果进程有子进程,将子进程交给父进程。如果子进程已经处于僵死于僵死(ZOMBIE)状态,则发送子进程终止信号(状态,则发送子进程终止信号(SIGCHLD)给)给父进程;父进程;(3)关闭进程打开的所有文件,对进程工作目录关闭进程打开的所有文件,对进程工作目录pwd、根目录、根目录root 以及运行程序的以及运行程序的i节点进行同步操作,并分别置空;节点进行同步操作,并分别置空;(4)如果进程是领导如果进程是领导(leader)进程并且有控制终端,则释放该终端;进程并且有控制终端,则释放该终端;(5)如果上次使用过协处理器,将如果上次使用过协处理器,将last_task_used_math 置空;置空;(6)向父进程发送信号向父进程发送信号SIGCHLD,告诉父进程子进程将停止或终止;,告诉父进程子进程将停止或终止;(7)把进程状态置为僵死状态,并设置退出码。把进程状态置为僵死状态,并设置退出码。4.2 进程控制进程控制在在Linux核心中,结束进程的源代码程序为核心中,结束进程的源代码程序为linux/kernel/exit.c。该程序包含进程释放、会话(进程组)终止和程序退出处该程序包含进程释放、会话(进程组)终止和程序退出处理函数,杀死进程、终止进程、挂起进程以及进程信号发理函数,杀死进程、终止进程、挂起进程以及进程信号发送函数送函数send_sig()和通知父进程子进程终止的函数和通知父进程子进程终止的函数tell_father()等。等。进程组终止函数进程组终止函数kill_session()通过向会话号与当前进程相通过向会话号与当前进程相同的进程发送挂断进程的信号。同的进程发送挂断进程的信号。系统函数系统函数sys_kill()用于向进程发送任何指定的信号。用于向进程发送任何指定的信号。根据参数根据参数pid(进程标识号)的数值的不同,该系统函数调(进程标识号)的数值的不同,该系统函数调用会向不同的进程或进程组发送信号。程序注释中已经列用会向不同的进程或进程组发送信号。程序注释中已经列出了各种不同情况的处理方式。出了各种不同情况的处理方式。4.2 进程控制进程控制程序退出处理函数程序退出处理函数do_exit()在系统函数调用的中断处理程在系统函数调用的中断处理程序中被调用。序中被调用。首先,它释放当前进程的代码段和数据段所占的内存页面首先,它释放当前进程的代码段和数据段所占的内存页面并向子进程发送终止信号并向子进程发送终止信号SIGCHLD;然后,关闭当前进程打开的所有文件、释放使用的终端设然后,关闭当前进程打开的所有文件、释放使用的终端设备、协处理器设备。备、协处理器设备。如果当前进程是进程组的领导进程,还需要终止所有相关如果当前进程是进程组的领导进程,还需要终止所有相关进程。最后,把当前进程置为僵死状态,设置退出码,并进程。最后,把当前进程置为僵死状态,设置退出码,并向其父进程发送子进程终止信号,让内核重新调度任务的向其父进程发送子进程终止信号,让内核重新调度任务的运行。运行。4.2 进程控制进程控制系统函数系统函数waitpid()用于挂起当前进程,直到用于挂起当前进程,直到pid指定的子指定的子进程退出(终止)或者收到要求终止该进程的信号,或者进程退出(终止)或者收到要求终止该进程的信号,或者是需要调用一个信号句柄(信号处理程序)。是需要调用一个信号句柄(信号处理程序)。如果如果pid 所指的子进程早已退出(已成所谓的僵死进程),所指的子进程早已退出(已成所谓的僵死进程),则本调用将立刻返回。则本调用将立刻返回。子进程使用的所有资源将释放。该函数的具体操作也要根子进程使用的所有资源将释放。该函数的具体操作也要根据其参数进行不同的处理。据其参数进行不同的处理。在在Linux系统中,通过向进程发送信号系统中,通过向进程发送信号SIGKILL也可以结也可以结束进程,但是,这使得操作系统核心程序没有任何机会进束进程,但是,这使得操作系统核心程序没有任何机会进行进程结束的清理工作,可能会造成系统资源不能完全释行进程结束的清理工作,可能会造成系统资源不能完全释放。因此,发送信号放。因此,发送信号SIGKILL结束进程是进程的异常结束。结束进程是进程的异常结束。关于系统函数关于系统函数exit和和waitpid的具体应用,参见第的具体应用,参见第6.3节。节。4.3 进程调度进程调度4.3.1 进程调度Linux进程调度首先将进程分为实时进程和普通进程,并进程调度首先将进程分为实时进程和普通进程,并分别采用不同的调度策略。分别采用不同的调度策略。如果进程为普通进程,则其实时优先级如果进程为普通进程,则其实时优先级(rt_priority)为为0;如果为实时进程,则其实时优先级如果为实时进程,则其实时优先级(rt_priority)大于大于0。在普通进程与实时进程上,实时进程调度总是优先于普通在普通进程与实时进程上,实时进程调度总是优先于普通进程调度。进程调度。4.3 进程调度进程调度进程调度准则以进程调度准则以CPU的时间片为单位,并根据进程相关参的时间片为单位,并根据进程相关参数数policy、priority、counter、rt_priority的值进行调度。的值进行调度。这些参数在结构这些参数在结构task_struct中定义,表示的意义如下:中定义,表示的意义如下:policy:进程的调度策略,用来区分实时进程和普通进程。当:进程的调度策略,用来区分实时进程和普通进程。当policy的值为的值为SCHED_OTHER时,表示普通的用户进程,时,表示普通的用户进程,这是进程的缺省类型,采用动态优先调度策略;当这是进程的缺省类型,采用动态优先调度策略;当policy的值为的值为SCHED_FIFO,表示实时进程,遵守,表示实时进程,遵守POSIX1.b标标准的准的FIFO(先入先出先入先出)调度策略;当调度策略;当policy的值为的值为SCHED_RR,也是表示实时进程,遵守,也是表示实时进程,遵守POSIX1.b标准的标准的RR(循环循环round-robin)调度策略;调度策略;priority:实时进程和普通进程的静态优先级。在应用中,:实时进程和普通进程的静态优先级。在应用中,priority代表分配给进程的时间片。代表分配给进程的时间片。4.3 进程调度进程调度counter:进程剩余的时间片,可以看作是进程的动态优先级。:进程剩余的时间片,可以看作是进程的动态优先级。在应用中,在应用中,counter表示进程剩余的时间片。表示进程剩余的时间片。counter的起的起始值是始值是priority的值。进程创建时,优先级的值。进程创建时,优先级priority被赋一被赋一个初值,一般为个初值,一般为070之间的数字,这个数字同时也是计之间的数字,这个数字同时也是计数器数器counter的初值,就是说进程创建时两者是相等的。的初值,就是说进程创建时两者是相等的。在进程运行过程中,在进程运行过程中,counter不断减少,而不断减少,而priority保持不保持不变,以便在进程用完所有分配的时间片,变,以便在进程用完所有分配的时间片,counter变为变为0的的时候,时候,priority再对再对counter重新赋值。重新赋值。rt_priority:实时进程特有的实时优先级,用于实时进程间的:实时进程特有的实时优先级,用于实时进程间的选择。选择。系统函数系统函数goodness()在综合考虑以上在综合考虑以上4个参数的基础上,个参数的基础上,给每个处于可运行状态的进程赋予一个权值给每个处于可运行状态的进程赋予一个权值(weight),该,该权值是调度程序调度进程的唯一依据。进程调度由程序权值是调度程序调度进程的唯一依据。进程调度由程序kernel/sched.

    注意事项

    本文(四川大学linux第4章unix进程管理及进程通信.ppt)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开