- 1、本文档共57页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch5_1 Linux下的多进程编程
复习与回顾
上节课内容
格式化输入输出(fprintf,fscanf,sprintf)
缓冲区函数(setbuf,setbuffer,setlinebuf,setvbuf,fflush,fpurge)
文件定位与出错检测(rewind,fseek,ftell,feof,ferror)
系统调用(底层文件访问)(open、write)
目录
进程简介
启动新进程
替换进程映像
复制进程映像(fork函数)
目录
进程简介
启动新进程
替换进程映像
复制进程映像(fork函数)
1. 进程的概念
5
进程是一个具有独立功能的程序对某个数据集在处理机上的执行过程和分配资源的基本单位。
程序与进程的区别:
程序是存储在磁盘上的可执行的机器指令和数据的实体,是静态的;而进程则可以看成是运行中的程序,包括所有当前CPU中的活动信息等,进程是动态的。
和进程联系在一起的不仅有程序的指令和数据,而且还有当前的指令指针、所有的 CPU 寄存器以及用来保存临时数据的堆栈等,所有这些都随着程序指令的执行在变化。
6
1. 进程的概念
一个程序可以对应多个进程。程序的每一个正在运行的副本都有其自己的进程。同时运行的多个进程之间相互隔开,除非需要交换数据,否则互不影响。
进程和任务的区别:
任务(命令)cat abc | more运行了两个进程。
进程的特点
7
并发性:引入进程的目的是为了实现在系统中同时运行多个程序。
动态性:进程随着创建而诞生,随着撤销而消亡。
多进程是操作系统,尤其是并发程序设计中非常重要的概念,目的是为提高程序的运行效率,保持 CPU 的最大利用率。
进程的特点
8
多进程之间相互独立,必要时发生联系。
进程在运行过程中,要使用许多计算机资源,例如 CPU、内存、文件、Printer等。若使用相同资源,为避免冲突,必须设定轮流使用;
若需要相互合作进行数据的交流,则需要在各进程之间建立一种“进程间通讯( Inter-Process Communication ,IPC)”机制,常见的有信号和管道等;
若出现互斥关系,如调用同一程序(此程序不允许同时被运行,如数据库、文件操作),则采用锁定机制。
Linux中多进程同时运行的实现原理:进程调度(process scheduling)
Linux操作系统负责在各个进程之间进行调度,轮流使每个进程占用一个CPU时间片。
Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(Process Control Block,简称PCB),其中有一个优先级属性,Linux根据它来决定各个进程从CPU获得的时间片大小。
9
PCB表中包含了很多重要的信息,供系统调度和进程本身执行使用,其中最重要的是进程ID(process ID,进程标识符),是一个非负整数,在Linux操作系统中唯一地标志一个进程,在最常使用的I386架构(即PC使用的架构)上,是一个非负的整数的变化范围是0~32767,这是我们所有可能取到的进程ID。
系统将PID=0分配给调度进程,PID=1分配给初始化进程。
10
ps命令的结果
11
系统中每一个进程都包含一张PCB表,每张PCB表对应到一个task_struct数据结构,所有指向这些数据结构的指针组成一个进程指针数组task,系统缺省的进程向量数据大小是512,表示系统中可同时容纳512个进程。
进程的task_struct数据结构包括了进程标识符PID、进程的状态、调度信息、相关文件标识符等信息。
12
进程的状态
13
Linux 进程主要有如下几种状态:
运行、就绪、和等待(休眠)
Running(运行态):得到CPU控制权,它的程序正在运行,该进程所处的状态为运行状态。(在系统中,只有一个进程处于此状态) 。
Waiting(就绪态):它们已经准备就绪,一旦得到CPU,就立即可以运行,这些进程所取的状态为就绪状态。(有多个进程处于此状态)
Stop(等待态、停止态、休眠态):进程不能使用CPU。若一个进程正在等待某个事件的发生(如等待I/O的完成),而暂停执行,这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态。
zombie僵尸进程:进程已终止,但在 task 数组中仍占据着一个 task_struct 结构。
14
调度信息: 调度程序利用该信息完成进程之间的切换。
进程间通讯的信息: 系统利用这一信息实现进程间的通讯。
进程链信息(进程间关系):
除初始化进程之外,任何一个进程都具有父进程。每个进程都是从父进程中“克隆”出来的。
进程链则包含进程的父进程指针、和该进程具有相同父进程的兄弟进程指针以及进程的子进程指针。
利用这个链表中的信息,内核可以很容易地找到某个进
文档评论(0)