# xbook3 **Repository Path**: hzc1998/xbook3 ## Basic Information - **Project Name**: xbook3 - **Description**: 研究微内核IPC - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 1 - **Created**: 2020-09-12 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xbook3 #### 介绍 研究微内核IPC ### 微内核要点 * 尽量用寄存器传递消息。 * 减少进程切换带来的消耗。 * 减少消息复制带来的消耗。 * 降低进程/线程间的强隔离,减少进程切换。 * 尝试聚合消息,将多个消息合并成一个发送。 * 临时地址映射,消息接收者映射内核一块区域,发送者复制数据到该区域,接收者直接读取。可以减少复制到接收者空间的一个步骤。 * 直接进程切换。发送者发送消息后,立即唤醒接收者,减少中间不必要的其它进程的调度时间间隔。接收方继承发送方的剩余时间片以及优先级。 * 懒惰调度,减少调度时进程阻塞和就绪状态的切换导致队列操作的消耗。对于IPC频繁的微内核有优化作用。 * 引用时限机制来确保通信双方不会永远等待对方,或者使用标识机制,看对方是否在等待自己,来避免阻止服务攻击(Denial of service,DOS)。 * 写时拷贝(用户态)和引用拷贝(内核态) * 引入线程,减少不同进程之间的切换,进程的线程和进程自己公用同一个时间片数量,使得对其它进程来说会公平一些。 * 分发线程和处理线程的概念,前者用于接收服务,后者用于处理服务需求。 * 内核中拥有地址空间,映射机制,线程。 * 端口概念,端口具有的权限的安全性,特权,可以在起到一定的保护作用。 * 微内核三核心:1. 地址空间的相关机制,用来进行内存的保护。2. 管理CPU分配的一些执行相关的抽象,线程。3. 进程间通信,各个进程之间的服务通信。 * 原则:一项特性当且仅当需要它在特权模式下实现时才应该在微内核中。 * 机制与策略分离 * 用户可以选择自己的调度器,调度方式。 * 进程间通信和映射机制。前者用于通信与同步,后者用于递归地复制地址空间。 * 把中断抽象成一个消息,发送给特殊的用户线程或者驱动线程来处理数据。 * 调度器线程,用一个内核线程来负责调度,从当前任务切换到调度器线程,再从调度器线程切换到下一个任务。 * 少量的系统调用。 * 进程间通信原语:send,recv(all),call: send,wait,reply-wait any, reply-wait for other。 * 消息类型:1. 寄存器类型 2. 字符串类型 3. 页面类型。 * 时限机制:发送,接收,传输时限。 * 同步IPC和异步IPC的优劣以及抉择。 * 任务切换时机:产生IPC时直接切换到接收者、基于时钟中断的任务切换。 * 实时性的高要求,允许任务随时被中断。 * 直接线程切换和普通的调度对任务的寄存器影响不一样。 * IPC实现:短IPC,用寄存器传递消息。长IPC,字符串拷贝或则进行页面映射。 * 临时地址映射:保留一个内核通讯窗口,任务复制数据到这个窗口里面,这个窗口和另一个任务进行内存映射,那么,另一个任务,就能够直接读取里面的数据,从而减少一次内存复制。为了避免通讯窗口被多个任务使用,可以在一次交互中将其设置为失效,其它任务使用的时候,则需要重新映射一份新的内存。 * 相同地址空间与不同地址空间内的IPC通信。优化可以从这2个方面进行考虑。 * 使用小地址空间,来减少任务切换导致的TLB刷新带来的消耗。 * 注意死锁的检查 ### 目录结构 * boot:存放引导程序代码 * kernel:存放内核代码 * servers:存放服务器的代码 * library:存放库代码,标准库以及第三方库 * framework:存放框架相关代码 * documents:存放文档 * app:应用程序代码,lua,js,c,cpp * develop:存放开发时所需内容 * tests:测试代码