第4章节 程序、进程和线程.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章节 程序、进程和线程

第4章 程序、进程和线程 进程的概念是操作系统最重要的核心概念之一,对进程的不同实现方式造成了目前操作系统的一种分类方法,例如DOS系统为单进程的操作系统。在本章中将介绍Linux中的进程的概念和相关的操作函数,并对线程的程序设计方法进行了比较多的介绍。 进程、线程和程序的概念和它们之间的区别。 进程的产生方式,fork、system、exec等。 详细介绍了Linux进程间的通信和同步方式,包括管道pipe,命名管道fifo,信号量sem,共享缓冲区shm,消息队列msg,以及信号signal。对其原理和编程函数进行了详细的讲解,并举了丰富的代码例子。 对Linux下的线程编程方式进行了比较详细的介绍,并介绍了互斥、条件变量、线程信号等的编程实现方法。 4.1 程序、进程和线程的概念 在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。进程则是运行着的程序,是操作系统执行的基本单位。线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位。 4.1.1 程序和进程的差别 进程概念和程序概念最大的不同之处在于: 进程是动态的,而程序是静态的。 进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 一个进程只能对应一个程序,一个程序可以对应多个进程。进程和程序的关系就像戏剧和剧本之间的关系。 4.1.2 Linux环境下的进程 Linux的进程操作方式主要有产生进程、终止进程,并且进程之间存在数据和控制的交互,即进程间通信和同步。 1.进程的产生过程 2.进程的终止方式 3.进程之间的通信 4.进程之间的同步 4.1.3 进程和线程 线程和进程是另一对有意义的概念,主要区别和联系如下: 进程是操作系统进行资源分配的基本单位,进程拥有完整的虚拟空间。进行系统资源分配的时候,除了CPU资源之外,不会给线程分配独立的资源,线程所需要的资源需要共享。 线程是进程的一部分,如果没有进行显示的线程分配,可以认为进程是单线程的;如果进程中建立了线程,则可以认为系统是多现成的。 多线程和多进程是两种不同的概念,虽然二者都是并行完成功能。但是,多个线程之间像内存、变量等资源在多个线程之间可以通过简单的办法共享,多进程则不同,进程间的共享方式有限。 4.2 进程产生的方式 进程是计算机中运行的基本单位,要产生一个进程,有多种产生方式,例如使用fork()函数、system()函数、exec()函数等,这些函数的不同在于其运行环境的构造之间存在差别,其本质都是对程序运行的各种条件进行设置,在系统之间建立一个可以运行的程序。 4.2.1 进程号 每个进程在初始化的时候,系统都分配了一个id号,用于标识此进程。在Linux中进程号是唯一的,系统可以用这个值来表示一个进程,描述进程的id号通常叫做PID,即进程id(process id)。PID的变量类型为pid_t。 1.函数getpid()介绍 2.函数getpid()的例子 4.2.2 进程复制fork() 产生进程的方式比较多,fork()是其中的一种方式。fork()函数以父进程为蓝本复制一个进程,其id号和父进程id号不同。在Linux环境下,fork()是以写复制实现的,只有内存等与父进程不同,其他与父进程共享,只有在父进程或者子进程进行了修改后,才重新生成一份。 1.函数fork()介绍 2.函数fork()的例子 4.2.3 system()方式 system()函数调用shell的外部命令在当前进程中开始另一个进程。 1.函数system()介绍 2.函数system()的例子 4.2.4 进程执行exec()函数系列 在使用fork()函数和system()函数的时候,系统中都会建立一个新的进程,执行调用者的操作,而原来的进程还会存在,直到用户显示的退出;而exec()族的函数与之前的fork()和system()函数不同,exec()族函数会用新进程代替原有的进程,系统会从新的进程运行,新的进程的PID值会与原来进程的PID值相同。 1.函数exec()介绍 2.函数ececve()的例子 4.2.5 所有用户态进程的产生进程init 在Linux系统中,所有的进程都是有父子或者堂兄关系的,没有哪个进程与其他进程完全独立。除了初始进程init,系统中每个进程都有一个父进程,新的进程不是被全新的创建,新的进程通常是从一个原有的进程进行复制或者克隆的。 Linux操作系统下的每一个进程都有一个父进程或者兄弟进程,并且有自己的子进程。 4.3 进程间通讯和同步 在Linux下的多个进程间的通信机制叫做IPC,它是多个进程之间进行相互沟通的一种方法。在Lin

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档