本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第0章,第0.1节理想厨房系统,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看
0.1 理想厨房系统
理想厨房系统是一个通过顺序执行菜谱中的各个加工步骤,把原材料加工成菜肴的系统。它由硬件和软件(菜谱)组成。
1)软件部分:菜谱是理想厨房系统中的一个无重量、无体积、不会损坏但可以经常更换的极为重要的“软件”部件。菜谱由一个个加工步骤顺序组成。
每个加工步骤命令理想厨房系统完成一个基本操作(比如,炒、蒸、煮、输入一种原材料等)。
注意:为了简洁起见,在以下叙述中,我们经常把菜谱中的一个“加工步骤”称为一条“指令”。因为一个加工步骤就是一条指导理想厨房如何工作的命令。
2)硬件部分:理想厨房系统主要由以下四个“硬件”(即实物)部件构成——理想厨房、自动冰箱、输入输出设备(即配菜员和传菜生)和三条传送带。
理想厨房系统的构成简图如图0-1所示。需要注意的是,理想厨房只是理想厨房系统中的一个重要组成部分。
1.自动冰箱
自动冰箱负责临时保存菜谱、原材料和菜肴。它由非常多的(比如几百个)大小一样的格子组成,每个格子都有一个唯一的固定编号,这个编号称为地址。地址是从0开始递增的。在菜谱中,地址用来定位要存取冰箱中的哪一个格子中的物品。每份原材料和菜谱中的每个加工步骤,都占据冰箱中的一个格子。
2.理想厨房
理想厨房负责根据从冰箱的菜谱中取到的加工步骤,进行炒菜以及相关的控制工作。理想厨房主要由厨房管理员、厨师、炊具和一些碟子组成,参见图0-1。
理想厨房中有一些起着重要作用的碟子:
1)一个PC碟(又称为指令地址存放碟):此碟中存放一个非负整数值,这个值是一个地址。它指明将要执行的指令,位于自动冰箱的哪一格中。
2)一个IR碟(又称为指令存放碟):用来存放刚刚从冰箱中取过来的一个(立即要执行的)指令。
3)一个状态信息存放碟:此碟用来随时自动记录一些加工状态信息。比如某个炊具的温度等。
4)若干个通用临时存放碟(图0-1中标有名称R0、R1、R2的碟):用来临时存放从冰箱中取来的原材料或经过加工了的半成品或成品。这是因为到冰箱格子中存取物品,要比到通用临时存放碟慢得多。
3.指令执行的全过程
理想厨房执行指令的流程完全是周期性的,即任意一条指令都是按照“取指令—阅读分析指令—执行指令”这三个阶段进行的。理想厨房每次只能按顺序执行菜谱中的一条指令。
厨房管理员首先根据PC碟中的值,通过三条传送带的协调工作(三条传送带如何协调工作的细节,请参见下一节),到自动冰箱的指定格中取菜谱中的一条指令。取到理想厨房并把它存放到IR碟中后,PC碟中的值将会加上1—这是为取下一条指令做好准备。
然后,厨房管理员阅读并分析IR碟中刚取到的这一条指令,根据该指令的指示做以下七类工作中的一种:
1)取物品:通过三条传送带,命令自动冰箱把指定地址格子中的(炒菜加工步骤马上要用到的)原材料(通过材料传送带)传送到理想厨房中来。
2)加工:命令厨师按照指令的要求,对原材料进行基本加工操作(即“炒”、“蒸”、“煮”等基本操作步骤中的某一个动作)。
3)存物品:通过三条传送带向自动冰箱发命令,把某个碟子或炊具中的成品(或半成品)送回到冰箱指定的格子中存放。
4)在厨房内部进行物品传送:在厨房的各个碟子和炊具之间传送原料或半成品。
5)跳转:根据这种指令中给出的地址,将这个地址重新存放到PC碟中。这样一来,理想厨房就可以跳转到冰箱的别处去(顺序往下)执行指令。
举例来说,第19格中的跳转指令中给出的地址是36,执行这条跳转指令前PC碟中的值是20,但跳转指令会将这个值改变为36,于是,下一条要执行的指令位于地址为36的格子中,而不再位于地址为20的格子中。这是无条件跳转指令。
还有一类是有条件跳转指令。有条件跳转指令是在某个条件成立时才修改PC碟中的原来值,条件不成立时就不修改PC碟中的原来值(因而不会发生跳转),而这些条件是存放在状态信息存放碟中的。
6)输入:命令配菜员为某道菜临时配备原材料(在本章不做讨论)。
7)输出:命令传菜生将炒好的菜送给顾客(在本章不做讨论)。
一条指令执行完后,理想厨房立即自动进行下一个完全类似的、新的 “取指令—阅读分析指令—执行指令”的工作。
下面我们通过一个实例来讲述理想厨房系统的工作机制。这是本章的重点,因为计算机的工作原理与之极其相似。