- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统chap6进程间通信
Linux 进程间通信(IPC)发展由来: linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力ATT的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。 前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内。 后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。 Linux则把两者继承了下来: ? 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,在TCP/IP协议栈的IP碎片处理中,就使用了引用计数原子。类型定义如下: 原子操作详见atomic.h文件的API函数,见P123。 Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。主要用在linux内核中的同步和互斥。 几个概念 Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个。一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行。 Semaphore是一件可以容纳N人的房间,如果人不满就可以进去,如果人满了,就要等待有人出来。对于N=1的情况,称为binary semaphore。一般的用法是,用于限制对于某一资源的同时访问。 Spin lock自旋锁 , 在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。另外自旋锁不允许任务睡眠 ,否则会产生自死锁。 无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。 system v使用时需要包括几个头文件: #include sys/types.h #include sys/ipc.h #include sys/sem.h posix使用时需要包括几个头文件: #include?sys/types.h?? #include?sys/ipc.h?? #include?semaphore.h?? 三、信号量 struct sem {??????????short???????sempid;/* pid of last operaton */??????????ushort?????semval;/* current value */??????????ushort?????semncnt;/* num procs awaiting increase in semval */??????????ushort?????semzcnt;/* num procs awaiting semval = 0 */????} 三、信号量 1.创建和打开信号量 int semget(key_t key, int nsems, int oflag) (1) nsems0 : 创建一个信号量集,指定集合中信号量的数量,一旦创建就不能更改。 (2) nsems==0 : 访问一个已存在的集合 (3) 返回的是一个称为信号量标识符的整数,semop和semctl函数将使用它。 (4)该集合中的每个信号量不初始化,这些结构是在semctl,用参数SET_VAL,SETALL初始化的。 semget函数执行成功后,就产生了一个由内核维持的类型为semid_ds结构体的信号量集,返回semid就是指向该信号量集的引索。 三、信号量 2.设置信号量的值(PV操作) int semop(int semid, struct sembuf *opsptr, size_t nops); (1) semid: 是semget返回的semid (2)opsptr: 指向信号量操作结构数组 (3) nops : opsptr所指向的数组中的sembuf结构体的个数 struct sembuf { short sem_num; // 要操作的信号量在信号量集里的编号, short sem_op; // 信号量操作 short sem_flg; // 操作表示符 }; (4) 若sem_op 是正数,其值就加到semval上,即释放信号量控制的资源 若sem_op 是0,那么调用者希望等到semval变为0,如果semval是0就返回; 若s
您可能关注的文档
最近下载
- 2024年秋学期部编版初中语文八年级上册教学计划及其教学进度表.docx VIP
- 统编教材语文五年级上册第四单元单元整体解读.pptx VIP
- GSK990MA数控系统编程及操作手册.pdf VIP
- 2025鄂尔多斯市城市建设投资集团招聘92人笔试模拟试题及答案解析.docx VIP
- 2024年人教版小学四年级上册音乐教案全册.docx VIP
- 人工智能对人类发展利大于弊VS弊大于利辩论赛 正方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
- 西安电子科技大学电子信息与通信工程类专业培养方案(本科层次).pdf VIP
- 人类发展核电利大于弊VS弊大于利辩论赛 反方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
- (2024秋新版)人教PEP版三年级英语上册全册教案.doc
- ISO15189质量手册--输血科通用模版(文档-100页).docx VIP
文档评论(0)