欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Linux】-操作系统

【Linux】-操作系统

2024/11/30 4:09:25 来源:https://blog.csdn.net/x3262551980/article/details/143695093  浏览:    关键词:【Linux】-操作系统

🔑🔑博客主页:阿客不是客

🍓🍓系列专栏:深入代码世界,了解掌握 Linux

欢迎来到泊舟小课堂

😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注

​​

一、冯•诺依曼架构(Von Neumann architecture)

1.1 冯•诺依曼体系

c819b7203ac34b7681fbc246694d9d1c.jpeg​ 冯诺依曼体系结构 (Von Neumann architecture) ,又称 "范纽曼型架构"。它是我们常见的计算机,如电脑、笔记本或服务器大部分都遵守的一个架构体系。

c28cad0d7833474583eea762bfc76c2d.png

  • 输入设备:键盘 | 话筒 | 摄像头 | 磁盘 | 网卡 | 写字板 ...
  • 输出设备:显示器 | 音响 | 打印机 | 磁盘 | 网卡 | 显卡 ...
  • [CPU]:运算器 + 控制器
  • 存储器:内存

📌 注意事项:

  1. 图中的存储器指的就是内存。
  2. 不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备),外设想要输入或输出数据,也只能写入内存或者从内存中读取。
  3. 所有设备都只能和内存打交道。
  4. 我们平常读文件就是从磁盘上读取,写文件都是写入到磁盘,这种操作我们就叫 I/O

1.2 存储器(内存)存在的意义

❓ 思考:为什么冯诺依曼体系中要存在 "内存" 这样的东西?

📌 数据角度:CPU 不和外设直接交互,而是和内存交互。(外设也是如此)

输入设备在输入数据时不是把数据直接交给 CPU 的,CPU 获取、写入数据都是在内存中进行的,所以需要把数据先从外设交给存储器,再将存储器当中的数据再被 CPU 读取,CPU 计算完后再将数据写回存储器,再由内存刷新回输出设备。因此在整个计算机体系当中,内存是属于数据层面上的核心地位。

🔨技术角度:不使用内存会拉低 CPU 的效率

数据是从一个设备 “拷贝” 到另一个设备的,体系结构的效率由设备 “拷贝” 的效率来决定,这个时候我们需要知道一个存储分级的概念:

在计算机中,有很多种存储,且存储的速度方面是有差别的。站在我们刚刚展出的冯诺依曼体系结构来看,就是 "输入设备" 是最快的,"输出设备" 是最慢的。存储器是适中的,如果我们此时不考虑内存的存在:

4533ba2b8ed24794a04f54fa2fa7a53d.png

根据木桶原理,总效率就取决于效率最低的设备,CPU 需要长时间等待输入设备,这就大大拖慢了计算机 CPU 的效率。

但就算加了内存,根据木桶原理最慢的还是输入输出设备啊?似乎并没有什么改变,为了解决这个问题,我们需要了解内存的概念。

内存作为“中介”设备还起到一个缓冲的作用,因为它的效率比输入设备与输出设备快的多,但又比中央处理器慢。并且内存还有一个优点就是:提供预载数据的能力

根据局部性原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。虽然内存的数据慢于寄存器,但内存的空间更大,能存储更多的临时数据,所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据,大大提升效率。

💰成本角度:造价成本:寄存器 gif.latex?%5Cgg 内存 gif.latex?%5Cgg 磁盘 (外设)

既然输入输出设备所在的区域效率这么低,我们制造一个很大空间的寄存器,我们把输入输出,内存等设备全部丢进寄存器不就好了?你如果想的话当然可以这么做,那计算器确实也变得很快,但这样做很贵啊!效率确实是高了,但我们普通人存储临时数据使用昂贵的寄存器太浪费了啊!

💡 内存的意义:使用较低的钱的成本,能够获得较高的性能。因为内存的存在,我们现在可以用不多的钱买上一台性价比不错的电脑,这就是内存的最大价值,这也是互联网存在的基础。

二、操作系统

操作系统是一款软件,用来进行对软硬件资源进行管理的软件。任何一款计算机系统都包含一个基本的程序集合,我们称之为操作系统(gif.latex?%5Ctextrm%7BOS%7D)。

操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库,shell 程序等)

2.1 为什么要有操作系统

首先我们知道在计算机的底层存在各种硬件设备,这些硬件设备通过冯•诺依曼体系结构联系在一起。

画板

但是仅有这些硬件是不够的,还需要一个软件来对这些硬件进行系统化管理。例如:内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这个软件就是我们所谈论的操作系统。

一般而言,操作系统为了保护自己的内在结构,并不会将源码呈现给用户,而是而是封装出一些接口提供给用户。这些接口一般被称为系统调用接口,但是这些接口对于普通用户来说具有一定的使用成本,因为用户必须要先对操作系统有一定了解,为了方便用户,所以又对系统接口进行封装形成我们的用户操作接口,常见的用户接口有各种库如libc以及部分指令,我们一般在实际编写的过程中调用各种的函数printf,scanf就是来源于这些库。

而最上层还有一层用户层,一般是由我们用户通过指令或图形化界面进行各种操作。

我们可以得出以下几个结论:

  1. 软硬件体系结构是层状结构
  2. 访问操作系统,必须使用系统调用(函数)
  3. 任何程序只要访问了硬件,那么它就必须贯穿整个操作系统
  4. 库可能在底层封装了系统调用,比如 printf,cout 等 

管理的目的:① 对上:提供一个良好稳定的运行环境    ② 对下:管理好软硬件资源。

而我们今天要重点谈论的就是 "管理",什么叫做管理?如何理解?

2.2 对管理的认识

定位:在整个计算机软硬件架构中,操作系统的定位是一款纯正的 "搞管理" 的软件。

我们先看看人是如何做事的,人做事:

决策  gif.latex?%5Crightarrow  执行

比如今天我打算晚上跟朋友一起开黑,这就是决策。晚上吃完饭你很喊朋友上号,然后一起开黑去了,这就是执行。这就是 决策过程 和 执行过程 ,虽然决策和执行在我们人身上似乎是混合体的,我决策我执行。但是计算机中,为了能够做更好的功能解耦,决策和执行实际上是可以分离开来的。

"有人负责决策,也有人负责执行。"

举个学校的例子,校长做决策,辅导员去执行。校长连我的面都不见,如何管理我呢?管理你要和你打交道,要和你见面吗?他是怎么做到的?

管理的本质:不是对管理对象进行直接管理,而是只要拿到管理对象的所有的相关数据,我们队数据的管理,就可以体现对人的管理。

这是我又有一个问题了,如果你说它连我的面就不见,他又是如何拿到我的数据的呢?执行者可不是只拿数据,还可以落实对应的政策。

2.3 先描述再组织

对管理的进一步理解:人认识世界的方式 —— 人是通过属性认识世界的一切事物都可以通过抽取对象的属性,来达到描述对象的目的。

继续刚才的例子,如果你自己就个是个当过程序员的校长,你想管理学校的同学,那么就可以抽取所有同学的属性,描述对应的同学,我们知道 Linux 内核代码是由C语言写的。

那么C语言中有没有一种数据类型,能够达到描述某种对象的功能?他就是 —— struct

struct student
{学生的基本信息(身高,姓名,年级,电话...)   在校基本信息(专业,班级,年级)考试成绩(平时成绩,期末成绩)学校活动(...学生会, 班长?)其他信息struct student* next;struct student* prev;
};

如此一来,对学生的管理,就变成了对链表的增删查改。然后我们在有头插、尾插的各种方法。现在如过我想找到考试成绩最好的学生,只需要遍历整个链表,找到那个学生的结点即可。再比如,学校的挂科率太高了,要整治一下这个问题,我们就执行一个排序算法,以绩点排序。按升序排列,找到若干名排在前面的绩点低的学生,再通过自带的信息联系到辅导员,进行管理。

管理的本质:对数据做管理 gif.latex?%5Crightarrow 对某种数据结构的管理,管理的核心理念 ——

" 先描述,再组织。"

所谓的管理,其实就是 "先描述,再组织。"

  • 描述:用 struct 结构体
  • 组织:用链表或其他高效的数据结构

 2.4 系统接口

OS 为什么要给我们提供服务呢?因为计算机和 OS 设计出来就是为了给人提供服务的。

printf or cout \rightarrow 向显示器打印,显示器是硬件,所谓的打印,本质就是将数据写到硬件。你自己的 C 程序,有资格向硬件写入吗?你是没有资格这么做的。

那么要如何提供服务?操作系统不相信任何人的,不会直接暴露自己的任何数据结构,代码逻辑,其他数据相关的细节。想做系统是通过 系统调用 的方式,对外提供接口服务的。Linux 操作系统是用C语言写的,这里所谓的 "接口",本质就是C函数。我们学习系统编程,本质上就是学习这里的系统接口

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com