Loading

状态机——看待计算机系统的眼光

一句话:系统本身就是一个计算+存储系统,该系统为其他软件系统提供共同的抽象概念和运行环境,不同系统之间存在通信关系。

基本组成与三大任务

计算机要完成的三大任务就是存储,计算和通信。基于此目的,我们有磁盘,内存,CPU,网卡等各种各样的底层设备,操作系统将设备抽象为概念之后,三大目的显得更加的“纯粹”:我们所面对的是抽象后的概念。

存储:系统状态本身

状态机的本质就是状态和状态的迁移。谈迁移就必须要有状态本身。有这么一个陷阱问题:计算机的计算和存储两大功能哪个更重要一些?其实答案应该是同样重要,或者存储稍微重要一点,只因为“先有状态,才有迁移”。

持久化的存储都可以看作是状态,比如各种磁盘,还有最近比较火的持久化内存PMem(在数据库领域大放异彩)等。这些掉电不丢失的“存储器”,都是计算的前提和基础。

如果要贯穿整个计算机系统看存储的话,自下而上应该是如此的关系:基于磁盘抽象出本机文件系统,基于本机文件系统可以抽象出分布式文件系统 or 数据库。越往上技术迭代越灵活,但是从本质上看,单机文件系统提供的功能和一个非常强大的分布式数据库没有丝毫不同(当然,可用性差很多,这里仅仅指逻辑上的功能一样)。

计算:系统状态的改变

如果不关注CPU cache和寄存器的存在,CPU就单纯是一个无状态的计算设备,是系统状态的改变者(CPU每时每刻就是取指令、分析指令、执行指令的循环,不断改变着系统的状态),而cache 和 非持久化内存可以看作是计算所产生的中间状态的临时存储空间(因为其是掉电丢失的,和计算的无状态特性更加契合)。

程序本身就是一种重计算过程。你所写的任何函数都是为状态迁移做准备。诚然,一个程序在执行过程中,操作系统要为它维护相当多的内核信息(task_struct ...),但是程序主要还是为了“干一件事情”,这件事情就是纯计算,或者改变存储的状态(程序中涉及到IO操作的话)。

通信:一种特殊的计算

通信本身是一种信息的交流,也可以看作是一种特殊的状态变化关系,也即为特殊的计算。但通信在计算机系统中太常见了,因此单独罗列出来。

通信是计算系统的交互。你可以想象在一个合理的分工之下,一个计算系统应该只完成一个主要任务,那么现实中必然有许多事情是要“多任务”协作完成的。那么这些事情如何用计算机编程来映射?答案就是通信。

硬件级别的通信是通过电信号,操作系统级别的通信是各种IPC机制,应用层要么裸用socket对接系统级,要么封装成各种网络库/框架,更加上层的则是同步的RPC和异步的MQ了。

posted @ 2023-03-18 19:20  kylenhu  阅读(56)  评论(0编辑  收藏  举报