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

解码冯・诺依曼:操作系统是如何为进程 “铺路” 的?

目录

1. 冯诺依曼体系结构 

结构介绍

深入理解

2.操作系统

 2.1概念

2.2设计OS的目的

2.3理解操作系统

核心功能

如何理解管理

3.系统调用和库函数


1. 冯诺依曼体系结构 

结构介绍

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

输入设备: 键盘,鼠标,话筒,摄像头,磁盘等。

输出设备:显示器,磁盘,网卡,打印机等。

CPU=运算器+控制器

存储器:内存

深入理解

关于冯诺依曼,必须强调几点:
这里的存储器指的是内存
不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
所有设备都是只能直接和内存打交道。

1.读文件把磁盘文件读到内存,同时我们也能向磁盘写文件,可以成为IO(Input/output)-》站在内存的角度。 

 2.软件运行,必须先加载到内存?程序运行之前,在哪里?磁盘->文件

3.CPU获取,写入,只能在内存中来进行。CPU在数据层面,只和内存打交道,外设只和内存打交道。

4.程序加载的本质是IO

这都是体系结构决定的。数据是从一个设备“拷贝”到另一个设备。体系结构的效率:由设备的“拷贝”效率决定。

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录
上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的
到消息之后的数据流动过程。如果是在qq上发送文件呢?
站在冯诺依曼体系结构上,A用户从键盘输入消息数据到内存,网卡读取内存的消息,在网络作用下,B用户通过网卡读取数据到内存上,显示器输出设备读取内存消息。
文件是一样的,设备变成了磁盘。
操作输入设备内存交互运算器/控制器输出设备
键盘输入键盘写入内存控制器解析字符输入-
文本发送鼠标/控件控件数据 → 网络缓冲控制器调用协议栈网卡发送
消息接收网卡网络数据 → 应用内存控制器通知显示模块显示器
文件发送文件/磁盘读取文件 → 内存控制器分包压缩发送网卡
文件接收网卡接收 → 存内存控制器写文件操作磁盘

2.操作系统

 2.1概念

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:
• 内核(进程管理,内存管理,文件管理,驱动管理)
• 其他程序(例如函数库,shell程序等等)
操作系统是一款进行软硬件管理的软件。

2.2设计OS的目的

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

1.软硬件体系结构是层状结构,体现高内聚低耦合。

2.层的理解可以类比C++的继承

3.访问操作系统,必须使用系统调用->其实就是函数,由系统提供的

4.我们的程序,只要判断访问了硬件,那么它必须贯穿整个软硬件体系结构,要系统调用。向printf函数都封装了系统调用

5. 库可能在底层封装了系统调用

2.3理解操作系统

核心功能

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件

如何理解管理

管理的例子=学生,辅导员,校长 
描述被管理对象
组织被管理对象
校长是管理者,学生是被管理者,在事情的发生中,管理者具有决策权,而辅导员负责执行校长的命令决策。
如果校长要管理所有的学生,两者可以不需要见面,管理者可以通过被管理者的数据进行了解管理。不需要见面,如何得到数据?由中间层获取,辅导员可充当。校长对学生的管理进一步对学生数据的管理-增删查改   ,管理学生的过程就是建模的过程
操作系统要控制底层硬件,通过数据,由驱动程序获取数据。
在代码上,我们可以通过结构体(类)将数据属性放在一起,组织起来可以用链表或者其他数据结构连接起来。
那么操作系统管理硬件呢?
1.描述起来,用struct结构体,类。
2.组织起来,用链表或者其他的数据结构,STL容器。

即先描述在组织,在面向对象中就是类和容器的关系应用。

在不了解进程时,对进程管理也是先描述在组织。对文件也是如此。

3.系统调用和库函数

操作系统要向上提供对应的服务。操作系统不相信任何人或者用户,那么如何提供服务?通过系统调用。

向银行通过相关窗口提供服务。

操作系统一般是C语言写的,系统调用相当于C实现的函数,大多数的函数有输入参数和返回值,输入参数是用户给操作系统的,返回值是操作系统给用户的。

系统调用的本质是用户和操作系统进行某种数据交互。 

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

系统调用在使用上,功能比较基础,对于用户要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

http://www.lryc.cn/news/586840.html

相关文章:

  • [Nagios Core] CGI接口 | 状态数据管理.dat | 性能优化
  • 基于Redis Streams的实时消息处理实战经验分享
  • Appium源码深度解析:从驱动到架构
  • 使用macvlan实现容器的跨主机通信
  • 在Intel Mac的PyCharm中设置‘add bin folder to the path‘的解决方案
  • React强大且灵活hooks库——ahooks入门实践之常用场景hook
  • p4 大小写检查
  • Rust赋能文心大模型4.5智能开发
  • QCustomPlot绘图保存成PDF文件
  • 软考中级学习系列-- 阶码与尾数
  • 香港服务器Python自动化巡检脚本开发与邮件告警集成
  • 详解Linux下多进程与多线程通信(一)
  • Leetcode 3615. Longest Palindromic Path in Graph
  • OpenLoong技术观察 | 卓益得十年磨一剑:“行者”系列人形机器人技术演进观察
  • 构造函数延伸应用
  • DH(Denavit–Hartenberg)矩阵
  • redis汇总笔记
  • JAVA生成PDF(itextpdf)
  • 译码器设计
  • 论意识与人工智能:跨越鸿沟的艰难求索
  • gitlab批量删除远程分支(推荐方案二)
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要快速生成与检索优化(345)
  • 【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern The Last Guideline
  • vue3 ref vs reactive值的修改
  • 【Python练习】042. 编写一个函数,实现二叉树的前序、中序、后序遍历
  • k8s:0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims.
  • 线性代数学习笔记
  • 【unitrix】 5.1 第二套类型级二进制数基本结构体(types2.rs)
  • k8s存储入门
  • archive/tar: unknown file mode ?rwxr-xr-x