浅谈冯诺依曼体系与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

相关文章

Java资源管理和引用体系的使用详解

《Java资源管理和引用体系的使用详解》:本文主要介绍Java资源管理和引用体系的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Java的引用体系1、强引用 (Strong Reference)2、软引用 (Soft Reference)3、弱引用 (W

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti