linux_多进程多线程及其同步

linux_多进程多线程及其同步

ID:18644416

大小:521.66 KB

页数:40页

时间:2018-09-20

linux_多进程多线程及其同步_第1页
linux_多进程多线程及其同步_第2页
linux_多进程多线程及其同步_第3页
linux_多进程多线程及其同步_第4页
linux_多进程多线程及其同步_第5页
资源描述:

《linux_多进程多线程及其同步》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux多进程、多线程及网络编程指南1、进程(多进程)2、线程(多线程)3、进程间通信4、并发程序的同步5、socket网络编程1、进程1.1进程定义进程是程序在计算机上的执行活动,是一个运行着一个或多个线程的地址空间和这些线程所需要的系统资源,其中包括程序代码、数据、变量、打开文件的文件描述符、和环境。1.2进程的五种状态在五状态进程模型中,进程状态被分成下列五种状态。进程在运行过程中主要是在就绪、运行和阻塞三种状态间进行转换。创建状态和退出状态描述进程创建的过程和进程退出的过程。1)运行状态(Running):进程占用处理器资源;

2、处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。2)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。3)阻塞状态(Blocked):当进程由于等待I/O操作或进程同步等条件而暂停运行时,它处于阻塞状态。4)创建状态(New):进程正在创建过程中,

3、还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源、加载程序并建立地址空间表等。5)退出状态(Exit):进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。进程三种状态的转换如图所示:就绪执行等待时间片到因等待时间发生而唤醒因等待时间发生而睡眠调度到进程三种状态的转换关系1.3进程的结构Linux系统是一个多进程的系统,进程间有并行性、互不干扰等特点。通俗的说进程间是分离的任务,拥有各自的权力和责任,每个进

4、程运行在各自独立的虚拟地址空间,一个进程发生了异常,它也不会影响到系统中的其他进程。Linux进程包含三个段:数据段、代码段、堆栈段。数据段:存放的是全局变量、常数、static定义的静态变量和动态分配的数据(malloc函数取得的空间)等。代码段:存放的是程序代码的数据。堆栈段:存放的是子程序的返回地址、子程序的参数以及程序的局部变量。1.4进程的执行模式当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代

5、码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。在内核模式下运行的进程可以执行机器的特权指令,并且此时该进程的运行不受用户的干扰,即使是root用户也不能干扰内核模式下程序的运行。进程上下文和中断上下文处理器总处于以下状态中的一种:1、内核态,运行于进程上下文

6、,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。1.4创建新进程通过fork调用创建一个新进程,这个系统调用复制当前进程在系统表中创建一个新的表项,新表项中的许多属性与当前进程是相同的。新进程与原进程几乎一样,但还是有不同之处。父子进程的异同:继承属性差异真实的用户ID和组ID,有效用户ID和组ID进程组IDSESSIONID所打开文件及文件的偏移量控制终端设置用户ID和设置组ID标记位根目录与当前工作目录文件缺省创建的权限掩码可访问的内存段环境变量及其他资源分配进程I

7、D父进程ID子进程运行的时间记录父进程对文件的锁fork和exec函数族结合在一起使用就是创建新进程所需要的一切了,值得注意的是exec函数执行之后原进程之后的代码将不会被执行。创建一个新进程也可以使用vfork,但vfork并不完全拷贝父进程的数据段而是和父进程共享数据段。这是因为vfork函数是与exec函数族相连,创建执行另一个程序的新进程。并且调用vfork对于父子进程的执行次序有限制,调用vfork时,父进程被挂起,子进程运行至调用exec函数族或调用exit时解除这种状态。而fork是不会阻塞调用进程的,父子进程的执行顺序是

8、不确定的。1.5僵尸进程一个进程结束了,但是他的父进程没有等待(调用wait/waitpid)他,那么他将变成一个僵尸进程.但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。