- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《嵌入式操作系》课件04
第2章 嵌入式Linux操作系统 第四部分 嵌入式Linux操作系统 第一章 Linux基础 1.1 Linux与UNIX和GNU Linux与UNIX和GNU 1.2 Linux的特点 1.2 Linux的特点 1.3 Linux的发展 1.3 Linux的发展及应用 1.5 Linux内核 1.5.1 Linux的内核特征 1.5.1 Linux的内核特征 1.5.2 进程管理 1.5.2 进程管理 1.5.2 进程管理 1.5.3 内存管理 1.5.3 内存管理 1.5.5 设备管理 1.5.5 设备管理 1.6 典型嵌入式Linux系统 1.6.2 RTLinux 1.6.2 RTLinux 1.6.3 MontaVista Linux 1.6.3 MontaVista Linux 1.6.3 MontaVista Linux 1.6.4 RTAI 1.6.4 RTAI 首先,每个用于进程间通信的信号量都有一组信号量值,而不是如内核信号量那样的只有一个值,这样就可以同时保护若干个相互独立的互斥资源了。需要注意的是,当信号量在初始化时需要指明其拥有的信号量值的数目。 第二,进程间通信的信号量机制引入了故障保护机制:如果一个进程由于某种原因中止了,却没有及时恢复它所占用过的信号量的话,这些信号量会在故障保护机制的作用下,自动恢复到它的初始状态。这样可以防止使用同一个信号量的其他进程陷入死锁。 下面,我们来看看使用进程间通信的信号量机制的一般程序流程: 第一步,通过系统调用sys_semget()来获得信号量标识。 第二步,通过系统调用sys_semop()来对相关信号量值执行检测和减一操作。如果所有的检测成功的话,执行减一操作,退出该调用之后,申请进程被允许使用相应的互斥资源。如果检测发现,某些互斥资源正在使用中,申请进程通常会挂起等待直到这些互斥资源被释放为止。 第三步,当使用完互斥资源之后,再次通过系统调用sys_semop()来对所有相关信号量值执行加一操作。 第四步,就是通过系统调用sys_semctl()将上面用到的信号量从系统中清除,这是一个可选择操作。 4.消息队列(Message Queues) 消息队列允许一个或多个进程写消息,一个或多个进程读取消息。消息是一个有着特定类型的字符块。Linux维护了一系列消息队列的msgque向量表。其中的每一个单元都指向一个msqid_ds的数据结构,完整描述这个消息队列。当创建消息队列的时候,从系统内存中分配一个新的msqid_ds的数据结构并插入到向量表中。 每一个msqid_ds数据结构都包括一个ipc_perm的数据结构和进入这个队列的消息的指针。另外,Linux保留队列的改动时间,例如,上次队列写的时间等。msqid_ds队列也包括两个等待队列:一个用于向消息队列写,另一个用于读。 4.消息队列(Message Queues) 每一次一个进程试图向写队列写消息,它的有效用户和组的标志符就要和队列的ipc_perm数据结构的访问模式比较。如果进程可以向这个队列写,则消息会从进程的地址空间写到msg数据结构,放到消息队列的最后。每一个消息都带有进程间约定的、应用程序指定类型的标记。但是,因为Linux限制了可以写的消息的数量和长度,可能会没有空间容纳消息。这时,进程会被放到消息队列的写等待队列,然后调用调度程序选择一个新的进程运行。当一个或多个消息从这个消息队列中读出的时候等待写消息的进程会被唤醒。 从队列中读是一个与写相似的过程。进程的访问权限一样被检查。一个读进程可以选择是不管消息的类型从队列中读取第一条消息还是使用特殊类型的消息。如果没有符合条件的消息,读进程会被加到消息队列的读等待队列,然后运行调度程序。当一个新的消息写到队列的时候,这个进程会被唤醒,继续运行。 5.共享内存(Shared Memory) 进程间通信最快的方式就是共享内存机制了。共享内存,顾名思义,就是一个内存区域由多个进程共享。进程在读写该区域的时候与对其他内存区域进行读写时采用的方式没什么两样。 共享内存允许一个或多个进程通过同时出现在它们的虚拟地址空间的内存实现通信。这块虚拟内存的页面在每一个共享进程的页表中都有页表条目引用,但是不需要在所有进程的虚拟内存都有相同的地址。与所有的系统V IPC对象一样,对于共享内存区域的访问通过key控制,并进行访问权限检查。内存共享之后,就不再检查进程如何使用这块内存。它们必须依赖于其他机制,比如,利用系统V的信号量来同步对于内存的访问。 5.共享内存(Shared Memory) 每一个新创建的内存区域都用一个shmid_ds数据结构来表达。这些数据结构保存在shm_segs向
原创力文档


文档评论(0)