分类: LINUX
2009-02-06 10:41:57
在单任务系统中,任务是线性执行,任务不可能被抢占,所以不需要同步来保护共享资源与临界资源,同时单任务也不存在数据交换的问题,但对于多任务操作系统,会出现与但任务系统不同的问题,进程间通信与同步就是为了解决这些问题而提出的特有机制,它们为多任务系统提供了不同进程的通信机制,同时也提供了对于临界资源和共享资源的保护。
进程间通信与同步是多任务系统中的不同表现形式,,对于一些嵌入式操作系统,进程间通信与同步处于同一地址空间,这样使一些进程间通信机制同时可以用作同步机制,比如在UCOS中的一些进程间通信与同步机制。对于另外一些嵌入式操作系统中,进程间通信与同步处于不同的地址空间,它们是截然不同的两种机制,相互间没有什么联系(不包括同一进程中的不同线程同步),最典型的就是嵌入式Linux中的进程间通信与同步机制。
二、进程间通信与同步区别与联系
在不同的嵌入式系统中,进程间通信与同步的实现方式有所不同,但是基本原理都差不多。对于进程间通信与同步,主要有2种方式:虚拟内存系统中的进程间通信与同步和Falt 内存系统中的进程间通信与同步。
Linux系统中的进程间通信是典型的虚拟内存系统中的进程间通信:Linux的进程间通信是不同进程间交换数据的机制。由于Linux系统支持虚拟内存,对于每一个进程,系统会为它分配一个单独的进程空间,不同的进程有不同的进程空间,相互之间没有什么关系,在这种系统中,不能用全局变量等一般的手段来实现不同进程间的数据交换,所以必须提供特有的数据交换机制:进程间通信。
同时此类系统中,由于内核空间是由不同的进程共享,所以在内核的数据可以由不同的进程共享,不同的进程也可能同时需要访问临界资源,同时要考虑内核中的中断,这种情况下,进程间的数据交换已经不是问题,现在的问题是如何保护临界资源和共享资源不被同时访问造成资源的紊乱,这就是Linux的同步机制。
UCOS是比较典型的Falt 内存系统,它不支持虚拟内存机制,也没有用户空间和内核空间的区别,实际上它就象是Linux的内核空间,不同任务间可以相互访问,没有不同进程间内存保护机制。所以可以完全利用Linux系统中的同一进程中不同线程的通信机制。由于所有的任务与中断都共享同一地址空间,所以同步机制也与任务间通信在同一空间中实现,是这2种机制的相互替换成为可能。