IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 1.操作系统——内核 -> 正文阅读

[网络协议]1.操作系统——内核

计算机资源

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

  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接口的子集
内核功能层:完成基本功能代码
内核硬件层:完成内核组件对应具体硬件平台的相关代码;

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:37:35  更:2021-10-09 16:38:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/31 6:14:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码