/// <summary> /// 虚拟机控制器构造函数 /// </summary> /// <param name="net_conn">网络连接创建组件</param> /// <param name="complex">复杂数学运算组件</param> /// <param name="time_path">时间组件文件路径</param> /// <param name="mem_size">内存大小(默认8MB)</param> /// <param name="mem_align">内存最小分配量</param> /// <param name="mem_offset">内存空闲空间分配差值</param> public VMController(INetConnect net_conn, IComplexOperation complex, string time_path = null, int mem_size = Memory_Size, short mem_align = Memory_Align, short mem_offset = Memory_Offset) { MemoryController = new MemoryUnit(mem_size, mem_align, mem_offset); IOController = new IOUnit(this); NetController = new NetUnit(net_conn, this); TimeTool = new Time(time_path); Complex = complex; SVM = null; }
/// <summary> /// 天宇虚拟机默认框架构造函数 /// </summary> /// <param name="application">上层应用程序接口</param> /// <param name="path">初始启动文件路径</param> /// <param name="memory">内存接口</param> /// <param name="icomplex">复杂运算接口</param> /// <param name="time">时间接口</param> /// <param name="idevice">设备接口</param> /// <param name="inet">网络接口</param> public VisualMachine(IApplication application, string path, MemoryBase memory, IComplexOperation icomplex, TimeBase time, IDevice idevice, INetControl inet) : base(application, path, memory, 16, icomplex, time, idevice, inet, 3, 1, 100) { }
/// <summary> /// 虚拟机代码执行单元构造函数 /// </summary> /// <param name="core_id">核心编号</param> /// <param name="control">核心控制器接口</param> /// <param name="complex">复杂运算单元接口</param> /// <param name="cache_size">缓存大小</param> public ProcessCodeExecutorUnit(int core_id, IExecutorControl control, IComplexOperation complex, int cache_size = 3) : base(core_id, control, complex, cache_size) { Timer = new System.Timers.Timer(100); Timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerEvent); Timer.Start(); }
/// <summary> /// 核心程序执行单元构造函数 /// </summary> /// <param name="control">核心控制器接口</param> /// <param name="complex">复杂运算单元接口</param> /// <param name="cache_size">缓存大小</param> public CoreCodeExecutorUnit(IExecutorControl control, IComplexOperation complex, int cache_size = 3) : base(-1, control, complex, cache_size) { }
public VisualMachine(IApplication application, string path, MemoryBase memory, int min_mem_size, IComplexOperation icomplex, TimeBase time, IDevice idevice, INetControl inet, int cache_size, int core_num, int stack_size) : base(application, path, memory, min_mem_size, icomplex, time, idevice, inet, cache_size, core_num, stack_size) { }
/// <summary> /// 核心模块构造函数 /// </summary> /// <param name="complex">复杂运算模块</param> public CoreModule(IComplexOperation complex) : base(complex) { Math = new MathModule(); Logic = new LogicModule(); }
/// <summary> /// 虚拟机代码执行器构造函数 /// </summary> /// <param name="application">上层应用界面</param> /// <param name="path">系统启动程序</param> /// <param name="memory">内存接口</param> /// <param name="core_num">虚拟机核心数</param> /// <param name="icomplex">复杂执行单元接口</param> /// <param name="time">时间操作接口</param> /// <param name="cache_size">缓存区大小</param> /// <param name="min_mem_size">进程内存分配最小量</param> /// <param name="idevice">IO设备接口</param> /// <param name="inet">网络接口</param> /// <param name="stack_size">进程堆栈数</param> public CodeExecutorUnit(IApplication application, string path, MemoryBase memory, int min_mem_size, IComplexOperation icomplex, TimeBase time, IDevice idevice = null, INetControl inet = null, int cache_size = 3, int core_num = 1, int stack_size = 100) { Application = application; App_Lock = 0; StackSize = stack_size; AddNewProgramFlag = true; FreeFileIDTable = new SortedList <int, int> { { 0, ushort.MaxValue } }; FreeProgramIDTable = new SortedList <int, int> { { 0, ushort.MaxValue } }; FileLoad = new FileLoad(min_mem_size, this); FileLoad_Lock = 0; IDevice = idevice; Device_Lock = 0; INet = inet; Net_Lock = 0; Memory = memory; Memory_Lock = 0; Time = time; Time_Lock = 0; FileTable = new Dictionary <int, FileStream>(); File_Lock = 0; Ring = new ProcessRing(); Ring_Lock = 0; IComplex = icomplex; Cores = new ProcessCodeExecutorUnit[core_num > 0 ? core_num : 0]; for (int i = 0; i < Cores.Length; i++) { Cores[i] = new ProcessCodeExecutorUnit(i, this, icomplex, cache_size); } if (null != path) { BackGroundCore = new CoreCodeExecutorUnit(this, icomplex, cache_size); ProgramUnit program = FileLoad.Complete(path); if (null != program) { program.MemorySpace = Memory.ApplyMemory(program.MemorySize, out long realize); if (-1 != realize) { int id = GetProgramID(); if (-1 != id) { BackGroundCore.Start(new Process(id, program, stack_size) { Running = false, Time = new TimeSpan(0, 0, 0, 0, 0) }); } } else { Application.Print("虚拟机错误 内存溢出 停止创建进程"); } } } }