Exemplo n.º 1
0
        //реализуем алгоритм планирования
        //SJF с вытеснением по оставшемуся времени
        //подумать по оставшемуся времени ,это по берст тайм
        public void Next_Step()
        {
            if (!cpu.Free() && cpu.active_process.Ended())
            {
                cpu.active_process.End();

                cpu.stop_pr();
                cpu.act_pr  = null;
                cpu.busy_pr = false;
            }


            if (cpu.Free() && piramida.C() != 0 && piramida.Count() != 0)//!piramida.Empty())
            {
                cpu.start_pr(piramida.Item());

                piramida.Remove_max();
            }
            if (!cpu.Free() && piramida.C() != 0 && piramida.Count() != 0)
            {
                if (cpu.active_process.CompareTo(piramida.Item()) == 1)
                {
                    // cpu.active_process.End();
                    Process p = cpu.active_process;
                    cpu.start_pr(piramida.Item());
                    piramida.Remove_max();
                    piramida.Put(p);
                }
            }
        }
Exemplo n.º 2
0
        //действия модели на такте работы
        public void Next_time()
        {
            //увеличиваем номер такта
            clock.Next_time();
            //если порог интенсивности не превышен
            if (rand.NextDouble() < intensive)
            {
                Process new_pr = new Process(clock.get_time());
                //генерируется интервал обсл процесса процессором
                new_pr.set_name();
                new_pr.burst_time = rand.Next(burst_min, burst_max + 1);
                //помещаем в очередь готовых процессов
                //почему-то некоректно вставляется
                //как сделать сортировку по берст тайм???
                ready_pr.Put(new_pr);

                if (ready_pr.C() > 0 && ready_pr.C() > max_length)
                {
                    max_length = ready_pr.C();
                }
                zadania++;
            }


            if (Need_planirovka())
            {
                Process z_process = cpu.active_process;
                planner.Next_Step();
                if (z_process == null)
                {
                    takt++;
                }
                if ((ready_pr.C() == ready_pr.Count()) && ready_pr.C() > max_length)
                {
                    max_length = ready_pr.C();
                }
                if (z_process != null && z_process.process_status == "завершенный")
                {
                    kol_vo++;
                    srednee_waiting += z_process.waiting_time;
                    res              = srednee_waiting / kol_vo;
                    srednee_oborot  += clock.get_time() - z_process.admission_time;
                    res1             = srednee_oborot / kol_vo;
                }
                if (z_process != null && z_process.process_status == "ожидающий")
                {
                    queue.Put(z_process);
                }
            }


            if (Need_pl_2())
            {
                Process z_process = resource.active_process;
                pl.Next_step();

                if (z_process != null && z_process.process_status == "готовый")
                {
                    z_process.burst_time        = rand.Next(3, 6);
                    z_process.work_on_processor = 0;
                    ready_pr.Put(z_process);
                    if (ready_pr.C() > 0 && ready_pr.C() > max_length)
                    {
                        max_length = ready_pr.C();
                    }
                    zadania++;
                }
            }

            if (cpu.active_process != null && ready_pr.Count() != 0)
            {
                p = ready_pr.Count();
                for (int i = 0; i < p; i++)
                {
                    ready_pr.GetQ[i].Next_time();
                }
            }
            else if (cpu.active_process != null && ready_pr.C() == ready_pr.Count() && ready_pr.Count() > 0)
            {
                p = ready_pr.Count();
                for (int i = 0; i < p; i++)
                {
                    ready_pr.GetQ[i].Next_time();
                }
            }



            cpu.Next_step();
            resource.Next_step();
        }