Linux冯诺依曼体系与操作系统

1、冯诺依曼体系结构

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

在这里插入图片描述

1.1 五大硬件部件

五大组成:输入设备、存储器、运算器、控制器、输出设备

输入设备:键盘,鼠标,扫描仪,摄像头,话筒,网卡,磁盘等

输出设备:显示器,打印机,内置播放器,网卡,磁盘等

注意:磁盘属于外部存储设备,计算机可以从磁盘中读取数据,也可以把数据写入磁盘中,输入、输出设备都是外部设备

存储器:这里的存储器指的是内存,它是一种硬件级别的缓存空间

中央处理器CPU:由运算器和控制器共同构成,CPU只能对存储器进行读写,不能直接访问外设,运算器负责算术运算,控制器进行发送控制信号

整体流程:

输入 → 计算 → 输出

数据先输入到内存,CPU 从内存拿数据做运算,结果放回内存,再交给输出设备展示

1.2 内存

CPU不能从输入设备读取数据并写入输出设备,数据必须从输入设备写入存储器,CPU再从存储器读取数据进行计算,再把计算结果写入存储器,再从存储器中刷新,刷新出结果

存储分级金字塔

在这里插入图片描述

计算机中内存的读取速度是微秒级别,外部设备的读取速度是毫秒级别CPU和外设之间的速度差较大,如果将CPU和外设直接连接,那么CPU 会疯狂等待外设,CPU 大部分时间空闲,由木桶效应,整机效率极低

核心思想:局部性原理

程序访问数据有局部性:刚用过的数据,很大概率马上还要用;访问一块数据,旁边的数据也很可能马上访问
把即将要用的数据提前预加载到高速内存,CPU 直接跟高速内存交互,减少访问慢速外设

所有程序想要运行,必须先加载到内存,C 语言编译得到二进制可执行文件放在磁盘,磁盘是外设,CPU 不能直接读磁盘上的程序,必须拷贝进内存,CPU 才能执行它

程序就是数据,指令和数据同等看待,全都存放在存储器

IO原理:

数据流动的本质是拷贝,输入时键盘(输入设备)把数据拷贝到内存,CPU从内存读取数据做处理,如果要打印,CPU处理完会把数据写回到内存,内存的数据再拷贝到显示器(输出设备)显示出来

计算机中I为Input输入、O为Output输出,IO效率问题由设备的拷贝效率决定

聊天时的数据流动

发送方:

  1. 键盘中输入字符串,数据拷贝进入内存
  2. CPU 处理,内存的数据拷贝给网卡(输出设备)
  3. 网卡把数据通过网络传输到对方电脑

接收方:

  1. 网卡作为输入设备,网络数据拷贝到本机内存
  2. CPU 读取内存处理
  3. 内存的数据拷贝给显示器输出

2、操作系统

2.1 概念

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

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

狭义上的操作系统是内核Kernel,内核是操作系统最核心的部分,包含四大功能:

  1. 内存管理
  2. 文件管理
  3. 驱动管理
  4. 进程管理

广义上的操作系统是内核+外壳shell+系统库+图形界面+预装软件

2.2 操作系统存在的目的

手段:管理全部软硬件资源;目的:给用户提供稳定、高效、安全的使用环境

计算机的层状结构:

在这里插入图片描述

操作系统的管理:

学校模型:

  • 校长 = 操作系统内核(决策者)
  • 辅导员 = 驱动程序(中间执行者)
  • 学生 = 底层硬件(网卡、硬盘等外设)

管理者和被管理者不需要见面,校长不会直接管理每一个学生,做出的决策交给辅导员执行;同样操作系统不会直接操作硬件,而是交给驱动程序,由驱动程序执行

管理的本质是对被管理者身上的数据做管理,数据是管理者做决策的依据,比如学校管理学生,学生有姓名、院系、成绩、特长等属性。那么如果想统计学生的信息,应利用结构体,如果找出成绩最差的学生劝退,此时想快速找到该学生应利用链表将结构体组织起来

操作系统管理进程、管理硬件一模一样:管理进程不是直接操控 CPU 硬件,内存里维护进程链表,修改链表,就是管理进程

所以管理的本质就是对信息的维护,首先要定义一个结构体,结构体中是硬件设备的各种属性,一个结构体对象表示一个硬件,然后把结构体对象采用链表或其他数据结构等形式组织起来,这时操作系统对硬件设备的管理变成了对一个硬件的管理

计算机管理的本质:

  • 先描述:结构体(类),把现实事物属性抽象成数据
  • 再组织:数据结构(链表等),把大量实例组织起来

注意:操作系统对硬件的管理最终都会装换成数据结构,所以操作系统中含有大量的数据结构

2.3 系统调用接口

作为用户无法直接和操作系统进行交互,做执行时真正让硬件完成这件工作,这件事只有操作系统内核有权限,操作系统为了保证数据安全,不允许用户随意改动,但又要给用户提供服务,所以操作系统用接口的形式给用户提供调用的入口

例如银行,不能让任何人触碰金库,但又必须给合法普通人提供服务

  • 大堂经理 = 库函数,接待用户
  • 柜台窗口 = 系统调用接口,唯一合法入口
  • 员工 = 操作系统内核代码
  • 金库 = 计算机硬件资源
  • 保安 = CPU 硬件权限保护(内核态 / 用户态)

安全核心思想:不信任任何人,但是要给合法用户提供服务。

类比操作系统:

用户程序(普通应用)运行在用户态,没有权限直接操作硬件,不安全,禁止直接访问底层硬件

如果想要操作硬件资源,**必须走唯一入口:系统调用接口,**很多C/C++库函数,本质上都是对系统调用做封装

举例:你写程序想往硬盘写文件。你的程序不能直接操作硬盘硬件,调用库函数,库函数调用系统调用,操作系统校验权限,然后调用硬盘驱动,最后硬件完成写操作

总结:

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,
    这部分由操作系统提供的接口,叫做系统调用
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部
    分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐