操作系统——什么是程序和编译器

操作系统——什么是程序和编译器

1 状态机

1.1 什么是状态机

  A state machine is a mathematical abstraction used to design algorithms. A state machine reads a set of inputs and changes to a different state based on those inputs. A state is a description of the status of a system waiting to execute a transition.
  状态机是用于设计算法的数学抽象
  状态机读取一组输入,并根据这些输入更改为不同的状态。
  状态是对等待执行转换的系统状态的描述。

  一句话: 状态机,就是一个动态系统,就是一个简单的离散微分方程

1.2 举例

从数字逻辑电路来讲:

  • 状态 = 寄存器保存的值(flip-flop)
  • 初始状态 = Reset(implementation dependent)
  • 迁移 = 组合逻辑电路计算寄存器下一周期的值

  下面就是一个 state machine:
X ′ = ¬ X ∧ Y Y ′ = ¬ X ∧ ¬ Y X^{'}=\neg X \land Y \\ Y^{'}= \neg X \land \neg Y \\ X=¬XYY=¬X¬Y
  朋友们,这里 X ′ X^{'} X 代表下一周期的 X X X 的状态。同理, Y ′ Y^{'} Y 代表下一周期的 Y Y Y 的状态。

XY ¬ X \neg X ¬X ¬ Y \neg Y ¬Y X ′ = ¬ X ∧ Y X^{'}=\neg X \land Y X=¬XY Y ′ = ¬ X ∧ ¬ Y Y^{'}= \neg X \land \neg Y Y=¬X¬Y
001101
011010
100100

这个 state machine 的 state 有亮种:00、01、10,就按照下面的方式不断转圈圈。
在这里插入图片描述

下面是用C语言实现的程序:

#include <stdio.h>

#define REGS_FOREACH(_) _(X) _(Y)
#define RUN_LOGIC X1 = !X && Y; \
			      Y1 = !X && !Y;
#define DEFINE(X) static int X, X##1;
#define UPDATE(X) X = X##1;
#define PRINT(X)  print(#X " = %d;", x);

int main(){
    REGS_FOREACH(DEFINE);
    while(1){
        RUN_LOGIC;
        REGS_FOREACH(PRINT);
        REGS_FOREACH(UPDATE);
        putchar('\n');
        sleep(1);
    }
}  

上面宏定义的语言展开后,其实是这样的:

int mian(){
    static int X, X1;
    static int Y, Y1;
    while(1){
        X1 = !X && Y; Y1 = !X && !Y;;
        printf("X" " = %d;", X); printf("Y" " = %d;", Y);;
        X = X1; Y = Y1;
        putchar('\n'); sleep(1);
    }
}

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三十二画生H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值