一个进程可以包含一个或多个线程。
进程间通信必须使用OS提供的进程间通信机制,而同一进程的线程间可以通过直接读写来通信。
线程的优点
创建时间:在已有进程中创建一个新线程比创建一个新进程快。
终止时间:终止一个线程比终止一个进程快。
切换时间:同一进程中线程的切换比进程间切换快。
通信效率:同一进程中线程的通信快。
4.用户级线程和内核级线程
线程的类型:
内核级线程:是指依赖于内核,由操作系统内核完成创建、撤消和切换的线程。
用户级线程:是指不依赖于操作系统核心,由应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制的线程。
线程的调度与切换速度:内核级线程的调度与切换与进程类似,但开销小些;用户级线程切换无需进入内核,因而切换快。
4.用户级线程和内核级线程(续)
系统调用:内核级线程调用系统调用时,OS将其看成是该线程的行为,因而阻塞该线程;而用户级线程调用系统调用时,OS将其看成整个进程的行为,若阻塞则阻塞整个进程。
线程执行时间:在只有用户级线程的系统中,调度以进程为单位,若进程内线程多则执行时间相对少;内核级线程系统中,调度以线程为单位。
适应性:用户级线程可以在任何操作系统中运行,但内核级线程只能在支持它的OS中运行。
UNIX的进程描述(P245)
在UNIX系统中,采用了段页式存储管理方式(在UNIX中将段称为区),因此一个进程实体由若干个区组成,包括程序区、数据区、栈区等。每个区又可分为若干页。
进程描述的数据结构
为了实施对进程的有效管理,操作系统为每个进程设置了一个PCB。在UNIX System Ⅴ中,将PCB分成进程表项和U区(又称proc结构和user结构)两部分。除进程表项和U区外,管理进程的数据结构还有本进程区表和系统区表。
进程表项
状态字段用于标识进程的状态。
若干用户标识号,简称UID或用户ID。
若干进程标识号,简称PID或进程ID。
存储区位置和长度。
调度参数,包括优先数等。
软中断信号域。
各种计时域,给出进程执行时间和系统资源的利用情况。
指向U区的指针,指向与进程表项对应的U区。
事件描述域,记录使进程进入睡眠状态的事件。
U区
指向进程表项的指针,指出对应于该U区的进程表项。
真正用户标识符及有效用户标识符。
用户文件描述符表,记录进程已打开的文件。
当前目录和当前根,描述进程的文件系统环境。
计时器域,记录进程及其后代运行所用的时间。
一些输入/输出参数。描述要传输的数据量,源或目的数据地址等。
限制域,指出进程的大小及它能“写”的文件大小限制。
出错域,记录系统调用执行期间所发生的错误。
返回值域,指出系统调用的返回结果。
信号处理数组,指出进程接收到软中断信号时的处理方式。
系统区表
UNIX System Ⅴ把一个进程的虚地址空间划分为正文区、数据区、栈区等。系统设置区表对区进行管理,区表主要包含以下信息:
区的类型和大小。指明区的类型为正文、数据或栈。