【Linux】计算机的基石:从冯·诺依曼体系结构到操作系统管理

目录

  • 一、冯诺依曼体系结构
    • [1.1 为什么要有内存?](#1.1 为什么要有内存?)
    • [1.2 不同设备之间数据流动的过程](#1.2 不同设备之间数据流动的过程)
  • 二、操作系统
    • [2.1 操作系统的概念](#2.1 操作系统的概念)
    • [2.2 为什么要有操作系统?](#2.2 为什么要有操作系统?)
    • [2.3 理解操作系统管理的本质](#2.3 理解操作系统管理的本质)
    • [2.4 系统调用和库函数概念](#2.4 系统调用和库函数概念)

个人主页:矢望

个人专栏:C++LinuxC语言数据结构

一、冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

其中上图中:

中央处理器(CPU):含有运算器和控制器等

输入设备:键盘,鼠标,扫描仪,写板,摄像头等。

输出设备:显示器,打印机等。

我们把这些输入设备、输出设备成为外围设备,简称外设

那这里的存储器是什么? 很多地方地方喜欢把它叫做存储器,这里指的就是内存 。内存通常以"内存条"的形式出现,插在主板的内存插槽上。而我们的硬盘,U盘等就属于外存

1.1 为什么要有内存?

1.1.1 存储分级的问题

从上到下,存储设备的特点可以概括为速度越来越慢,容量越来越大,每字节的成本越来越低,CPU的访问距离越来越远

上面的主存也就是我们所说的内存,像我们的输入设备磁盘,相比于内存,它的容量更大,但速度慢,同样的它的价格更便宜,而我们的内存,它离CPU更近,速度快,但它的容量会小一点。

1.1.2 体系结构效率问题

计算机的本质就是输入->计算->输出,那为什么需要内存呢?直接输入->CPU->输出不就好了吗?

上面提到了我们的输入设备和输出设备统称为外设,而外设和CPU相比,它的速度特别慢CPU纳秒级别的,而我们的输入输出设备通常是毫秒级别的,它们之间差了整整106,一百万倍!

如果直接输入->CPU->输出,它们之间的速度差异就决定了CPU大部分时间都在等,根据木桶原理,输入输出设备就是那块短板,那么如果这样设计,我们计算机的效率就取决于输入输出设备的效率,这样的计算机太慢了。

为了解决这样的问题,计算机科学家在设备和CPU之间引入了存储器,也就是内存


在这个体系结构下,CPU不直接和外设打交道,它只和内存打交道

那不和之前一样吗?那块短板还是输入设备和输出设备,那计算机的速度还是取决于输入设备和输出设备呀,从硬件角度看,的确是这样。但是还有操作系统这个软件,这个软件会把数据预处理加载到内存中,也就是说数据可以提前加载,大部分情况下处理数据的时候,就可以转化成CPU和内存的交互,这样计算机的效率就取决于内存了。内存可比输入输出设备快多了。

从现实角度出发,假设你是一个土豪,你不差钱,你要求技术人员把内存换成寄存器,并且要求寄存器内存和内存相当,能行吗?当然可以,这样的计算机效率也相当高,但是它的造价会相当高昂,无法被普通人所接受。所以使用内存能够让普通人以较低的价格,获得效率不错的计算机,可以说冯诺依曼体系结构为电脑提供了性价比,这就使计算机被人们广泛接受,这样才有可能形成全球范围内的网民数量,才可能孵化出互联网!

技术的提升推动了生产力的发展!技术作为底层驱动力,重塑了整个社会结构和发展模式!

程序要运行,为什么要先加载到内存?

程序存储在磁盘上,程序就是数据,而根据冯诺依曼体系结构,CPU不直接和外设打交道,它只和内存打交道,所以程序要运行,必须先加载到内存里,这是体系结构规定。

扩充 :数据从磁盘加载到内存、CPU从内存中读取、输出数据它们的本质都是拷贝!也就是说计算机数据流动的过程本质就是拷贝,计算机的效率问题由设备的拷贝效率决定。

1.2 不同设备之间数据流动的过程

你有一个好友,你们两个相隔超过几百公里,今天你在聊天软件上发送了一句"上号?",那么这个数据是如何流动的呢?

首先你输入的信息会加载到内存中,然后CPU从内存中读取你输入的数据,在进行一些加密操作,再加载进内存中,之后,内存中的数据会通过你的网卡/显示器通过网络发送到你朋友的网卡设备上,他的设备会将收到的信息加载到内存中,之后经过CPU的读取解密工作,再次回到内存,然后内存中的数据就会在你的显示器上呈现。

二、操作系统

2.1 操作系统的概念

操作系统OS是一个系统软件,它作为计算机硬件与用户/应用程序之间的中介,负责管理所有的硬件资源(CPU、内存、硬盘、外设等),并为上层提供简单的、统一的、安全的服务接口

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:内核(进程管理,内存管理,文件管理,驱动管理),任何计算机类的设备都需要这四大功能。其他程序(例如函数库,shell程序等等)。

扩展 :为什么说安卓是基于Linux内核的?因为安卓最核心的部分用的是Linux内核。然后在外壳层面上设计出一套显示库,让用户更好的操作,这就叫安卓。安卓的本质是Linux内核上的一层外壳程序。

之前有的手机厂商会说,我们的操作系统是基于安卓深度定制化的,其实就是把安卓的图形化界面改了改,也就是改了改皮肤。

2.2 为什么要有操作系统?

对下 :操作系统要把软硬件资源管理好。对上 :提供服务,保障稳定。它存在的意义是把软硬件资源管理好,从而给用户提供良好的使用环境。

2.3 理解操作系统管理的本质

在校园这个大环境下,校长是管理者,学生是被管理者。中间还有一个辅导员。

人执行的工作有两种,一种是做决策,一种是做执行,很明显,校长是做决策的,学生是做执行的。学生一学期基本上没和校长见过面,但他依旧被管理了,所以管理者管理被管理者,不需要和被管理者见面

那他是如何管理学生的呢?他只需要获取学生身上的数据就可以进行管理了,所以管理学生本质是对学生身上的数据做管理

那校长是如何拿到学生数据的呢? 通过中间层的辅导员 ,比如辅导员在开学时组织签到,学生每次考试的上报等。假设校长现在要让好学生去参加一个比赛,他会选择各项数据指标都不错的学生去。所以数据是提供决策依据的

现在校长看着几千人的excel表格,他感到很无力,碰巧他会C语言,于是他就用编程把学生信息管理起来了。

c 复制代码
struct StudentNode 
{
    char name[50];          // 学生姓名
    int score;              // 学生成绩
    char student_id[20];    // 学号
    char class_name[30];    // 班级名称
    struct StudentNode* next; // 指向下一个节点的指针
};

将学生的信息组织形成一个链表,这样他就把他现实中要做的内容,建模变成了对这个链表的增删查改。这样就通过先描述,再组织 的方式把学生管理起来了。 OS将这些描述性的结构体通过链表、树等数据结构有效地"组织"起来,OS对系统的管理,就变成了对这批数据结构的增、删、改、查

在上述例子中校长就是操作系统,学生就是底层硬件,辅导员就是驱动程序。

操作系统大部分都是C语言写的,所以操作系统内部,最核心的东西就是数据结构

扩充:C++中为什么要有STL?我们在所有的语言中都能够找到类和STL的影子,类就是先描述,STL就是再组织,要管理各种事物就需要用类描述起来,再用各种结构组织起来就可以管理这个类所对应的对象。类是对现实事物的抽象描述,解决了这是什么的问题;STL是对多个对象的组织结构,解决了如何管理的问题。这是把现实问题进行计算机建模的核心规律!

2.4 系统调用和库函数概念

如上图所示操作系统管理着软硬件资源,如果直接让用户访问操作系统内核进行软硬件资源的访问,这是不安全的。所以上层进行了系统调用接口的封装,它的本质是函数。

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

然而系统调用在使用上,功能偏底层,对用户的使用要求较高,所以开发者对系统调用进行了适度的封装,这就形成了库。有了库,就利于上层用户或开发者进行二次开发。很多C语言或者C++函数都是对系统调用的封装。

用户操作接口:这是用户和开发者真正直接接触的部分,包括:

  • Shell外壳:命令行界面,其背后执行的命令(如 ls, cp)最终都会调用系统调用。
  • lib:这是对系统调用的封装。
  • 部分指令:一些系统管理工具。

总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~

相关推荐
大柏怎么被偷了1 小时前
【Linux】进程等待
linux·运维·服务器
偶像你挑的噻2 小时前
12-Linux驱动开发- SPI子系统
linux·驱动开发·stm32·嵌入式硬件
松涛和鸣2 小时前
16、C 语言高级指针与结构体
linux·c语言·开发语言·数据结构·git·算法
念风3 小时前
[lvgl]如何优雅地向lv_port_linux中添加tslib支持
linux
自由的好好干活4 小时前
使用Qoder编写ztdaq的C#跨平台示例总结
linux·windows·c#·qoder
赖small强4 小时前
【Linux 网络基础】libwebsockets HTTPS 服务端实现机制详解
linux·网络·https·tls·libwebsockets
optimistic_chen5 小时前
【Redis 系列】Redis详解
linux·数据库·redis·缓存·xsheel
低客的黑调5 小时前
了解JVM 结构和运行机制,从小白编程Java 大佬
java·linux·开发语言
想唱rap5 小时前
C++ map和set
linux·运维·服务器·开发语言·c++·算法