gem5  v20.1.0.0
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
Fiber Class Referenceabstract

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>

Inheritance diagram for Fiber:
LinkedFiber m5::Coroutine< Arg, Ret > sc_gem5::ScMainFiber sc_gem5::Thread::Context SwitchingFiber

Public Member Functions

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...
 
 Fiber (size_t stack_size=DefaultStackSize)
 
 Fiber (Fiber *link, size_t stack_size=DefaultStackSize)
 

Static Public Member Functions

static FibercurrentFiber ()
 Get a pointer to the current running Fiber. More...
 
static FiberprimaryFiber ()
 Get a pointer to the primary Fiber. More...
 

Static Public Attributes

const static 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
 
Fiberlink
 
void * stack
 
size_t stackSize
 
void * guardPage
 
size_t guardPageSize
 
bool _started
 
bool _finished
 

Detailed Description

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.

Definition at line 62 of file fiber.hh.

Member Function Documentation

◆ createContext()

void Fiber::createContext ( )
private

Definition at line 122 of file fiber.cc.

References ctx, entryTrampoline(), panic_if, stack, and stackSize.

Referenced by run().

◆ entryTrampoline()

void Fiber::entryTrampoline ( )
staticprivate

Definition at line 79 of file fiber.cc.

Referenced by createContext().

◆ main()

virtual void Fiber::main ( )
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 >, sc_gem5::Thread::Context, sc_gem5::ScMainFiber, LinkedFiber, and SwitchingFiber.

Referenced by start(), and TEST().

◆ setStarted()

void Fiber::setStarted ( )
inlineprotected

Definition at line 133 of file fiber.hh.

References _started.

Referenced by start().

◆ start()

void Fiber::start ( )
private

Definition at line 141 of file fiber.cc.

References _finished, ctx, link, main(), panic_if, run(), and setStarted().

Member Data Documentation

◆ _finished

bool Fiber::_finished
private

Definition at line 152 of file fiber.hh.

Referenced by finished(), run(), and start().

◆ _started

bool Fiber::_started
private

Definition at line 151 of file fiber.hh.

Referenced by run(), setStarted(), and started().

◆ ctx

ucontext_t Fiber::ctx
private

Definition at line 139 of file fiber.hh.

Referenced by createContext(), run(), and start().

◆ guardPage

void* Fiber::guardPage
private

Definition at line 145 of file fiber.hh.

Referenced by Fiber(), and ~Fiber().

◆ guardPageSize

size_t Fiber::guardPageSize
private

Definition at line 146 of file fiber.hh.

Referenced by Fiber(), and ~Fiber().

◆ link

Fiber* Fiber::link
private

Definition at line 140 of file fiber.hh.

Referenced by start().

◆ stack

void* Fiber::stack
private

Definition at line 143 of file fiber.hh.

Referenced by createContext(), Fiber(), and ~Fiber().

◆ stackSize

size_t Fiber::stackSize
private

Definition at line 144 of file fiber.hh.

Referenced by createContext(), and ~Fiber().


The documentation for this class was generated from the following files:

Generated on Wed Sep 30 2020 14:02:24 for gem5 by doxygen 1.8.17