微内核和零拷贝

1.操作系统的特性

并发

并发:在宏观上,多个事件在同一个时间间隔内发生

并行:在微观上,多个事件在同一时刻发生

共享

        资源复用,系统中的资源可供内存中,多个并发执行的进程共同使用。当系统中资源数量少于多个进程对资源的需求数量时,就会形成对共享资源的争夺。目前主要实现资源共享的方式有两种:

  • 互斥共享
    某些资源只能互斥访问,如打印机,在一段时间内,只允许一个进程访问该资源。这种互斥访问的资源,称为临界资源,或独占资源。

  • 同时访问

    ​ 系统中还有一类资源,允许在一段时间内由多个进程同时访问。不过,对于这个“同时”需要注意,在单处理机环境中,其是宏观上的意义,微观上对这些资源的访问是交替进行,最典型的就是磁盘。

虚拟

        将一个物理实体变为若干个逻辑上的对应物,如物理磁盘对应内存。

  • 时分复用

​ 复用“某设备为一用户服务的空闲时间”为其它用户服务,以达到充分复用设备的目的。使得看起来好像是多个用户在同时使用多台相同设备。这种虚拟技术称为时分复用技术。

  • 空分复用

​ 将一个频率范围比较宽的信道划分为多个频率范围较窄的信道(频带),其中的任何一个频带都仅供一对用户通话。这种频分复用技术就属于空分复用技术。

        这种“虚拟化”思想,在开发中也经常用到,可以解决很多不方便解决的问题。

例如,Dubbo在采用一致性Hash算法实现负载均衡时会出现一个问题:提供者Server的增减,仅对某个提供者的负载状态有影响,对其它提供者没有任何帮助。Dubbo使用“虚拟化思想”对该算进行了优化,默认将一台物理提供者虚拟为了360个,解决了原来的问题。

异步

        进程以不可预知的速度向前推进的特性,称为异步性。如Redis可以实现分布锁,实现分布式协调功能。

2. 微内核

        微内核并非是一个完整的OS,而只是将操作系统中最基本、最核心的功能放入微内核。这些基本功能大体可以划分为支撑功能 资源管理功能两大功能。

(1) 支撑功能

        是内核提供给服务进程模块的基本功能,是服务进程实现功能的支撑,主要分为三方面:

中断管理

        中断处理是内核最基本的功能,没有中断处理就没有OS的并发。当然,为了减少CPU中断的时间,提高程序执行的并发性,内核也只是对中断进行“短暂处理”,继而转入相关其它进程去完成后续工作。

时钟管理

        时钟管理是内核的一项基本功能,例如,时间片轮转调度中,每当时间片用完,时钟管理就会产生一个中断信号,使调度程序重新进行调度。

原语操作

        原语操作,由一组指令构成,用于完成某一特定功能。这组操作中的指令具有的一个特征是,要么全做,要么全不做,即原子性。它们的执行过程是不允许被中断的。原语操作在系统态下执行,常驻内存。

(2)资源管理功能

进程管理

        OS内核可以实现对进程的基础化管理,这些基础化管理功能要么使用频率很高,要么属于可以为其它服务进程提供基础化功能。将这些功能放入到内核中,可以大大提高OS的性能。

存储器管理

        OS中存储器管理相关进程的运行频率非常得高,将它们放入到内核中,可以大大提升存储器的运行效率,提高读写速度。

设备管理

        由于设备管理与计算机硬件紧密相关,所以大部分功能都是常驻内核的。

3.零拷贝

什么是零拷贝

        零拷贝指的是,从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底层是通过DMA总线技术实现的。零拷贝与具体的编程语言无关,完全依赖于OS,OS支持就可使用,不支持设置了也不起作用。
        DMA(DirectMemoryAccess,直接内存访问)是一种计算机系统内部的数据传输技术,需要DMA总线(硬件的体系结构)的硬件支持。其整个数据传输过程是DMA控制器下完成的。

        零拷贝在计算机内部数据拷贝及网络传输中都大量使用,用于减少CPU消耗和内存带宽占用,减少用户空间与内核空间的拷贝过程,减少用户态与内核态间的切换次数,提高系统效率,提升系统性能。例如远程服务器处理客户端浏览器的主页打开请求过程,就是一个零拷贝在网络传输中的典型应用。下面全部以该场景为例进行分析。

传统拷贝方式

        站在服务器角度,服务器操作系统经历了以下过程:
在这里插入图片描述

        该拷贝方式共进行了16次用户空间与内核空间的上下文切换,以及4次数据拷贝,其中两次拷贝存在CPU参与。

零拷贝方式

在这里插入图片描述

        该拷贝方式共进行了14次用户空间与内核空间的上下文切换,以及3次数据拷贝,但整个拷贝过程均没有CPU的参与,这就是零拷贝。

GatherCopy零拷贝

        该拷贝方式是由DMA完成,当然,需要当前主机的DMA支持GatherCopy方式。

在这里插入图片描述

        该方式中没有数据拷贝到socketbuffer。取而代之的是只是将kernelbuffer中的数据描述信息写到了socketbuffer中。数据描述信息包含了两方面的信息:kernelbuffer中数据的地址及偏移量。

        该拷贝方式共进行了14次用户空间与内核空间的上下文切换,以及2次数据拷贝,并且整个拷贝过程均没有CPU的参与。

mmap零拷贝

        mmap,MemoryMap,存储映射。mmap零拷贝是对零拷贝的改进。当然,若当前主机的DMA支持GatherCopy,mmap同样可以实现GatherCopyDMA的零拷贝。

在这里插入图片描述

​        该方式与普通零拷贝的唯一区别是,应用程序与内核共享了Kernelbuffer。由于是共享,所以应用程序也就可以操作该buffer了。当然,应用程序对于Kernelbuffer的操作,就会引发用户空间与内核空间的相互切换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值