The Principle of Shaved Noodles


刀削面作为一种中原地区的主食,非常受大家的欢迎,现在教大家如何在家中做出美味可口的刀削面。

刀削面

刀削面组成

  • 中筋面粉 400g
  • 牛腩 300g
  • 水 180g
  • 番茄 50g
  • 小白菜 20g
  • 酸菜 15g
  • 葱花 15g
  • 盐 10g
  • 红烧汤头 20g

刀削面体系结构

刀削面是典型的三层式架构,由汤底、面条和浇头组成。

刀削面体系结构

如上图所示,不难看出,汤底层是刀削面最重要的层次,它为固体层提供服务,并且接收来自固体层的请求。在固体层中为浇头层和面条层,两者关系紧密。

刀削面时序逻辑

  1. 将水与盐加入中筋粉中混合均匀,揉至光滑的稍硬面团即可。
  2. 煮一锅开水,将面团削入滚水中煮熟即成刀削面,装碗待用。
  3. 将牛腩及番茄切斜厚片,一同加入红烧汤头,炖煮约50分钟至入味。
  4. 汤与料加入刀削面碗中,并入汆烫好的小白菜酸菜,最后撒上葱花即可。

附录:刀削面程序是怎么跑起来的

冯·诺伊曼结构计算机

冯·诺伊曼结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。本词描述的是一种实现通用图灵机的计算设备,以及一种相对于并行计算的序列式结构参考模型。

本结构隐约指导了将存储设备与中央处理器分开的概念,因此依本结构设计出的计算机又称存储程序计算机。

其特点主要由:

  1. 以运算单元为中心
  2. 采用存储程序原理
  3. 存储器是按地址访问、线性编址的空间
  4. 控制流由指令流产生
  5. 指令由操作码和地址码组成
  6. 数据以二进制编码

而其中,最重要的就是采用了存储程序原理。举个例子,比如我们在编写C++程序时,存储的方式是以源码编译后的二进制可执行文件格式exe存储的。

🤔 这里只考虑Windows操作系统下的情况

显然,该文件是存放于存储器(外存储器)中的。而这种存储方式就实现了程序的可复用性。

CPU与寄存器

在运行程序时,我们能看到的就是:双击程序图标,程序开始运行。但是其本质上就是各种逻辑电路实现的功能了。而其中负责逻辑运算的部件就叫做运算器,负责传输控制指令的部件就叫做控制器。而对于现代计算机来说,运算器和控制器是集成于CPU(中央处理器)中的,下面我们简要介绍CPU?并不会,直接开始讲寄存器!

首先,寄存器是CPU内用来暂存指令、数据和地址的电脑存储器。寄存器的存贮容量有限,读写速度非常快。在计算机体系结构里,寄存器存储在已知时间点所作计算的中间结果,通过快速地访问数据来加速计算机程序的执行。

寄存器位于存储器层次结构的最顶端,也是CPU可以读写的最快的存储器,事实上所谓的暂存已经不像存储器,而是非常短暂的读写少量信息并马上用到,因为通常程序执行的步骤中,这期间就会一直使用它。

为理解,下面我们简单阅读一段C++代码:

int main() {
    int a = 0;
    int b = 0;
    int y = 0;
    y = a + b;
    return 0;
}

相信理解完全没有问题,而其对应的汇编代码为:

main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 0
        mov     DWORD PTR [rbp-8], 0
        mov     DWORD PTR [rbp-12], 0
        ; ADD BEGIN
        mov     edx, DWORD PTR [rbp-4]
        mov     eax, DWORD PTR [rbp-8]
        add     eax, edx
        mov     DWORD PTR [rbp-12], eax
        ; ADD END
        mov     eax, 0
        pop     rbp
        ret

其中的rbsrspedxeax就是寄存器了。

观察注释4行语句,分别代表:

  1. 把数值从内存复制到edx(a值)
  2. 把数值从内存复制到eax(b值)
  3. edxeax的数值相加(注意相加后值存于eax中)
  4. eax的数值存储在内存中(y值更新)

其中edx称为通用寄存器,eax称为累加寄存器(回忆ALU)

内存

从上列代码可以看到,程序其实就是一堆指令的集合,而在冯·诺伊曼结构计算机中,内存上存储的不光有数据,也包括指令。而程序运行的过程,实际上就是CPU对内存上的单元进行解析。

🤔 解析过程实质上是控制器和运算器的合作,CPU中有程序计数器(也是一种寄存器)来记录当前运行指令的位置,一条指令运行结束后按序运行下一条,而如实现循环结构、控制结构,则是通过执行跳转指令来实现的(类似C/C++中的goto)。

程序是怎么跑起来的

根据这些只是,我们就大致了解了程序运行的过程:

  1. 外存储器内容复制到内存储器
  2. 控制器读取指令、按照运算结果控制计算机;
  3. 寄存器记录指令、数据;
  4. 运算器计算。

Author: Luminolt
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Luminolt !
  TOC