/*Запуск модели*/ private void Go_B_Click(object sender, EventArgs e) { Load_GB.Hide(); ReadyLoad_LB.ClearSelected(); Log.Clear(); //TBootFile bf = new TBootFile(); //bf.nameOfFile = "процесс2"; //bf.comandsOfFile.Add("ПАМЯТЬ-1000"); //bf.comandsOfFile.Add("ПРОЦЕССОР-3"); //bf.comandsOfFile.Add("ПРОЦЕССОР-2"); //bf.comandsOfFile.Add("КОНЕЦ"); //TProcess prss = CreateProcess(bf); //queueOfReady.Add(prss); //TimerOfProcessor.Start(); if (QueueOfReady_LB.Items.Count > 0) { ///Processor_TC.TabPages.Clear();//Очистка вкладок /*Заполнение главного списка процессов из списка ГОТОВНОСТЬ*/ for (int i = 0; i < QueueOfReady_LB.Items.Count; i++) { TBootFile bootFile = QueueOfReady_LB.Items[i] as TBootFile; TProcess process = CreateProcess(bootFile); queueOfReady.Add(process); /* Для рендера ЛОГА при создании процесса*/ ToLog("Создан процесс "); ToLog(process.ToString(), Color.Lime); ToLog(" и добавлен в очерель ГОТОВНОСТЬ.", Color.White); ToLog("Занято "); ToLog(process.descriptor.memory.ToString() + " байт", Color.Lime); ToLog(" процессом ", Color.White); ToLog(process.descriptor.name, Color.Lime); } /*Отрисовка вкладок ПРОЦЕССОР*/ /*int j = 0; * foreach (TProcess str in queueOfReady) * { * DrawPageProc(queueOfReady[j++]); * }*/ ToLog("Очередь ГОТОВНОСТЬ сформирована."); ToLog("Планировщик процессов - запущен."); TimerOfProcessor.Start(); Go_B.Enabled = false; } else { ToLog("Добавте сперва процесс в очередь ГОТОВНОСТЬ", Color.Red); } }
/* Создание процесса */ TProcess CreateProcess(TBootFile bootFile) { TProcess process = new TProcess(); /*Список команд загрузочного файла - кодовый сегмент*/ process.strFileCommands = bootFile.comandsOfFile; /*Заполнение дескриптора процесса*/ process.descriptor.name = bootFile.nameOfFile; process.descriptor.PIDcount(); process.descriptor.kvant = 1; process.descriptor.state = TStateProcess.spREADY; process.descriptor.memory = process.GetCountRun(0); /*Настроить содержимое контекста нового процесса (инициализация начальными параметрами)*/ process.context.currentLine = 0; process.context.command = TCommand.cMEMORY; process.context.currentRun = 0; process.context.countRun = process.GetCountRun(0); return(process); }
/* Метод для отрисовки новой вкладки ПРОЦЕССОР*/ void DrawPageProc(TProcess process) { TabPage newTabPage = new TabPage(); newTabPage.Name = "TabPage" + process.descriptor.PID; newTabPage.Text = process.descriptor.name; newTabPage.BackColor = SystemColors.Control; newTabPage.BorderStyle = BorderStyle.Fixed3D; newTabPage.ImeMode = ImeMode.NoControl; newTabPage.Location = new Point(4, 22); newTabPage.Size = new Size(150, 180); Processor_TC.TabPages.Add(newTabPage); Label PID = new Label(); PID.Name = "PID_L" + process.descriptor.PID; PID.Text = "PID: " + process.descriptor.PID; Label state = new Label(); state.Name = "State_L" + process.descriptor.PID; state.Text = "Состояние: " + process.descriptor.state.GetDescription(); Label kvant = new Label(); kvant.Name = "Kvant_L" + process.descriptor.PID; kvant.Text = "Квант: " + process.descriptor.kvant; Label memory = new Label(); memory.Name = "Memory_L" + process.descriptor.PID; memory.Text = "Память: " + process.descriptor.memory; ListBox ProcessLB = new ListBox(); ProcessLB.FormattingEnabled = true; ProcessLB.Name = "Process_LB" + process.descriptor.PID; ProcessLB.SelectionMode = SelectionMode.One; ProcessLB.Size = new Size(140, 108); ProcessLB.DataSource = process.strFileCommands; Control[] MassComponnents = new Control[] { PID, state, kvant, memory, ProcessLB }; for (var i = 0; i < MassComponnents.Length; i++) { MassComponnents[i].Location = new Point(3, 5 + (15 * i)); MassComponnents[i].AutoSize = true; newTabPage.Controls.Add(MassComponnents[i]); } }