gem5
v20.0.0.0
|
This class represents a fiber, which is a light weight sort of thread which is cooperatively scheduled and runs sequentially with other fibers, swapping in and out of a single actual thread of execution. More...
#include <fiber.hh>
Public Member Functions | |
Fiber (size_t stack_size=DefaultStackSize) | |
stack_size is the size of the stack available to this fiber. More... | |
Fiber (Fiber *link, size_t stack_size=DefaultStackSize) | |
virtual | ~Fiber () |
void | run () |
Start executing the fiber represented by this object. More... | |
bool | finished () const |
Returns whether the "main" function of this fiber has finished. More... | |
bool | started () const |
Returns whether the "main" function of this fiber has started. More... | |
Static Public Member Functions | |
static Fiber * | currentFiber () |
Get a pointer to the current running Fiber. More... | |
static Fiber * | primaryFiber () |
Get a pointer to the primary Fiber. More... | |
Static Public Attributes | |
static const size_t | DefaultStackSize = 0x50000 |
Protected Member Functions | |
virtual void | main ()=0 |
This method is called when this fiber is first run. More... | |
void | setStarted () |
Private Member Functions | |
void | start () |
void | createContext () |
Static Private Member Functions | |
static void | entryTrampoline () |
Private Attributes | |
ucontext_t | ctx |
Fiber * | link |
void * | stack |
size_t | stackSize |
void * | guardPage |
size_t | guardPageSize |
bool | _started |
bool | _finished |
This class represents a fiber, which is a light weight sort of thread which is cooperatively scheduled and runs sequentially with other fibers, swapping in and out of a single actual thread of execution.
To define your own threads, create a subclass of Fiber and override its main() function to do what you want your fiber to do. You can start it by calling its run() method which will stop your execution and start the other fiber in your place.
If your main() function ends, that fiber will automatically switch to either the primary fiber, or to a particular fiber you specified at construction time, and your fiber is considered finished.
Fiber::Fiber | ( | size_t | stack_size = DefaultStackSize | ) |
Fiber::Fiber | ( | Fiber * | link, |
size_t | stack_size = DefaultStackSize |
||
) |
|
virtual |
|
private |
|
static |
Get a pointer to the current running Fiber.
Definition at line 181 of file fiber.cc.
Referenced by m5::Coroutine< Arg, Ret >::call(), and started().
|
staticprivate |
Definition at line 79 of file fiber.cc.
Referenced by createContext(), and setStarted().
|
inline |
Returns whether the "main" function of this fiber has finished.
Definition at line 81 of file fiber.hh.
References _finished.
Referenced by sc_gem5::Kernel::init(), m5::Coroutine< Arg, Ret >::operator bool(), sc_gem5::Scheduler::pause(), sc_gem5::Kernel::regStats(), sc_gem5::Kernel::startup(), sc_gem5::Scheduler::stop(), TEST(), and sc_gem5::Scheduler::throwUp().
|
protectedpure virtual |
This method is called when this fiber is first run.
Override it to give your fiber something to do. When main returns, the fiber will mark itself as finished and switch to its link fiber.
Implemented in m5::Coroutine< Arg, Ret >, LinkedFiber, sc_gem5::Thread::Context, SwitchingFiber, and sc_gem5::ScMainFiber.
|
static |
Get a pointer to the primary Fiber.
This Fiber represents the thread of execution started by the OS, and which has a Fiber attached to it after the fact.
Definition at line 182 of file fiber.cc.
Referenced by sc_gem5::Process::fiber(), sc_gem5::Scheduler::start(), started(), TEST(), and sc_gem5::Scheduler::yield().
void Fiber::run | ( | ) |
Start executing the fiber represented by this object.
This function will "return" when the current fiber is switched back to later on.
Definition at line 163 of file fiber.cc.
References _finished, _started, createContext(), ctx, and panic_if.
Referenced by m5::Coroutine< Arg, Ret >::call(), sc_gem5::Scheduler::pause(), start(), sc_gem5::Scheduler::start(), sc_gem5::Scheduler::stop(), TEST(), sc_gem5::Scheduler::throwUp(), and sc_gem5::Scheduler::yield().
|
inlineprotected |
|
private |
Definition at line 141 of file fiber.cc.
References _finished, ctx, link, main(), panic_if, run(), and setStarted().
Referenced by setStarted().
|
inline |
Returns whether the "main" function of this fiber has started.
Definition at line 85 of file fiber.hh.
References _started, currentFiber(), main(), and primaryFiber().
Referenced by TEST().
|
private |
Definition at line 120 of file fiber.hh.
Referenced by finished(), run(), and start().
|
private |
Definition at line 119 of file fiber.hh.
Referenced by run(), setStarted(), and started().
|
private |
Definition at line 107 of file fiber.hh.
Referenced by createContext(), run(), and start().
|
static |
Definition at line 65 of file fiber.hh.
Referenced by sc_gem5::Process::Process().
|
private |
|
private |
|
private |
Definition at line 111 of file fiber.hh.
Referenced by createContext(), Fiber(), and ~Fiber().
|
private |
Definition at line 112 of file fiber.hh.
Referenced by createContext(), and ~Fiber().