Linux系统编程——操作系统的初步认识(Operator System)

目录

一,关于操作系统

二,计算机的层次设计

2.1 硬件层

2.2 驱动层

2.3 操作系统层

2.4 用户层

2.5 系统调用接口

2.6 用户调用接口

三,操作系统管理的精髓 —— 先描述,再组织

3.1 什么是先描述?

3.2 什么是再组织

3.3 总结


一,关于操作系统

先抛结论:操作系统是一款进行软硬件资源管理的软件,是当代大部分计算机资源管理的解决方案

计算机只能识别和运行二进制机器语言,也就是由0和1组成的二进制序列。所以,最简单例子就是,我们复制粘贴文件,绝对不是我们Ctrl+c和Ctrl+v就能解决的,前面说的,计算机只能识别二进制序列,所以一定是由一个东西介于我们和机器之间,将我们的请求通过某种方法转化成了二进制语言给机器,所以OS就是干这个的,介于我们使用者和机器之间,进行资源管理。

设计操作系统的目的:

①与硬件交互,管理所有的软硬件资源

②为用户(应用程序)提供一个良好的执行和运行环境

所以,操作系统的定位就是:一款纯正的 ” 搞管理 “的软件 

二,计算机的层次设计

2.1 硬件层

硬件层应该是我们计算机中和我们距离最近的了,因为我们肉眼看到的就是计算机实物,也就是计算机底层的硬件。这些硬件看似杂乱无章,但是我们不能简单的下结论,因为作为第三和第四次工业革命的产物,其所蕴含的知识绝不是目前的我们能够完全了解的。硬件的排列虽然杂乱无章,但是都是严格遵循冯·诺伊曼体系结构的

由于我们是应用层开发方向,硬件层暂不细究

2.2 驱动层

单单只有硬件是不够的,例如:内存何时从输入设备读取数据,读取多少?数据何时从内存刷新到输出设备?等等,由于这些东西都和内存有关,所以可以引入软件来做这些事,而这个软件就是”操作系统(Operator System)”

那么这就有个问题,OS直接和硬件交互吗?当然不是

举个例子:我们最熟悉的输出方式就是内存把数据打印到显示器上让我们看到,但是我们也知道网卡也可以作为输出设备,所以将数据打印到屏幕上和网卡往网络里发送数据是两种完全不同的数据输出形式,那么OS的内核源代码就需要针对各种不同的输出形式进行重新编译,这相当于把OS和硬件层合为一体了,维护成本巨大。所以我们在硬件层和OS层中间加上了驱动层,驱动层的工作就是单独去控制底层硬件。

例如网卡有网卡驱动,硬盘有硬盘驱动,声卡有声卡驱动等等,每个硬件都有对应的驱动,OS就用某种技术想办法将所有驱动识别成一种类型然后单独针对该类型进行管理,这样就能完成OS层和硬件层的解耦。

2.3 操作系统层

操作系统是一款搞管理的软件,管理啥呢?主要管理下面着四个:

①内存管理:内存的分配,共享,扩张和保护等等

②驱动管理:对计算机设备驱动程序的分类,更新和删除等操作

③文件管理:文件的存储空间的管理,目录管理,文件各种操作管理以及文件数据等管理

④进程管理:主要负责进程的调度

2.4 用户层

OS之上就是用户层,就是我们所处的位置,在这里我们可以用命令行或是图形化界面进行各种操作

2.5 系统调用接口

但前面也说了,“ 人 ” 不适合直接与系统打交道,所以OS为了保护自己,只堆上暴露了一些接口供用户使用,而不会让用户直接访问操作系统,这一系列接口我们成为系统调用接口

2.6 用户调用接口

虽然系统调用能方便我们操作,但是它的学习和使用成本对普通用户来说还是太高太高,所以能够让用户更好的访问操作系统,在系统调用之上构建除了“ 库 ” 的概念,比如我们使用的printf和scanf,就是库给我们提供的,这些库又对系统接口进行封装等处理,从而让普通用户能够高效使用

一个好的产品是把用户当傻瓜的,要想想办法让用户用起来又快又爽,抖音就是一个让用户用起来又快又爽的成功例子,上至80岁的老人,下至10岁的小孩都能用抖音刷视频。

操作系统也是这样,所以有了服务层:shell外壳(主要是Linux)和图形化界面(主要是Windows)

第三方库也就是这样,对操作系统的各种接口进行再封装,如果说操作系统的服务层是为了更好服务用户,那么第三方库激素更好地方便程序员编写代码(C,C++,Java,Python等)

三,操作系统管理的精髓 —— 先描述,再组织

操作系统是一款纯正的“搞管理”的软件,那么OS是如何做到管理这么多东西的呢?

要想学号操作系统,就必须正确理解什么是“管理

3.1 什么是先描述?

我们来举一个简单的例子,如下图:

一个学校有三个角色,为学生,辅导员和校长,校长是管理者,学生是被管理者,那么辅导员充当什么角色呢?

我们先了解下什么是“ 决策 ”和“ 执行 ” 

完成任何一件事都要经过两种过程:

①首先是绝对一件事要不要做和如何去做 —— 决策

②然后就是具体落实做这件事 —— 执行

校长作为管理者管理学生,那么校长就是决策的那个人,但是校长一般不 直接执行决策,会把决策交给辅导员去执行,所以辅导员扮演的角色就是“执行者”,执行管理者的决策。

 虽说校长是管理学生的,但是我们一般在学校是根本遇不见校长的,校长也没有单独和我们见面,那么校长是如何做到不和我们本人进行交流的情况下对我们进行管理的呢?

我们第一次入学前,都会把我们的信息录入学校数据库,比如基本信息,成绩信息,社会面貌等等信息,我们可以讲:这些信息描述了一个学生

这这种信息描述学生的方式,我们在C语言有一个东西叫做“结构体”,在C++等OO语言中我们叫做“面向对象”,操作系统也一样,由于Linux是用C语言写的,所以底层就是用的结构体作为描述的基本单位,讲底层的各种部件全部抽象成结构体,这就是“先描述

3.2 什么是再组织

校长就通过这些信息的管理就实现了对学生的管理。当学生数量躲起来了,校长就可以把这些信息组织起来,用链表,顺序表,树等结构把这些描述学生信息的结构体全部搞成数据结构

这样,校长就只需要对上面双链表进行增删查改,就可以间接实现对很多学生的管理。有新生入学时就增加一个节点,有人毕业时就删除节点、

操作系统也是如此,以Linux为例,当系统中结构体很多时,就可以用各种数据结构把结构体全部串联起来,然后OS只需要对数据结构进行各种操作,就可以完成对结构体的操作,这就是“再组织” ,这套原理适用于所有操作系统,网络也是

3.3 总结

管理者要管理被管理者,实际上是先用各种信息对被管理者进行描述,然后讲很多个这种描述的信息用特点数据结构组织起来,最后管理者管理被管理者其实就是对数据结构的管理,这样可以大大减少管理者管理的成本,而且能够大大提高管理者管理的效率,是现代计算机操作系统设计的精髓所在

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

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

相关文章

php反序列化以及相关例题

目录 一、什么是序列化和反序列化? 二、相关函数 serialize()函数: unserialize()函数:反序列化 三、PHP序列化格式 四、序列化与反序列化的作用 五、各种数据类型序列化后的效果 六、魔术方法 七、反序列化的一些绕过 八…

国家开放大学《TRIZ技术创新方法应用培训》形考任务和终考任务作业参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 参考答案包含 形考任务项目报告、终考任务 、单元测试、随…

【IDEA】IDEA自带Maven/JDK,不需要下载

IDEA是由Java编写的,为了保证其运行,内部是自带JDK的。IDEA 2021 及 之后的版本是自带Maven的: 视频连接: https://www.bilibili.com/video/BV1Cs4y1b7JC?p4&spm_id_frompageDriver&vd_source5534adbd427e3b01c725714cd…

LeetCode 105.从前序与中序遍历构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,nul…

【Oracle】python调取oracle数据教程

目录 (1)安装python和相关库 1.python的下载和安装 2.python安装cx_Oracle库和pandas库 3.本机安装instantclient 数据库客户端 先安装instantclient 然后设置环境变量 (2)准备好连接Oracle数据库地址等五项信息 &#xf…

C++的演变与未来:编程艺术的持续进化

在计算机编程的演变历程中,C以其独特的魅力和强大的功能,一直占据着不可或缺的地位。从最初的面向对象编程,到如今的跨平台、高性能应用,C在不断地适应和推动着计算机技术的发展。本文将深入剖析C的演变过程,展望其未来…

深入探索 C++ 中 string 的用法:从基础到实践

C String 用法详解 C中的 std::string 是一个非常强大且灵活的类,用于处理字符串。std::string 类是C标准库中的一部分,它提供了丰富的成员函数来执行各种字符串操作,如连接、比较、查找、替换等。在本篇博客中,我们将深入探索 s…

张大哥笔记:学什么都不如学赚钱

很多人总是这样认为:好好读书,考上好学校,将来可以找到一份不错的工作,这样的思想观念,可能会导致你一辈子都无法实现财富自由。 财富的多少,和你的努力程度没有直接关系。我们可以清楚看到那些每天辛苦劳动…

【Linux 系统】进程信号 -- 详解

⚪前言 注意:进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品,在等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递&a…

《MySQL对库的基本操作》

文章目录 一、查看数据库列表查看数据库中的所有表想知道当前处于哪个数据库里 二、创建一个数据库三、删除一个数据库知道两个集1.字符集2.校验集修改数据库的字符集和编码集 不同的校验码对数据库的影响四、数据库的备份与恢复注意事项:备份数据库中的表 总结 一、…

HTTP/1.1、HTTP/2、HTTP/3 的演变

HTTP/1.1、HTTP/2、HTTP/3 的演变 HTTP/1.1 相比 HTTP/1.0 提高了什么性能?HTTP/2 做了什么优化?HTTP/3 做了哪些优化? HTTP/1.1 相比 HTTP/1.0 提高了什么性能? HTTP/1.1 相比 HTTP/1.0 性能上的改进: 使用长连接的…

Python 在windows环境下加密文件成.pyd格式

首先 pip install easycython然后打开在要加密的文件同一目录下cmd命令框,命令行里键入 easycython 你要加密的文件.py 最后会在目录下看见有个.pyd的文件,只保留这个文件,剩下的都删了,其他引用该文件的python文件该咋用咋用。…

AI泳池溺水监测识别摄像机

AI泳池溺水监测识别摄像机是一种利用人工智能和机器视觉技术的创新设备,旨在确保游泳池安全,并及时识别溺水事件,以减少溺水事故的发生。这种摄像机利用高清摄像头和AI算法,能够实时监测泳池中的情况,并自动识别溺水事…

Redis---------实现短信登录业务

目录 基于Session的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 基于Redis的短信登录 ①首先看他的业务逻辑 ②进行代码逻辑处理 Controller: Service接口: Service实例: Mapper: 封装ThreadLocal线程的数据操作&#x…

Sublime Vim模式配置:q关闭当前标签页

在Sublime安装目录下的->Packages文件夹下新建User文件夹创建文件Vintage.sublime-commands 路径为Sublime安装目录->Packages->User->Vintage.sublime-commands文件内容如下[{"caption": ":w - Save","command": "save"}…

天地图路径规划功能实现

目录 1、天地图路径规划2、路径规划3、参数说明4、Demo 1、天地图路径规划 天地图Web服务API为用户提供HTTP/HTTPS接口,即开发者可以通过这些接口使用各类型的地理信息数据服务,可以基于此开发跨平台的地理信息应用。 Web服务API对所有用户开放。使用本…

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

【LAMMPS学习】八、基础知识(5.3)Body particles体粒子

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

python笔记:gensim进行LDA

理论部分:NLP 笔记:Latent Dirichlet Allocation (介绍篇)-CSDN博客 参考内容:DengYangyong/LDA_gensim: 用gensim训练LDA模型,进行新闻文本主题分析 (github.com) 1 导入库 import jieba,os,re from ge…

【C++】详解string类

目录 简介 框架 构造 全缺省构造函数 ​编辑 传对象构造函数 拷贝构造 析构函数 容量 size() capacity() empty() clear() reserve() ​编辑 resize() 遍历 检引用符号"[ ]"的重载 迭代器 begin() end() rbegin() rend(…