Erlang虚拟机源码阅读笔录(四)虚拟机的进程创建

4. Erlang虚拟机的进程创建

在第三节中我们分析了Erlang虚拟机的进程调度和指令集(threaded-code)的执行过程,这一节我们分析Erlang虚拟机的进程创建过程。

首先,创建一个需要调用内建函数(BIF)erlangspawn或者spawn_opt,spawn_link等,这里我们分析spawn函数的调用过程。所有spawn函数最后都会调用spawn/3这个BIF,这个内建函数被编译成字节码,在加载到erlang虚拟机后对应的threaded-code格式为:




 
 

 

所有3参数的BIF入口branch都是lb_bif_3,其中address保存着该threaded-code错误处理的回调函数入口地址,bif保存了spawn函数在BIF export tables中的index,然后type标志了每个参数的类型。当执行调度的时候调度器首先通过Goto(*next)跳转到lb_i_gc_bif3_jIsId,然后通过I分析出BIF的入口地址,并跳转到对应的BIF中,erlang:spawn/3对应的BIF函数为spawn_3(),其定义位于otp_src_R15B01/erts/emulator/beam/bif.c。定义如下:

BIF_RETTYPE spawn_3(BIF_ALIST_3)

{

    ErlSpawnOpts so;

    Eterm pid;

 

    so.flags = 0;

    pid = erl_create_process(BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3, &so);

    if (is_non_value(pid)) {

    BIF_ERROR(BIF_P, so.error_code);

    } else {

    if (ERTS_USE_MODIFIED_TIMING()) {

        BIF_TRAP2(erts_delay_trap, BIF_P, pid, ERTS_MODIFIED_TIMING_DELAY);

    }

    BIF_RET(pid);

    }

}

其主要核心是调用erl_create_process()函数,该函数的定义在otp_src_R15B01/erts/emulator/beam/erl_process.c中,而erl_create_process()函数的剖析这篇文章(Erlang并发机制 - 进程)已经说得很详细,不再赘述。

 

相关资料:

1.Erlang并发机制 - 进程

2.Erlang并发机制进程调度

3.Erlang并发机制任务迁移算法

4.Characterizing the Scalability of Erlang VM on Many-core Processors

5. Erlang并发机制消息传递

6.Erlang并发机制垃圾回收

7. The Erlang BEAM Virtual Machine Specification

你可能感兴趣的:(技术笔记,虚拟机,erlang,云计算,互联网)