【Linux】-操作系统

server/2024/12/2 19:53:53/

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

🍓🍓系列专栏:深入代码世界,了解掌握 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函数。我们学习系统编程,本质上就是学习这里的系统接口


http://www.ppmy.cn/server/146821.html

相关文章

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具,可以构建,打包,部署项目,还可以管理…

【逐行注释】自适应观测协方差R的AUKF(自适应无迹卡尔曼滤波,MATLAB语言编写),附下载链接

文章目录 自适应R的UKF逐行注释的说明运行结果部分代码各模块解释 自适应R的UKF 自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter&…

【机器学习】梯度消失和梯度爆炸问题

梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)是深度学习训练过程中常见的两种问题,尤其是在使用深层神经网络(如深度卷积神经网络或循环神经网络)时。这两种问题都会对网络的训…

Java基础常用类库全解析

一、引言 Java 基础常用类库是 Java 编程的重要基石,本文将深入解析这些类库,帮助读者更好地理解和运用 Java 语言。 在 Java 编程中,基础常用类库为开发者提供了丰富的工具和功能,极大地提高了开发效率。这些类库涵盖了多个方面&…

【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍

数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…

实时数据开发|Flink实现数据输出--DataSinks操作

哇哦,又是快乐周五!今天主管又又又请我们喝奶茶了,是乐乐茶的草莓新品。甜甜的草莓配上糯叽叽的麻薯,喝完好满足。这应该不是什么加班信号吧哈哈哈,不加不加周五要回家。 前几天被不同的bug缠身,今天终于正…

网络安全——浅谈HTTP协议

HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…

分布式项目使用Redis实现数据库对象自增主键ID

hello。大家好,我是灰小猿,一个超会写bug的程序猿! 在分布式项目中,数据表的主键ID一般可能存在于UUID或自增ID这两种形式,UUID好理解而且实现起来也最容易,但是缺点就是数据表中的主键ID是32位的字符串&a…