【精品】《分布式系统》第四章 并发计算(可编辑.ppt
《【精品】《分布式系统》第四章 并发计算(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】《分布式系统》第四章 并发计算(可编辑.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、分布式系统第四章 并发计算进程进程Process:一个运行着的程序一个运行着的程序n一个进程应该包括执行中的程序、该程序所操作的数据、所使用的资源、以及执行期间的状态。n一个进程的运行环境是一台抽象的计算机,包括分配给该进程的虚CPU、存储空间、以及其它系统资源。运行 阻塞 就绪创建消亡调度调度时钟中断时钟中断请求服务请求服务服务成功服务成功2第四章 并发计算进程创建/*UNIX 进程创建:进程创建:process_creation.c*/process_creation.c*/#include#include main()main()int pid;int pid;if(pid=fork()
2、!=0)if(pid=fork()!=0)/*/*父进程父进程*/*/printf(“Fathern”);printf(“Fathern”);wait(0);wait(0);else if(pid=fork()!=0)else if(pid=fork()!=0)/*/*子进程子进程*/*/printf(“Sonn”);printf(“Sonn”);wait(0);wait(0);else else/*/*孙进程孙进程*/*/printf(“Grandsonn”);printf(“Grandsonn”);exit(0);exit(0);3第四章 并发计算UNIX进程创建存储空间示意每一个UNIX
3、进程都具有完全独立的地址空间,该空间由三个区域组成:第一是一块固定的、不可修改的区域,用来存放程序代码、常数等信息;第二是一块称为堆堆(heap)的区域,用来存放所有动态分配的数据;第三是一块称为栈栈(stack)的区域,用以存放过程调用的控制信息以及从属于被调用过程的局部变量 栈堆程序常数区栈堆程序常数区栈堆程序常数区父进程父进程子进程子进程孙进程孙进程4第四章 并发计算进程内容切换 每当把CPU从一个进程分配给另一个进程时,我们都要进行进程内容切换(context switch),包括保存旧进程的执行状态,设置新调度进程的执行状态等工作 进程内容:CPU内容(CPU context),存储
4、内容(Storage context)nCPU内容比较简单,包括程序计数器、通用寄存器,栈指针以及其它一些辅助信息。n而一个进程的存储内容却复杂的多,包括该进程的程序、数据、地址空间、不同区域的地址影射、磁盘交换(Swap)影射等等。5第四章 并发计算进程与线程(2)PCBPCBTCBTCBTCB PCBTCBTCBTCB 线程支持系统线程支持系统操作系统操作系统单线进程单线进程多线进程多线进程多线进程多线进程PCB代表进程控制块(Process Control Block)TCB代表线程控制块(Thread Control Block)这些控制块含有控制调度进程或线程所需的信息8第四章 并发
5、计算线程程序包设计问题目前最著名的两个线程程序包:IEEE和OSI推荐的POSIX POSIX(Portable Operating System Interface)SUN操作系统之下的线程包LWPLWP(Light Weight Process)q如何调度线程:用户级(用户空间)线程系统级(内核空间)线程)q如何处理阻塞性的系统调用:强占式(preemptive)调度非强占式调度9第四章 并发计算用户线程和系统线程混合型策略 用户级线程用户级线程用户级线程用户级线程 LWP LWP LWP LWP重量级进程重量级进程重量级进程重量级进程操作系统内核级线程操作系统内核级线程10第四章 并发计
6、算不同系统下的线程例子/*POSIX*/main()pthread_create(f,arg);void*f(void*arg)pthread_exit(status);/*Win32 */main()CreateThread(f,arg);_beginthread(f,arg);_xbeginthread(f,arg);DWORM f(DWORD arg)ExitThread(status);_endthread(status);_xendthread(status);/*Java*/main()MyThread t;t=new MyThread();t.start();class MyTh
7、read extends Thread public void run()return;11第四章 并发计算POSIX线程/*POSIX thread:thread_creation.c*/*compile:gcc o thread_creation thread_creation.c lpthread*/#include#include#include void*mythread(void);/*thread prototype*/*ME-lock initialization*/pthread_mutex_t mylock=PTHREAD_MUTEX_IITIALIZER;int x=0;
8、/*shared variable*/int main()pthread_t tids10;/*identifier array*/int i;for(i=0;i 10;i+)/*create 10 threads */pthread_create(&tidsi,NULL,mythread,NULL);for(i=0;i 10;i+)/*waiting for thread termination*/pthread_join(tidsi,NULL);printf(“Thread id%ld returnedn”,tidsi);exit(0);/*thread function*/void*my
9、thread(void)/*add 1 to shared variable*/while(x 4000)pthread_mutex_lock(&mylock);/*lock*/x+;/*critical region */printf(“Thread id%ld:x is now%dn”,pthread_self(),x);pthread_mutex_unlock(&mylock);/*unlock */pthread_exit(NULL);/*thread terminates*/*Each thread increases x by 1 in each loop,until x is g
10、reater than or equal to 4000.If we do not use lock/unlock,what happen?*/12第四章 并发计算并发计算中的同步与互斥并发计算中的同步与互斥我们把访问共享变量我们把访问共享变量x x的那组指令称为临界区的那组指令称为临界区(Critical Region)Critical Region)临界区是必须临界区是必须“原子化原子化”的的(不允许中断的不允许中断的)一组程序代码一组程序代码 线程线程 T T 线程线程 S S 可能出现的指令执行序列:可能出现的指令执行序列:(1)t1,t2,t3,s1,s2,s3(1)t1,t2,t3
11、,s1,s2,s3(2)t1,t2,s1,t3,s2,s3(2)t1,t2,s1,t3,s2,s3(3)t1,t2,s1,s2,t3.s3(3)t1,t2,s1,s2,t3.s3(4)t1,t2,s1,s2,s3,t3(4)t1,t2,s1,s2,s3,t3(5)t1,s1,t2,t3,s2,s3(5)t1,s1,t2,t3,s2,s3(6)t1,s1,t2,s2,t3,s3(6)t1,s1,t2,s2,t3,s3(7)t1,s1,t2,s2,s3,t3(7)t1,s1,t2,s2,s3,t3(8)t1,s1,s2,t2,t3,s3(8)t1,s1,s2,t2,t3,s3(9)t1,s1,s2
12、,t2,t3,s3(9)t1,s1,s2,t2,t3,s3 T:x+;t1:LODt1:LODR1,xR1,xt2:ADDt2:ADDR1,1R1,1 t3:STOR1,xS:x+;s1:LOD R1,xs2:ADDR1,1s3:STOR1,x13第四章 并发计算互斥算法与互斥机制互斥算法与互斥机制 三点要求:n必须保证不准多于一个的并发实体同时进入临界区n必须防止来自临界区之外的并发实体的干扰n必须防止饿死现象(即某些并发实体无穷无尽地等待着进入临界区)一些著名的互斥机制,如信号灯和P/V操作、管程、条件变量等等14第四章 并发计算共享内存互斥机制共享内存互斥机制 信号灯-一个信号灯s是一个
13、非负整型变量,初始值为1。-仅能通过下述两个原语之一对信号灯进行操作:nP(s):while(s=0)wait;s:=s-1nV(s):s:=s+1-信号灯是一种低级互斥机制15第四章 并发计算Push(x):RepeatIftop0theny:=stacktop;top-;end栈d1d2 d3 d4dn.topk单元例子例子并发进程共享一个栈.P(s)V(s)Semaphores;使用P/V操作的例子16第四章 并发计算生产者与消费者问题(1):一种简单算法/*POSIX:producer_consumer.c*/#include void*producer_function(void);
14、/*prototype*/void*consumer_function(void);/*Initialize a ME lock*/pthread_mutex_t mylock=PTHREAD_MUTEX_IITIALIZER;/*shared variables among threads*/int flag=0;char buffer;struct timespec dealy;main()pthread_t consumer;delay.tv_sec=2;/*set 2 sec delay*/delay.tv_nsec=0;/*create consumer */pthread_crea
15、te(&consumer,NULL,consumer_function,NULL);producer_function();/*main becomes producer*/void*producer_function(void)while(1)pthread_mutex_lock(&mylock);if(flag=0)buffer=produce();/*produce an item*/flag=1;pthread_mutex_unlock(&mylock);pthread_delay_np(&delay);/*sleep 2 sec*/void*consumer_function(voi
16、d)while(1)pthread_mutex_lock(&mylock);if(flag=1)consume(buffer);/*consume an item*/flag=0;pthread_mutex_unlock(&mylock);pthread_delay_np(&delay);/*sleep 2 sec*/17第四章 并发计算生产者与消费者问题(2):一种改进的算法/*POSIX:producer_consumer1.c*/#include/*thread prototypes*/void*producer_function(void);void*consumer_function
17、(void);/*initialize a lock and two conditional variables*/pthread_mutex_t mylock=PTHREAD_MUTEX_IITIALIZER;pthread_cond_t w_consumer=PTHREAD_COND_IITIALIZER;pthread_cond_t w_producer=PTHREAD_COND_IITIALIZER;/*threads shared variables*/int flag=0;char buffer;struct timespec dealy;main()pthread_t consu
18、mer;delay.tv_sec=2;/*set 2 sec time delay*/delay.tv_nsec=0;/*create consumer thread*/pthread_create(&consumer,NULL,consumer_function,NULL);producer_function();/*main becomes producer thread */void*producer_function(void)char x;while(1)x=produce();pthread_mutex_lock(&mylock);while(flag=1)/*wait for c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 分布式系统 【精品】分布式系统第四章 并发计算可编辑 分布式 系统 第四 并发 计算 编辑
限制150内