Exemplo n.º 1
0
 /// <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)
 {
 }
Exemplo n.º 3
0
 /// <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();
 }
Exemplo n.º 4
0
 /// <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)
 {
 }
Exemplo n.º 6
0
 /// <summary>
 /// 核心模块构造函数
 /// </summary>
 /// <param name="complex">复杂运算模块</param>
 public CoreModule(IComplexOperation complex) : base(complex)
 {
     Math  = new MathModule();
     Logic = new LogicModule();
 }
Exemplo n.º 7
0
        /// <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("虚拟机错误 内存溢出 停止创建进程");
                    }
                }
            }
        }