改进Minix 3进程间通信
1、引言
本文引用地址://m.amcfsurvey.com/article/157963.htm早期的操作系统都是基于宏内核的思想实现的[5],例如UNIX、Linux、Solaris等。设计者将进程管理、文件系统、设备驱动程序、存储管理等功能全部放在内核中完成。随着技术的发展,操作系统性能不断的提升的同时,也带来了大量的错误[1]。把所有这些功能都放在具有最高特权级的内核中使得内核变得异常庞大,可靠性、安全性下降,可扩展性也变的十分困难[3]。因此,微内核的思想被提出。
微内核只提供基本的操作系统功能服务,采用了机制与策略分离的设计思想,相关的驱动与一些服务被移出内核,策略则由用户层来实现,使得系统中各进程相对独立,互不干扰[4],提高了系统的安全性,可靠性。但是,这种思想的实现对性能方面却产生了一些影响。在微内核中,困扰性能的两大因素主要是进程间通信以及任务切换。
相比较宏内核而言,微内核将大部分实现操作系统功能的服务移出了内核,内核仅仅实现不可避免的机制。这使得内核成了服务的中转站,因此加大了信息处理的开销,客户进程与服务进程间的通信多了道门槛,地址空间的切换也急剧增加。
随着技术的发展,微内核技术已发展到第二代。Minix 3[3]就是第二代微内核的典型代表。在保持着性能的最小损失的同时,实现了高可靠性与高稳定性。
2.1 Minix 3存在的缺陷
Minix最初是由Tanenbaum教授为了教学而写的一个操作系统,发展到现在已经是第三代,它采用微内核模式,由服务器和驱动程序等进程模块和内核组成,大大提高了操作系统的可靠性[3]。
由于Minix 3采用了第二代微内核技术,用户进程及服务器进程和驱动进程都拥有自己的地址空间,它们之间相互独立且相互不可见。为了能够进行进程间通信,内核成了服务的中转站,因为只有内核才进入各进程的地址空间中。经过代码的阅读,我们认为:Minix 3的编写者为了提高效率,实现简单,仅仅使用了分段机制。这直接导致了Minix3存在以下的缺陷:
1. 分段机制并不能充分利用物理内存。将导致物理内存存在大量的浪费。
2. 微内核必须紧紧结合硬件结构,这是为了能够提升微内核的性能,而支持分段结构的CPU仅仅是Intel的IA32系列,这就大大将局限Minix3在别的CPU体系的发展。
3. 采用分段机制,并没有真正实现将各进程的地址空间相隔离。如果采用分页机制与虚拟内存,将使得每个用户进程,服务器进程与驱动进程真正的相隔离,每个进程都有自己的地址空间,更加符合微内核操作系统的设计思想。
Minix3中为了使得内核能够进入所有进程的地址空间而没有采用分页机制,仅仅使用了分段机制,这对系统的可靠性和稳定性带来了一定的隐患,并且没有分页机制的操作系统也不是一种好的设计体系,并不能有效的使用物理内存。所以必须对Minix 3进行改进,引入分页机制。
高性能和高灵活性的要求决定微内核必须尽可能缩到最小,这就将大量的服务放到了内核之外,服务进程与用户进程、内核之间将产生大量的进程间通信和任务切换,这是导致微内核性能降低的主要因素。而采用分页机制后,由于引进了页目录和页表,这必将导致内核的性能进一步下降。其次,Minix 3对分段机制下的进程间通信采取了一定的优化,但这些优化并不适用于分页机制中。因此,必须在分页机制下对进程间通信加以优化,提高操作系统的效率。
2.2 内存快速映射技术
Minix 3的进程间的通信采用了聚合的方式(rendzvous),使用固定大小的消息通信(见图1)。因此,Minix 3中的进程间通信完全通过消息完成。用户进程也用这种方式与操作系统组件进行通信。聚合原则使得消息的传递不用任何中间缓冲。
每个进程都有自己的地址空间,进程之间相互不能看见另外进程的地址空间,这就大大提高了系统的安全性和可靠性。然而,在进程间通信时,需要将A进程的消息传递给B进程时就出现了问题。在Minix 3中,由于采用的是分段机制,内核地址空间分布在物理内存中的不同的逻辑段中,通过内核,可以将A进程的消息一次直接复制到B进程中去。不需要在内核中设置消息缓冲。
在采用了分页机制后,也可以通过类似的方法复制消息,内核将进程A中的消息复制到内核共有的共享消息缓冲区中,在将消息复制给进程B。这样就实现了消息的传递。即用户进程A的地址空间→内核地址空间→用户进程B的地址空间,由于内核可以根据各进程的页目录和页表看到所有进程的地址空间,所以这种方法是可行的(见图2)。也只有通过内核,才能使消息在不同的地址空间内传递。
评论