欢迎来到天天文库
浏览记录
ID:13181431
大小:651.63 KB
页数:29页
时间:2018-07-21
《linux进程、线程简介》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、目录1引言51.1文档目的51.2参考文档52概述53进程管理53.1进程描述符53.2进程标识63.3进程状态73.4设置进程状态83.5进程上下文83.6进程家族树93.7进程组93.8进程地址空间103.9创建进程113.9.1写时拷贝113.9.2函数system()123.9.3函数fork()123.9.4函数exec143.9.5函数fork()和exec()协同工作153.9.6函数vfork()153.9.7函数wait()164进程调度164.1调度策略164.1.1处理器消耗型和I/O消耗性的进程164.1.2进程优先级
2、174.2调度算法224.2.1可执行队列224.2.2优先级数组224.2.3schedule()234.2.4重新计算时间片235线程255.1线程创建255.2线程同步265.2.1用信号量进行同步265.2.2用互斥量进行同步275.2.3用条件变量进行同步285.3线程安全函数295.4重入函数305.4线程池316文档历史311引言1.1文档目的对Linux进程、线程知识做一个简单的介绍,让读者对Linux进程、线程的工作原理有一个初步的了解。1.2参考文档1)《Linux内核设计与实现》2)《UNIX环境高级编程》3)《深入理解
3、LINUX内核》4)《Linux程序设计》2概述进程是Unix操作系统最基本的抽象之一。一个进程就是处于执行期的程序,通常由程序代码、数据、变量、打开的文件和环境组成,进程是内核分配资源的基本单位。线程是一个进程内部的控制序列,所有的进程至少有一个线程,线程是内核调度的基本单位(不是进程)。在现代的操作系统中,进程提供两种虚拟机制:虚拟处理器和虚拟内存。虽然实际上可能是许多进程在分享一个处理器,但虚拟机处理器给进程一种假象,让这些进程觉得自己在独享处理器;而虚拟内存让进程在获取和使用内存时觉得自己拥有整个系统的所有内存资源。同一个进程的线程之
4、间可以共享虚拟内存,但拥有各自的虚拟处理器。3进程管理进程的另一个名字是任务(task)。Linux内核通常把进程叫做任务,任务通常指的是从内核观点所看到的进程。3.1进程描述符内核把进程存放在叫做任务队列(tasklist)的双向链表中。链表中的每一项都是类型为task_struct、称为进程描述符(processdescriptor)的结构,该结构定义在文件中。进程描述符中包含一个具体进程的所有信息。task_struct相对较大,在32位机器上,它大约有1.7K字节。但如果考虑到该结构内包含了内核管理一个进
5、程所需的所有信息,那么它的大小也算相当小了。进程描述符中包含的数据能完整的描述一个正在执行的程序:它打开的文件,进程的地址空间、挂起的信号、进程的状态,还有其他更多信息。Linux通过slab分配器预先分配task_struct结构,这样能达到对象复用和缓存着色的目的。进程描述符task_struct的内容:3.2进程标识内核通过一个唯一的进程标识值(processidentificationvalue)或PID来标识每个进程。PID是一个数,表示为pid_t隐含类型,实际上就是一个int类型。为了与老版本的Linux兼容,PID的最大值默认
6、设置为32768(shortint短整型的最大值),尽管这个值也可以增加到类型所允许的范围。内核把每个进程的PID存放在它们各自的进程描述符中。这个最大值很重要,因为它实际上就是系统中允许同时存在的进程的最大数据。尽管32768对于一般的桌面系统足够用了,但是大型服务器可能需要更多的进程。如果确实需要的话,可以不考虑与老式系统的兼容,由系统管理员通过修改/proc/sys/kernel/pid_max来提高上限。3.3进程状态进程描述符中的state域描述了进程的当前状态(参见图-3)。系统中的每个进程都必然处于五种进程状态中的一种。该域的值
7、也必为下列5种状态标志之一:1)TASK_RUNNING(运行)------进程是可执行的;它或者正在执行,或者在运行队列中等待执行;2)TASK_INTERRUPTIBLE(可中断)------进程正在睡眠(也就是说它被阻塞),等待某些条件的达成。一旦这些条件达成,内核就会把进程状态设置为可运行。处于此状态的进程也会因为接收到信号而提前被唤醒并投入运行。3)TASK_UNINTERRUPTIBLE(不可中断)------除了不会因为接收到信号而被唤醒从而投入运行之外,这个状态与可中断状态相同。这个状态通常在进程必须在等待时不受干扰或等待事件
8、很快就会发生时出现。由于处于此状态的任务对信号不作响应,所以较之可中断状态,使用得较少。4)TASK_ZOMBIE(僵死)------该进程已经结束了,但是其父进程
此文档下载收益归作者所有