- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 在用户程序可以按功能划分为不同的小段时,单处理机系统也可因使用线程而简化程序的结构和提高执行效率。 几种典型的应用是: (1) 服务器中的文件管理或通信控制。在局域网的文件服务器中,对文件的访问要求可被服务器进程派生出的线程进行处理。由于服务器同时可能接受许多个文件访问要求,则系统可以同时生成多个线程来进行处理。如果计算机系统是多处理机的,这些线程还可以安排到不同的处理机上执行。 (2) 前后台处理。许多用户都有过前后台处理经验,即把一个计算量较大的程序或实时性要求不高的程序安排在处理机空闲时执行。对于同一个进程中的上述程序来说,线程可被用来减少处理机切换时间和提高执行速度。 (3) 异步处理。程序中的两部分如果在执行上没有顺序规定,则这两部分程序可用线程执行。 另外,线程方式还可用于数据的批处理以及网络系统中的信息发送与接收和其他相关处理等。例如,图3.25给出了一个用户主机通过网络向2台远程服务器进行远程调用(RPC)以获得相应结果的执行情况。 如果用户程序只用一个线程,则第2个远程调用的请求只有在得到第1个请求的执行结果后才能发出(如图3.25a)。 多线程时,用户程序不必等待第1个RPC请求的执行结果而直接发出第2个RPC请求(如图3.25b)从而缩短等待时间。 (a) 单线程时的RPC请求处理 (b) 多线程时的RPC请求处理 图3.25 3.9.3 线程的执行特性 线程在执行时也有它的相关特性。线程的状态和同步用来反映线程的这些特性。 线程有3个基本状态,即执行、就绪和阻塞。但是线程没有进程中的挂起状态。也就是说,线程是一个只与内存和寄存器相关的概念,它的内容不会因交换而进入外存。 针对线程的3种基本状态,存在5种基本操作来转换线程的状态。这5种基本操作是: (1) 派生(spawn):线程在进程内派生出来,它即可由进程派生,也可由线程派生。用户一般用系统调用(或相应的库函数)派生自己的线程。 一个新派生出来的线程具有相应的数据结构指针和变量,这些指针和变量作为寄存器上下文放在相应的寄存器和堆栈中。 新派生线程被放入就绪队列。 (2) 阻塞(Block):如果一个线程在执行过程中需要等待某个事件发生,则被阻塞。阻塞时,寄存器上下文、程序计数器以及堆栈指针都会得到保证。 (3) 激活(unblock):如果阻塞线程的事件发生,则该线程被激活并进入就绪队列。 (4) 调度(schedule):选择一个就绪线程进入执行状态。 (5) 结束(Finish):如果一个线程执行结束,它的寄存器上下文以及堆栈内容等将被释放。 线程的状态和操作关系如图3.26。 图3.26 线程的状态与操作 需要注意的一点是,在某些情况下,某个线程被阻塞也可能导致该线程所属的进程被阻塞。 线程的另一个执行特性是同步。 由于同一进程中的所有线程共享该进程的所有资源和地址空间,任何线程对资源的操作都会对其他相关线程带来影响。因此,系统必须为线程的的执行提供同步控制机制,以防止因线程的执行而破坏其他的数据结构和给其他线程带来不利的影响。 线程中所使用的同步控制机制与进程中所使用的同步控制机制相同。因此,这里不再进一步讲述有关线程的同步问题。 3.9.4 线程的分类 线程的两个基本类型是:用户级线程和系统级线程(核心级线型)。在同一个操作系统中,有的使用纯用户级线程,有的使用纯核心级线程,例如Windows NT和Os/2;有的则混合使用用户及线程和核心级线程,例如Solaris 。 用户及线程(user level threads)的管理过程全部由用户程序完成,操作系统内核只对进程进行管理。 为了对用户级线程进行管理,操作系统提供一个在用户空间执行的线程库。该线程库提供创建、调度、撤销线程功能。同时该线程库也提供线程间的通信,线程的执行以及存储线程上下文的功能。用户及线程只使用户堆栈和分配给所属进程的用户寄存器。 当一个线程被派生时,线程库为其生成相应的线程控制块TCB等数据结构,并为TCB中的参量赋值和把该线程置于就绪状态。其处理过程与进程创建过程大致相似。 不同的是: (1) 用户级线程的调度算法和调度过程全部由用户自行选择
文档评论(0)