![]() |
LINE Solver (C++)
Templated C++ port of the LINE queueing solver
|
The scheduling disciplines of the native LDES engine. More...
#include <algorithm>#include <cmath>#include <cstddef>#include <cstdint>#include <limits>#include <set>#include <vector>#include "line/lang/lang_types.h"Go to the source code of this file.
Classes | |
| struct | line::ldes::engine::Job |
| A job held by a station. More... | |
| struct | line::ldes::engine::WaitCmp |
| The waiting-room order of a buffered discipline. More... | |
| struct | line::ldes::engine::PsJob |
| A job being served by a sharing discipline, with the work it still owes. More... | |
Namespaces | |
| namespace | line |
| namespace | line::ldes |
| namespace | line::ldes::engine |
Functions | |
| bool | line::ldes::engine::is_preemptive (lang::SchedStrategy s) |
| True for the disciplines that interrupt a job already in service. | |
| bool | line::ldes::engine::is_preemptive_resume (lang::SchedStrategy s) |
| PREEMPTIVE RESUME, as against preemptive restart. | |
| bool | line::ldes::engine::is_size_based (lang::SchedStrategy s) |
| True for the orders whose key is the job's size, residual or attained work. | |
| bool | line::ldes::engine::is_ps_family (lang::SchedStrategy s) |
| True for the disciplines that share the server instead of ordering a queue. | |
| std::vector< double > | line::ldes::engine::ps_shares (lang::SchedStrategy sched, const std::vector< PsJob > &jobs, double c, const std::vector< double > &weight, std::size_t nclasses) |
| The per-job shares of a sharing discipline, in units of one server. | |
| double | line::ldes::engine::fsp_virtual_finish (const std::vector< double > &residuals, double target_work, double c, double now) |
| FSP's virtual finish time: when target would finish if the station ran processor sharing from now on. | |
| std::size_t | line::ldes::engine::preemption_victim (lang::SchedStrategy sched, const std::vector< Job > &in_service, const Job &arriving, double c, double now) |
| Which job in service arriving displaces, or in_service.size() for none. | |
The scheduling disciplines of the native LDES engine.
TWO FAMILIES, and they are structurally different simulators sharing one station:
THE SERVICE TIME IS SAMPLED AT ARRIVAL, not at service start. This is the reference's choice (customer.serviceTime = generateServiceTime(...) in the arrival handlers) and it is forced: SJF, LJF and the size-based orders compare service times of jobs that have not started, so the sample must exist before the job is ordered. It is invisible under FCFS, where arrival and service order coincide, and visible under LCFS with a MAP service process, whose phase then advances in ARRIVAL order.
PRIORITY ORDERS ASCENDING: a lower value is more urgent, 0 highest. That is LINE's convention throughout (SaveHandlers inverts it when exporting to JMT, which orders the other way), and every comparator here follows it.
Definition in file ldes_station.h.