gem5  v21.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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
 
jmp_buf jmp
 
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 68 of file fiber.hh.

Member Function Documentation

◆ createContext()

void Fiber::createContext ( )
private

Definition at line 120 of file fiber.cc.

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

Referenced by run().

◆ entryTrampoline()

void Fiber::entryTrampoline ( )
staticprivate

Definition at line 77 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 139 of file fiber.hh.

References _started.

Referenced by start().

◆ start()

void Fiber::start ( )
private

Definition at line 139 of file fiber.cc.

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

Member Data Documentation

◆ _finished

bool Fiber::_finished
private

Definition at line 162 of file fiber.hh.

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

◆ _started

bool Fiber::_started
private

Definition at line 161 of file fiber.hh.

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

◆ ctx

ucontext_t Fiber::ctx
private

Definition at line 145 of file fiber.hh.

Referenced by createContext(), and start().

◆ guardPage

void* Fiber::guardPage
private

Definition at line 155 of file fiber.hh.

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

◆ guardPageSize

size_t Fiber::guardPageSize
private

Definition at line 156 of file fiber.hh.

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

◆ jmp

jmp_buf Fiber::jmp
private

Definition at line 148 of file fiber.hh.

Referenced by run(), and start().

◆ link

Fiber* Fiber::link
private

Definition at line 150 of file fiber.hh.

Referenced by start().

◆ stack

void* Fiber::stack
private

Definition at line 153 of file fiber.hh.

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

◆ stackSize

size_t Fiber::stackSize
private

Definition at line 154 of file fiber.hh.

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


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

Generated on Tue Mar 23 2021 19:41:35 for gem5 by doxygen 1.8.17