第四章分布式系统中的进程和处理机4.1线程一、线程简介在系统要求更高的吞吐量、更高的性能,并在同一地址空间,共享同一缓冲区,创建两个服务进程不可能达到目的,从而需要新的机制线程像微小进程,按照顺序执行,有自己的程序计数器和堆栈。当一个线程被阻塞时,运行同一进程中的另一线程。所有线程共享全局变量,能够存取每个虚拟地址,线程之间没有保护,每个线程能够读写其他线程的堆栈,甚至清除另一线程的堆栈:线程是同一任务的一部分且紧密合作计算机计算机进程线程程序计数器A)三个进程,每个进程有一个线程B)一个进程有三个线程线程的状态运行线程占有CPU,处于激活状态阻塞等待其他线程的某个事件触发后才能唤醒并能够运行的线程就绪等候CPU服务的线程结束结束为线程退出,但还没有被父进程回收二、线程的用途1.派遣者/工作者模型•从系统邮箱内读出输入请求,检查请求,选择一个空闲的工作者线程处理•当工作者线程被唤醒后,检查任何一个线程可访问的共享块缓冲区是否可以满足,若不满足,则给磁盘发出消息,要求所需的数据块,等待磁盘操作完成•调用调度程序,开始另一线程邮箱共享块Cache工作者线程派遣者线程文件服务器进程工作请求达到构造服务器的方法线程特点:并行,阻塞系统调用单线程进程服务器的主循环是接收一个请求,检查请求,在下一个请求到来前完成请求,当等待磁盘操作时,服务是空闲的且不处理另一请求特点:不并行,阻塞系统调用有限状态机当请求到来后,有唯一的一个线程检查它,如果缓冲区能满足,进行运行,否则,向磁盘发送一条消息,但并不阻塞服务线程,而将当前请求的状态记录在一张表中,然后处理下一条消息。下条消息如果是请求新工作则激活它,若是磁盘对上次操作的回答,则从表中取出相关信息并处理特点:并行,非阻塞系统调用2.团队模型所有线程都是平等的,每个都获得和处理自己的请求,但由于缺少派遣者,请求到来线程不能处理,可以通过维护一个作业队列,挂起的作业保存在作业队列中使用这种组织结构,线程在查看系统邮箱前应先查看作业队列邮箱工作者线程文件服务器进程工作请求达到3.管道线模型第一个线程产生一些数据传给下一个线程处理。数据持续从一个线程传到另一个线程,经过的每一个线程都进行处理。邮箱工作者线程文件服务器进程工作请求达到多线程的优点:多客户端有用一个客户端将一个文件复制到多个服务器与RPC或通信无关并行处理程序编写比较容易可以在同一地址空间的不同CPU中并行运行三、线程包的设计问题线程包:与线程相关的用户可得的原语集线程管理:静态多线程程序编写或编译时就要决定选择多少线程,每个线程分配一个固定的堆栈简单但不灵活动态多线程线程在运行过程中动态地创建和回收线程结束的两种方式完成时自动退出被外界终止:如文件服务器进程线程共享存储器的操作打开互斥体如果一个或多个线程由于互斥体被锁住而阻塞,则只能打开其中的一个,其余的继续等待锁住互斥体如果一个互斥体处于打开状态,它将仅仅用一个原子操作锁住互斥体。试锁尝试锁住互斥体,如果互斥体是打开状态,则试锁将返回成功的状态标志码,否则,返回失败的状态码但不阻塞线程条件变量互斥体用于短期加锁,以监视进入临界区;条件变量是用于长时间等待直到资源可用线程的代码通常由多个过程构成,局部变量和参数不会产生任何麻烦,但相对于线程的全局变量而不是相对于整个程序的全局变量会产生麻烦解决办法禁止使用全局变量给每个线程分配它自己的私有全局变量引入新的库过程来创建、设置和读取这些线程全局变量四、实现一个线程包在用户空间中实现线程特点:1.用户级的线程包能够在不支持线程的操作系统中实现2.线程切换比使用内核陷阱要快3.允许每一个进程有自己定制的调度算法4.阻塞调用的实现存在问题,非阻塞系统调用将需要修改现存的许多用户程序5.线程产生页面错时,内核将阻塞整个进程的执行6.用户级线程中同一进程内部线程的切换的实现存在困难在内核中实现线程特点:调度者行为模拟内核线程的功能,像用户空间内实现的线程包一样有更好的性能和更大的灵活性,特别地,用户线程不必发出特殊的非阻塞系统调用或者事先检查发出某个系统调用是否安全;当一个线程由于系统调用或页面错阻塞时,若其他线程就绪,系统可以运行同一进程呢感中的其他线程特点:通过避免在用户空间和内核空间进行不必要的切换实现高效率五、线程和远程过程调用(RPC)大量的RPC调用是调用与它们在同一机器上的进程可以使一个进程中的线程以一种比普通方法更有效的方法调用同一机器上的另一进程中的线程当服务器线程S启动时,输出它的接口告诉内核,这个接口定义了哪些过程及其相关参数,当客户线程C启动时,从内核输入该接口,获得用于调用的特殊标志。内核现在知道C以后将调用S,并且创建特殊的数据结构为调用做准备当一个新消息进入服务器时,内核动态创建一新线程去为此请求服务,并把消息映像到服务器地址空间,然后建立新线程的堆栈来存取该消息特点:线程不会因等待新任务而阻塞,不必保留环境创建新线程比存储一个存在的线程花费少因为不需在服务器线程4.2系统模型传统系统中只有一个处理机,进程在处理机上运行不会出现怎样利用处理机的问题。而在多处理机中成为一个主要的设计问题分布式系统中的系统模型工作站模型(Workstationmodel)处理机池模型(processorpoormodel)混合模型一、工作站模型系统是由分布在建筑物中或校园中并由高速局域网连接起来的工作站构成的工作站类型:无盘工作站价格便宜容易维护无磁盘的风扇产生的噪音对称性和灵活性有盘工作站分页和临时文件分页、临时文件和系统二进制文件分页、临时文件、系统二进制文件和文件缓冲完整的局部文件系统分页和临时文件所有用户文件保存在中央文件服务器中,文件利用磁盘分页和存储临时文件(临时的、不能共享的、并在登陆会话结束后丢弃的文件)分页、临时文件和系统二进制文件在第一种模型的基础上可以保存二进制文件,从而减少网络负担。为了保持各工作站上的文件版本的一致性,需要相关管理乘隙进行跟踪用户程序的版本号分页、临时文件、系统二进制文件和文件缓冲保持长期集中存储,并且可以通过使用文件时把它们保存在本地的方法而减少网络负载,但需保持缓冲一致性完整的局部文件系统每台机器基本上是独立的并与外界进行有限的联系,但共享困难磁盘使用优点缺点无盘成本低,软硬件容易维护,对称灵活网络使用频繁,文件服务器可能成为瓶颈分页,可檫除文件和无盘相比,使网络的负担更轻由于需要大量的磁盘,费用比较高分页、过期文件,二进制文件使网络的负担更轻费用比较高,二进制的更新比较复杂分页、过期文件,二进制文件,缓冲减轻网络和文件服务器的负担费用比较高,存在cache一致性的问题完全本地文件系统几乎没有网络负担,不需要文件服务器失去了透明性工作站模型的缺点:处理机芯片不断下降工作站配备多个CPU将变得经济可行用户大多数时间不使用工作站大多数用户拥有资源但没有利用,少量用户对资源的需要紧张,造成资源的分配不合理二、使用空闲工作站最早尝试使用空闲工作站:Rshmachinecommand在指定机器上运行指定的命令可以利用空闲工作站但:用户必须指明机器名称,用户程序在远程机器的不同于本地机器中的环境上运行若用户登陆到正在运行的空闲机器上,造成新登陆用户的低性能使用工作站模型的关键问题:1。怎样找出一台空闲机器2。远程进程怎样透明地运行3。若空闲机器的主人回来重新使用它时怎么办怎样找出一台空闲机器定位空闲工作站的方法服务器驱动工作站空闲时,将其名字、网络地址和属性输入到某注册文件工作站空闲时在网络上广播发送消息申明其可用性,但需要所有的机器维护注册文件服务器驱动存在竞争危险远程管理者注册注册表宿主机空闲工作站21435697.8.1。机器空闲注册2。请求空闲工作站并得到应答3。申请机器4。使注销5。设置环境6。启动进程7。进程运行8。进程退出9。报告始发者客户端驱动申请端广播发送请求说明其需要运行的进程,内存需求等详细信息,工作站接收到消息后经过一段与工作站当前负荷成正比的延迟后返回应答消息,申请端接收到返回应答时,从中挑选一个并启动运行(负载最轻的工作站应答最先返回)远程进程怎样透明地运行程序运行时运行环境必须一致开始运行时需要同样的文件系统、工作目录、条件变量。无盘工作站访问文件服务器;有盘工作站需要将请求返回到宿主机上执行某些系统调用必须返回宿主机读键盘、写屏幕、所有查询机器状态的系统调用都必须在进程真正的机器上运行等与时间有关的系统调用可能因机器时钟不同步而出问题其他复杂问题写临时文件机器主人回来怎么办?什么也不做简单,不切实际,应该保证机器对于机器主人的响应杀掉正在进入的进程所有的工作信息会丢失,并且可能造成文件系统的混乱状态将进程移植到另一台机器上因为搜索和收集待移植的进程相关的内核数据结构比较困难,在实践中很少使用环境必须清理:进程移植所有子进程以及子进程的子进程也需要移植邮箱、网络连接和其他系统范围的数据结构也必须删除,并且制定一些规定,用来忽略相关的消息清理本地临时文件清理缓存信息三、处理机池模型处理机池模型是通过建造处理机池,根据需要动态地分配给用户,用户个人工作站为高性能的图形终端可在固定资金下提供更多的计算能力允许简单的线性增加将计算能力集中在一个处理机池中的最有力根据是排队论:用户随机地请求服务器工作,当服务器忙时,用户排队等待服务,并依次给予服务设每秒从用户来的总输入请求速度为λ,μ为系统处理请求的速度,为了达到稳定处理,必须μλ。则发出请求和得到完全响应之间平均的时间间隔T与μ,λ的关系为:T=1/(μ–λ)例如:一个文件服务器每秒能处理50次请求,而每秒只接收40次请求,则平均响应时间为1/10秒或100ms,当λ为0时(没有负载),文件服务器的响应时间为1/50秒。用户用户用户计算机完成工作输入队列用户每秒共产生λ个请求系统每秒能处理μ个请求图4-12一个基本的排队系统假设我们有n个私有多处理机,每个有多个CPU,每个都成为一个请求到达速度为λ的独立排队系统,并且CPU的处理速度为μ,平均响应时间为T,若将所有的CPU放在一个处理机池中,则对应系统的输入率为nλ,服务率为nμ。将这个合成系统的平均响应时间记为T1。根据上面公式,可以得到:T1=1/(nμ–nλ)=1/n×1/(μ–λ)=1/n·T=T/n结论:用一个是小系统功能n倍的大系统来代替n个独立的小系统的资源可把平均响应时间减少为原来的1/n原因:通常情况下,只有少数服务器繁忙或过载,大多数空闲,处理机池模型就是减少了这种时间的浪费。排队理论的结论就是根本反对分布式系统的论据之一工作站模型与处理机模型的比较:处理机模型价格昂贵,成本高平均响应时间要小有利于运行大的仿真程序排队论的假设仅当所有的请求分配在所有的处理机上并行处理时才是正确的对于机器主人回来后的问题处理比较方便适合于需要大规模的计算(大型软件开发、大型模拟、大矩阵的计算等)工作站模型用户响应时间恒定成本低,易于扩充适合于负荷较小的处理四、混合模型提供每个用户一个私有工作站并附加处理机池为了保证时间,交互式工作在工作站上运行,所有的非交互式进程运行在处理机池中。这种模型具有快速的交互响应、有效的资源利用和简单的设计4.3处理机分配一、分配模型处理器分配:不可迁移当创建新进程时,系统决定为该进程分配处理机,一旦分配完毕,进程将一直在这台处理机上运行,直至结束可迁移可以将已经开始的进程迁移到别的处理机上继续运行处理机分配的目标:CPU利用率最大化平均响应时间最小化/最小化响应率响应率:一台机器上运行一个进程的时间除以这个进程在一个无负载的标准处理机上运行时因该花的时间二、处理机分配算法的设计问题确定性与启发性算法确定性算法适用于当进程的所有行为都是实现知道的情况,但只有极少数系统的所有信息是预先知道的另一个是系统的负载是完全不可预测的,工作请求可能每分钟都会发生很大的变化,处理机分配只能使用特别的启发性算法集中式与分布式算法将所有信息搜集到一个地点便于做出更好的决定,但系统不够健壮,中心机器的负载过重最优