![](https://img-blog.csdnimg.cn/707f18a8d2774c28ba7d9c3dfd071578.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
正式建模语言
文章平均质量分 91
FSP建模语言学习
小羊和小何
渡人者自渡
展开
-
FSP语言学习(一):对单个process建模
正式建模语言是进程代数正式建模,像有Finite State Processes (FSP) 是一种建模语言,它基于Communicating Sequential Processes (CSP) 和 Calculus of Communicating Systems (CCS)。在这些语言中操作和推理表达式的规则称为进程代数(有时也称为进程演算)。原创 2022-03-22 17:29:54 · 2717 阅读 · 0 评论 -
FSP语言学习(二):实现Process
一个进程是一个程序或子程序的执行。在FSP语言学习(一)中,我们描述了一个进程如何被建模为一个有限状态机。在本篇中,我们将看到进程在计算系统中是如何表示的。特别是,我们描述了进程是如何在Java中编程的。原创 2022-04-08 23:38:23 · 1505 阅读 · 0 评论 -
FSP语言学习(三):对并行运行的process建模
我们在上一部分的学习中,介绍了正式建模语言的重要性,并学习了如何使用FSP对单个Process建模。但是,FSP通常不用于对单个Process进行建模。它的真正作用是对有交互行为的多个Process有一个直观的展现和精确描述。这篇文章,我们将学习如果使用FSP对并行的Processes建模。原创 2022-03-23 00:09:01 · 1292 阅读 · 0 评论 -
FSP语言学习(四):对多线程程序建模
在Java程序中,当一个以上的线程是活的时,就会出现并发现象。如果一个线程已经启动但尚未终止,它就是活的。在本篇博客,我们将介绍一个简单的Java多线程程序的例子,除了每个Java程序中的主执行线程外,还有两个并发的活动线程。示例程序中的线程并不直接互动。关于线程如何交互的话题将留到后面讨论。原创 2022-04-09 11:16:51 · 1182 阅读 · 0 评论 -
FSP语言学习(五):共享对象和相互排斥
在之前的中,我们讨论了在一个或多个处理器上执行多个进程的问题,通过在一个Java程序中交错和执行多个并发线程来模拟并发执行。我们解释了如何使用共享原子动作对进程的交互进行建模,但没有解释真正的进程或线程如何交互。在这一章中,我们将转向构建并发程序所涉及的问题,在这些程序中,线程会进行交互通信和合作。原创 2022-04-09 18:58:08 · 963 阅读 · 0 评论 -
FSP语言学习(六):Monitors 和条件 Synchronization
监视器是用于并发编程的语言特性。监视器封装了数据,这些数据只能被监视器的访问程序观察和修改。一次只能有一个访问程序被激活。因此,一个访问程序对封装在监视器中的数据变量有互斥的访问权。监视器听起来应该很熟悉,因为我们已经在之前的学习中看到了监视器的概念,尽管使用了不同的术语解释。一个对象满足了监视器的数据访问要求,因为它封装了数据,如果声明为私有,则只能由对象的方法访问。这些方法可以被同步以提供互斥的访问。因此,监视器在Java中被简单地表示为一个拥有同步方法的类。原创 2022-04-09 22:25:52 · 1083 阅读 · 0 评论 -
FSP语言学习(七):解决同步问题—死锁、干扰
我们在上一篇文章中学习了如何使用FSP对并行运行的processes建模。但是由于多线程或者多进程会有共享的资源空间,它们可能同时访问同一个共享资源,这就是竞态条件。当多个线程或多个进程在争抢资源的时候,它们就会互相干扰,即运行结果取决于最后一个访问资源的线程或进程。为了防止竞态条件的发生,我们会给共享资源加锁,来控制访问,但是当多个进程互相等待对方释放资源时,就会发生死锁。我们这篇文章会学习如何使用FSP对存在同步问题的系统进行建模,以帮助我们发现系统潜在的死锁或者干扰问题。原创 2022-03-23 21:52:50 · 1308 阅读 · 0 评论 -
FSP语言学习(八):死锁
当一个系统的所有组成进程都被阻断时,就会出现死锁。另一种说法是,系统处于死锁状态,因为它没有可以执行的合格动作。我们已经在上一篇博客的嵌套监视器的例子中看到了死锁的例子。在那里,无论是生产者还是消费者进程都无法取得进一步的进展,因为消费者被封锁了,在等待生产者的字符,而生产者被封锁了,在等待消费者持有的监视器锁。换句话说,每个进程都在等待另一个进程持有的资源,有时被称为 "致命的拥抱"。Coffman、Elphick和Shoshani(1971)确定了发生死锁的四个必要和充分条件。原创 2022-04-09 23:17:59 · 611 阅读 · 0 评论 -
FSP语言学习(九):安全性和活泼性属性
属性是一个程序的属性,对于该程序的每一个可能的执行都是真的。对并发程序感兴趣的属性分为两类:安全和有效性。安全性属性断言,在执行过程中不会发生任何坏事。活性属性断言,最终会有好事发生。另一种说法是,安全性是指程序不会达到坏的状态,而活性是指程序最终达到一个好的状态。原创 2022-04-10 00:30:17 · 7443 阅读 · 2 评论 -
FSP语言学习(十):用时态逻辑进行模型检查
在上两讲中,我们看到如何指定对并发系统的每一次执行都成立的属性。这些安全和有效性属性对于描述系统的某些属性非常有用。然而,它们并不像逻辑属性那样强大。逻辑属性是由命题和逻辑运算符组成的描述,如and、not和or。你可能已经学过命题逻辑,它允许我们描述关于系统在某一瞬间的状态的属性。然而,FSP模型没有状态,它的时间是线性的,连续的,它们由在连续时间中发生的动作组成。...原创 2022-04-19 19:03:55 · 3123 阅读 · 0 评论 -
FSP考试代码参考
索引变量上支持通常的算术运算: forall的用法: 用这种方法去表示N个客户端加一个服务器的系统模型: 通过这个语法,我们就可以将我们可以将行人中的行为 wander 重新标记为行为 idle,如下所示:信号量: 信号量和Buffer:如何使用FSP描述有界缓冲区呢:wait-for cycle 是由于所有哲学家都在同一时间需要右边的刀叉造成的,要解决这个问题,一种方法就是让他们有不同的行为。比如,让奇数的哲学家先拿起他们的右叉,偶数的哲学家先拿起他们的左原创 2022-06-06 00:31:05 · 650 阅读 · 0 评论