- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux操作系统第6章 进程间通信 第1章 嵌入式Linux操作系统简介 第2章 Linux操作系统使用与系统配置 第3章 嵌入式Linux编程环境 第4章 存储管理 第5章 操作系统进程 第6章 进程间通信 第7章 中断与系统调用 第8章 文件管理 第9章 设备管理 第10章 嵌入式Linux的构建 课程安排: * 第6章 进程间通信 6.1 什么是进程间通信 6.2 互斥与同步 6.3 信号量 6.4 共享内存 6.5 消息队列 6.6 管道 思考题 本章课程: * 6.1 什么是进程间通信 进程间通信(IPC)就是为了解决这些问题而提出的特有机制,它们为多任务系统提供了不同进程的通信机制,同时也提供了对于临界资源和共享资源的保护。 进程间通信的主要目的是实现同一计算机系统内部的相互协作的进程之间的数据共享与信息交换,由于这些进程处于同一软件和硬件环境下,利用操作系统提供的编程接口,用户可以方便地在程序中实现这种通信;应用程序间通信的主要目的是实现不同计算机系统中的相互协作的应用程序之间的数据共享与信息交换,由于应用程序分别运行在不同计算机系统中,它们之间要通过网络之间的协议才能实现数据共享与信息交换。 * 6.1 什么是进程间通信 程序和进程 最初Unix IPC包括:管道、FIFO、信号; System V IPC包括:System V消息队列、 System V信号灯、System V共享内存区; Posix IPC包括: Posix消息队列、Posix信号灯、Posix共享内存区。 进程间通信,主要有两种方式:虚拟内存系统中的进程间通信和Falt 内存系统中的进程间通信。 UCOS是比较典型的Falt 内存系统,它不支持虚拟内存机制,也没有用户空间和内核空间的区别,实际上它就类似Linux的内核空间,不同任务间可以相互访问,没有不同进程间内存保护机制。所以可以完全利用Linux系统中的同一进程中不同线程的通信机制。由于所有的任务与中断都共享同一地址空间,所以同步机制也与任务间通信在同一空间中实现,是这两种机制的相互替换成为可能。 Windows作为一种复杂的多任务系统,也提供了多种进程间通信方式,包括:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪贴板、动态数据交换(DDE)、对象连接与嵌入(OLE)、动态连接库(DLL)、远程过程调用(RPC)、NetBios函数、Sockets、WM_COPYDATA消息。 * 6.2 互斥与同步 互斥与同步是进程间通信中非常重要的一对概念,也是相交进程之间的两种主要关系。在嵌入式操作系统开发中经常会遇到同步、互斥的问题,如果处理得不好,程序就会出现很多意想不到的结果。而在多处理器之间、ISR与ISR之间、ISR与任务之间、任务与任务之间都可能需要互斥与同步。例如不同任务优先级的抢占,中断处理等。 互斥和同步是两个紧密相关而又容易混淆的概念。所谓互斥,是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。两个互斥的进程,只能等到前一个进程运行完后,下一个进程才能运行。所谓同步,是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。 同步是一种更为复杂的互斥,而互斥是一种特殊的同步。 原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。 * 6.2 互斥与同步 原子类型定义如下: typedef struct { volatile int counter; } atomic_t; 有关原子操作: #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) #define atomic_add(i, v) (void) atomic_add_return(i, v) #define atomic_inc(v) (void) atomic_add_return(1, v) #define atomic_sub(i, v) (void) atomic_sub_return(i, v) #define atomic_dec(v) (void) atomic_sub_return(1, v) #define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0) #define
您可能关注的文档
最近下载
- 2024-2025学年高中思想政治必修1 中国特色社会主义统编版(部编版)教学设计合集.docx
- 员工培训---病理.ppt
- 2025年上海市数学高考一轮复习精讲精练 第10讲空间向量与立体几何(11类核心考点精讲精练)含详解.docx
- 养老院活动记录表(新版).doc VIP
- 二年级上学期数学基础知识《填空题》专项练习及一套完整答案.docx
- 建设工程质量资料管理.ppt VIP
- 酒店智能弱电系统工程设计模板.doc VIP
- 烟草种植气象服务规范.pdf VIP
- 2023上海高三二模优秀作文汇编.doc
- 第5 2课《学习工匠事迹,领略工匠风采》(课件)-【中职专用】高二语文同步精品课件(高教版2023·职业模块).pptx VIP
文档评论(0)