对于Javascript,有一个很好的介绍来解释运行时状态:http://latentflip.com/loupe/
对于Smalltalk,我从未发现运行时和图像快照的结构有类似的概述。
据说Smalltalk图像由可以相互发送消息的对象组成。这就产生了许多问题:
-
一次是否只有一个对象处于活动状态?
-
是否存在";根调度器";启动时被指定为";过程";对象?
-
每个挂起的图像都有活动对象的列表吗?
-
如果两个活动对象向第三个对象发送消息,会发生什么?
-
一次只能处理一条消息吗?";原子性"?
-
两个活动对象如何通信?
-
是否每个对象都有一个";收件箱";已接收但尚未处理的邮件的数量?
-
每个对象都有一个事件循环吗?
一次是否只有一个对象处于活动状态?
是的,而系统可以调度不同的";过程";,它们是以不同优先级运行的类Process
的实例,它们一次控制一个。由于调度是非抢占式的,进程必须显式地让出或等待信号量(类Semaphore
的实例(。
是否存在";根调度器";启动时被指定为";过程";对象?
是的,全局Processor
(ProcessorScheduler
的实例(保留并管理准备运行的进程的优先级列表(其他进程是等待某个信号量的进程(。
每个挂起的图像都有活动对象的列表吗?
挂起的图像不过是图像。所以,是的,它有所有的东西,特别是Processor
,它知道activeProcess
是谁
如果两个活动对象向第三个对象发送消息,会发生什么?
消息一次发送一条(即使它们可能被虚拟机中断(
一次只能处理一条消息吗?";原子性"?
原子性(不可中断性(的级别本质上是字节码:消息发送、分配等。程序员认为是原子性的任何操作。
两个活动对象如何通信?
对象通过消息发送进行通信。
在某种程度上,问题的答案取决于使用的虚拟机。虽然许多Smalltalk实现或衍生产品都非常接近最初的概念,但可能会有很大的差异。
从你的问题来看,你似乎对概念性答案感兴趣,我建议你阅读Smalltalk的原文;蓝皮书";。
Smalltalk-80:语言及其实现。阿黛尔·戈德堡和大卫·罗布森,1983年,艾迪森·韦斯利·
这本书深入讨论了系统的设计和核心类的实现,但也有几个部分,最后,提供了来自VM、解释器、对象内存等的规范