公众号「码农小奎」操作系统—内核篇

实际上,计算机体系在经过几十年的迭代更新之后,操作系统的内核离我们已经很遥远了。

无论是对普通用户还是上层软件开发者来说,内核之中有什么已经不太重要了,而用户更关心的是操作系统所提供的服务。

所以,站在上层用户和开发者的视角,操作系统内核就是一个巨大的黑盒,盒子里有什么,它是怎么实现的,并不太关心。

但作为开发者,如果想要进一步提升技术水平与理解,还是需要了解一些黑盒中的秘密的。

内核功能

想要知道内核里面有什么,我们可以先搞明白内核是干什么的,也就是它的功能。

简略的说,内核就是计算机资源的大管家。作为用户,不用关心底层细节,一切交给这个管家,用户只要发号施令就行了。

那这个管家到底管什么啊?这里就得先说一说计算机资源有哪些了。

计算机资源:

  1. CPU,即中央处理器,负责运行程序,执行运算。
  2. 内存,负责存储正在运行的程序,一关机数据就没了。
  3. 硬盘,持久化存储数据。
  4. 网卡,接受网络数据包。
  5. 显卡,负责图像显示。
  6. 总线,负责连接和传输各种设备。
  7. IO设备,即输入输出设备,鼠标、键盘、显示器、打印机等。

以上就是内核所需要管理等资源,相应的每种资源,内核都有一套管理机制。

内核对应每种资源所形成的管理机制:

  1. 进程管理,程序的执行需要先加载到内存,而内核把正在运行的程序抽象为进程。
  2. 内存管理,程序就是数据与指令的集合,而这个集合当然要占用内存,内存作为宝贵的资源,内核提供了一套完善的分配&释放内存机制。
  3. 硬盘管理,硬盘负责持久化存储数据,你读取文件总不会拆开电脑看看这块硬盘吧,内核负责把硬盘抽象成了文件系统,管理文件更加方便。
  4. 显卡管理,负责管理图像系统,向上层提供GUI(图形用户接口)
  5. 网卡管理,两台计算机想要通信,就需要发送和接受网络包,网络包遵循了一系列协议,而网卡就是网络包的翻译官,负责封包&拆包,再传递给上层应用。
  6. IO设备管理,负责把用户常用的键盘、鼠标、显示器、打印机等进行统一管理。

驱动程序的由来

不知道你有没有发现什么问题,这么多设备类型,而生产这些设备的厂家又很多,每种设备又分各种型号。

而编写操作系统内核是软件层面上的事情,每种硬件设备想要运行就需要编写对应的代码。

难不成把管理每种硬件的代码都编写一遍?

那操作系统的开发人员不得累死,而且这个系统会越来越臃肿。

这时候就要引入驱动程序这个概念了。

操作系统的开发人员当然不傻,我才不为了每个硬件厂商给你们编写代码。

我对外只提供一个统一接口,也就是标准规范,而厂商要按照这套标准自己编写驱动程序,再加载到内核中。

这也就是为什么电脑识别显卡需要显卡驱动,识别usb需要usb驱动等等。那你说我没看见驱动啊?实际上是操作系统为你自动安装了。

知道了内核的功能之后,那这些功能到底怎么组织的,终于可以谈一谈内核结构了。

内核结构

现如今主流内核结构有两种,一种是宏内核结构,一种是微内核结构。

听名字好像挺好理解,一种大,一种小呗。

宏内核:

简而言之,宏内核就是把上面所说的所有管理模块的代码进行编译,链接成一个巨大的执行程序。所以,进程调度、内存管理、文件系统、设备驱动等都运行在内核态。

微内核:

与宏内核相反的是微内核,微内核架构主张只保留最基本的功能,例如进程调度、虚拟内存和中断,而把其他的功能放在用户态。比如文件系统放在上层,这样服务与服务之间隔离,一个挂了也不会影响整个操作系统。

两种内核当然是各有千秋,不然也不会存在两种了。

宏内核把所以模块放在内核态,速度运行快,但各个模块之间耦合度大,故障容易影响全局,且不容易移植。

而微内核只保留基本功能,内核简洁,模块耦合度小,有利于系统的移植,但由于内核态功能少,而用户态需要频繁调度内核态,系统运行速度比宏内核慢。

总结

操作系统的内核架构主流有两种,宏内核&微内核

这两种内核各有优势,宏内核运行速度较快,所有功能都运行在内核态,但故障容易牵连整个系统,且不易移植到其他平台。

而微内核只保留基本功能,内核模块之间耦合度低,局部问题不会影响整体,也利于系统的移植,但频繁的用户态与内核态的切换带来的开销较大。

题外话,其实操作系统架构不单单有这两种类型,还有一种比较特殊,那就是混合内核。混合内核的一大应用就是苹果的MAC系统。


我是「码农小奎」,欢迎扫码关注我的公众号,更多技术学习经验和你分享!

【操作系统】浅谈OS内核相关推荐

  1. 浅谈linux - 内核时间的处理

    概述 对于嵌入式开发,经常会遇到一些定时.延时以及周期调度的情况,所以定时器是必不可少的一种资源. 相对于裸机开发,我们使用定时器只需先选择时钟源,然后设置分频系数和计数值,配置好中断后,就可以静静的 ...

  2. linux read函数_浅谈Linux内核IO体系之磁盘IO

    前言 Linux I/O体系是Linux内核的重要组成部分,主要包含网络IO.磁盘IO等.基本所有的技术栈都需要与IO打交道,分布式存储系统更是如此.本文主要简单分析一下磁盘IO,看看一个IO请求从发 ...

  3. Android源代码目录结构分析及浅谈OS体系结构:

    附上自己工作平台代码目录结构图: Android源代码结构: Android 2.1 |– Makefile (全局的Makefile) |– bionic (bionic C库,Bionic含义为仿 ...

  4. 浅谈 Linux 内核开发之网络设备驱动

    网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口.众所周知,在 OSI(Open Systems Interconnection,开放 ...

  5. 浅谈 Linux 内核开发之网络设备驱动[转]

    本文来自:http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/ 网络设备介绍 网络 设备是计算机体系结构中必不可少的一部分,处理 ...

  6. 【前端】浅谈浏览器内核:渲染引擎、JS引擎

    浏览器内核是什么? 简而言之,浏览器内核就是把我们编写的代码转换为页面的中控件. 虽然现在大家谈起浏览器内核时,多指代渲染引擎(Rendering engine 或 layout engineer). ...

  7. 浅谈Linux内核的实时性优化

    实时系统的概念 1.1什么是实时操作系统 什么是实时操作系统?接触过嵌入式的小伙伴可能会知道,实时操作系统是指在嵌入式领域广泛应用的各类RTOS(Real Time Operating System) ...

  8. 浅谈Linux内核编程规范与代码风格

    1 缩进 Tab的宽度是八个字符,因此缩进的宽度也是八个字符.有些异教徒想让缩进变成四个字符,甚至是两个字符的宽度,这些人和那些把 PI 定义为 3 的人是一个路子的. 注意:缩进的全部意义在于清晰地 ...

  9. 浅谈Linux内核无锁编程原理

    非阻塞型同步 (Non-blocking Synchronization) 简介 如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步.同步可分为阻塞型同步(Blocking ...

最新文章

  1. 【 Sublime Text 】如何使用Sublime Text快速生成代码模板
  2. js deep clone 深克隆
  3. after oracle alter,关于数据库级ALTER的触发器
  4. 荣耀x10max鸿蒙,黄石收购荣耀X10Max指纹键电池背光喇叭
  5. native版本 修改项目react_react native项目改名(仅针对android)
  6. 最常被程序员们谎称读过的计算机书籍
  7. Flex 学习随笔 ---- 使用WebService 与数据库连接
  8. 【Todo】RTP/RTCP/RTSP/SIP/SDP 等多媒体传输和会话协议
  9. 移动组件到指定坐标_手把手教你使用业界首创的象限图组件
  10. AndroidStudio_安卓原生开发_自定义单选列表Spinner绑定自定义数据类型---Android原生开发工作笔记143
  11. Python语言解析xml文件
  12. java使用libreoffice_关于java使用libreoffice以及openoffice转换问题。
  13. 使用下面的方法有利于提高JS代码的执行效率
  14. 如何将shell script功能模块化,并且对外留出函数和参数接口
  15. 浅谈一下对runloop的理解
  16. 【时间序列分析】03.正态时间序列与严平稳序列
  17. 如何认识和处理ISO14001标准中“相关方”概念(转载)
  18. logisitic 回归 +极大似然法 + 梯度下降法 (迭代优化)
  19. matlab的三维绘图函数,MATLAB中的三维绘图函数总结
  20. navicat连接mysql2003错误_navicat连接失败出现2003怎么办

热门文章

  1. 用Echarts画力导向图,节点文字随鼠标缩放而缩放
  2. 小米CC,真配成为年轻人的第一款潮流拍照手机?
  3. 还不会哈希吗?快进来一探究竟
  4. Android 水波纹特效
  5. 如何选购计算机硬件,如何选购电脑硬件cpu
  6. 设计和输出钻石图形。
  7. GMAP.NET ---生成离线地图
  8. 荣耀路由x1 虚拟服务器,荣耀路由器x1用手机怎么设置?
  9. 【职场必备的8项竞争力】修炼七:演讲力——让演讲成为加分项
  10. Cordova使APP不跟随系统字体变化