【Linux】程序员的易筋经——冯诺依曼体系结构

文章目录

  • 冯诺伊曼体系结构
    • 概念
    • 内存的重要性
  • 操作系统(Operating System)
    • 概念
    • 目的
    • 定位
    • 特征
    • 发展和分类
    • 运行机制
    • 体系结构

冯诺伊曼体系结构

概念

下图是描述冯诺依曼体系结构的一张图。
计算机的本质是为了数据的计算处理。所以,需要有设备将数据提供给计算机,那就是输入设备。同样地,也需要有设备存放计算之后的数据或者将数据呈现给使用者,即输出设备
数据从输入设备到存储器,再由存储器到 CPU,CPU处理之后,将结果返回给存储器,存储器再将结果交给输出设备。(控制指令除外。)

我们可以看一下该体系结构下, 各个设备的一些例子。

输入设备:键盘、话筒、摄像头、网卡、磁盘等等。
输出设备:显示器、磁盘、网卡、声卡、音响等等。
存储器:内存。
CPU(中央处理器):运算器、控制器。

【Linux】程序员的易筋经——冯诺依曼体系结构_第1张图片

内存的重要性

在理解了各个器件的作用之后,不免疑惑,内存存在的意义是什么呢?为什么不可以让输入设备和输出设备直接和 CPU 相连,这样岂不是方便一些。

首先要了解,一般而言将 输入设备 和 输出设备 称作“外设”
其次,外设一般而言速度会比较慢

但是,CPU 的运行速度很快。所以,如果去掉存储器,只剩下CPU 和外设,这样子当然也是可以运行到,但是根据木桶效应,整个系统的运行速度就以外设的运行速度为主(前面说到,外设运行速度是比较慢的)。所以,为了防止这种现象的发生,所以就有了存储器。
【Linux】程序员的易筋经——冯诺依曼体系结构_第2张图片
存储器的运行速度远比外设大得多,但是比不上 CPU 。如果说外设是 毫秒级别,CPU 是纳秒级别,那么存储器就是 微秒级别 。
并且,存储器有一个特点,就是可以临时存储数据。如果 CPU 现在有两个任务A、B要处理,在处理 A 任务的同时,B任务的数据也被加载进内存(存储器),所以CPU执行完 A 任务,就可以立马向内存索要 B 任务的数据。而不是执行完A任务之后,等内存先向外设要数据,CPU再从内存要数据。

所以,有了内存之后,我们就可以对数据做预加载CPU在进行数据计算的时候,根本不需要访问外设,只需要向内存要数据就可以。解决了外设和CPU速度不匹配的问题,这就是存储器存在的意义。

结论:

  • 在数据层面,一般而言 CPU 不直接和外设直接沟通,而是和内存打交道。

到这里,我们就可以理解为什么程序在运行前,必须要被加载到内存。这是因为体系结构决定的,可执行程序是一个文件,在磁盘(外设)里面,程序要被 CPU 运行,而CPU只和内存打交道。

操作系统(Operating System)

概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)
  • 其他程序(例如函数库, shell程序等等)

对于内核,常见的就是windows 、Mac 、Linux 、Unix 等等。

目的

设计操作系统肯定是为了达到某种功能,其目的如下:

  • 与硬件交互,管理所有的软硬件资源
  • 为用户程序(应用程序)提供一个良好的执行环境

定位

在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件
那么如何理解“管理”就成了理解操作系统的重中之重。

  • 管理的例子
  • 描述被管理的对象
  • 组织被管理的对象

以一个学校为例。学校里的学生就相当于计算机里面的“资源”。
要描述计算机里面的“资源”,就需要对其进行一定的描述。比如一个大学校园,每一个学生都有自己的“学号”,知道了学号,就知道了这个学生是谁,相当于是学生的唯一标识。当然,“描述”并不只是说记录一个“学号”那么简单,还要记录其他信息。
描述了对象,就要用一定的数据结构对其进行组织。比如学校里的学生信息,可以被存在一个个结构体里面,然后以链表的形式存储(当然也可以是顺序表),要找到某些学生,用一定的算法就可以。计算机里面的资源同理。

如下,操作系统对下进行硬件的管理;对上进行应用软件的管理,和对用户的交互,为上层用户、应用程序提供简单易用的服务。操作系统是一种系统软件。
【Linux】程序员的易筋经——冯诺依曼体系结构_第3张图片
操作系统对用户提供良好的服务,并不代表着它就相信用户了,相反,操作系统不相信任何用户!!!
这就和银行一样,银行为储户提供服务,但是储户都是通过小窗口办理业务,而不是直接进银行金库去进行存取。操作系统同理,为了防止计算机的硬件被破坏,操作系统只向上提供一些接口,供上层开发使用,也可以被称作系统调用
但是,系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。当然,建立于系统调用之上的,还有 GUI,shell 等等。

特征

操作系统有如下四个特征,其中,并发和共享是操作系统最基本的两个特征。

  • 并发:指两个或多个事件在同一时间间隔内发生。宏观上是同时发生的,但微观上是交替发生的。
  • 共享
    • 互斥共享:同一个时间段只允许一个进程访问资源(摄像头/麦克风)。
    • 同步共享:允许一个时间段多个进程“同时”(宏观上)访问某些资源(微观上是分时共享),比如硬盘读写。
  • 虚拟:虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体(前者)是实际存在的,而逻辑上对应物(后者)是用户感受到的。
    • 空分复用技术(虚拟储存技术):物理4GB内存,用户看来远大于4GB。
    • 时分复用技术(虚拟处理机技术):一个CPU看上去是几个CPU,多个程序并发运行。
  • 异步:异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,是走走停停(等待资源进程阻塞),以不可预知的速度向前推异步性。

发展和分类

早期计算机是没有操作系统的,经过一代代的优化,才有了如今各种各样的操作系统。其发展历史大概如下(从上到下 —> 从早到晚):

  • 手工操作阶段:输入输出靠纸带打孔,效率极低。
  • 批处理阶段
    • 单道批处理系统:引入了脱机输入/输出技术(磁带),通过监督程序(操作系统雏形)控制作业输入输出。缓解了人机速度矛盾,提高了资源利用率,但是CPU是串行的(处理完一个再处理下一个),大量CPU时间浪费在I/O等待。
    • 多道批处理系统:磁带往内存输入多道程序,并发执行,输入、计算、输出互不干扰。自此操作系统诞生,引入了中断技术。
  • 分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
  • 实时操作系统:优先响应一些紧急任务,某些紧急任务不需时间片排队。
    • 硬实时系统:必需在绝对严格的时间内完成处理。
    • 软实时系统:能接受偶尔违反时间规定。
  • 网络操作系统
  • 分布式操作系统
  • PC操作系统:比如 Windows,Mac OS,Ubuntu 等等。

运行机制

  • 指令
    • 特权指令:只能在核心态下使用。比如:启动I/O 内存清零 设置时钟 允许/禁止终端 停机
    • 非特权指令:核心态、非核心态都可以使用。 比如:控制转移 算数运算 取数指令 访管指令
  • 处理器状态(用程序状态寄存器PSW中某标志位来标识,0为用户态,1为核心态)
    • 用户态:运行用户程序,只能使用非特权指令。
    • 核心态:运行操作系统程序。该状态下可以使用任何指令(唯一例外:防管指令,该指令执行后进入核心态)。
  • 程序
    • 应用程序:运行在用户态。
    • 内核程序:系统管理者,运行在核心态。

体系结构

  • 大内核:将操作系统的主要功能模块都作为系统内核,运行在核心态高性能,但是内核代码庞大难以维护
  • 微内核:只把基本概念保留在内核功能少,功能清晰方便维护,但是需要频繁的在核心态和用户态之间切换,性能低。

【Linux】程序员的易筋经——冯诺依曼体系结构_第4张图片
对于冯诺依曼体系结构和操作系统的简单理解就到这里啦。

你可能感兴趣的:(加深对计算机的理解,Linux,linux,运维,服务器)