【Linux】-操作系统

news2024/11/29 23:36:36

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

🍓🍓系列专栏:深入代码世界,了解掌握 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.coloradmin.cn/o/2250071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1)google浏览器下载Get cookies.txt LOCALLY插件2)导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1)使用Pycharm(2024.3)进行代码…

Mybatis集成篇(一)

Spring 框架集成Mybatis 目前主流Spring框架体系中,可以集成很多第三方框架,方便开发者利用Spring框架机制使用第三方框架的功能。就例如本篇Spring集成Mybatis 简单集成案例: Config配置: Configuration MapperScan(basePack…

C51相关实验

C51相关实验 LED (P2 / 0~7)蜂鸣器 (P2^5)数码管 (P0 0~7 段 ,P2 2~4 位)独立按键 (P3^1 P3^0 P3^2 P3^3)直流电机 (J47 5v 01~04)综合实验矩阵按键 (P1组 0~7)LED点阵 LED (P2 / 0~7) //功能:1.让开发板的LED全亮,2,…

C++语法·叭

阁下何不乘风起,扶摇直上九万里。 qi fei 目录 内存管理 分区介绍 1.栈区: 2.内存映射段: 3.堆: 4.数据段: 5.代码段: 补充: C内存管理(简略回忆) C内存…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息,以便了解Mysql数据库的运行情况,日常操作,错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份:全部都备份一遍表备份:只提取数据库中的数据&#xff0…

矩阵重新排列——rot90函数

通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法: r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘

挑战用React封装100个组件【001】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景,比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {ti…

联通云服务器部署老项目tomcat记录

1.先在服务器上安装mysql和tomcat 2.tomcat修改端口 3.在联通云运控平台配置tomcat访问端口(相当于向外部提供可访问端口) 4.将tomcat项目放在服务器tomcat的webapps里面 5.在mysql里创建项目数据库,运行sql创建表和导入数据 6.在配置文…

Python 删除Word中的表格

在处理Word文档时,我们经常会遇到需要删除表格的情况。无论是为了简化文档结构,还是为了更新内容,删除表格都是一个常见的操作。但是通过手动删除不仅耗时,而且容易出错,本文将介绍如何使用Python通过编程删除Word中的…

讯飞语音转写WebApi 【JS语言】

讯飞语音转写 API 文档 文档地址:https://www.xfyun.cn/doc/asr/ifasr_new/API.html 看到没有 js 版本的 demo(音频流模式),所以就搞了一个分享出来 在 React Native 运行环境下测试有效。 1、生成 signa import axios from a…

c++基础开发环境vscode+mingw-w64

c开发需要的基础有两个:编译环境,开发环境。 最简单的编译环境可以用gcc,cl,clongllvm; 开发环境最简单直接用文本编辑器就可以。 但是实际开发都会用ide来做,现代的ide即有开发环境可以写代码,自动补全&am…

DBA面试题-1

面临失业,整理一下面试题,找下家继续搬砖 主要参考:https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1, 整形 tinyint,smallint,medumint,int,bigint;分别占用1字节、2字节、3字节…

LSTM卫星轨道预测(一)

一.多文件预测 代码详细解析 1. 文件读取与数据处理 功能 从 .sp3 文件中读取卫星轨迹数据。提取包括 Satellite_ID, X, Y, Z 等字段的信息。计算派生特征(如速度和加速度),便于后续建模使用。 主要函数:extract_sp3_data(fil…

如何通过智能生成PPT,让演示文稿更高效、更精彩?

在快节奏的工作和生活中,我们总是追求更高效、更精准的解决方案。而在准备演示文稿时,PPT的制作往往成为许多人头疼的问题。如何让这项工作变得轻松且富有创意?答案或许就在于“AI生成PPT”这一智能工具的广泛应用。我们就来聊聊如何通过这些…

格网法计算平面点云面积(matlab版本)

1、原理介绍 格网法计算平面点云面积,其思想类似高中油膜法计算面积。其将点云投影到水平面,再将点云划分成尺寸相同的格网。最后,统计格网内包含点的数量number,那么可利用如下公式计算得到点云的面积: Aeranumber*L…

无代码实现可视化GIS+模型+三维

现在的工具是越来越方便了,本来不是做前端的。可以节省很多的人力和时间,更快的搭建自己想要的可视化大屏,看例子 主要由三维的gis地图和模型加上二维的数据表格分析来实现这个可视化界面。 gis地图的设置 每一个gis都要设置世界远点&#x…

Jmeter中的监听器

3)监听器 1--查看结果树 用途 调试测试计划:查看每个请求的详细信息,帮助调试和修正测试计划。分析响应数据:查看服务器返回的响应数据,验证请求是否成功。检查错误:识别和分析请求失败的原因。 配置步骤…

kafka进阶_3.消费消息

文章目录 一、消费消息概览1.1、消费示例代码1.2、消费过程 二、消费者组2.1、push & pull2.2、消费者组 三、调度器Coordinator四、消费者分配策略4.1、引言4.2、分配基本流程4.3、分配策略4.3.1、轮询分配策略4.3.2、轮询分配策略 五、消费偏移量5.1、起始偏移量5.2、指定…

用VC2019+MFC 创建一个DLL封装MD工业相机库然后用EXE调用这个相机库采图并且显示

主要描述: 用VC2019MFC 创建一个DLL封装MD工业相机库,再建一个EXE调用这个相机库采图并且显示。 先创建库工程: 新建一个库工程, 创建完成,添加一个DllFunction.h头文件,一个DllFunction.cpp 源文件 拷贝…

ODB 框架

目录 概述 基本工作原理 映射C对象到数据库表 从数据库中加载对象 持久化C对象到数据库 ODB常用接口 表创建预处理 #pragma db Object table 数据表属性 id auto column(“xxx”) type("xxx") unique index null default&…