建网站怎么做,中小企业网络规划与设计,临沂定制网站建设公司,怎样建立网站赚钱前言#xff1a;
从而本篇文章开始#xff0c;我们将进入LINUX的进程篇#xff0c;但学习进程之前#xff0c;我们首先需要重新认识我们的计算机#xff0c;并且正确认识到控制进程的OS#xff0c;即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了…前言
从而本篇文章开始我们将进入LINUX的进程篇但学习进程之前我们首先需要重新认识我们的计算机并且正确认识到控制进程的OS即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了解一下吧。
1.计算机的组成结构冯诺依曼体系结构
在计算机发展的早期曾经有很多人都纷纷提出了计算机的组成结构理论但是广泛被认可并采纳的是冯诺依曼体系的计算机结构到这里我们不禁要问为何一定要采用冯诺依曼体系呢各种体系去构成不同的计算机结构不是更好么针对这个疑问下面就让我们从冯诺依曼体系出发去重新认识一下计算机 冯诺依曼的体系结构的组成如下 这便是我在网上找到的一张冯诺依曼体系的结构图首先我们要明确冯诺依曼体系针对的都是硬件而非软件在硬件与硬件之间起到串联关系的是数据线。 你可以发现其体系由五部分构成 1.输入设备 包括键盘话筒摄像头usb接口鼠标,ssd(固态硬盘),磁盘网卡显卡等 2.存储器 即是内存 3.运算器/控制器 在这里我们可以将其看成是一样东西其内部包含计算机最关键的CPU处理器寄存器设备等CPU处理数据的速度大概是以纳秒为单位的运算速度极快 4.输出单元 如显示器喇叭打印机磁盘网卡显卡等各种设备 这么多的硬件设备如果不加以管理就会纷乱复杂故这时OS(操作系统),便成为了管理他们的基本系统LINUX操作系统的内核几乎都是由C语言去写的这体现了C语言在嵌入式方面的独特之处但同时它也包含一些汇编代码X86X64ATT等通过这些代码硬件设备得以被合理而有规律的调用但是要知道程序之间的流通是需要数据流动的既然操作系统可以管理所有的数据这意味着它管理的数据是都由有存储数据的能力的故我们可以总结出这样一句话 计算机内几乎所有的设备都有数据存储的能力之不过是存储能力大小的问题
计算机的存储分级
在一台以冯诺依曼为体系的计算机中不同的硬件的存储速度是有很大差别的其大致的速度排序为 首先最快的是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个字以及操作系统是怎样跟用户交互的当这些问题都解决了我们就有了学习进程的良好基础为接下来学习进程做一个充分的准备