文章目录

  • 一、操作系统需要满足的要素
  • 二、宏内核
  • 三、微内核
  • 四、Linux 内核动态加载机制

一、操作系统需要满足的要素


电脑上运行的 操作系统 , 是一个 软件 ;

  • 设备管理 : 操作系统需要 为 用户 和 应用程序 管理并分配电脑的 硬件资源 , 如 CPU , 磁盘 , 内存 , 网络 等 ;

  • 开发环境 : 操作系统 要为 应用程序 开发 提供配套环境 ;

  • 执行环境 : 操作系统 要为 应用程序 执行 提供配套环境 ;

  • 虚拟性支持 : 支持多进程 , 每个运行的应用程序进程 , 都可以感觉到有专门的处理器提供系统服务 ;

  • 并发性支持 : 操作系统需要有 执行多个线程的能力 , 线程是独立运行 , 独立调度的最基本单位 ;

二、宏内核


宏内核 :

内核代码 编译成 二进制文件 ,

内核 运行在 一个 大内核 地址空间 中 ,

可以 直接 访问 , 调用 内核代码 ,

这种内核优点是 效率高 , 性能强 ;

下图中 , 最上层是 " 系统调用 " , 中间是 " 宏内核 " , 最下方是 硬件层 ;

宏内核优点 : 设计简单 , 性能高 ;

三、微内核


微内核 :

将 操作系统 拆分成 多个 独立功能模块 ,

这些 独立功能模块 之间通过 " 消息 " 进行通信 ,

微内核 效率低 ;

下图中 , 进程 , 文件系统 , 设备驱动 , 与 微内核 中的 通信模块 , 进程调度模块 , 内存管理模块 , 通过 消息 进行通信 ,

微内核优点 : 稳定性好 , 实时性好 ;

微内核缺点 : 高度模块化 , 模块之间只能通过消息传递信息 , 效率低 ;

四、Linux 内核动态加载机制


Linux 内核模块动态加载 :

Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ;

Linux 内核的 核心实现 , 设备驱动实现 ,

可以 编译成一个独立模块 ,

这些独立模块可以被编译成 独立的目标文件 ,

可以在运行时 , 动态 加载 / 卸载 内核模块 ;

开发简单 : Linux 内核模块引入 , 带来了很多便利 ,

很多内核驱动 , 都可以 编译成动态 加载 / 卸载 的模块 ,

驱动开发时 , 必须 遵守规定的接口 , 来访问内核 ,

这样 开发内核模块 , 变得 更加容易 , 方便 ;

与平台无关 : 内核模块 可以 设计成 与 平台无关的 模块 , 如 : 文件系统 ;

【Linux 内核】宏内核与微内核架构 ( 操作系统需要满足的要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )相关推荐

  1. 交大大佬新作上市!微内核架构操作系统ChCore全新升级

    大家好!我是韩老师. 相信不少粉丝应该知道,我毕业于上海交通大学软件学院. 最近,上海交通大学软件学院的两位大佬陈海波和夏虞斌教授出新书啦!作为交大学子,必须支持一波! <操作系统:原理与实现& ...

  2. 服务器和微内核系统哪个好,分析微内核架构操作系统优缺点

    <分析微内核架构操作系统优缺点>由会员分享,可在线阅读,更多相关<分析微内核架构操作系统优缺点(2页珍藏版)>请在人人文库网上搜索. 1.分析微内核架构操作系统优缺点一 优点: ...

  3. Linux 2.6内核的编译步骤及模块的动态加载

    本文是基于2.6的内核,也建议各位可以先看一下<Linux内核设计与实现(第二版)>作为一个基础知识的铺垫.当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块 ...

  4. linux内核采取,采用动态加载模块的方式Linux内核编译

    Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便.那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手.以下是一个简单的hello内核模块的Makefi ...

  5. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...

    Linux中mod相关的命令 内核模块化   mod相关命令都是用来动态加载内核模块/驱动程序模块 http://baike.baidu.com/link?url=lxiKxFvYm-UfJIxMjz ...

  6. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

  7. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  8. java类加载器 架构 设计_类加载器(DexClassLoader)与插件化(动态加载)

    类加载器与插件化解析 2.1 类装载器 DexClassLoader 首先,我们需要了解关于java代码本地import的一些知识: import中所引用的类有两个特点: 1.必须存在于本地,当程序运 ...

  9. CTFHub Linux 动态加载

    CTFHub Linux 动态加载 观察页面,写着没有 x权限,说明我们没有办法执行根目录下的 elf 文件 readflag,所以我们无法利用下方的 webshell 获取flag(我们的权限不够) ...

最新文章

  1. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...
  2. 设置USB无线网卡为监听模式大学霸IT达人
  3. SpringCloud接入EDAS——服务发现篇
  4. DDD理论学习系列(10)-- 聚合
  5. ruby,rails环境架设配置 转载一文章.
  6. 不再以讹传讹,GET和POST的真正区别
  7. c语言中for语句的作用是,c语言中for语句是怎么用的
  8. 【perl】LWP module
  9. WP7备注(11)(页面跳转)
  10. 从精度看CPU线程:实验室与量产的差距
  11. 达梦 DCA 培训总结
  12. 人工智能学习路线,文末赠书活动(深度学习Spark机器学习)
  13. 复习————吃饭睡觉打豆豆
  14. 数据分析师,你是车夫,还是拉车的驴子
  15. 关于男女交往的换位思考
  16. 还爱着你心中曾经那朵红玫瑰吗?
  17. 高频交易(二)浅谈高频交易中比较成熟的一些交易策略
  18. 阿里巴巴国际站产品标题的组合和优化方法一览
  19. IDEA最强美化插件:Material Theme UI和Atom Material Icons
  20. Halcon API

热门文章

  1. servlet与jsp的联系与区别
  2. Ampzz 2011 Cross Spider 计算几何
  3. android 获取应用的当前版本号获取当前android系统的版本号
  4. CentOS6.3 下启动Oracle service和listener
  5. C语言中volatilekeyword的作用
  6. 版本效果MoonWarrior cocos2d-x版本 --1
  7. 【python】关于python的链表结构实现
  8. 2017滴滴出行笔试题:异或和为0的最大区间个数
  9. MySQL关于check约束无效的解决办法
  10. The Simple Life