Erlang emulator 实现分析 mryufeng@gmail.com 2007/10
Erlang vm + bif + 基础设施 整个erlang系统的核心实现 尺寸很小 适合于嵌入式 emulator是什么 Erlang vm + bif + 基础设施 整个erlang系统的核心实现 尺寸很小 适合于嵌入式
emulator的特性 高性能 分布式 支持多核
emulator的物理结构 erlexec escript … tty_sl ram_file_drvzlib_drv udp_inet tcp_inet Efile async Beam Driver Sys Utilts beam Beam.smp Beam.hybird erlexec escript … Unix Windows …
emulator的类型 Beam Beam.smp Beam.hybird
Emulator的运行期 单个smp 多个smp情况 erl_start->erl_init->process_main->schedule->sys_schedule
Beam的物理模块 Beam目录下的.c .h 这部份基本上是可移植的
Process是调度的单元 轻量设计 无耦合 通过message交换信息
线程协调multi_scheduling 可以按需开N个 scheduler 随时停止所有线程进行维护
内存分配策略 : binary_alloc D: std_alloc E: ets_alloc F: fix_alloc H: eheap_alloc L: ll_alloc M: mseg_alloc S: sl_alloc T: temp_alloc Y: sys_alloc
dist Pid(x,y,z) 节点间通讯 透明实现
erl_ext_dist.txt Dist 和 cnode 原理
详细的系统运行器信息 erl_crash.dump 丰富的内容 Info模块 详细的系统运行器信息 erl_crash.dump 丰富的内容
Benchmark 用于测量系统运行器的情况
erlang term strorage Hash和tree实现 Match vm ets erlang term strorage Hash和tree实现 Match vm
对信号的处理 SIGINT SIGUSR1 SIGUSR2 在单独线程处理信号
用指针来分辨类型 内部格式和外部格式 是GC回收 Eterm数据结构 用指针来分辨类型 内部格式和外部格式 是GC回收
某些表格在源码里面找不到 Make的时候调用utility 程序动态生成的 表格和代码生成器 某些表格在源码里面找不到 Make的时候调用utility 程序动态生成的
针对Process的Message 进行的回收 针对普通的eterm进行的回收 垃圾回收 针对Process的Message 进行的回收 针对普通的eterm进行的回收
Port是erlang程序自己操作的界面 Driver是功能的实现 Io poller是 port和外部通讯的推动力 Port & Driver Port是erlang程序自己操作的界面 Driver是功能的实现 Io poller是 port和外部通讯的推动力
代码热部署原理 Moudle Driver dll
系统微调 命令行参数 环境变量 运行期信息获取
结束 谢谢大家