- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
Linux多进程、多线程及网络编程指南
进程
进程〔多进程〕
线程〔多线程〕
进程间通信
并发程序的同步
socket网络编程
1
1、进程
1.1进程定义
进程是程序在计算机上的执行活动,是一个运行着一个或多个线程的地址空间和这些线程所需要的系统资源,其中包括程序代码、数据、变量、翻开文件的文件描述符、和环境。
1.2进程的五种状态
在五状态进程模型中,进程状态被分成以下五种状态。进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创立状态和退出状态描述进程创立的过程和进程退出的过程。
1)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
2)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
3)阻塞状态(Blocked):当进程由于等待I/O操作或进程同步等条件而暂停运行时,它处于阻塞状态。
4)创立状态(New):进程正在创立过程中,还不能运行。操作系统在创立状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如翻开文件表)并分配资源、加载程序并建立地址空间表等。
5)退出状态(Exit):进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。
进程三种状态的转换如下图:
就绪执行
就绪
执行
等待
时间片到
因等待时间发生而唤醒
因等待时间发生而睡眠
调度到
进程三种状态的转换关系
1.3进程的结构
Linux系统是一个多进程的系统,进程间有并行性、互不干扰等特点。通俗的说进程间是别离的任务,拥有各自的权力和责任,每个进程运行在各自独立的虚拟地址空间,一个进程发生了异常,它也不会影响到系统中的其他进程。
Linux进程包含三个段:数据段、代码段、堆栈段。
数据段:存放的是全局变量、常数、static定义的静态变量和动态分配的数据〔malloc函数取得的空间〕等。
代码段:存放的是程序代码的数据。
堆栈段:存放的是子程序的返回地址、子程序的参数以及程序的局部变量。
1.4进程的执行模式
当一个任务〔进程〕执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态〔或简称为内核态〕。此时处理器处于特权级最高的〔0级〕内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,那么称其处于用户运行态〔用户态〕。即此时处理器在特权级最低的〔3级〕用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。在内核模式下运行的进程可以执行机器的特权指令,并且此时该进程的运行不受用户的干扰,即使是root用户也不能干扰内核模式下程序的运行。
进程上下文和中断上下文
处理器总处于以下状态中的一种:
1、内核态,运行于进程上下文,内核代表进程运行于内核空间;
2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;
3、用户态,运行于用户空间。
1.4
1.4创立新进程
通过fork调用创立一个新进程,这个系统调用复制当前进程在系统表中创立一个新的表项,新表项中的许多属性与当前进程是相同的。新进程与原进程几乎一样,但还是有不同之处。父子进程的异同:
继承属性
差异
真实的用户ID和组ID,有效用户ID和组ID
进程组ID
SESSIONID
所翻开文件及文件的偏移量
控制终端
设置用户ID和设置组ID标记位
根目录与当前工作目录
文件缺省创立的权限掩码
可访问的内存段
环境变量及其他资源分配
进程ID
父进程ID
子进程运行的时间记录
父进程对文件的锁
fork和exec函数族结合在一起使用就是创立新进程所需要的一切了,值得注意的是exec函数执行之后原进程之后的代码将不会被执行。
创立一个新进程也可以使用vfork,但vfork并不完全拷贝父进程的数据段而是和父进程共享数据段。这是因为vfork函数是与exec函数族相连,创立执行另一个程序的新进程。并且调用vfork对于父子进程的执行次序有限制,调用vfork时,父进程被挂起,子进程运行至调用exec函数族或调用exit时解除这种状态。而fork是不会阻塞调用进程的,父子进程的执行顺序是不确定的。
1.5
1.5僵尸进程
文档评论(0)