【Linux】冯诺伊曼体系结构|操作系统概念理解

简介: 【Linux】冯诺伊曼体系结构|操作系统概念理解

前言

本文进入Linux较为晦涩的概念——冯诺依曼体系结构和操作系统的理解。


一、先谈硬件——冯诺依曼体系结构

1.什么是冯诺依曼体系结构?

冯诺依曼体系结构是我们日常计算机都遵守的一个整体架构,计算机有很多硬件,比如硬盘,内存条,cpu等等。这些硬件通过冯诺依曼体系结构组装起来就是一台计算机。

这张图体现的就是冯诺依曼体系结构整体概览。

2.拆解冯诺依曼体系结构的硬件

  • (1)存储器指的是内存
  • 外设:
  • (2)输入设备:鼠标,键盘,摄像头,话筒,磁盘,网卡等等
  • (3)输出设备:显示器,播放器硬件,磁盘,网卡等等
  • CPU(中央处理器):
  • (4)运算器:对数据进行运算任务(算数运算,逻辑运算)
  • (5)控制器:对我们的计算硬件流程进行控制。

上面每一个硬件都是独立的个体。拆解任何一个硬件出来并不会影响其他硬件的正常运行。这些硬件具有独立性

但它们每个硬件直接都会用线连接起来。

CPU和内存之间交互的线叫做系统总线,内存和外设之间交互的线叫做IO总线

有些设备同时作为输入设备和输出设备:比如磁盘

假如我今天下载了一个抖音短视频并保存在磁盘上,这个过程相当于磁盘采集我的抖音数据,就是输入行为。

明天那个用户打开磁盘,播放他的抖音短视频,这个过程是磁盘将数据结果呈现给用户,就是输出行为。

像计算机的存储器,也是分有许多等级:

不同的等级造价不同,越往下造价越低,但是离CPU越来越远。

并且内存具有掉电易失性,也就是断电之后内存中的数据会丢失,反观磁盘则不会。

3.内存有多重要?


问题1:为什么冯诺依曼体系结构要有一个存储器(内存)?为什么不能让CPU和外设直接进行交互呢?

我们知道,CPU的运行速度是非常快的,是一个纳秒级别的硬件。而外设就显得非常慢,外设的运行速度通常只在毫秒级。你要知道,纳秒和毫秒是相差10的6次方,百万倍的差距。

这里有一个木桶原理:

一个木桶能盛水多少取决于木桶中最短的那块木板。

如果整机只采用CPU和外设进行交互的话,会极大拖慢CPU的运行效率,因为CPU实在

是太快了,只能等着输入设备缓慢地输入,CPU进行运算完成后,把数据交给输出设

备,输出设备又在缓慢地输出,CPU花费大量时间等待

这使得整机运行效率只取决于外设的运行速度。

这样的环境使得冯诺依曼想到了必须用一个内存来作为媒介,将输入的数据交给内存,CPU再从内存中读取数据运算后再交还给内存,内存再将数据输出到输出设备中。

由于内存的运行速度即不算快,也不算慢,在微秒级别。不至于让CPU过长时间等待,使得整机效率提升到以内存为核心的运行速度上


问题2:既然你说内存不算快,那不也得让CPU在干等着吗?

在实际计算机体系中,输入数据会有一个预加载的过程,也就是把输入的数据提前加载到内存,这样CPU从内存中拿数据时,实现了数据一边加载到内存,CPU一边从内存中拿数据的并行实现方式,让整个体系没有正在等待中的硬件,这样能实现高效地输入,存储,计算,输出的过程。

实际上,在冯诺依曼体系结构中,输入设备和输出设备并不会直接与CPU进行交互,而是通过内存来实现几个硬件交互。

既然内存叫做存储器,它本身是没有运算能力而只有存储能力的。既然内存比CPU慢,那为什么不将内存全部用寄存器来做?

很简单,太贵了,寄存器虽然非常快,但同时它的造价非常高。我们现在用的笔记本内存通常是8G16G32G等等。如果一个8G的内存全部用装上寄存器,那它的造价会非常高,甚至几十万,几百万,这样的价格会让我们平民百姓难以用得起。

要知道,计算机能在这几十年飞速发展,一个很重要的原因在于计算机的价格不算特别贵,平民百姓有机会去接触计算机,大量的想象力和创造力才得以体现出来。


问题3:一个程序要运行,必须先加载到内存中运行,为什么?

程序中既有代码也有数据,既然有数据代码,就注定要进行运算,并且CPU和输入设备是不会直接交互的,那就注定代码和数据要加载到内存中,CPU才能从内存中拿数据进行计算,结果返回给内存,再输出到输出设备中。

所以,是冯诺依曼体系结构规定的!

4.数据在体系结构中的流动

假如今天我在qq上跟麻辣哥进行聊天。我通过qq对话框向麻辣哥发了一句在吗? 在这个过程数据是如何流动呢?

首先我会在键盘中输入在吗?,即我的输入设备是键盘,输入完成后,这个数据会被内存进行读取存储,由于计算机只认识二进制,不认识我们中华汉字,所以这个数据一定会被CPU读取进行计算转化等等操作,再将数据返回到内存中存储。这是一个对话框,当我点击发送后,信息会输出到网卡中。

在麻辣哥的冯诺依曼计算机里,我的那一句在吗? 会被麻辣哥的网卡进行读取,即麻辣哥的计算机的输入设备应该是网卡,然后这句话同样会被采集加载到内存中,CPU再拿走这句话进行解码读取等行为,再将数据返回到内存中,最后将在吗? 输出到显示器上。

所以这整个过程就是两台冯诺依曼计算机在进行交互!

关于冯诺依曼,总结几点:

  • 1.这里的存储器指的是内存
  • 2.不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 3.外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话,所有设备都只能直接和内存打交道

二、再谈软件——操作系统

1.操作系统是什么

我们知道,前面讲的冯诺依曼体系结构都是一大堆硬件,它们虽然提供许多功能,但是它们本身并不聪明,需要有人对它们进行工作分配和资源管理。

简单来说,就是要有人管理好一大批硬件和软件,而这个人就是操作系统

操作系统是一款进行管理的软件!

其中操作系统会对硬件和软件都进行管理。

操作系统由几大块组成:内存管理,进程管理,文件管理,驱动管理。

在操作系统之下,有一些驱动程序和底层的硬件。

其中底层硬件就是我们上面所讲的冯诺依曼体系结构。

驱动程序就是让硬件动起来的程序,每个硬件都必须有自己对应的驱动程序,我们新买的电脑,大部分都是厂商帮我们安装好了各种驱动程序,有些则是让我们自己去安装的。

2. 为什么操作系统要把资源管理好

我们知道,银行有各种工作人员,有大堂经理,有前台服务人员,有安保等等。

还有各种业务,借贷系统,预约系统等等。

操作系统就像是银行一样,可以帮助来银行办理业务的管理好各种工作。

  • 也就是操作系统可以帮助用户管理好下面的软硬件资源

假如一个银行的安保系统不行,或者我的卡里时不时就不见了几万块钱,或者我的银行每天又扣了点钱,这就是银行的管理没做好。

就相当于操作系统没有管理好它下面的软硬件资源。

所以我们在选择操作系统时,注重的是:

  • 为了给用户提供一个良好(稳定,高效,安全)的运行环境。

所以,操作系统通过管理好它底层的软硬件资源(手段),为用户提供一个良好的运行环境。(目的)

3.什么是系统调用接口?

我们知道,银行里面有大量资金,如果银行不将这些资金储存并封闭起来,这些资金对任何一个普通人来说无疑是巨大的诱惑。

此时这个银行就像是操作系统,里面有各种数据,可是操作系统,不相信任何用户!

操作系统为了保证数据安全,会把自己封闭起来。

那么,如果操作系统把数据封闭起来了,我又想访问这些数据,怎么办?

正如同银行把自己封闭起来,我又要去取钱,该怎么办?

我们只能通过银行开放的那几个小窗口来进行取存钱业务!

对操作系统也是这样,我们只能通过操作系统开放的接口,来获取内部的数据!

那么,什么是接口?

操作系统是c语言实现的,这个接口只能由操作系统提供,一般来讲,这些接口不难猜到,就是普通的函数。然而,函数需要传递参数,有返回值,就像我们去银行取钱,需要提供身份证等个人信息一样,待银行工作人员验证后,才把我需要的钱给我。

操作系统对我传递的函数参数等验证后,会把我需要的数据返回给我。

这个就是接口

所以接口是操作系统提供的c函数实现的,这个通过调用接口的过程,叫做系统调用!

所有访问操作系统的行为,都只能通过系统调用来实现。

所以,传说中的shell外壳程序,就是因为系统开放了调用接口,程序员通过系统调用接口访问数据的同时进一步对这些数据进行封装,从而实现了给用户小白提供的用户操作接口,比如xshell

而对系统调用接口函数进行进一步的封装 ,就成了我们日常中所见到的库函数也是这样来的。这些也叫做用户调用接口,对这些shell外壳,库进行再封装,就可以实现门槛极低,小白都能使用的各种软件了。

所以,我们所有对底层硬件的各种操作,都必须经过操作系统,而访问操作系统的数据,则必须通过操作系统开放的系统调用来进行访问。

在这个计算机世界,操作系统是少有的不变的东西,尽管其他东西一直在变,但是操作系统是不变的。

三、操作系统如何管理

1. 管理的本质

在大学生活中,可能管理者不是人人都参与过,但是被管理,我们全都知道。

因为我们每个人都是被管理者。

校长是最典型的管理者。

一个学期过去了,有些同学成绩优异,学分绩点高,有些同学挂科无数,差的不行。而这些数据,都是我们的辅导员获取的,辅导员可以知道我们什么时候上下课,我们每个人的成绩如何。

所以,校长可以通过拿到辅导员手上的数据,也就是我们每个同学的数据,就可以知道我们哪个同学成绩好,发奖学金的时候,直接发给那些成绩好的同学就行,这个过程,并不需要管理者和被管理者见面!

你没有听错,管理者和被管理者不需要见面!

可是,管理者和被管理者不见面,如何管好?

再细想一下,管理者和被管理者需要见面吗?校长如果知道我的姓名,学号,身份证,籍贯,照片,家庭电话,成绩,课堂表现等各种他想要的数据,就可以通过这些数据,在未来进行管理决策

那么,辅导员是管理者吗?

实际上,事情就分为两种:

  • 1.决策
  • 2.执行

我们生活中的所有事情,就只有这两种,比如我和同学聊天:“你中午想吃点啥?” “中午吃个塔斯汀!” ——这个过程就是事情的决策过程

“好!现在就去!” ——这个过程就是执行过程

可以回答上面的问题了:辅导员也是被管理者,充当执行者

上面整个过程,就相当于校长是操作系统,辅导员是驱动程序,学生就是软硬件资源一样。

所以,这整个管理的过程,就体现出了管理的本质:

通过对数据的管理,达到对人的管理。

2.操作系统如何管理?

在学校虽然学生有很多,但是他们都有相同的属性:

姓名,年龄,性别,身份,籍贯,电话等等。假如我们的校长是一名程序员,这些各种信息不就可以被放在struct student结构体当中了吗?

上面说到,校长可以拿到辅导员手上我们这堆学生的数据,从而给成绩好的学生发奖学金,那校长怎么知道哪些学生成绩好呢?

很简单,我们需要通过排序,对每个学生的成绩都进行排序。而每个学生的信息那么多,校长又是一个程序员,此时校长有一个想法:把学生的各种数据看作是一个结构体。——这个过程就是描述的过程!

然后我们对这些结构体一一串联起来,就形成了我们熟悉的数据结构——链表

校长通过对链表按学分绩进行排序,就很容易知道哪些学生成绩最高,奖学金应该发给谁,哪些学生挂科,作弊等等,一目了然。

甚至新的学期来了,有同学从其他学校转学过来,校长从辅导员手里拿到学生信息后,就将该学生的信息定义成一个结构体,再将该结构体插入到链表即可!

如果哪个学生作弊,严重程度达到了勒令退学的程度,校长就将该学生的信息结构体从链表中删除,此后在学校的管理系统就不会再出现该同学了!

所以校长对学生数据的管理,转换成了对链表的增删查改

校长将每个学生的结构体串成一个链表,这个过程就是组织的过程!

从此以后,校长手里就拎着一个链表走天下!

至此我们知道,这整个管理的过程,总结起来就是:

先描述,再组织

同时,这句话将来会贯穿整个Linux,所以这里再提一遍。

如何进行管理?
先描述,再组织

总结管理的以下几点:

1.管理的本质是:先描述,再组织

2.事情分为两种:1)决策 2)组织

3.如何进行管理:先描述,再组织

总结

本篇文章讲述了两大概念:冯诺依曼体系结构和操作系统。

  • 冯诺依曼体系结构是每一台计算机都必须遵守的体系结构,再冯诺依曼体系结构中尤为重要的是存储器(内存),有了内存的存在,整机效率得到大幅度提升,核心效率转变成内存的运行效率。
  • 操作系统是少有的不变的东西,操作系统存在的意义是通过对软硬件资源进行管理,从而给用户提供一个良好的运行环境。操作系统之下管理者各种驱动程序和软硬件资源,对上来说,只开放一个系统调用接口来供外部访问数据,因为操作系统要保证安全性,必须要把自己封闭起来。程序员通过系统的接口进一步封装,实现了我们程序员常用的shell外壳程序,对函数进一步封装,实现了我们常见的库和库函数,而对这些shell外壳和库进一步封装,就可以给普通的小白用户使用了。
相关文章
|
1天前
|
存储 安全 物联网
深入理解操作系统:从基础概念到现代挑战
【7月更文挑战第14天】本文将探索操作系统的核心概念,并分析其在现代计算环境中面临的挑战。我们将从操作系统的定义和功能出发,逐步深入到进程管理、内存管理、文件系统以及并发和同步等关键领域。文章还将讨论操作系统在云计算、物联网(IoT)和安全性方面的新挑战,为读者提供对操作系统复杂性的全面理解和未来发展方向的洞见。
10 1
|
4天前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
39 1
|
4天前
|
缓存 监控 关系型数据库
深入理解Linux操作系统的内存管理机制
【7月更文挑战第11天】在数字时代的浪潮中,Linux操作系统凭借其强大的功能和灵活性,成为了服务器、云计算以及嵌入式系统等领域的首选平台。内存管理作为操作系统的核心组成部分,对于系统的性能和稳定性有着至关重要的影响。本文将深入探讨Linux内存管理的基本原理、关键技术以及性能优化策略,旨在为读者提供一个全面而深入的理解视角,帮助开发者和系统管理员更好地优化和管理Linux系统。
|
5天前
|
人工智能 运维 自然语言处理
当Linux遇上AI:探索操作系统中的智能新纪元
阿里云的OS Copilot是专为Linux打造的智能助手,利用大模型提供自然语言交互、命令辅助及运维优化。它简化编程任务,生成脚本框架,提供代码审查建议,适合开发者和运维人员。
44 0
当Linux遇上AI:探索操作系统中的智能新纪元
|
3天前
|
缓存 Linux 编译器
【Linux】多线程——线程概念|进程VS线程|线程控制(下)
【Linux】多线程——线程概念|进程VS线程|线程控制(下)
11 0
|
3天前
|
存储 Linux 调度
【Linux】多线程——线程概念|进程VS线程|线程控制(上)
【Linux】多线程——线程概念|进程VS线程|线程控制(上)
14 0
|
10天前
|
Linux
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
Linux02---命令基础 Linux命令基础, ls命令入门,ls命令参数和选项,命令行是一种以纯字符操作系统的方式,command命令本身,options命令的细节行为,parameter命令的
|
存储 IDE Unix
用了这么久 Linux ,才知道这些概念。。。
我们大家应该知道,Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下,包括我们经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中,各个厂家都定义了自己文件系统的命名构成,比较混乱,而且难以区分。
用了这么久 Linux ,才知道这些概念。。。
|
4天前
|
数据挖掘 Linux 数据处理
Linux命令sprof详解
**`sprof`是Linux下的共享库性能分析工具,补充`gprof`,专注分析`.profile`文件以识别性能瓶颈。通过调用次数、执行时间数据优化资源和代码。使用参数如`-F`、`-I`、`-d`进行定制化分析。示例:先设置`LD_PROFILE`环境变量,运行程序生成`.profile`,然后用`sprof`分析。注意需用`-g`编译程序,并在代表性的负载下分析。结合其他工具如`perf`、`valgrind`提升分析效果。**
|
1天前
|
关系型数据库 MySQL Linux
Linux命令systemctl详解
`systemctl`是Linux系统用于管理systemd服务的核心命令,它与systemd守护进程交互,实现启动、停止、重启服务及查看服务状态等功能。主要参数包括`start`、`stop`、`restart`、`status`、`enable`和`disable`等。例如,启动Apache服务使用`systemctl start httpd.service`,查看服务状态用`systemctl status <service>`。使用时需注意权限,服务名通常以`.service`结尾,但命令中可省略。最佳实践包括利用tab键补全、定期查看服务状态和合理配置服务自启。