




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021/8/614.7 进程通信进程通信v进程通信是指进程之间可直接以较高的效率传递较多数据的信息进程通信是指进程之间可直接以较高的效率传递较多数据的信息交换方式。交换方式。vLinux进程间通信(进程间通信(Inte-Process Communication,IPC)可分)可分为控制信息的通信(为控制信息的通信(低级通信低级通信)和大批数据信息的通信()和大批数据信息的通信(高级通高级通信信)。)。v低级通信主要用于进程间的同步、互斥、终止、挂起等控制信息低级通信主要用于进程间的同步、互斥、终止、挂起等控制信息的传递,所传递的信息往往只是一个信号、一个键或组合键。高的传递,所传递的信息往
2、往只是一个信号、一个键或组合键。高级通信主要用于进程间数据块的交换和共享。级通信主要用于进程间数据块的交换和共享。v用于实现低级通信的有用于实现低级通信的有软中断信号、信号量集软中断信号、信号量集。实现高级通信的。实现高级通信的有有管道、消息队列、共享内存管道、消息队列、共享内存等。等。2021/8/624.8 线程线程 (一)问题的提出(一)问题的提出进程的引入使操作系统得以完成对并发执行的多道程序动态特征的进程的引入使操作系统得以完成对并发执行的多道程序动态特征的描述和资源共享的管理,因而进程既是调度的基本单位又是资源描述和资源共享的管理,因而进程既是调度的基本单位又是资源分配的基本单位。
3、进程所具有的这两个特点构成了程序并发执行分配的基本单位。进程所具有的这两个特点构成了程序并发执行的基础,但同时又导致进程切换过程中的基础,但同时又导致进程切换过程中由于进程映像过大而带来由于进程映像过大而带来的时空开销的时空开销。因此,如果系统中创建的进程过多,或进程切换的。因此,如果系统中创建的进程过多,或进程切换的频率过高,则会使系统效率下降,频率过高,则会使系统效率下降,限制了并发度限制了并发度的进一步提高。的进一步提高。进程切换所带来的庞大开销是因为进程与资源分配有关,操作系统进程切换所带来的庞大开销是因为进程与资源分配有关,操作系统如何降低进程切换所需要的时空开销呢?比如野战军作战略
4、转移如何降低进程切换所需要的时空开销呢?比如野战军作战略转移时,所有辎重都要随身携带,速度自然很慢。但是当部队要抢占时,所有辎重都要随身携带,速度自然很慢。但是当部队要抢占山头时所采取的办法是卸下辎重,只带轻武器以急行军方式跑步山头时所采取的办法是卸下辎重,只带轻武器以急行军方式跑步前进,速度自然就会快很多。前进,速度自然就会快很多。那么,操作系统是否也可以将调度的基本单位改成一种只用于调度那么,操作系统是否也可以将调度的基本单位改成一种只用于调度执行而不涉及资源分配的单位?这个单位就是执行而不涉及资源分配的单位?这个单位就是“线程线程”。减小进程上下文切换开销减小进程上下文切换开销 及更好地
5、支持SMP(对称多处理)2021/8/63(二)线程及其特征(二)线程及其特征 u线程是调度执行的基本单位线程是调度执行的基本单位;线程不是资源分配的基本单线程不是资源分配的基本单位位;u线程从属于某个进程,是该进程的某个执行路线。因此,线程从属于某个进程,是该进程的某个执行路线。因此,也将进程称为重型进程,线程称为轻型进程。也将进程称为重型进程,线程称为轻型进程。u线程是进程中的一个相对独立的可执行单元。线程是进程中的一个相对独立的可执行单元。u一个进程中至少包含一个线程。一个进程中至少包含一个线程。u由于同一进程内的线程之间涉及资源共享,所以需要同由于同一进程内的线程之间涉及资源共享,所以
6、需要同步机制来实现进程内多线程之间的通信。步机制来实现进程内多线程之间的通信。u与进程类似,线程还可以创建其它线程,线程也有生命与进程类似,线程还可以创建其它线程,线程也有生命周期,也有状态的变化。周期,也有状态的变化。2021/8/64(三)线程与进程的主要区别与联系(三)线程与进程的主要区别与联系 调度与资源分配调度与资源分配在引入线程的操作系统中,线程是调度和指派的基本单位,而进程是在引入线程的操作系统中,线程是调度和指派的基本单位,而进程是资源的拥有单位。在同一进程中,线程的切换不会引起进程的切换;而在资源的拥有单位。在同一进程中,线程的切换不会引起进程的切换;而在不同的进程中进行线程
7、的切换,比如从一个进程中的线程切换到另一个进不同的进程中进行线程的切换,比如从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。程中的线程时,将会引起进程的切换。线程不拥有资源,但可以访问它所在的进程的资源,从而获得系统资源。线程不拥有资源,但可以访问它所在的进程的资源,从而获得系统资源。并发性并发性引入线程的操作系统具有更好的并发性。引入线程的操作系统具有更好的并发性。系统开销系统开销进程切换时有很大的时空开销,而线程切换时只需要保存和设置少量进程切换时有很大的时空开销,而线程切换时只需要保存和设置少量的寄存器内容,时空开销很小。另外,由于同一进程内的多个线程共享进的寄存器内容
8、,时空开销很小。另外,由于同一进程内的多个线程共享进程的同一地址空间,因此,多个线程之间的同步与通信也非常容易实现,程的同一地址空间,因此,多个线程之间的同步与通信也非常容易实现,甚至不需要操作系统内核的干预。甚至不需要操作系统内核的干预。在一个进程内使用在一个进程内使用多线程的多线程的优点优点主要在于创建线程的工作量要比创建进程的工主要在于创建线程的工作量要比创建进程的工作量小不涉及资源分配,不同线程之间的切换比进程之间的切换要快。作量小不涉及资源分配,不同线程之间的切换比进程之间的切换要快。 2021/8/65(四)(四) 线程的状态与线程控制块线程的状态与线程控制块 与进程类似,线程也是
9、一个动态的概念,也有一个从创建与进程类似,线程也是一个动态的概念,也有一个从创建到消亡的过程,它也具有以下几个基本状态:到消亡的过程,它也具有以下几个基本状态:新建态新建态就绪态就绪态:具备执行条件,等待调度。:具备执行条件,等待调度。运行态运行态:正占有:正占有CPU 处于运行中。处于运行中。阻塞态阻塞态:等待某个事件发生。:等待某个事件发生。结束态结束态:线程结束执行,释放其寄存器上下文和堆栈的:线程结束执行,释放其寄存器上下文和堆栈的内容。内容。线程使用线程控制块线程使用线程控制块TCB(Thread Cotrol Block)来描)来描述。线程由与其相关的堆栈、寄存器和线程控制块述。线
10、程由与其相关的堆栈、寄存器和线程控制块TCB组成。寄存器可以用来存储线程内的局部变量,但是不组成。寄存器可以用来存储线程内的局部变量,但是不能存储其它线程的局部变量。能存储其它线程的局部变量。线程的线程的控制原语控制原语包括包括线程创建、线程终止、线程阻塞线程创建、线程终止、线程阻塞等等。等等。 2021/8/66(五)线程的分类(五)线程的分类 1用户级线程用户级线程用户级线程用户级线程ULT(User-Level Thread)由用户程序创建,并由用户程序对)由用户程序创建,并由用户程序对其进行调度和管理。操作系统内核并不知道有用户级线程的存在,因而其进行调度和管理。操作系统内核并不知道有
11、用户级线程的存在,因而用户级线程与内核无关。我们也称之为用户级线程与内核无关。我们也称之为“纯纯ULT方法方法”。MS-DOS、Unix属于这种方法。属于这种方法。其其优点优点在于:在于:应用程序中的线程转换开销比内核级的开销要小得多。应用程序中的线程转换开销比内核级的开销要小得多。(开销小)(开销小)线程的调度算法与操作系统的调度算法无关。线程的调度算法与操作系统的调度算法无关。(算法灵活)(算法灵活)用户级线程方法可以适用于任何操作系统,因为它与内核无关。用户级线程方法可以适用于任何操作系统,因为它与内核无关。(高适(高适应性)应性)其其缺点缺点在于在于:当进程中某线程执行一个系统调用而被
12、阻塞时,会导致本进程的其它线当进程中某线程执行一个系统调用而被阻塞时,会导致本进程的其它线程也程也阻塞阻塞。在纯在纯ULT方式下,多线程方式下,多线程不便利用多处理器不便利用多处理器,因为每次只有一个进程的,因为每次只有一个进程的一个线程在一个一个线程在一个CPU上运行。上运行。2021/8/672内核级线程内核级线程内核级线程内核级线程KLT(Kernel-Level Thread)中,所有线程的创建、调度、管理中,所有线程的创建、调度、管理都由操作系统内核负责。一个用户进程可以按多线程方式编写程序,当都由操作系统内核负责。一个用户进程可以按多线程方式编写程序,当它被提交给多线程操作系统运行
13、时,内核为它创建一个进程和一个线程,它被提交给多线程操作系统运行时,内核为它创建一个进程和一个线程,线程在运行中还可以创建新的线程。我们称之为线程在运行中还可以创建新的线程。我们称之为“纯纯KLT方法方法”。Windows NT属于此类。属于此类。其其优点优点在于在于:内核可以调度一个进程中的多个线程,使其同时在多个处理器上并发运内核可以调度一个进程中的多个线程,使其同时在多个处理器上并发运行,从而提高运行的速度和效率。行,从而提高运行的速度和效率。当进程中的一个线程被阻塞时,该进程中的其它线程仍可运行。当进程中的一个线程被阻塞时,该进程中的其它线程仍可运行。内核本身也可以用线程的方式实现。内
14、核本身也可以用线程的方式实现。其其缺点缺点在于在于:同一进程中的线程切换要有两次态的转换(用户态同一进程中的线程切换要有两次态的转换(用户态内核态内核态用户态),用户态),因为线程的调度运行在内核态,而应用程序运行在用户态。因为线程的调度运行在内核态,而应用程序运行在用户态。2021/8/68(六)线程举例(六)线程举例 1Linux线程系统调用线程系统调用创建线程创建线程格式:格式:int pthread_create(pthread_t*thread, pthread_attr_t*attr, void* (*start_routine)(void *), void*arg) 参数说明:参
15、数说明:threadthread返回创建的线程标识符返回创建的线程标识符IDID,是个指向线程标识符的指针;,是个指向线程标识符的指针;attrattr设置线程的属性,如果使用设置线程的属性,如果使用NULLNULL则表示为系统默认属性;则表示为系统默认属性;start_routine线程执行函数的地址,该函数必须具有线程执行函数的地址,该函数必须具有void*返回值;返回值;argarg线程执行函数的参数,如果不带参数则可以使用线程执行函数的参数,如果不带参数则可以使用NULL 。返回值:成功返回返回值:成功返回0 0出错则返回错误码出错则返回错误码注:该系统调用调用注:该系统调用调用clo
16、ne函数来创建线程函数来创建线程。 由于线程没有自己的存储空间,所以,它所执行的函数需要在创建由于线程没有自己的存储空间,所以,它所执行的函数需要在创建它的进程中加以定义。它的进程中加以定义。 2021/8/691Linux线程系统调用线程系统调用线程终止线程终止格式:格式:int pthread_exit(void*retval)参数说明:参数说明:retval传递给创建它的父线程的终止信息。传递给创建它的父线程的终止信息。功能:终止一个线程。功能:终止一个线程。返回值:成功返回返回值:成功返回0 0出错则返回错误码出错则返回错误码2021/8/6101Linux线程系统调用线程系统调用等待
17、线程终止等待线程终止格式:格式:int pthread_join (pthread_t th, void *thread_return)参数说明:参数说明:th被等待的线程标识符,被等待的线程标识符,*thread_return用户定义的指针,它可以用来存储被等待线程的终止信用户定义的指针,它可以用来存储被等待线程的终止信息。类似于息。类似于wait( int*stat_addr, 0 )中的中的*stat_addr。如果不需要取终。如果不需要取终止信息则可使用止信息则可使用NULL。功能:回收终止的线程,类似于回收进程功能:回收终止的线程,类似于回收进程waitpid()。调用它的函数将一直
18、。调用它的函数将一直等待到被等待的线程结束为止。当函数返回时,被等待线程的资源被收等待到被等待的线程结束为止。当函数返回时,被等待线程的资源被收回。回。返回值:成功返回返回值:成功返回0 0 出错则返回错误码出错则返回错误码所用头文件:所用头文件:#include #include 2021/8/6112Linux线程举例线程举例 例例 在主函数中创建一个线程,其功能是循环输出在主函数中创建一个线程,其功能是循环输出3 3次次“This is the second This is the second pthread.pthread.”;主线程也循环输出;主线程也循环输出3 3次次“This
19、is the main pthread.This is the main pthread.”,观察,观察并分析它们的执行过程。并分析它们的执行过程。源程序清单,文件名:源程序清单,文件名:pthread.c#include #include /线程所用头函数线程所用头函数 /*定义线程的执行函数定义线程的执行函数*/void thread(void)/必须使用必须使用void作为返回类型作为返回类型 int i; for(i=0;i3;i+) printf(“This is the second pthread.n”); /显示自己是子线程显示自己是子线程 sleep(1); 2021/8/6
20、12main() /*定义线程内部标识定义线程内部标识 */ pthread_t threadid; int i,ret; /*创建一个子线程并指定执行函数,创建一个子线程并指定执行函数,函数不带参数函数不带参数*/ret=pthread_create(&threadid,NULL,(void*)thread,NULL); if(ret!=0) printf (Create pthread error!n); exit (1);/*主线程循环输出主线程循环输出3次次*/ for(i=0;i3;i+) printf(This is the main pthread.n);sleep(1)
21、; pthread_join(threadid,NULL); /等待子线程结束等待子线程结束 exit(0); 2021/8/613带有线程的源程序在进行编译时需要使用参数带有线程的源程序在进行编译时需要使用参数 -lpthread:gcc -lpthread o 目标文件名目标文件名 源文件名源文件名编译和运行该程序后的结果为:编译和运行该程序后的结果为:由上述输出结果可以看出,当线程作为调度的基本单位时,创建的子由上述输出结果可以看出,当线程作为调度的基本单位时,创建的子线程连同主线程共形成两个线程被操作系统调度,因而产生以上线程连同主线程共形成两个线程被操作系统调度,因而产生以上类似于进
22、程随机调度的运行结果。类似于进程随机调度的运行结果。2021/8/6143多线程举例多线程举例 例例定义一个多线程标识符数组,然后创建多个线程,每个线程执行定义一个多线程标识符数组,然后创建多个线程,每个线程执行的程序都是显示该线程标识符及其下标值。主线程则等待每个线的程序都是显示该线程标识符及其下标值。主线程则等待每个线程终止,显示结束提示符后结束运行。设创建程终止,显示结束提示符后结束运行。设创建5个子线程。个子线程。 程序清单:文件名multhread.c#include#include#define MAXTHREAD 5 /定义多线程标识符数组元素个数定义多线程标识符数组元素个数vo
23、id*threaf_fuction(void*arg) /定义线程执行函数定义线程执行函数printf(arg);printf(n);2021/8/615/*主线程主线程*/main()int tid;pthread_t threadsMAXTHREAD;/定义多线程标识符数组定义多线程标识符数组/*定义线程执行函数的参数定义线程执行函数的参数*/char message10=thread1,thread2,thread3,thread4,thread5; /*循环创建循环创建5个子线程个子线程*/ int i;for(i=0;i5;i+)/*创建子线程并指定执行函数及参数创建子线程并指定执行
24、函数及参数*/ tid=pthread_create(&threadsi,NULL,threaf_fuction,messagei);if(tid!=0)perror(Thread creation failed);exit(1);2021/8/616/*主线程主线程*/for(i=0;i5;i+) pthread_join(threadsi,NULL); /等待等待5个子线程终止个子线程终止printf(All thread finished.n); /输出结束提示输出结束提示exit(0); 2021/8/617(七)(七) LinuxLinux多线程同步下的信号量多线程同步下的信
25、号量vMutex:变量定义: pthread_mutex_t mut;初始化: pthread_mutex_init(&mut,NULL);进入加锁: pthread_mutex_lock(&mut);退出解锁: pthread_mutex_unlock(&mut);2021/8/618void thread1() pthread_mutex_lock(&count_lock);printf(the thread1 enter the cirtical section.n);sleep(2);printf(the thread1 exit the cirtical section
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版绿色建筑设计与施工招投标合同管理规范
- 二零二五年度建筑工程合同违约索赔与索赔期限合同
- 二零二五年度高品质住宅租赁标准合同
- 2025年房屋租赁市场调节基金贷款合同
- 2025版个体户健身器材租赁服务合同范本
- 2025版政府与社会资本合作(PPP)项目合同示范文本
- 粒细胞缺乏健康宣教
- 新兴技术对培训的影响分析考核试卷
- 仓库安全演练评估报告考核试卷
- 创新人才流动与创新能力的关系考核试卷
- 张朋《了凡四训》课件
- 企业人力资源管理中的成本控制与法律风险防控
- 江苏国强产品质量证明书-
- 2023年英语高考试卷(全国卷1)试题及答案
- 上海交通大学学生生存手册
- 遇见成长衔接梦想幼小衔接家长会PPT模板(含完整内容)
- 2023年六盘水市六枝特区小升初英语考试题库及答案解析
- JJG 1154-2018卡尔·费休容量法水分测定仪
- GB/T 4586-1994半导体器件分立器件第8部分:场效应晶体管
- GB/T 35198-2017土方机械轮胎式装载机试验方法
- GB/T 17247.2-1998声学户外声传播的衰减第2部分:一般计算方法
评论
0/150
提交评论