浅谈冯诺依曼体系与Linux操作系统

2024-05-09 12:12

本文主要是介绍浅谈冯诺依曼体系与Linux操作系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

1.1冯诺依曼体系下的存储器

二、操作系统

1.关于操作系统

2.关于管理方式

总结


前言

不知道你是否有着这样的疑问:

什么是内存?什么是磁盘?他们有什么区别?可不可以相互替代?

操作系统是如何对数据进行管理的?我们平日写的C代码是如何既能在windows机器上执行又能在Linux机器上执行的呢?

如果你对这些问题感到混乱不妨先来看看这篇文章!

博主码云:带着可莉去炸鱼 (shenyang-aerospace-university-g_0) - Gitee.com


一、冯诺依曼体系结构

        想象以下现在你正在看着博主的文章美滋滋的学习着:那么博主的这篇文章是如何通过网络发送,通过你的网卡进行接受,而后显示在屏幕上的呢?

图1.0.1        冯诺依曼体系架构

在解释这个问题之前还需要我们了解一下冯诺依曼体系下的几个模块:
1.输入设备:键盘、网卡、磁盘、话筒、鼠标等等设备

2.输出设备:磁盘、显示器、声卡、网卡等等设备

3.存储器:磁盘、内存、多级缓存、云盘、光盘等

4.运算器和控制器:这两个模块都集成在现代的CPU中,控制器来输出控制信号、运算器来处理和发送数字信号。

举个例子解释控制信号和数字信号:

在一个有一定吞吐规模的港口上,你会发现有集装箱的辗转腾挪与运输船的停靠、卸载、装载。控制器起到的作用可以看作是对货船发出可以停靠、卸载、装载的信号,而运算器就是来实现这些动作的具体执行者。   

        但是存储器到底是什么,在冯诺依曼体系下是如何分布的?这是我们要要解释清楚的事情

1.1冯诺依曼体系下的存储器

        

图1.1.1        存储器的层次结构

        在具体解释存储器之前,要先解释以下为何储存器会出现在冯诺依曼体系结构下:

毫无疑问现代CPU的速度是远快于输入、输出设备的,这就造成了这样一个问题:CPU的处理速度过快以至于它会时常处于等待输入、输出设备响应,这显然是一种对CPU资源的浪费,网上有一个十分形象的表述——木桶原理

图1.1.2        木桶原理

        在计算机的世界中更是如此,计算机的速度往往受到它某些慢速硬件的影响,所以人们就想如何来减少对CPU资源的浪费,试想一下假如CPU具有同时处理十个输入和十个输出设备的能力,假设我们此时只有五个输入和五个输出设备,假设CPU只处理这几个设备,那么显然会浪费CPU处理五个输入和五个输出设备的能力。那么试想一下,如果我们能将更快的将更多的信息给CPU、将信CPU处理后的数据储存起来等输出设备就绪时在给输出设备而不是由CPU等待输出设备、将CPU资源释放出来给其他程序,是否就能增加CPU的效率呢?答案显而易见。当然可以!

        所以内存就应运而生,内存的速度比一般的输入、输出设备更快,它可以将输入设备输入的数据预加载到内存中,等待CPU“空闲时”向高一级的存储器释放,同时在向输出设备输出时会对内容进行缓存等待输出设备就绪的时候输出,而不是由CPU“拿着”数据等着输出设备就绪。

        至于磁盘的速度比较慢,但是其容量较内存和多级缓存更大,价格也越低廉,内存较磁盘更快,但是容量更小、价格更贵。同时需要注意的是内存具有掉电丢失的特性,因而内存只能用来临时保存数据,磁盘更适合长期保存数据。由于要满足CPU的高速数据供给,显然用磁盘来替代内存是不合适的。

图1.1.3        现代CPU参数
图1.1.4        现代内存参数
图1.1.5        现代磁盘参数

二、操作系统

1.关于操作系统

        操作系统是一款管理软硬件资源的软件,其通过合理管理软硬件资源给上层的用户带来安全、快速、高效的体验。

图2.1.1        操作系统定位图

        从图2.1.1中我们不难发现每一层之间有着严格的上下顺序,事实也是如此:

        当我们身为用户使用某一款操作系统的时候基本上都是不会去关心底层的硬件逻辑的,但是我们的PC机往往又是由复杂的硬件构成的,此时就需要硬件的厂商来自行提出一种运行该硬件的软件,这就是驱动程序,但是仅仅有驱动程序是远远不够的,比如我们敲击键盘,此时我们希望进行打字,而现实却是机器直接死机了,那将是一件多么扫兴的事情,所以此时操作系统出现来管理和调度这些驱动程序,那么此时一台基本功能的PC机就出现了,但是有这样一个问题:硬件与硬件之间有着很大的差异,面向机器编程将是一件十分痛苦的事情,因为这意味着一份能在不同机器上运行得到正确结果变得几率渺茫,所以此时的人们想是否能消弭不同机器带来的编码壁垒,而后人们发明了诸如C语言这样的编程语言,而后广泛传播,人们便开始默契的制定语言标准,这使得人们不必关心硬件差异,厂商们会进一步向上迎合已经指定的语言标准,程序员只需要使用人们早已标定的由操作系统修正差异的接口就可以实现相应的效果——这一举动无疑大大解放了生产力、降低了程序员的门槛。

在不同的厂商向上迎合标准的时候,定然是不希望一个用户去私自胡乱的去访问其他用户的数据的,因而操作系统只接受通过其自己设计的系统调用接口来访问其内核数据(让我们不要把视线只停留在我们使用的PC机上,比如某些证券公司等非常要求安全性的地方,这样的设计就显得尤为重要)。

图2.1.2        关于抽象接口的理解

2.关于管理方式

        想象一下我们在学习数据结构的时候,是如何管理数据的?对于一个链表我们会先定义一个节点,而后将多个节点相连接然后形成链表并为其构建相应的功能。对于一个树结构,我们会先用定义每个节点而后根据合适的规则链接成树,然后在为其构建相应的函数。对于堆栈结构来说更是如此。只不过有的数据较为简单可能使用单个内置类型变量就足以表示,但是在实际生产中,数据往往很难由单一的数据类型来表示,比如说我们操作系统在表示一个任务的时候,往往会有诸多的数据需要管理。

        在Windows的操作系统中有着明确的线程和进程该概念,但是在Linux系统中,操作系统则没有界限分明的定义,Linux操作系统统一将其称为任务,对于一项任务往往是要由多种数据构成的

1.唯一标识符

2.进程状态

3.优先级信息

4.程序计数器:用来指认代码下一句执行内容

5.内存指针:用来指向进程需要的数据和代码

6.上下文数据:用来记录某一时刻进程执行的各项参数

7.记账信息:用来记录单个进程的执行时间,用来计算程序运行是否超出时间片

8.其他信息

        显然,要正确的描述一项任务很难由单个内置类型实现,所以我们往往使用自定义类型来描述操作系统管理的软硬件。就我们学习管理数据结构的那样我们操作系统会先抽象出一个结构体,而后在结构体中进行详细的定义,而后只需要面向结构编写相应的功能函数即可。在操作系统中不仅是对软件内容是如此管理,对于硬件更是如此。

所以我们不难概括以下操作系统的管理方式——先对目标做描述,而后制定相应函数。

在之后的文章中博主会介绍有关于进程更多详细的信息

                                                                                                        ——本文【完】


总结

本文十分粗浅的谈了谈现代计算机体系架构和操作系统的管理方式,一方面是为了后面的文章打下一些基础,另一方面是为了扫除一些常识性的问题。

这篇关于浅谈冯诺依曼体系与Linux操作系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973377

相关文章

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信