当前位置: 首页 > news >正文

Linux -- 操作系统

一、冯•诺依曼体系结构

1、概念

# 在计算机发展历程中,核心作用就是解决人类问题。为了实现这一目标,计算机系统需具备特定结构和功能。 首先,计算机要配备输入设备,如鼠标、键盘、摄像头、话筒、磁盘(文件读取)、网卡(网络接受)等,将各种信息转化为计算机可处理的数字信号。 接着,计算机接收数据后进行算术和逻辑运算。最后,计算机处理完问题需输出结果,这要求有输出设备,如显示器、播放器硬件、磁盘(写入文件)、网卡(网络发送)等,将结果以直观形式呈现给用户。

# 但是计算机仅拥有算法运算与逻辑运算是不够的,还需要有控制功能,控制何时从输入设备
获取数据,何时输出数据到输出设备等。比如在C语言中,算术运算就对应完成一系列的加减乘除等运算,而逻辑运算就对应于一系列的逻辑与逻辑或等运算,控制功能就对应于C语言当中的判断、循环等。一般而言,我们就将这个具有算术运算与逻辑运算,控制功能的设备称为中央处理器,也就是CPU

# 但是输入设备与输出设备的效率是非常慢的,而中央处理器的效率又是极快的。根据木桶原理,总效率就取决于效率最低的设备,这就大大拖慢了计算机的效率。为了解决这个问题,就引入了内存的概念。 运行程序、读取文件、写入文件等大部分操作都是在内存中进行的。

# 该内存就起到一个缓冲的作用,因为它的效率比输入设备与输出设备快的多,但又比中央处理器慢。并且内存还有一个优点就是:提供预载数据的能力,因为一般内存大小为4g/8g。根据局部性原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据,大大提升效率。

# 最后我们将这个结构进行一些调整,就形成了我们熟知的——冯•诺依曼体系结构。

# 在物理层面上,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线。 

# 同样根据冯•诺依曼体系结构我们就能解释为什么程序运行之前要先加载到内存

因为可执行文件是放在磁盘上的,而CPU只能从内存中读取数据,所以可执行程序要先加载到内存中才能被CPU获取。

2、为什么这么设计

# 我们发现,输入设备和输出设备并不直接跟中央处理器打交道,他们都只跟存储器打交道,所以存储器(内存)在这个过程中发挥了串联整个线路的作用。那么为什么输入输出设备不直接跟cpu打交道呢?

# 在我们将数据从输入设备加载到存储器时,中央处理器可能并没有闲着,而是在处理别的工作,他们是一个并型逻辑。比如说二进制可执行程序其实也是文件,文件是在磁盘上存储的,我们要运行这个程序就必然要将其先读取到内存中,而当外部设备在将数据加载到内存中时,其实cpu可能正在进行其他的运算,当你把数据预先都加载到内存中的时候,cpu恰好开始执行你的代码,所以我们会发现cpu从存储器中拿数据和外部设备导入到存储器这两个过程是可以同时进行的,这就大大提高了效率。

# 其次,我们一方面要考虑是否易操作、性能好,另一方面也要考虑成本。我们通过计算机存储的金字塔结构知道,越往下成本越低、容量越大、速度越慢。成本下来了,买电脑的人才多,互联网才能发展起来。 

3、应用

# 如果我想通过qq发送“你好!”给我的好友,如何用冯诺依曼体系来分析整个数据流动过程?

 


二、操作系统 

# 每个硬件都有他对应的功能并且能够安装冯诺依曼体系去很好地工作,但是这是远远不够的,因为什么时候需要去执行什么功能是需要有人去调控的。 操作系统就是一款可以管理软硬件资源的软件,就像人可以管理人也可以管理机器一样。

1、概念

# 一个基本的程序集合称为操作系统,操作系统是一款进行软硬件管理的软件

# 其一般包括四个主要功能:

  • 内存管理:内存分配、内存共享、内存保护以及内存扩张等。
  • 驱动管理:对计算机设备驱动驱动程序的分类、更新、删除等操作。
  • 文件管理:文件存储空间的管理、目录管理、文件操作管理以及文件保护等。
  • 进程管理:其工作主要是进程的调度。

#  操作系统包括:

- 内核(进程管理、内存管理、文件管理、驱动管理)

- 其他程序(例如库函数、shell程序等等)

 

 

2、操作系统的体系结构 

# 首先我们知道在计算机的底层存在各种硬件设备,这些硬件设备通过冯•诺依曼体系结构联系在一起。

# 但是仅有这些硬件是不够的,还需要一个软件来对这些硬件进行系统化管理。例如:内存何时从输入设备读取数据?读取多少数据?内存何时刷新缓冲区到输出设备?是按行刷新还是全刷新?这个软件就是我们所谈论的操作系统。

# 但是这就引发一个问题,如果操作系统是与底层硬件直接联系的话,那么一旦底层硬件发生一点改变,那么操作系统的源代码就需要重新编译。如果进行频繁的编译,就会大大拖慢计算机的效率。所以为了解决这个问题,在操作系统与底层硬件之间需要增加一层结构让操作系统与底层硬件之间实现解耦。这个增加的结构就是我们的驱动程序,其功能一般为访问某个硬件的读写,状态等。一般由我们的硬件厂商提供。 

# 而一般而言,操作系统为了保护自己的内在结构,并不会将源码呈现给用户,而是而是封装出一些接口提供给用户。这些接口一般被称为系统调用接口,但是这些接口对于普通用户来说具有一定的使用成本,因为用户必须要先对操作系统有一定了解,为了方便用户,所以又对系统接口进行封装形成我们的用户操作接口,常见的用户接口有各种库如libc以及部分指令,我们一般在实际编写的过程中调用各种的函数printf,scanf就是来源于这些库。

 # 而最上层还有一层用户层,一般是由我们用户通过指令或图形化界面进行各种操作。

# 因此,操作系统的目的就是给用户提供良好(稳定、高效、安全)的运行环境

# 无论我们上层是什么样的,最终的行为都是在硬件上体现的,软件想要操控硬件,就必然需要一些能够与硬件建立联系的驱动程序。比如说鼠标,当你刚把数据线接上的时候,从物理上你已经连接到你的电脑上了,但是你可能还需要等待几秒才真的可以去使用,因为驱动程序一开始还没有马上被加载出来——>驱动程序是我们和硬件打交道的软件(大部分是系统自带的)。

# OS是一个帮助我们管理软硬件资源的角色,但这仅仅只是他的手段罢了,他的目的是为了给用户提供一个良好(稳定、高效、安全)的运行环境,但我们要知道其实普通用户是不善于和OS打交道的,所以普通用户使用的都是基于程序员开发出来的软件,所以首先是我们专业的程序员需要去跟OS打交道,然后再搞出满足普通用户需求的各种软件。因此OS的设计者用C语言写了一些内部的函数方法开放给外部,我们把它称之为系统调用。因此未来我们想跟OS打交道,只能通过系统调用来完成。

 3、操作系统如何进行管理

# 我们通过图示这个例子,可以知道

1、管理者和被管理者是不需要见面的
2、管理者只需要得到管理信息,就可以做出管理决策,所以管理的本质是通过对数据的管理从而实现对人的管理
3、管理者一方面可以通过执行者去拿到数据,另一方面可以通过将被管理者的一些信息用结构体描述出来,然后再用数据结构组织在一起,然后再通过该数据结构的特点实现相关需求的算法来拿到数据。

# 在计算机体系结构里,我们的OS就相当于管理者,我们的软硬件资源就相当于被管理者,而我们的驱动程序就相当于是执行者。

# 因此我们的操作系统也可以通过定义类,来对硬件设备、进程等的信息进行管理,就在OS中管理任何的对象最终都可以转化为对某种数据结构的增删查改。

# 在理解如何管理之后,我们发现了管理者通过描述出被管理者的结构体,然后再通过数据结构组织起来,然后再实现一些相关的算法去实现管理。所以就引申出了一个概念——先描述再组织。

4、理解系统调用

# 先举个例子,假如有A和B两个校长,A校长有一个学生数学特别厉害,但是B校长没有,于是B校长就想跟A校长商量借这个同学来打比赛,但是B校长肯定不能直接去找这个学生,因为这个学生是A校长的人,他得负责,所以他必须要通过A校长的同意才行。

# 同理我们通过printf把“hello”打在屏幕上,其实并不是我们直接通过调用这个库函数就和硬件打交道了,而是必须要自上而下贯穿下去,也就是要通过系统调用接口然后让OS知道!!!

# 所以我们知道了库函数必须通过系统调用接口才能找到OS,所以库函数和系统调用是上下层的关系,库函数是基于系统调用之上的二级开发。

http://www.xdnf.cn/news/239077.html

相关文章:

  • dubbo泛化调用时transient字段失效问题
  • 什么是基尔霍夫第一定律
  • 【python】-基础语法3
  • Semtech公司简介以及主流产品
  • C++继承(下)
  • 【补题】Codeforces Global Round 20 D. Cyclic Rotation
  • Ethan独立开发产品日报 | 2025-04-29
  • 小白学习java第15天(中):javaWeb
  • 高斯-牛顿法与列文伯格-马夸尔特法:非线性优化的理论推导与C++实现
  • Java @Transactional事物隔离级别和默认值详解
  • git did not exit cleanly (exit code 128) 已解决
  • 0基础FWT详解2(巩固)
  • Databend 产品月报(2025年4月)
  • 算法竞赛进阶指南.沙漠之王
  • 如何加速机器学习模型训练:深入探讨与实用技巧
  • Decode
  • PixONE 六维力传感器:赋能 OEM 机器人,12 自由度精准感知
  • PC端实现微信扫码登录
  • 【Android】Android签名解析
  • TEN:开启实时语音交互的下一代AI Agent引擎
  • 54.[前端开发-前端工程化]Day01-Node-Node安装-前端模块化
  • 多通道协调加载试验机
  • SpringBoot+Redis全局唯一ID生成器
  • Redis应用场景实战:穿透/雪崩/击穿解决方案与分布式锁深度剖析
  • 【数据链路层深度解析】从帧结构到协议实现
  • git 怎样把本地仓库推送到新建的远程仓库
  • 详细解释C++ 泛型模板中的完美转发(Perfect Forwarding)
  • 【自定义控件实现最大高度和最大宽度实现】
  • 2025年天梯题解(L1-8 + L2)
  • 普通IT的股票交易成长史--20250430午