计算机资源

计算机中资源分为软硬件两类:
其中,硬件资源有

  1. 总线:主要负责连接其他设备,是其他设备工作的基础。
  2. CPU:中央处理器,负责执行程序和处理数据运算。
  3. 内存:负责储存正在运行时的代码和数据。
  4. 硬盘:长期储存用户文件数据。
  5. 网卡:负责计算机与其他计算机之间的通信。
  6. 显卡:用于显示工作。
  7. I/O设备:显示器,鼠标,键盘
    总之,就是以一条总线连接,各个硬件设备。

而软件资源主要时是各种文件和软件程序。

操作系统内核与驱动

操作系统内核是计算机硬件和软件资源的管理者
主要表现在:

  1. 管理CPU:CPU要执行程序,内核把运行时的程序抽象称为进程,所以管理CPU对于内核来说,就是进程管理
  2. 管理内存:由于数据和程序想要运行就必需得占用内存,所以作为管理者,内核需要小心的分配、释放内存。(CPU想执行程序就得读取硬盘上的数据,而硬盘上磁性数据不能直接读取,需要存入电流存储的高速内存中,再由内存传给CPU)
  3. 管理硬盘:硬盘刚才说了主要用来存放数据和文件,内核将其抽象为文件,所以对于内核来说,主要就是管理文件,文件需要合理的组织才方便读写,所以我们操作系统需要一个文件系统。
  4. 管理显卡:主要是内核中的图形系统。
  5. 管理网卡:我们说网卡是用来完成网络通信的,但是要想通信就必需按照网络协议来运行,所以内核中形成了网络协议栈,又称之为网络组件。
  6. 管理IO设备:内核将其抽象为IO设备管理器。
    内核还根据功能不同有一些额外的组件,比如安全组件。

驱动:
既然内核时用来管理软硬件的,尤其对于硬件来说,不同厂商的硬件型号配置不同,所以内核想要管理和控制这些不同的硬件,就必需要编写对应的代码,这些代码我们称之为驱动程序。驱动程序是内核与硬件之间的桥梁。
生活中大家常见的,鼠标键盘尤其是打印机,经常需要安装驱动程序,就是为了让内核能很好的管理控制硬件。

经典内核结构:

宏内核

宏内核主要是把上述管理诸多功能的代码全部编译,最后链接到一起,形成一个大的可执行的程序。
这个程序实现上述所有功能,并向用户提供接口(API函数),在特权模式下运行,这个模式也称“宏内核模式”。

举例:内存分配功能具体过程

  1. 应用程序先调用内存分配的API函数。(这个过程需要经过 系统调用——中断——内核 ,以后再说)
  2. 处理器切换到宏内核模式,开始运行内核代码。
  3. 内核中某一部分管理内存,按照特定的算法,给程序分配一块内存。
  4. 分配的首地址,返回给API函数。
  5. 内存分配的API函数返回,处理器运行用户模式下应用程序,应用程序得到这块内存的首地址,就可以用这块内存了。

缺点:
宏内核模式有明显的缺点,没有模块化,也没有扩展性移植性,且系统高度耦合。
解释一下:
所谓扩展性和移植性,比如我们开发了一个新的功能,那么对应的宏内核也得重新编译链接,重新安装内核。
所谓耦合度高,即牵一发而动全身,某一个组件完蛋整个内核就gg了。

微内核

与宏内核恰恰相反,提倡内核尽可能的小,保持正常运转即可。
仅有进程调度,处理中断,内存空间映射,进程间通信等主要功能。

而实际上我们使用的一些功能被做成了一个个的服务进程,如进程管理,内存管理,设备管理,文件管理等等在微内核中都被做成了服务进程。

而微内核控制下,应用程序要想请求某种服务,就得向微内核发送一条与之对应的消息。微内核收到这条消息之后再将其转发给相关的服务进程,而后服务进程就会完成应用程序需要的服务。

举例微内核提供内存分配服务过程:

  1. 应用程序调用微内核提供的发消息的函数(系统API)
  2. 处理器切换到特权模式,运行内核代码。
  3. 微内核代码让当前进程停止运行,并根据收到消息中的数据,确定回复消息的对象,分配内存的话,消息要发送给内存管理服务进程。
  4. 内存管理服务进程收到消息之后,分配一块内存。内存管理服务进程也会通过消息返回自己分配了哪块地址给内核。
  5. 微内核收到内存管理服务进程的回复之后将内存地址消息发送给请求方(应用程序)
  6. 处理器运行用户模式下的应用程序,该应用程序得到内存首地址就可以使用该块内存。

由此我们看出,微内核注重流程化管理,缺点明显,来去消息开销很大,服务进程切换也有开销。而宏内核你申请一次,一条龙服务给你安排好。
优点就是系统结构比较清晰,普及协作方便,可移植性好。扩展性好。现在比较火的华为鸿蒙操作系统就是微内核系统的代表。

分离硬件之间的相关性

计算机领域一个主要的方法就是增加抽象层,使得上下层相对独立发展,用以屏蔽底层细节,上层的开发就变得更简单。

分离硬件的相关性,就是要把操作系统硬件和处理硬件功能差异的代码抽象出来,形成一个独立的软件抽象层,然后对外提供接口就可以方便上层开发。

我们举例进程管理中一个模块,进程调度模块
进程说到底,是开发者为了实现多任务而提出的,让每个进程在CPU上轮流运行一小段时间,以此形成多任务同时运行的假象

要实现这种假象,必需实现以下两种机制:

  1. 进程调度机制,目的在众多进程种选择一个将要运行的进程,这种选择有很多算法,比如轮转、优先级等。
  2. 进程切换机制,目的在停止当前进程,运行新的进程,主要动作在于先保存好刚才完成的(即当前进程的机器上下文),迎来下一个处理的(即装载新进程的上下文)。

而上述两个机制,进程调度机制(即选择运行的进程)的算法和代码基本上是固定的,是不容易改变的,需要改变的是第二个机制,即进程切换机制。因为不同硬件平台的机器上下文不同。所以我们最好将进程切换机制放在一个独立的层中实现,比如硬件平台相关层,当我们的操作系统需要运行在不同硬件平台上时,我们只需要修改硬件平台相关层中的相关代码。这样操作系统的移植性就大大增强了。

所以我们把所有硬件平台相关的代码都需要抽离出来,放在一个独立硬件相关层中实现并且定义好相关的接口。移植时构造与之对应的硬件相关层。这就是分离硬件相关性的好处。

设计操作系统内核

首先我们分为三层:

  1. 内核接口层
  2. 内核功能层
  3. 内核硬件层

1.内核接口层

其中内核接口层主要两点内容:

  1. 定义一套UNIX接口的子集,选几个必要的接口,能大致定义出操作系统功能即可。
  2. 接口的代码主要检查参数是否合法,如果参数有问题就返回相关错误,没有问题就调用下层“功能层”的核心代码。

2.内核功能层

主要完成实际功能,这些功能分为几个模块:

  1. 进程管理模块:主要实现进程的创建、销毁、调度,所以需要几套数据结构用于表示进程和组织进程,调度需要调度算法。
  2. 内存管理模块:主要是内存池管理,涉及**“页面内存池”和“任意大小内存池”**。
  3. 中断管理模块:主要是把一个中断回调函数安插到相关的数据结构中,一旦有相关中断,就调用该函数
  4. 设备管理模块:主要用一系列数据结构表示驱动程序模块、驱动程序本身以及驱动程序创建的设备,最后将其组织在一起,还需要实现设备的创建、销毁以及访问这些代码最终都会调用设备驱动程序,以操作设备。

3.内核硬件层

包括具体硬件平台的相关代码:

  1. 初始化模块:最先被内存加载且运行的内核代码,例如初始化一些设备,CPU,内存,中断的控制,用于管理的数据结构等。
  2. CPU控制模块:提供CPU模式设定,开关中断,读写CPU特定寄存器的代码。
  3. 中断处理模块:保存中断时机器的上下文,调用中断回调函数,操作中断控制器等
  4. 物理内存管理模块:分配、释放大块内存,内存空间映射等
  5. 其他模块:有些硬件平台有些特殊功能,需要额外处理。

操作系统内核没有设备驱动程序,没有文件系统和网络组件,吸取微内核的优势。将文件系统,网络组件、其他功能组件作为虚拟设备交由设备管理
比如需要文件系统就写一个文件系统虚拟设备驱动,完成文件系统功能。
需要网络就写一个网络虚拟设备驱动,完成网络功能。

这些驱动一旦被装载,就是内核的一部分,不是微内核那样作为服务进程运行,这吸取了宏内核的优势。所以咱们设计的内核可以称之为混合内核

总结

通过计算机资源推出内核作为资源管理者需要如下功能组件: IO管理,内存管理,文件管理,进程管理,图形系统,网络与安全组件。

接着我们探讨了传统的两种组织内核结构,宏内核有极致的性能,微内核有极致的可移植性、可扩展性。

我们研究了分层的重要性,分离硬件相关性的主要好处在于更容易移植和扩展

最后设计了一种汲取微内核和宏内核优点的内核架构。分为三层:
内核接口层:主要定义一套UNIX接口的子集
内核功能层:完成基本功能代码
内核硬件层:完成内核组件对应具体硬件平台的相关代码;

1.操作系统——内核相关推荐

  1. WINCE6.0操作系统---内核(kernel)学习

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. 操作系统--内核级线程实现

    五段论        `: 进入内核靠的是中断,fork是创建系统进程调用,进程由资源+执行序列组成,而创建执行序列其实就是创建线程. TSS:任务结构段     参考: 操作系统_哈尔滨工业大学_中 ...

  3. 0x300-从头开始写操作系统-内核

    目录 回顾 今日目标 必要工具的安装及介绍 工具一览 工具介绍 GCC Hosted Environment Freestanding Environment Linker C 语言编译(gcc 的临 ...

  4. 【操作系统】浅谈OS内核

    公众号「码农小奎」操作系统-内核篇 实际上,计算机体系在经过几十年的迭代更新之后,操作系统的内核离我们已经很遥远了. 无论是对普通用户还是上层软件开发者来说,内核之中有什么已经不太重要了,而用户更关心 ...

  5. Linux内核源代码分析-第三章 内核体系结构概述-1

    第3章 内核体系结构概述 本章从较高层次上对内核进行说明.从顺序上来说,本章首先介绍内核设计目标,接下来 介绍内核体系结构,最后介绍内核源程序目录结构. 3.1 内核设计目标 Linux 的内核展现出 ...

  6. Linux运维基础(硬件和操作系统)

    VMware Workstation的使用: 虚拟机 虚拟计算机 在一个主机上,软件+硬件模拟出的硬件设备,然后在虚拟出来的设备上安装系统,等同于在物理机上的操作! 现代计算机设备的组成部分: 运算器 ...

  7. 操作系统对比和未来展望

    摘 要 操作系统(Operating System)是管理计算机硬件与软件资源的计算机程序.在计算机中,操作系统是其最基本也是最为重要的基础性系统软件.目前市面上流行的的操作系统主要有微软Window ...

  8. 6-vulnhub靶场-LordOfTheRoot_1.0.1靶机内核提权udf提权缓冲区溢出提权

    6-LordOfTheRoot_1.0.1 靶机地址 https://www.vulnhub.com/entry/lord-of-the-root-101,129/ 难度 中等(主要是缓冲区溢出) 1 ...

  9. 走进Linux 操作系统(之一)

    走进Linux 操作系统 摘要:本期涉猎了操作系统的来龙去脉后与大家携手步入Linux世界.我们力图展示给大家一幅Linux系统的全景图,并为了加深对linux系统的全面认知,亲手搭建了一个能运行在内 ...

最新文章

  1. Android分包方案multidex
  2. java -Math类
  3. 【推荐】有趣儿的PHP文件操作常用函数总结
  4. 手机cpu排行_鲁大师手机芯片排行榜:麒麟990第四,骁龙855第五!
  5. BZOJ3572 [Hnoi2014]世界树 【虚树 + 树形dp】
  6. vba 当前文件名_VBA实践+批量合并pdf
  7. IBM RS/6000 AIX操作系统的安装
  8. 阿里开发规范文档_华为阿里等技术专家15年开发经验总结:SSM整合开发实战文档...
  9. 在Sqoop中管理密码的关键提示
  10. 百度编辑器ueditor 的 submit 表单提交
  11. java工程师成神之路 整理自网络
  12. 考计算机一级应该学什么条件,计算机一级考试要求
  13. Linux:linux终端命令关闭pycharm
  14. 虚拟机ubuntu的联网方法(NET)
  15. Install JD-GUI on Mac OSX
  16. C++内存空间:静态存储区、栈、堆、文字常量区、程序代码区
  17. 微信小程序--监听对象属性变化
  18. 计算机二级MS office的高频考点~
  19. 源码时代UI干货分享| AE如何实现文字消散效果?看这一篇就够了!
  20. 结对编程之经验教训总结

热门文章

  1. Windows下谨慎使用动态磁盘
  2. 【CNN】理解卷积神经网络中的通道 channel
  3. rpgmaker是c语言编程吗,一起学rpgmaker脚本(1)【程序猿都能看懂的RGSS入门'`,、('∀`) '`,、】...
  4. 亿赛通的加密软件对加密图纸文件外发效果如何?
  5. mysql in 排序 无数据混乱_mysql in查询 结果乱序 引发的思考
  6. 3D视觉(二):单目摄像头的标定与校正
  7. 玩游戏提示计算机内存不足怎么办,win7玩绝地求生提示计算机内存不足怎么办...
  8. _CrtIsValidHeapPointer(pUserData)是什么意思?
  9. 为什么不推荐你去阿里,这些公司朝九晚五不打卡,时薪高到逆天…
  10. Ubuntu20.04 idea/pycharm 搜狗中文输入法不跟随光标问题