Go to the documentation of this file.
28 #ifndef __SYSTEMC_CORE_SCHEDULER_HH__
29 #define __SYSTEMC_CORE_SCHEDULER_HH__
182 const std::string
name()
const {
return "systemc_scheduler"; }
260 if (delay.value() == 0) {
261 event->schedule(
deltas, tick);
269 while (it !=
timeSlots.end() && (*it)->targeted_when < tick)
271 if (it ==
timeSlots.end() || (*it)->targeted_when != tick) {
275 event->schedule((*it)->events, tick);
282 using namespace gem5;
294 (*tsit)->targeted_when <
event->when())
298 (*tsit)->targeted_when !=
event->when(),
299 "Descheduling event at time with no events.");
302 assert(
on == &events);
306 if (events.empty()) {
411 ts->targeted_when = tick;
540 void trace(
bool delta);
555 while (!events.empty())
556 events.front()->run();
573 #endif // __SYSTEMC_CORE_SCHEDULER_H__
const ::sc_core::sc_report reportifyException()
gem5::MemberEventWrapper<&Scheduler::maxTickFunc > maxTickEvent
static Priority DefaultPriority
gem5::MemberEventWrapper<&Scheduler::pause > starvationEvent
void scheduleTimeAdvancesEvent()
void deschedule(gem5::Event *event)
void deschedule(ScEvent *event)
static Priority ReadyPriority
static Priority MaxTickPriority
gem5::MemberEventWrapper<&Scheduler::timeAdvances > timeAdvancesEvent
TimeSlot(Scheduler *scheduler)
void elaborationDone(bool b)
gem5::MemberEventWrapper<&Scheduler::stop > stopEvent
TimeSlot * acquireTimeSlot(gem5::Tick tick)
const ::sc_core::sc_report * _throwUp
std::mutex asyncListMutex
std::list< TimeSlot * > TimeSlots
static Priority StarvationPriority
static const FlagsType AutoDelete
std::list< ScEvent * > ScEvents
void releaseTimeSlot(TimeSlot *ts)
std::atomic< bool > hasAsyncUpdate
std::map< gem5::Event *, gem5::Tick > eventsToSchedule
void deschedule(Event *event)
Deschedule the specified event.
uint64_t Tick
Tick count type.
static const Priority Maximum_Pri
Maximum priority.
void requestUpdate(Channel *c)
Process * getCurrentProcess()
void asyncRequestUpdate(Channel *c)
Queue of events sorted in time order.
void scheduleStarvationEvent()
void unregisterTraceFile(TraceFile *tf)
void schedule(gem5::Event *event)
gem5::MemberEventWrapper<&Scheduler::runReady > readyEvent
gem5::Tick timeToPending()
static Priority StopPriority
ProcessList readyListMethods
void scheduleReadyEvent()
const typedef gem5::EventBase::Priority Priority
Tick getCurTick() const
While curTick() is useful for any object assigned to this event queue, if an object that is assigned ...
Scheduler * parent_scheduler
const std::string name() const
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
gem5::Tick delayed(const ::sc_core::sc_time &delay)
void releaseImpl() override
NodeList< Channel > ChannelList
void schedule(gem5::Event *event, gem5::Tick tick)
static Priority TimeAdvancesPriority
void scheduleStop(bool finish_delta)
void completeTimeSlot(TimeSlot *ts)
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
std::stack< TimeSlot * > freeTimeSlots
static Priority PausePriority
void schedule(ScEvent *event, const ::sc_core::sc_time &delay)
ChannelList asyncUpdateList
void registerTraceFile(TraceFile *tf)
static const Priority Default_Pri
Default is zero for historical reasons.
void setEventQueue(gem5::EventQueue *_eq)
ProcessList readyListThreads
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
gem5::MemberEventWrapper<&Scheduler::pause > pauseEvent
void start(gem5::Tick max_tick, bool run_to_time)
std::set< TraceFile * > traceFiles
NodeList< Process > ProcessList
bool scheduled() const
Determine if the current event is scheduled.
Generated on Sun Jul 30 2023 01:56:57 for gem5 by doxygen 1.8.17