gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Public Attributes | List of all members
Process Class Referenceabstract

#include <process.hh>

Inheritance diagram for Process:
SimObject EventManager Serializable Drainable AlphaProcess ArmProcess MipsProcess PowerProcess RiscvProcess SparcProcess X86ISA::X86Process AlphaISA::AlphaLinuxProcess ArmProcess32 ArmProcess64 MipsLinuxProcess PowerLinuxProcess RiscvLinuxProcess Sparc32Process Sparc64Process X86ISA::I386Process X86ISA::X86_64Process

Public Member Functions

 Process (ProcessParams *params, ObjectFile *obj_file)
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
void initState () override
 initState() is called on each SimObject when not restoring from a checkpoint. More...
 
DrainState drain () override
 Notify an object that it needs to drain its state. More...
 
virtual void syscall (int64_t callnum, ThreadContext *tc, Fault *fault)
 
virtual TheISA::IntReg getSyscallArg (ThreadContext *tc, int &i)=0
 
virtual TheISA::IntReg getSyscallArg (ThreadContext *tc, int &i, int width)
 
virtual void setSyscallArg (ThreadContext *tc, int i, TheISA::IntReg val)=0
 
virtual void setSyscallReturn (ThreadContext *tc, SyscallReturn return_value)=0
 
virtual SyscallDescgetDesc (int callnum)=0
 
uint64_t uid ()
 
uint64_t euid ()
 
uint64_t gid ()
 
uint64_t egid ()
 
uint64_t pid ()
 
uint64_t ppid ()
 
uint64_t pgid ()
 
uint64_t tgid ()
 
void setpgid (uint64_t pgid)
 
const char * progName () const
 
std::string fullPath (const std::string &filename)
 
std::string getcwd () const
 
EmulatedDriverfindDriver (std::string filename)
 Find an emulated device driver. More...
 
void updateBias ()
 
Addr getBias ()
 
Addr getStartPC ()
 
ObjectFilegetInterpreter ()
 
void regStats () override
 Register statistics for this object. More...
 
void allocateMem (Addr vaddr, int64_t size, bool clobber=false)
 
bool fixupStackFault (Addr vaddr)
 Attempt to fix up a fault at vaddr by allocating a page on the stack. More...
 
void assignThreadContext (ContextID context_id)
 
ThreadContextfindFreeContext ()
 
void revokeThreadContext (int context_id)
 After delegating a thread context to a child process no longer should relate to the ThreadContext. More...
 
virtual bool mmapGrowsDown () const
 Does mmap region grow upward or downward from mmapEnd? Most platforms grow downward, but a few (such as Alpha) grow upward instead, so they can override this method to return false. More...
 
bool map (Addr vaddr, Addr paddr, int size, bool cacheable=true)
 Maps a contiguous range of virtual addresses in this process's address space to a contiguous range of physical addresses. More...
 
void replicatePage (Addr vaddr, Addr new_paddr, ThreadContext *old_tc, ThreadContext *new_tc, bool alloc_page)
 
void clone (ThreadContext *old_tc, ThreadContext *new_tc, Process *new_p, TheISA::IntReg flags)
 
- Public Member Functions inherited from SimObject
const Paramsparams () const
 
 SimObject (const Params *_params)
 
virtual ~SimObject ()
 
virtual const std::string name () const
 
virtual void init ()
 init() is called after all C++ SimObjects have been created and all ports are connected. More...
 
virtual void loadState (CheckpointIn &cp)
 loadState() is called on each SimObject when restoring from a checkpoint. More...
 
virtual void resetStats ()
 Reset statistics associated with this object. More...
 
virtual void regProbePoints ()
 Register probe points for this object. More...
 
virtual void regProbeListeners ()
 Register probe listeners for this object. More...
 
ProbeManagergetProbeManager ()
 Get the probe manager for this object. More...
 
virtual void startup ()
 startup() is the final initialization call before simulation. More...
 
DrainState drain () override
 Provide a default implementation of the drain interface for objects that don't need draining. More...
 
virtual void memWriteback ()
 Write back dirty buffers to memory using functional writes. More...
 
virtual void memInvalidate ()
 Invalidate the contents of memory buffers. More...
 
void serialize (CheckpointOut &cp) const override
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp) override
 Unserialize an object. More...
 
- Public Member Functions inherited from EventManager
 EventManager (EventManager &em)
 
 EventManager (EventManager *em)
 
 EventManager (EventQueue *eq)
 
EventQueueeventQueue () const
 
void schedule (Event &event, Tick when)
 
void deschedule (Event &event)
 
void reschedule (Event &event, Tick when, bool always=false)
 
void schedule (Event *event, Tick when)
 
void deschedule (Event *event)
 
void reschedule (Event *event, Tick when, bool always=false)
 
void wakeupEventQueue (Tick when=(Tick)-1)
 
void setCurTick (Tick newVal)
 
- Public Member Functions inherited from Serializable
 Serializable ()
 
virtual ~Serializable ()
 
void serializeSection (CheckpointOut &cp, const char *name) const
 Serialize an object into a new section. More...
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object. More...
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 
- Public Member Functions inherited from Drainable
DrainState drainState () const
 Return the current drain state of an object. More...
 
virtual void notifyFork ()
 Notify a child process of a fork. More...
 

Public Attributes

std::vector< ContextIDcontextIds
 
Systemsystem
 
Stats::Scalar numSyscalls
 
bool useArchPT
 
bool kvmInSE
 
PageTableBasepTable
 
SETranslatingPortProxy initVirtMem
 
ObjectFileobjFile
 
std::vector< std::string > argv
 
std::vector< std::string > envp
 
std::string cwd
 
std::string executable
 
uint64_t _uid
 
uint64_t _euid
 
uint64_t _gid
 
uint64_t _egid
 
uint64_t _pid
 
uint64_t _ppid
 
uint64_t _pgid
 
uint64_t _tgid
 
std::vector< EmulatedDriver * > drivers
 
std::shared_ptr< FDArrayfds
 
bool * exitGroup
 
std::shared_ptr< MemStatememState
 
uint64_t childClearTID
 Calls a futex wakeup at the address specified by this pointer when this process exits. More...
 
bool * sigchld
 

Additional Inherited Members

- Public Types inherited from SimObject
typedef SimObjectParams Params
 
- Static Public Member Functions inherited from SimObject
static void serializeAll (CheckpointOut &cp)
 Serialize all SimObjects in the system. More...
 
static SimObjectfind (const char *name)
 Find the SimObject with the given name and return a pointer to it. More...
 
- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Get the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 
static void unserializeGlobals (CheckpointIn &cp)
 
- Static Public Attributes inherited from Serializable
static int ckptCount = 0
 
static int ckptMaxCount = 0
 
static int ckptPrevCount = -1
 
- Protected Member Functions inherited from Drainable
 Drainable ()
 
virtual ~Drainable ()
 
virtual void drainResume ()
 Resume execution after a successful drain. More...
 
void signalDrainDone () const
 Signal that an object is drained. More...
 
- Protected Attributes inherited from SimObject
const SimObjectParams * _params
 Cached copy of the object parameters. More...
 
- Protected Attributes inherited from EventManager
EventQueueeventq
 A pointer to this object's event queue. More...
 

Detailed Description

Definition at line 63 of file process.hh.

Constructor & Destructor Documentation

Process::Process ( ProcessParams *  params,
ObjectFile obj_file 
)

Linux bundles together processes into this concept called a thread group. The thread group is responsible for recording which processes behave as threads within a process context. The thread group leader is the process who's tgid is equal to its pid. Other processes which belong to the thread group, but do not lead the thread group, are treated as child threads. These threads are created by the clone system call with options specified to create threads (differing from the options used to implement a fork). By default, set up the tgid/pid with a new, equivalent value. If CLONE_THREAD is specified, patch the tgid value with the old process' value.

Definition at line 104 of file process.cc.

References _pid, _tgid, debugSymbolTable, exitGroup, fatal, ObjectFile::loadGlobalSymbols(), ObjectFile::loadLocalSymbols(), ObjectFile::loadWeakSymbols(), System::maxPID, objFile, System::PIDs, sigchld, and system.

Member Function Documentation

void Process::allocateMem ( Addr  vaddr,
int64_t  size,
bool  clobber = false 
)
void Process::assignThreadContext ( ContextID  context_id)
inline

Definition at line 125 of file process.hh.

References contextIds.

Referenced by cloneFunc(), and execveFunc().

void Process::clone ( ThreadContext old_tc,
ThreadContext new_tc,
Process new_p,
TheISA::IntReg  flags 
)

Share the process memory address space between the new process and the old process. Changes in one will be visible in the other due to the pointer use.

Duplicate the process memory address space. The state needs to be copied over (rather than using pointers to share everything).

The parent and child file descriptors are shared because the two FDArray pointers are pointing to the same FDArray. Opening and closing file descriptors will be visible to both processes.

Copy the file descriptors from the old process into the new child process. The file descriptors entry can be opened and closed independently of the other process being considered. The host file descriptors are also dup'd so that the flags for the host file descriptor is independent of the other process.

Definition at line 160 of file process.cc.

References _tgid, argv, CLONE_FILES, CLONE_THREAD, CLONE_VM, envp, exitGroup, fds, PageTableBase::getMappings(), ThreadContext::getMemProxy(), HBFDEntry::getSimFD(), map(), memState, pTable, replicatePage(), SETranslatingPortProxy::setPageTable(), HBFDEntry::setSimFD(), PageTableBase::translate(), and MipsISA::vaddr.

Referenced by X86ISA::X86Process::clone(), and cloneFunc().

DrainState Process::drain ( )
overridevirtual

Notify an object that it needs to drain its state.

If the object does not need further simulation to drain internal buffers, it returns DrainState::Drained and automatically switches to the Drained state. If the object needs more simulation, it returns DrainState::Draining and automatically enters the Draining state. Other return values are invalid.

Note
An object that has entered the Drained state can be disturbed by other objects in the system and consequently stop being drained. These perturbations are not visible in the drain state. The simulator therefore repeats the draining process until all objects return DrainState::Drained on the first call to drain().
Returns
DrainState::Drained if the object is drained at this point in time, DrainState::Draining if it needs further simulation.

Implements Drainable.

Definition at line 303 of file process.cc.

References Drained, and fds.

uint64_t Process::egid ( )
inline
uint64_t Process::euid ( )
inline
EmulatedDriver * Process::findDriver ( std::string  filename)

Find an emulated device driver.

Parameters
filenameName of the device (under /dev)
Returns
Pointer to driver object if found, else nullptr

Definition at line 431 of file process.cc.

References ArmISA::d, and drivers.

Referenced by openImpl().

ThreadContext * Process::findFreeContext ( )

Definition at line 265 of file process.cc.

References ThreadContext::Halted, system, and System::threadContexts.

Referenced by cloneFunc().

bool Process::fixupStackFault ( Addr  vaddr)
std::string Process::fullPath ( const std::string &  filename)
Addr Process::getBias ( )
std::string Process::getcwd ( ) const
inline

Definition at line 95 of file process.hh.

References cwd.

Referenced by cloneFunc(), Linux::etcPasswd(), execveFunc(), and getcwdFunc().

virtual SyscallDesc* Process::getDesc ( int  callnum)
pure virtual
ObjectFile * Process::getInterpreter ( )

Definition at line 468 of file process.cc.

References ObjectFile::getInterpreter(), and objFile.

Referenced by getBias(), getStartPC(), and mmapImpl().

Addr Process::getStartPC ( )
virtual TheISA::IntReg Process::getSyscallArg ( ThreadContext tc,
int &  i 
)
pure virtual
IntReg Process::getSyscallArg ( ThreadContext tc,
int &  i,
int  width 
)
virtual

Reimplemented in X86ISA::I386Process, ArmProcess64, and ArmProcess32.

Definition at line 425 of file process.cc.

References getSyscallArg().

uint64_t Process::gid ( )
inline
void Process::initState ( )
overridevirtual
bool Process::map ( Addr  vaddr,
Addr  paddr,
int  size,
bool  cacheable = true 
)

Maps a contiguous range of virtual addresses in this process's address space to a contiguous range of physical addresses.

This function exists primarily to expose the map operation to python, so that configuration scripts can set up mappings in SE mode.

Parameters
vaddrThe starting virtual address of the range.
paddrThe starting physical address of the range.
sizeThe length of the range in bytes.
cacheableSpecifies whether accesses are cacheable.
Returns
True if the map operation was successful. (At this point in time, the map operation always succeeds.)

Definition at line 405 of file process.cc.

References PageTableBase::map(), pTable, PageTableBase::Uncacheable, and PageTableBase::Zero.

Referenced by clone().

virtual bool Process::mmapGrowsDown ( ) const
inlinevirtual

Does mmap region grow upward or downward from mmapEnd? Most platforms grow downward, but a few (such as Alpha) grow upward instead, so they can override this method to return false.

Reimplemented in RiscvProcess, and AlphaProcess.

Definition at line 144 of file process.hh.

Referenced by Shader::mmap(), mmapImpl(), and updateBias().

uint64_t Process::pgid ( )
inline

Definition at line 89 of file process.hh.

References _pgid.

Referenced by setpgid().

uint64_t Process::pid ( )
inline
uint64_t Process::ppid ( )
inline

Definition at line 88 of file process.hh.

References _ppid.

Referenced by cloneFunc(), execveFunc(), exitImpl(), getpidPseudoFunc(), and getppidFunc().

const char* Process::progName ( ) const
inline

Definition at line 93 of file process.hh.

References executable.

Referenced by cloneFunc(), and readlinkFunc().

void Process::regStats ( )
overridevirtual

Register statistics for this object.

Reimplemented from SimObject.

Definition at line 252 of file process.cc.

References Stats::DataWrap< Derived, InfoProxyType >::desc(), SimObject::name(), Stats::DataWrap< Derived, InfoProxyType >::name(), numSyscalls, and SimObject::regStats().

void Process::replicatePage ( Addr  vaddr,
Addr  new_paddr,
ThreadContext old_tc,
ThreadContext new_tc,
bool  alloc_page 
)
void Process::revokeThreadContext ( int  context_id)

After delegating a thread context to a child process no longer should relate to the ThreadContext.

Definition at line 275 of file process.cc.

References contextIds, and warn.

Referenced by cloneFunc().

void Process::serialize ( CheckpointOut cp) const
overridevirtual

Serialize an object.

Output an object's state into the current checkpoint section.

Parameters
cpCheckpoint state

Checkpoints for file descriptors currently do not work. Need to come back and fix them at a later date.

Implements Serializable.

Definition at line 368 of file process.cc.

References csprintf(), fds, pTable, Serializable::serialize(), warn, and X86ISA::x.

void Process::setpgid ( uint64_t  pgid)
inline

Definition at line 91 of file process.hh.

References _pgid, and pgid().

Referenced by setpgidFunc().

virtual void Process::setSyscallArg ( ThreadContext tc,
int  i,
TheISA::IntReg  val 
)
pure virtual
virtual void Process::setSyscallReturn ( ThreadContext tc,
SyscallReturn  return_value 
)
pure virtual
void Process::syscall ( int64_t  callnum,
ThreadContext tc,
Fault fault 
)
virtual
uint64_t Process::tgid ( )
inline

Definition at line 90 of file process.hh.

References _tgid.

Referenced by exitImpl(), futexFunc(), getpidFunc(), and tgkillFunc().

uint64_t Process::uid ( )
inline
void Process::unserialize ( CheckpointIn cp)
overridevirtual

Unserialize an object.

Read an object's state from the current checkpoint section.

Parameters
cpCheckpoint state

Checkpoints for file descriptors currently do not work. Need to come back and fix them at a later date.

Implements Serializable.

Definition at line 385 of file process.cc.

References csprintf(), fds, pTable, Serializable::unserialize(), warn, and X86ISA::x.

void Process::updateBias ( )

Member Data Documentation

uint64_t Process::_egid

Definition at line 192 of file process.hh.

Referenced by egid().

uint64_t Process::_euid

Definition at line 190 of file process.hh.

Referenced by euid().

uint64_t Process::_gid

Definition at line 191 of file process.hh.

Referenced by gid().

uint64_t Process::_pgid

Definition at line 197 of file process.hh.

Referenced by pgid(), and setpgid().

uint64_t Process::_pid

Definition at line 195 of file process.hh.

Referenced by SparcProcess::initState(), pid(), Process(), and AlphaProcess::setupASNReg().

uint64_t Process::_ppid

Definition at line 196 of file process.hh.

Referenced by ppid().

uint64_t Process::_tgid

Definition at line 198 of file process.hh.

Referenced by clone(), Process(), and tgid().

uint64_t Process::_uid

Definition at line 189 of file process.hh.

Referenced by uid().

std::vector<std::string> Process::argv
uint64_t Process::childClearTID

Calls a futex wakeup at the address specified by this pointer when this process exits.

Definition at line 212 of file process.hh.

Referenced by cloneFunc(), exitImpl(), and setTidAddressFunc().

std::vector<ContextID> Process::contextIds
std::string Process::cwd

Definition at line 185 of file process.hh.

Referenced by fullPath(), and getcwd().

std::vector<EmulatedDriver *> Process::drivers

Definition at line 201 of file process.hh.

Referenced by findDriver().

std::vector<std::string> Process::envp
std::string Process::executable

Definition at line 186 of file process.hh.

Referenced by progName().

bool* Process::exitGroup

Definition at line 205 of file process.hh.

Referenced by clone(), exitImpl(), and Process().

std::shared_ptr<FDArray> Process::fds
SETranslatingPortProxy Process::initVirtMem
bool Process::kvmInSE

Definition at line 176 of file process.hh.

Referenced by X86ISA::X86_64Process::initState().

std::shared_ptr<MemState> Process::memState
Stats::Scalar Process::numSyscalls

Definition at line 173 of file process.hh.

Referenced by regStats(), and syscall().

ObjectFile* Process::objFile
PageTableBase* Process::pTable
bool* Process::sigchld

Definition at line 215 of file process.hh.

Referenced by cloneFunc(), execveFunc(), exitImpl(), and Process().

System* Process::system
bool Process::useArchPT

Definition at line 175 of file process.hh.


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

Generated on Fri Jun 9 2017 13:04:17 for gem5 by doxygen 1.8.6