冯·诺依曼体系 一切皆文件

基本组成和概念理解

基本组成

冯诺伊曼结构

  • 这里的存储器指的是内存。

  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设。(输入或输出设备)

  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

  • 设备之间都是独立的个体

联系

所有的设备通过数据交互,而数据通过线传递的高(1)低(0)电平来传递。即充电放电的过程。

对于32位计算机,它具有32根地址总线和数据总线。每根总线只有01

  • 地址总线:可以访问的地址空间宽度。例如:在32位机器中,地址总线排列组合形成的地址范围是[0,2^32byte],共4GB,给他安装4G以上内存是没有意义的

  • 数据总线:主要用于在CPU 和内存之间往返传输需要处理或存储的数据。

定义

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

操作系统层级图

Linux中,一切皆文件怎么理解?

  1. 我们在linux中几乎所有的操作都是进程。

  2. 冯·诺依曼体系,我们使用的设备绝大多数都是外设,例如键盘和显示器。

  3. 操作系统需要把硬件资源管理起来,并且要支持和硬件进行交互(即需要有对应的方法)。所以Linux内核提供了一种数据结构
    ——struct operation_func{}(也像文件一样被封装在struct_file中)将每一个硬件设备的方法都以函数指针的形式保存在struct operation_func{}当中。

因此,一个设备想要被系统访问,需要向系统的文件对象(struct_file)中的operation_func{}提供一个函数指针集。

VFS——虚拟文件系统

由于struct_file用这样的方式达到我们使用类似访问文件的方式访问了外设,因此我们把这种技术称为虚拟文件系统

一些情况

  • 外设可以向CPU发送中断信号,来通知自己有数据到达。

    • 例如:键盘可以向CPU发送中断号——通过针脚(并且不同设备之间的中断号不同。)
键盘组合键 发送的信号 描述
Ctrl+C SIGINT 中断(Interrupt)信号,通常用于终止一个前台进程。
Ctrl+Z SIGTSTP 暂停(Stop)信号,通常用于将前台进程挂起。
Ctrl+\ SIGQUIT 退出(Quit)信号,导致进程终止并生成核心转储。
Ctrl+D EOF 结束文件(End-of-File)信号,通常用于终止输入。
Ctrl+S XOFF 停止(Stop)信号,暂停终端输出。
Ctrl+Q XON 启动(Start)信号,恢复终端输出。
  • CPU通过可以通过中断号为索引,去中断向量表当中查找并执行对应的中断服务程序(ISR)。

  • 中断向量表由操作系统维护,主要包含指向中断服务程序(ISR)的指针,这些程序负责处理特定的中断请求。

  • 键盘和显示器交互,当用户在键盘上输入数据时,键盘将输入的数据通过中断信号发送给操作系统。操作系统将数据存储在其输入缓冲区中,并将其传递给应用程序。应用程序或操作系统将数据发送到显示器的输出缓冲区,实现回显功能。

  • 当执行了除以零的指令时,CPU会产生一个异常(状态标志位会进行标记),然后发送SIGFPE(浮点异常)信号给进程。并且我们这时虽然修改的是CPU内核的状态寄存器,但它属于进程的上下文,会在进程被切换时由操作系统现场保护,并在新进程被调度时被恢复。这样保证了不会对其他进程造成影响,从硬件和软件层面上确保了进程的独立性。

参考资料


冯·诺依曼体系 一切皆文件
https://weihehe.top/2024/06/30/冯诺依曼体系/
作者
weihehe
发布于
2024年6月30日
许可协议