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++标准库的库函数与系统调用, 他们之间的关系就是调用与被调用的关系。 

-------------以上就是本节的全部内容, 下面是本人的笔记

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/796233.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java高频面试基础知识点整理11

干货分享,感谢您的阅读!背景​​​​​​高频面试题基本总结回顾(含笔试高频算法整理) 最全文章见:Java高频面试基础知识点整理 (一)Java基础高频知识考点 针对人员: 1.全部人员都…

Python 实现股票指标计算——BOLL布林线

1 公式 中轨线 N日的移动平均线,N一般取20 上轨线 中轨线 X倍的标准差,X一般取2 下轨线 中轨线-Y倍的标准差, Y一般取2 2 数据准备 我们以科创50指数 000688 为例,指数开始日期为2019-12-31,数据格…

Python - Word转TXT文本,或TXT文本转Word

Word文档(.doc或.docx)和纯文本文件(.txt)是两种常用的文件格式。Word文档通常用于复杂的文档处理和排版,而纯文本文件则用于存储和传输纯文本信息。了解如何在这两种格式之间进行转换能提高工作效率,并便于…

学习笔记——动态路由——IS-IS中间系统到中间系统(特性之路由渗透)

4、路由渗透 IS-IS中Level-1-2路由器是连接Level-1区域与骨干网络的桥梁,它会将到达所在Level-1区域的路由信息通过Level-2 LSP通告到骨干网络,从而让其他的Level-1-2或Level-2路由器学习到相关路由,然而缺省时它却并不将到达其他Level-1区域的路由信息以及到达Lev…

《昇思25天学习打卡营第15天|计算机视觉-SSD目标检测》

FCN图像语义分割&ResNet50迁移学习&ResNet50图像分类&ShuffleNet图像分类&SSD目标检测 SSD目标检测 模型简介 SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测…

Kithara与OpenCV (二)

Kithara使用OpenCV QT 进行特征检测 目录 Kithara使用OpenCV QT 进行特征检测OpenCV 特征检测简介Qt应用框架简介项目说明关键代码抖动测试测试平台:测试结果:结论 OpenCV 特征检测简介 OpenCV是一个开源的计算机视觉库,提供了各种图像处理…

Web开发 —— 放大镜效果(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 (1)获取元素 (2)控制大图和遮罩层的显隐性 (3)遮罩层跟随鼠标移动 &…

麦克风设计指南

前言: 本指南基于乐鑫的 ESP32-S3 系列语音开发板。 整机 mic 要求 麦克风电器性能推荐 麦克类型:全向型 MEMS 麦克风 SMD-4P,2.8x1.9mm MEMS 麦克风 顶视图 MEMS 麦克风 底视图 灵敏度 1 Pa 声压下模拟麦灵敏度不低于 -38 dBV,数字麦灵…

CSS技巧专栏:一日一例 5-纯CSS实现背景色从四周向中心填充的按钮特效

特此说明 本专题专注于讲解如何使用CSS制作按钮特效。前置的准备工作和按钮的基本样式,都在本专栏第一篇文章中又详细说明。自本专栏第四篇文章起,本专栏都将直接跳过前面的内容,不再重复复制,需要了解按钮基础样式的同学,请移步:《CSS技巧 - 一日一例 (1):会讨好的热…

全渠道AI智能商品管理软件平台 助力零售品牌占领技术高地

关于7thonline第七在线 1999年创立于纽约,7thonline第七在线全渠道AI智能商品管理平台,以先进的数学算法模型、人工智能和机器学习技术为核心驱动力,融合了众多零售商品管理的卓越实践经验,精心打造出一套深度适配零售业务场景的自…

微信小程序---npm 支持

一、构建 npm 目前小程序已经支持使用 npm 安装第三方包,但是这些 npm 包在小程序中不能够直接使用,必须得使用小程序开发者工具进行构建后才可以使用。 为什么得使用小程序开发者工具需要构建呢❓ 因为 node_modules 目录下的包,不会参与…

PG大会周五于杭州举办;Pika发布4.0;阿里云MySQL上线Zero-ETL集成能力

重要更新 1. PostgreSQL中国技术大会举行12日(周五)于杭州举办,是PostgreSQL社区年度的大会,举办地点:杭州君尚云郦酒店(杭州市上城区临丁路1188号),感兴趣的可以考虑现场参加 ( [1]…

git常用命令及git分支

git常用命令及git分支 git常用命令设置用户签名初始化本地库查看本地库状态将文件添加到暂存区提交到本地库查看历史记录版本穿梭 git分支什么是分支分支的好处分支的操作查看分支创建分支切换分支删除分支合并分支合并冲突 git常用命令 设置用户签名 //设置用户签名 git con…

Ubuntu 修改~/.bashrc终端选择是否使用annconda环境

首先需要明白的是anaconda虽然自带了python,但安装anaconda后并不会覆盖掉你原来的python(pip也是一样的),但安装anaconda后它会把自己的bin目录(里面有python、pip、conda等命令)加到PATH上,而…

Math/System/Runtime/Object

1、Math (1)常用方法 类型方法名说明public static intabs (int a)返回整数的绝对值public static doublepow (double a,double b)计算a的b次幂的值public static int max (int a,int b) 获取两个int值中的较大值public static intmin (int a,int…

vue学习day07-scoped样式冲突、data是一个函数、props详解、组件通信、非父子通信-event bus 事件总线

19、scoped样式冲突 (1)默认情况:写在组件中的样式会全局生效,因此会很容易造成多个组件之间的样式冲突问题。 1)全局样式:默认组件中的样式会作用到全局 比如: 当只有box1设置边框时&#…

Unity如何查找两个transform最近的公共parent

查找两个子对象最近的父对象 一、问题背景二、解决方案思路核心算法代码 三、总结 一、问题背景 最近看到个关于Unity的问题:在Hierarchy面板中的游戏对象,给定两个子物体transform对象,如何查找这两个transform最近的公共父级parent。感觉挺…

应用帕累托原则学习新的编程语言

在本文中,我将讨论如何应用帕累托原则快速学习一门新的编程语言,并在加深对编程语言的理解的同时开始解决实际问题。 什么是帕累托原则? 帕累托原则,又称 80/20 法则,指出对于许多结果而言,大约 80% 的后…

【简历】某电子科技大学:前端实习简历指导,面试通过率低

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这是一份一本某电子科技大学的同学简历,投递的职位就是我们前端,但是因为学校是一本,我们说主要主体在…