浅谈冯诺依曼体系与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-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。