linux进程周边知识——内核对硬件的管理——计算机世界的管理
前言:本节主要讲解内核也就是操作系统对于硬件的管理, 本节内容同样为进程的周边知识。 主要是关于软件方面, 和我的上一篇——冯诺依曼体系结构可以说是兄弟文章, 这篇文章主要是关于硬件方面。 两篇文章都是为学习进程做准备。但不能说本篇文章内容不重要, 本篇文章内容不管是对于理解整个计算机世界, 还是接下来理解进程, 都有重要的作用。
ps:本节内容适合了解一些冯诺依曼体系的友友进行观看。
目录
操作系统的概念
什么是操作系统的管理
为什么要进行管理
如何进行软硬件管理
库函数
操作系统的概念
内核:内核主要进行进程管理、内存管理、驱动管理、文件管理
其他程序: 例如语言库、 shell外壳。
这些合起来叫做宏观的操作系统。 (内核加上操作系统配套的软件)
狭义上就是内核。
什么是操作系统的管理
在我们的电脑上, 我们应用qq和微信, 或者游戏等软件。那么请问, qq或者微信, 为什么能够被打开, 为什么操作系统要跑qq或者微信。这个是由操作系统控制的。
为了能够更好的使用冯诺依曼结构, 更好地统筹里面的硬件, 必须要有人对硬件或者软件进行统筹, 而操作系统就是跟这个的。
所以, 由上面两段论述就可以说——操作系统是一款进行管理的软件!操作系统管理硬件, 软件。 为什么能够管理软硬件, 因为操作系统的下层就是驱动器, 是软件, 而驱动器的下层就是硬件。 所以, 操作系统向下管理, 本质上就是管理软硬件。
为什么要进行管理

计算机的层状结构, 是由上图的层状结构构成的。
最底层的就是上层的底层硬件, 这些硬件是根据冯诺依曼体系结构, 由总线串连起来的。 这些硬件之所以能够被软件去访问, 都是因为这些硬件上面有一层驱动器——这些驱动器也是软件。
这些驱动器是和硬件打交道的一些软件。 他们能够让硬件动起来, 至于如何动, 需要让更上层的驱动器提出需求。
所以, 那么为什么要有操作系统?
我们可以思考这个问题:如果我们买完笔记本回来没有操作系统, 那么就只有一堆硬件,用户根本没有办法使用计算机。
所以第一个理由——操作系统帮助用户管理好下层软硬件资源。
如果一个电脑, 经常用着用着就蓝屏, 如果这个电脑的信息容易被盗取, 或者游戏玩着非常卡。 那么很显然, 这样的操作系统用户就不愿意用, 要知道, 计算机是一个工具, 他是为了给用户提供服务的。 所以, 操作系统就是要给用户提供良好的(稳定, 高效, 安全)的运行环境。
所以, 即: 操作系统通过管理软硬件资源——手段
为用户提供良好的运行环境——目的(这里的用户可以是普通用户, 也可以是程序员)
那么再来考虑另一个问题: 操作系统里面会有各种数据, 可是, 操作系统不相信任何用户!这是因为操作系统为了保证自己的数据安全, 为了保证给用户提供服务, 操作系统以接口的方式给用户提供调用的入口, 来获取操作系统内部的数据。 也就是说, 如果用户想要获取系统内部的数据, 就要使用相关的系统接口访问操作系统内部的数据。
接口是操作系统提供的用c实现的, 自己内部的函数调用——系统调用。
所有的访问操作系统的行为, 都只能通过系统调用完成!
系统调用可以对用户提供的参数进行审核, 又因为系统接口是操作系统内部的接口, 所以不存在恶意修改的问题, 所以操作系统就在既保证自己安全的情况下, 又为上层提供服务, 有了这些系统调用接口, 就有人在这些系统调用接口上, 实现各种各样的软件了。
任何一门语言, 在访问底层硬件的时候, 都要经过操作系统, 都要经过系统调用。
操作系统是世界上少有不变的东西, 语言可以变, 但是操作系统永远不变。 我们把这种基于系统接口之上的开发, 叫做系统编程。
如何进行软硬件管理
我们想这么一个例子, 就比如在大学中, 有校长, 有辅导员, 有学生。 其中, 校长就是管理者, 学生就是被管理者。 辅导员是什么暂且不谈。 那么, 校长对我们进行管理的时候, 需要见到我们吗?我们平时见不到校长, 为什么校长还能把我们管理的很好呢? 因为校长平时只需要知道我们的个人信息, 知道我们有没有犯纪律, 知道我们有什么奖项。 他就能对我们进行奖惩或者奖励。由此可见——
1、管理者和被管理者是不需要见面的。
2、管理者在不见被管理者的情况下, 如何做好的管理呢? ——只要能够得到被管理者的管理信息, 就可以在未来进行决策。 ——管理的本质:是通过对数据的管理, 达到对人的管理。
3、那么, 管理者和被管理者都不见面, 管理者又是如何获得被管理者的数据的呢?
那么我们就要考虑一个问题, 既然在大学中, 校长是管理者, 学生是被管理者。 那么辅导员的身份是什么呢?
想一想我们生活中就两件事——决策与执行。 比如说我们今天放假, 现在你很无聊, 就想打一局王者荣耀还是歇一会写作业?你想了想, 觉得还是先打一把王者荣耀——这就是做决策, 然后做完决策, 你就开始打开游戏玩了——这是执行。
那么我们知道校长更偏向于做决策, 那么执行是谁来做呢?答案就是辅导员。 辅导员不是决策者, 他是执行者。
那么就是说, 对于校长, 学生, 辅导员。 他们的关系是这样的:

那么对于操作系统, 它是主要的决策者。 但是硬件那么多, 它是如何对某个硬件进行管理的呢?
那么我们还是使用上面的校长的例子进行解释: 其实对于校长来说, 每一个学生都是类似的。每一个学生都有自己的学号、姓名、性别、班级、家庭住址等等。 那么, 一般的校长可能会使用excel表格, 弄成下面的一个表格:

然后, 校长就会让辅导员们以这个表格的形式, 去获取学生的信息——其中, 校长将学生的属性罗列出来, 这个过程, 就叫做描述的过程。
但是, 今天校长变了一个方法, 他不用excel表格了, 他自己创建了一个结构体。 这个结构体里面定义了学号, 性别, 班级, 住址等等。 如下:

那么, 原本校长要保存全学校学生的信息需要建立一个excel表格。 但是现在就不需要了, 校长只需要创建一个学生链表, 就可以保存下全校学生的信息。

在上面这个过程中, 创建结构体就是描述的过程。
而我们保存学生的信息, 保存一个学生的信息, 就是创建一个学生的对象。 并且使用对应学生的信息初始化这个对象。 当我们创建一个又一个对象, 比如创建了学生1对象, 学生2对象, 学生3,4对象。 那么我们就可以使用对象里面链表的指针将这些对象串联起来, 所以, 这些学生对象都会被连接起来,那么校长就能获得一个学生基本信息的链式结构
至此, 校长就不需要再使用人工管理excel表格了——只需要管理好链表结构就可以了!
那么, 校长就成功地将对学生地管理工作, 转化为了对链表的增删查改!
以后校长想要对学生进行什么样的处理, 只需要使用相应的链表接口就可以了。比如说想要查找全体学生中分数最高的学生, 或者分数最低的学生等等。那么, 以上校长将一个个学生对象创建,并且连接成链表, 这个过程, 就叫做组织!
对于上面的整个逻辑也就是说:对于校长来说, 想要获取学生信息, 但是每个学生的情况不太一样, 很繁杂。 所以他就将学生信息描述成了一个个属性,让辅导员去获取每个学生的属性信息。然后绘制成excel表格, 但是全校学生很多。人工查找excel很慢,校长就利用属性, 创建一个结构体, 描述了一个学生。 然后将每个学生的信息放到一个结构体对象里面保存起来, 并且将这些对象组织起来, 成为一个链表。
那么我们回到操作系统, 对于操作系统来说, 它是由c语言写的, 那么操作系统要描述一个对象, 它只能使用结构体来描述。
所以在操作系统当中, 他管理软硬件资源, 一定和上面校长使用的链表管理的思路是一样的——我们把这种思路, 叫做先描述, 再组织。 (在操作系统中, 管理任何对象, 最终都可以转化为对某种数据结构的增删查改。)
这里有个例子进行辅助理解, 是关于c++的, 没学过c++的容器的友友可以自行跳过——就是我们在学习c++的时候, 是不是先学习c++的类, 然后才开始学习的容器。 对于c++的类来说, 它不是就是c语言的结构体吗?也就是说, 它不就是一种描述方式吗。 然后容器不就是将类组织的方式吗? 所以对于c++来说, 类就是描述方式, stl容器就是组织方式。 即——c++天然就是让我们先描述, 再组织的。
为什么, 因为任何一个程序, 它或多或少, 都要进行一些管理工作。 有管理工作, 那么就要对数据进行描述, 进行组织。 不光c++, 任何一门语言, 他都要提供描述, 组织的方式, 这是由整个计算机世界所决定的。 整个计算机世界, 都是围绕上面六个字展开——先描述, 再组织(计算机只能这么做,这就是建模的过程)。 语言提供相应的方式, 我们未来写的程序, 永远都会描述数据, 然后对数据进行管理。
操作系统是一个管理软硬件资源的软件, 他就是建立了底层硬件设备的属性的结构体。 然后根据这些属性创建相应的结构体对象。 通过管理这些结构体对象, 来达到管理硬件的目的。 那么就是说, 操作系统内部, 一定存在了大量的数据结构!!
库函数
知道了操作系统如何管理硬件之后, 我们还要知道,对于库函数, 它是如何调用底层硬件的?
那么假如有两个学校的校长, 一个A学校, 一个B学校。 那么假如A学校有一个算法很厉害的学生, 但是B学校没有。 有一天, B学校的校长想要让A学校这名学生代替他们学校出去比赛, 那么请问, 这个时候, B学校的校长应该找A学校的校长还是这名学生?
很明显, 应该找A学校的校长, 因为这名学生是被校长管理起来的, 他要服从管理。 那么就不能直接访问到他。 所以, B学校校长就必须先和A学校校长协商。
那么, 我们库函数也是一样, 他们如何调用底层硬件?比如说printf, 它如何将数据打印到显示器上, 显示器是硬件, 被操作系统管理起来, 那么printf函数就不能直接访问到显示器, 而是要先沟通操作系统, 然后才能访问底层硬件。 也就是说, 库函数想要访问底层硬件, 那么就要贯穿整个操作系统。
而沟通操作系统, 我们知道, 操作系统不相信任何人, 他只是开了一扇窗——系统调用。那么就是说, 我们的库函数想要调用底层硬件, 就势必要封装系统调用。 也就是说, 我们的C/C++标准库的库函数与系统调用, 他们之间的关系就是调用与被调用的关系。
-------------以上就是本节的全部内容, 下面是本人的笔记

相关文章:
linux进程周边知识——内核对硬件的管理——计算机世界的管理
前言:本节主要讲解内核也就是操作系统对于硬件的管理, 本节内容同样为进程的周边知识。 主要是关于软件方面, 和我的上一篇——冯诺依曼体系结构可以说是兄弟文章, 这篇文章主要是关于硬件方面。 两篇文章都是为学习进程做准备。但…...
同声传译语音合成接口,分段预合成实现丝滑的衔接效果
背景: 在使用微信官方语音合成插件的时候遇到一个问题,textToSpeech这个api的内容限制在官网的文档上明明是1000个字节,也就是说能保证333个中文字符应该是没有问题的,但是也不知道为什么我这里仅仅传了150个中文字符就报错了&…...
数据结构——单链表详解(超详细)(1)
前言: 小编在近日学习了单链表的知识,为了加强记忆,于是诞生了这一篇文章,单链表是数据结构比较重要的知识,读者朋友们一定要去好好的学习!这个可以说是比顺序表更好用的线性表,下面废话不多说&…...
在 Linux 上使用 lspci 命令查看 PCI 总线硬件设备信息
lspci 命令用于显示 Linux 系统上的设备和驱动程序 当在个人电脑或服务器上运行 Linux 时,有时需要识别该系统中的硬件。lspci 命令用于显示连接到 PCI 总线的所有设备,从而满足上述需求。该命令由 pciutils 包提供,可用于各种基于 Linux 和…...
python数据可视化(6)——绘制散点图
课程学习来源:b站up:【蚂蚁学python】 【课程链接:【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接:【链接】】 Python绘制散点图查看BMI与保险费的关系 散点图: 用两组数据构成多个坐标点,考察…...
【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)
目录 一、引言 二、自动语音识别(automatic-speech-recognition) 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数…...
Mysql-错误处理: Found option without preceding group in config file
1、问题描述 安装MYSQL时,在cmd中“初始化”数据库时,输入命令: mysqld --initialize --consolecmd报错: D:\mysql-5.7.36-winx64\bin>mysql --initialize --console mysql: [ERROR] Found option without preceding group …...
[iOS]内存分区
[iOS]内存分区 文章目录 [iOS]内存分区五大分区栈区堆区全局区常量区代码区验证内存使用注意事项总结 函数栈堆栈溢出栈的作用 参考博客 在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域 还记得OC是C的超类 所以C的内存分区也是一样的 iOS系统中&a…...
sklearn基础教程:掌握机器学习入门的钥匙
sklearn基础教程:掌握机器学习入门的钥匙 在数据科学和机器学习的广阔领域中,scikit-learn(简称sklearn)无疑是最受欢迎且功能强大的库之一。它提供了简单而高效的数据挖掘和数据分析工具,让研究人员、数据科学家以及…...
【unity实战】使用unity制作一个红点系统
前言 注意,本文是本人的学习笔记记录,这里先记录基本的代码,后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架: RedPointSystem.cs using System.…...
开发指南046-机构树控件
为了简化编程,平台封装了很多前端组件。机构树就是常用的组件之一。 基本用法: import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能: 根据权限和控制参数显示机构树。机构树数据来源于核…...
SpringBatch文件读写ItemWriter,ItemReader使用详解
SpringBatch文件读写ItemWriter,ItemReader使用详解 1. ItemReaders 和 ItemWriters1.1. ItemReader1.2. ItemWriter1.3. ItemProcessor 2.FlatFileItemReader 和 FlatFileItemWriter2.1.平面文件2.1.1. FieldSet 2.2. FlatFileItemReader2.3. FlatFileItemWriter 3…...
如何评估AI模型:评估指标的分类、方法及案例解析
如何评估AI模型:评估指标的分类、方法及案例解析 引言第一部分:评估指标的分类第二部分:评估指标的数学基础第三部分:评估指标的选择与应用第四部分:评估指标的局限性第五部分:案例研究第六部分:…...
程序员学CFA——经济学(七)
经济学(七) 汇率外汇市场外汇市场的功能外汇市场的参与者卖方买方 汇率的计算汇率报价基础货币与计价货币直接报价与间接报价外汇报价习惯 名义汇率和实际汇率货币的升值与贬值交叉汇率计算即期汇率与远期汇率即期汇率与远期汇率的概念远期升水/贴水远期…...
imx335帧率改到10fps的方法
验证: imx335.c驱动默认的帧率是30fps,要将 IMX335 的帧率更改为 10fps,需要调整与帧率相关的参数。FPS(frames per second,每秒帧数)通常由 sensor 的曝光时间(exposure time)和垂直总时间(VTS,Vertical Total Size)共同决定。VTS 定义了 sensor 完成一帧图像采集…...
Large Language Model系列之二:Transformers和预训练语言模型
Large Language Model系列之二:Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型,它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,主要用于机器翻译任务。随…...
java后端项目启动失败,解决端口被占用问题
报错信息: Web server failed to start . Port 8020 was already in use. 1、查看端口号 netstat -ano | findstr 端口号 2、终止进程 taskkill /F /PID 进程ID 举例:关闭8020端口...
PostgreSQL安装/卸载(CentOS、Windows)
说明:PostgreSQL与MySQL一样,是一款开源免费的数据库技术,官方口号:The World’s Most Advanced Open Source Relational Database.(世界上最先进的开源关系数据库),本文介绍如何在Windows、Cen…...
OutOfMemoryError异常OOM排查
目录 参考工具MAT(Memory Analyzer)一、产生原因二、测试堆溢出 java.lang.OutOfMemoryError: Java heap space测试代码运行手动导出dump文件mat排查打开dump文件查看Leak Suspects(泄露疑点)参考 【JVM】八、OOM异常的模拟 MAT工具分析Dump文件(大对象定位) 用arthas排…...
【Python】Arcpy将excel点生成shp文件
根据excel点经纬度数据,生成shp,参考博主的代码,进行了修改,在属性表中保留excel中的数据。 参考资料:http://t.csdnimg.cn/OleyT 注意修改以下两句中的数字。 latitude float(row[1]) longitude float(row[2])imp…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
