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

目录

[1. 冯诺依曼体系结构](#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实现的函数,大多数的函数有输入参数和返回值,输入参数是用户给操作系统的,返回值是操作系统给用户的。

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

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

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

相关推荐
deeper_wind5 小时前
k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)
linux·运维·容器·kubernetes
勇往直前plus5 小时前
VMware centos磁盘容量扩容教程
linux·运维·centos
政安晨6 小时前
Ubuntu 服务器无法 ping 通网站域名的问题解决备忘 ——通常与网络配置有关(DNS解析)
linux·运维·服务器·ubuntu·ping·esp32编译服务器·dns域名解析
路溪非溪8 小时前
嵌入式Linux驱动开发杂项总结
linux·运维·驱动开发
Neolock8 小时前
Linux应急响应一般思路(三)
linux·web安全·应急响应
被遗忘的旋律.9 小时前
Linux驱动开发笔记(七)——并发与竞争(上)——原子操作
linux·驱动开发·笔记
轻松Ai享生活9 小时前
minidump vs core dump
linux
轻松Ai享生活10 小时前
详细的 Linux 常用文件系统介绍
linux
张童瑶11 小时前
Linux 离线安装lrzsz(rz、sz上传下载小插件)
linux·运维·centos
十五年专注C++开发11 小时前
通信中间件 Fast DDS(二) :详细介绍
linux·c++·windows·中间件·fastdds