LINUX入门篇【8】----计算机组成原理以及OS知识的总结

news2025/1/19 15:07:08

前言:

从而本篇文章开始,我们将进入LINUX的进程篇,但学习进程之前,我们首先需要重新认识我们的计算机,并且正确认识到控制进程的OS,即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了解一下吧。

1.计算机的组成结构:冯诺依曼体系结构

在计算机发展的早期,曾经有很多人都纷纷提出了计算机的组成结构理论,但是,广泛被认可并采纳的是冯诺依曼体系的计算机结构,到这里我们不禁要问,为何一定要采用冯诺依曼体系呢?各种体系去构成不同的计算机结构不是更好么?针对这个疑问,下面就让我们从冯诺依曼体系出发去重新认识一下计算机:
冯诺依曼的体系结构的组成如下:
在这里插入图片描述
这便是我在网上找到的一张冯诺依曼体系的结构图,首先我们要明确,冯诺依曼体系针对的都是硬件,而非软件,在硬件与硬件之间起到串联关系的是数据线。
你可以发现其体系由五部分构成:
1.输入设备:
包括键盘,话筒,摄像头,usb接口,鼠标,ssd(固态硬盘),磁盘,网卡,显卡等
2.存储器:
即是内存
3.运算器/控制器:
在这里我们可以将其看成是一样东西,其内部包含计算机最关键的CPU处理器,寄存器设备等,CPU处理数据的速度大概是以纳秒为单位的,运算速度极快
4.输出单元:
如显示器,喇叭,打印机,磁盘,网卡,显卡等各种设备

这么多的硬件设备,如果不加以管理就会纷乱复杂,故这时OS(操作系统),便成为了管理他们的基本系统,LINUX操作系统的内核几乎都是由C语言去写的,这体现了C语言在嵌入式方面的独特之处,但同时它也包含一些汇编代码,X86,X64,AT&T等,通过这些代码,硬件设备得以被合理而有规律的调用,但是要知道,程序之间的流通是需要数据流动的,既然操作系统可以管理所有的数据,这意味着它管理的数据是都由有存储数据的能力的,故我们可以总结出这样一句话:
计算机内几乎所有的设备,都有数据存储的能力,之不过是存储能力大小的问题!

计算机的存储分级:

在一台以冯诺依曼为体系的计算机中,不同的硬件的存储速度是有很大差别的,其大致的速度排序为:
首先最快的是CPU,它是处理数据最快的硬件,其次是内存,然后是磁盘等各种外设,不过吗,现在的电脑基本使用的都是固态硬盘ssd而非磁盘,但你可以对其存储速度看作一个等级的硬件,由存储速度的区别,我们对计算机进行了一个存储分级,如下:
在这里插入图片描述
这张如同金字塔图片便是我们的计算机的存储分级图,这张图从上往下,以CPU为中心,其距离依次离CPU越来越大,运算速度越来越慢,价格也随之降低,以至于形成了存储的分级。那这样的好处是什么呢?
看一看你现在所使用的电脑,要知道,最早的时候计算机是一个庞大且造价昂贵的科学机器,但现在它却成为了几乎普及于全世界大部分人手中的一个通信工具,这正是因为存储分级带来的成本降低。
我们通过存储分级,让最核心的金钱全部投入到最核心的CPU上,然后依次向下降低我们的成本,这样就可以得到一台运算速度很快同时价格划算的平民化计算机,以至于计算机得以推广和普及,从而推动了互联网产业的发展。
是的,我想说到这里,我们为何采用冯诺依曼体系的答案应该已经显而易见了,任何科学产品最终都是要服务于大众的,而大众意味着降低成本和价格,因此,冯诺依曼体系才由此成为了现代计算机组成结构的鼻祖和框架。

以存储分级的知识为延申,我们可以想到这样一个问题,为什么我们写程序时数据都是直接进入到内存中而不是其他硬件上的呢?
由上面的分级图,答案也是显而易见的,我们都知道木桶原理,即一个木桶的盛水量往往不取决于最长的那一块木板,而是取决于最短的那一块,计算机的运行也是如此,CPU之下的便是内存,倘若CPU直接与硬件交互,就会显著降低计算机整体的运算速度,故CPU只与内存交互,保证第一快和第二快交互从而保证了核心的运算速度不会被影响,所以,这便是为何我们的CPU只与内存交互而不与其他硬件交互。
在这里插入图片描述

由冯诺依曼体系引发的一些思考:

1.程序在运行前,必须先加载到内存,为什么?

程序等于代码加数据,而这些代码和数据最终都要由CPU来进行处理,由前面我们知道,CPU只和内存交互,故这决定了CPU会从唯一可以交互的内存中读取数据,他们之间的交互是“二进制数据形式”的,从而形成了可执行程序.exe,被保存到磁盘中,这个是由体系结构决定的

2.两个不同的用户在不同地区使用同一款软件,并且打开各自的对话框开始对话,发送信息,从硬件层面上来解释这个信息的流动:

首先,我们的两个用户所使用的两台计算机本质上就是两台冯诺依曼体系结构体,由此,第一个用户首先通过输入设备键盘将数据传递给存储器内存,然后内存流动给CPU进行运算处理好后再传给其对应的输出设备网卡,网卡通过网络传输传递给另一个用户的输入设备接收,另一个用户的输入设备接收后立刻重复上面第一个用户的过程,CPU会解析资源包,最后显示在第二个用户的屏幕上,同时,第一个用户自己发送的信息也会被自己的输出设备显示在自己的屏幕上,这边完成了硬件层面上的信息流动。其示意图如下:

3.那两个用户之间的文件传递也是如此么?

本质上传输文件的过程和发送信息是相同的,唯一不同的是,会从第一个用户的文件中拷贝一份数据进入到输入设备中,然后重复第二个问题的过程,传入的数据经过CPU处理后会直接存入到对方的磁盘(文件)上,所以这也是为什么我们接收的文件都是以文件形式展开的,并且点击后会自动存在我们的电脑的目录中。

2.操作系统OS:

1.何为操作系统:

操作系统本质上是一款软件,可以对软硬件资源进行管理,让软硬件资源分配调用合理化。

2.为什么要有操作系统:

这个问题也可以理解为操作系统的目的,在我看来,试想这样一个情况,倘若没有操作系统,你的硬件管理是混乱的,其最大的反应在于你的游戏方面,你会发现你的游戏渲染一团糟,显卡在应该起作用来精细化图形的时候不调用,音乐随意响起而不是针对特定的时刻调用,语音交流无法进行,甚至到了最后屏幕直接关闭,你甚至看不到屏幕,如果没有操作系统,硬件的调用会非常混乱,故通过操作系统的使用,软硬件资源将会被管理好,这会为用户提供良好,稳定,高效且安全的使用环境,这便是操作系统存在的意义。

3.计算机结构的层状分析图:

在这里插入图片描述
这个便是我们的计算机结构的层状分析图
我们发现,一个计算机的硬件之上分别是,底层硬件,驱动程序,操作系统,系统调用接口,用户操作接口,用户这6个方面。
我们以操作系统为分界线,将整个计算机的层状结构分为上下两层,下面让我们从硬件底层出发去向上解析。

1.底层下三层部分:

我们把底层硬件,驱动程序,操作系统看作我们的底层下三层,由前面的操作兄系统的概念我们知道,操作系统是来管理软件也管理硬件的,也就是说,操作系统是管理底层硬件的,这是他们之间的关系,但是,这里我又要提出一个问题,所谓的操作系统的管理,它管理的是什么呢?

扩展补充:何为管理?

在人类的社会中,基本上存在着2种人,管理者和被管理者,所谓的管理者,他们其实就是来做决策的,而被管理者就是去执行实施管理者所做出的决策指定的计划和方法的。但是,由金字塔结构可知,管理者毕竟是少数,他们的数量可能会远远少于被管理者,但是,对于管理者而言,他的每一步决策又必须符合被管理者群体的意向和利益,想要知晓被管理者的意向,就要依次去调查被管理者,这个过程是及其麻烦而且低效的,同时这样去收集数据又杂乱无章,那么,能否通过一些共有的数据去衡量每一个被管理者,从而做出正确的决定呢?由此,一个囊括被管理者基本数据的表格便被建立的出来,而管理者通过收集到的数据来做出实际的决策,这样既符合了自己的利益,也符合了被管理者的利益。
上述的过程中我们会得出这样的一些结论:
1.管理者是不直接去管理被管理者本身的,而是通过管理被管理者的一些数据去做出决策,我们把这些数据称之为被管理者的属性
2.管理者想要做出决策,必须需要数据,这个数据需要一个提供方和收集方,同时这个数据必须有普遍性,即任何人都能存在这些数据,从而对任何一位被管理者进行系统的管理

而既然是数据,就会遇到数据量大管理复杂的问题,故必须寻求一个高效且符合实际的方法来管理数据,也就是对数据管理进行建模的过程,从而可以统一处理更为庞大数据量。在这里,我们通常采用“先描述,再组织”的方式来进行,先通过描述我们的需求,从而组织起来我们的适配容器来管理存储数据。
由此——————先描述,再组织,这便是我们管理的核心,也同时是我们任何程序开发以及编程语言逻辑的核心观念!!!!!!
比如我们在制作贪吃蛇小游戏的时候:我们首先考虑的是根据蛇的情况去构建一个关于蛇的结构体,这个便是我们去描述蛇的过程,当我们描述完蛇后,我们才去考虑蛇的移动,游戏判定的问题,这个便是组织的过程,我们所写的任何程序实际上都离不开我们的核心6个字,所以,我们一定要反复思考和理解这六个字,字数虽少,但是很精炼。
管理的概念清晰了之后,我们再回到下三层结构来:
在这里插入图片描述
在这三层结构中,我们的操作系统自然是管理者,而硬件就是被管理者,而驱动程序是干什么的呢?上面说过,我们的操作系统作为管理者,它是需要被管理者的数据的,所以需要有一个人来把数据传给管理者,而这个人就是我们的驱动程序,它将负责把数据传给操作系统,然后让操作系统做出决策再将下一步的动作由驱动程序告知给硬件,从而硬件做出对应的反应和调用。而反应给操作系统的数据,其实本质就是大量的结构体和指针变量的数据,他们管理着硬件的状态和硬件的属性,结构体也体现了描述的过程,而我们修改的也是这些结构体和指针。由此我们可以得知:在操作系统内部,一定存在着大量的数据对象和数据结构,用来控制状态和管理数据。
而操作系统的管理主要在这几个方面:
1.进程管理
2.内存管理
3.文件/IO管理
4.驱动管理

这便是下三层数据之间的关系。

如何进一步理解:先描述,再组织?
人是通过属性来认识世界上任何事情/事物的,而一个人或者事物的重要的属性集合在一起就是这个人或者事物本身

比如我们形容我们自己:往往从相貌,身高,性格,年龄等基本方面去形容,从而让我们形成了一个具体的人物本身

2.上三层用户部分:

操作系统管理的硬件数据是如何反馈给上层用户的呢?
这就要设计操作系统往上的用户层次了。

1.何为用户:

用户是什么呢?在我粗浅的理解中,用户广义上就是指使用电脑的所有人,而在狭义上指的就是利用电脑的开发人员,对于操作系统来说,它会为上层用户提供硬件信息数据,这个是操作系统的作用和职责所在,但操作系统由于直接与硬件交互,所以它反应的数据即是硬件的状态,这个是很危险的,例如键盘输入密码的数据一旦被获取,就会导致严重的密码权限泄露问题,所以,操作系统是不信任任何用户的,但是同时,它又要为其提供服务,因此,操作系统便采取了窗口这种方式来提供服务,一方面保护了数据的安全,一方面又可以为用户提供服务,你可以将其理解为银行的窗口。

2.数据向上如何被用户获取和用户的指令

在这里插入图片描述
而在这里,便指的就是系统调用接口,通过这个接口,数据既不会被泄漏,同时又能提供服务给上层用户。任何人想要访问操作系统,必须通过调用接口,这是唯一的通道。

数据被从接口向上传后,用户就可以得到信息或者通过接口向操作系统获取信息,执行这样的指令的便是用户操作接口,用户通过一些指令贯穿整个层状结构,间接通过操作系统和硬件交互。

但是,我们都知道,二进制代码和汇编代码本身晦涩难懂,虽然用户现在可以通过指令交互了,但是,由于很多用户水平参差不齐的问题,想要进行对应的指令依旧有难度,这是不利于计算机的普及的,因此,在基础上,又开发出了一层用户层面的指令操作,开发操作管理操作,他们将晦涩难懂的指令简化为更容易被用户接受和上手的指令,甚至形成了Windows这种直接图形化交互的更为简单直接的方式,你可以理解为是封装了各种库和程序包裹进行的,比如我们现在用的LINUX指令,本质上就是通过软件进行翻译为对应的操作系统指令进行的,同理,我们使用的编程语言也随之诞生。所以,任何创造编程语言的人,它必须提供两个东西:一个是这种语言的语言库,第二个便是针对这种语言的编译器。
由此,便诞生了我们之前提到的那张图:
在这里插入图片描述
今天我们再一次理解,我们的xshell外壳程序就是用户操作接口,而最外面的一层便是我们封装的一层简化的指令程序,而LINUX内核便包括了系统调用接口和操作系统。
如今我们可以这样理解:
在这里插入图片描述
在上一张图的基础上,我们进行更加细致的划分,从而让我们刚好的去理解整个操作系统和上层的关系。

由此,通过上述的总结:我们得出的结论是:一半一个用户想访问非常底层的OS数据或者访问硬件,必须贯穿整个层状结构,因为涉及到贯穿,所以用户就必须要通过系统调用,因此数据就会是安全的。
比如:我们的打印函数printf和cout这种的,基本在函数内部都封装了函数调用,只有这样才能间接跟屏幕这些硬件形成交互的关系和途径。

总结:

由此,我们的计算机组成结构和OS操作系统的知识就完毕了,我希望通过这篇文章你可以理解何为冯诺依曼体系以及为什么要使用冯诺依曼体系,OS存在的意义是什么?计算机层状结构中OS都充当着什么作用,何为管理,怎样理解“先描述再组织”这简短却十分重要的6个字,以及操作系统是怎样跟用户交互的,当这些问题都解决了,我们就有了学习进程的良好基础,为接下来学习进程做一个充分的准备!!

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

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

相关文章

第二十章:多线程

进程 线程的特点 1.进程是资源分配的最小单位&#xff0c;线程是最小的执行单位 2.一个进程可以有多个线程 3.线程共享进程资源 package twentyth;public class ThreadTest extends Thread {public void run() {for (int i 1; i < 10; i) {//继承重写方法System.out.p…

Thread的常用方法

一&#xff0c;常用方法 二&#xff0c;案例 父类&#xff1a; package ThreadLianXi;import ThreadLianXi.ZhiLeiA;public class Name {public static void main(String[] args)throws Exception{Thread t1 new ZhiLeiA("1号");//修改名字t1.setName("1号&quo…

文件夹批量改名技巧:高效整理文件,随机重命名文件夹

在日常生活中&#xff0c;经常要整理电脑上的文件和文件夹。其中&#xff0c;文件夹的命名是一个重要的环节&#xff0c;因为它可以帮助我们更好地组织和查找文件。有时候我们要对大量的文件夹进行重命名&#xff0c;这时就要使用一些技巧来提高效率。现在一起来看云炫文件管理…

【深度学习】卷积神经网络(CNN)

一、引子————边界检测 我们来看一个最简单的例子&#xff1a;“边界检测&#xff08;edge detection&#xff09;”&#xff0c;假设我们有这样的一张图片&#xff0c;大小88&#xff1a; 图片中的数字代表该位置的像素值&#xff0c;我们知道&#xff0c;像素值越大&#…

【Web】NodeJs相关例题wp

目录 ①[GKCTF 2020]ez三剑客-easynode ②[MoeCTF 2021]fake game ③[安洵杯 2020]Validator ④ [HZNUCTF 2023 final]eznode ⑤[CNSS] &#x1f3ed; EzPollution_pre ⑥[CNSS]✴️ EzPollution ①[GKCTF 2020]ez三剑客-easynode const express require(express); co…

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示用户自定义字符应用

基于基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍通过液晶显…

从零开始的c语言日记day36——指针进阶

一、什么是指针: 指针的概念:1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 ⒉指针的大小是固定的4/8个字节(32位平台/64位平台)。 指针是有类型&#xff0c;指针的类型决定了指针的-整数的步长&#xff0c;指针解引用操作的时候的权限。…

opencv-直方图均衡化

直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过调整图像的灰度级别分布&#xff0c;使得图像中各个灰度级别的像素分布更均匀&#xff0c;从而提高图像的对比度。 在OpenCV中&#xff0c;你可以使用cv2.equalizeHist()函数来进行直方图均衡化。 以下是一个简单…

Altium Designer 相同模块的布局布线复用-AD

1、利用交互式布线&#xff0c;将两个相同模块的元器件在PCB上分块显示。 在原理图中&#xff0c;框选某一模块电路、按快捷键 TS 切换到PCB编辑界面、工具>器件摆放>在矩形区域内排列&#xff08;可将模块中的器件都集中放置到矩形框内&#xff09;。2、为模块电路添加 …

缓存雪崩、击穿、穿透_解决方案

文章目录 缓存雪崩、击穿、穿透1.缓存雪崩造成缓存雪崩解决缓存雪崩 2. 缓存击穿造成缓存击穿解决缓存击穿 3.缓存穿透造成缓存穿透解决缓存穿透 缓存雪崩、击穿、穿透 一般用户数据存储于磁盘&#xff0c;读写速度慢。 使用redis作为缓存&#xff0c;相当于数据缓存在内存&a…

笔记59:序列到序列学习Seq2seq

本地笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\3.循环神经网络\第9章&#xff1a;动手学深度学习~现代循环神经网络 a a a a a a a a a a a a a a a

HTML实现简易计算器

随便写的&#xff0c;可能有bug&#xff0c;可以在评论区指出哈。 HTML代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>AI简易计算器</title> </head> <body> <table id"c…

JMeter集结点的使用场景以及如何使用?

JMeter是一个开源的负载测试工具&#xff0c;它被广泛用于测试应用程序、Web服务和网络协议等的性能。在JMeter中&#xff0c;集结点&#xff08;JMeter Cluster&#xff09;是一种分布式测试环境&#xff0c;它允许多个JMeter实例同时工作来模拟高并发负载。 使用集结点的场景…

jQuery的学习(一篇文章齐全)

目录 Day29 jQuery 1、jQuery介绍 2、jQuery的选择器 2.1、直接查找 2.2、导航查找 3、jQuery的绑定事件 案例1&#xff1a;绑定取消事件 案例2&#xff1a;模拟事件触发 4、jQuery的操作标签 tab切换案例jQuery版本&#xff1a; 案例1&#xff1a; 案例2&#xff…

virtualbox 扩展磁盘后在win10 虚拟机看不到新扩展的空间

造成标题中问题的原因是&#xff0c;扩展的是win10.vdi 的空间&#xff0c;虚拟机使用使用的下边那个以uuid命名的空间&#xff0c;将这个磁盘的虚拟分配空间也调整到150G . 然后在win10的磁盘管理里就可以看到新加的空间了。之后再点相应的盘进行扩展卷操作即可。

“云浮云福保”暖心回归! 保障升级价格不变,医保个账可为全家缴费!

11月22日&#xff0c;2024年“云浮云福保”项目启动会在广东省云浮市迎宾馆成功举办。记者在会上获悉&#xff0c;“云浮云福保”是在云浮市医疗保障局、云浮市金融工作局、国家金融监督管理总局云浮监管分局指导下&#xff0c;的指导下&#xff0c;由中国人民财产保险股份有限…

12-25v转3.3v高清水下钓鱼摄像头电源供电芯片方案

高清水下钓鱼摄像头电源芯片方案&#xff1a;12-25V转3.3V&#xff0c;支持超宽电压输入范围和30米长线视频放大 在水下钓鱼摄像头设计中&#xff0c;为了实现高清画质和稳定的电源供应&#xff0c;需要一款能够将12-25V转换为3.3V输出的高效电源芯片。这款电源芯片不仅支持高…

【Python大数据笔记_day11_Hadoop进阶之MR和YARNZooKeeper】

MR 单词统计流程 已知文件内容: hadoop hive hadoop spark hive flink hive linux hive mysql ​ input结果: k1(行偏移量) v1(每行文本内容)0 hadoop hive hadoop spark hive 30 flink hive linux hive mysql map结果:k2(split切割后的单词) v2(拼接…

thinkphp文件夹生成zip压缩包

一、准备工作&#xff0c;使用phpinfo()查看有没有zip扩展 <?php echo phpinfo(); ?>Thinkphp使用PHP自带的ZipArchive压缩文件或文件夹 显示enabled 说明已经配置好 如果没有安装扩展的&#xff0c;请参照以下方法&#xff1a; 1、下载对应版本的扩展包&#xff1a…

基于SpringBoot+Vue的体检预约管理系统

基于SpringBootVue的体检预约管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 用户界面 摘要 体检预约管理系统是一种基于Spring Boot…