• 内核的架构 --- 宏内核与微内核


    宏内核

    宏内核就是把进程管理代码、 内存管理代码、 设备管理代码、 文件管理代码、 各种设备驱动程序代码以及其
    他功能模块的代码经过编译, 最后链接在一起, 形成一个大的可执行程序。 这个大程序里有实现支持这些功能的所有代码, 向用户应用软件提供一些接口, 这些接口就是常说的系统API函数。 这个大程序运行在处理器的特权模式下, 这个模式通常被称为内核模式。

    宏内核的结构图像:
    在这里插入图片描述
    宏内核如何调用系统API做内存分配功能:
    1) 应用程序调用内存分配的API函数。
    2) 处理器切换到特权模式, 开始运行内核代码。
    3) 内核里的内存管理代码按照特定的算法, 分配一块内存。4) 把分配的内存块的首地址返回给内存分配的API函数。
    5) 内存分配的API函数返回, 处理器开始运行用户模式下的应用程序, 应用程序就得到了一块内存的首地址并可以使用这块内存了。

    优点:

    1. 代码耦合度非常高,内核内部的功能组件代码可以相互调用。
    2. 如果对宏内核进行精密的实现和测试,宏内核将是非常稳定高效地。

    缺点:

    1. 代码耦合度高导致如果有一行代码出问题,那么整个内核将崩溃
    2. 如果要给宏内核添加一个功能,不得不将整个内核代码都全部编译,链接,再重启计算机启用新版本内核

    微内核

    微内核需要保证内核功能尽可能的少:仅仅只有进程调度,处理中断,内存空间映射,进程间通信等功能。 这种内核无法实际性地提供什么服务,开发者需要将实际的进程管理,内存管理,设备管理,文件管理等服务功能设计为一个个服务进程,与用户应用进程一样,只是他们很特殊,是为了专门完成传统宏内核提供的功能的。

    微内核接收应用程序的请求,这个请求的传递机制叫做消息。
    应用程序要传递相关服务,就得向微内核发送一条与此服务对应的消息,这条消息会被转发给相应的服务进程,由它来完成具体的服务。

    在这里插入图片描述
    1) 应用程序发送内存分配的消息, 这个发送消息的函数是微内核提供的, 相当于系统API。 微内核的API相当少, 极端情况下仅需要两个, 一个接受消息的API和一个发送消息的API。
    2) 处理器切换到特权模式, 开始运行内核代码。
    3) 微内核代码让当前进程停止运行并根据消息包中的数据, 确定发送给谁, 分配内存的消息当然是发送给内存管理服务进程。
    4) 内存管理服务进程收到消息, 分配一块内存。
    5) 内存管理服务进程, 也通过消息的形式返回分配内存块的地址给内核。 继续等待下一条消息。
    6) 微内核把包含内存块地址的消息返回给发送内存分配消息的应用程序。
    7) 处理器开始运行用户模式下的应用程序, 应用程序就得到了一块内存的首地址并可以使用这块内存了。

    优势:

    1. 具有相当好的伸缩性,扩展性。可以随时拿掉一个服务进程以减少或增加系统功能
    2. 有利于清晰地协作开发
    3. 良好的移植性,内核代码很少,重写可行

    缺点:

    1. 消息传递和各个服务进程的切换带来的开销很大,系统性能折扣
  • 相关阅读:
    [Machine Learning][Part 8]神经网络的学习训练过程
    manjaro gnome 记录 3 配置国内镜像源
    空天地海协同应用综述
    深度强化学习极简入门(十一)——策略梯度方法REINFORCE【附代码】
    全面废除“竞业协议”计划告吹!美国联邦法院裁定 FTC 越权,禁令无效
    马斯洛人类需求五层次理论(Maslow‘s Hierarchy of Needs)
    RabbitMQ--基础--06--界面说明
    技术心得--如何成为优秀的架构师
    react-starter脚手架搭建过程
    go语言面试
  • 原文地址:https://blog.csdn.net/weixin_43604927/article/details/128019711