gem5 v24.0.0.0
Loading...
Searching...
No Matches
process.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
3 * Copyright (c) 2001-2005 The Regents of The University of Michigan
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef __PROCESS_HH__
31#define __PROCESS_HH__
32
33#include <inttypes.h>
34
35#include <map>
36#include <memory>
37#include <string>
38#include <vector>
39
41#include "base/statistics.hh"
42#include "base/types.hh"
44#include "sim/fd_array.hh"
45#include "sim/fd_entry.hh"
46#include "sim/mem_state.hh"
47#include "sim/sim_object.hh"
48
49namespace gem5
50{
51
52namespace loader
53{
54class ObjectFile;
55} // namespace loader
56
57struct ProcessParams;
58
59class EmulatedDriver;
60class EmulationPageTable;
61class SEWorkload;
62class SyscallDesc;
63class SyscallReturn;
64class System;
65class ThreadContext;
66
67class Process : public SimObject
68{
69 public:
70 Process(const ProcessParams &params, EmulationPageTable *pTable,
71 loader::ObjectFile *obj_file);
72
73 void serialize(CheckpointOut &cp) const override;
74 void unserialize(CheckpointIn &cp) override;
75
76 void init() override;
77 void initState() override;
78 DrainState drain() override;
79
80 virtual void syscall(ThreadContext *tc) { numSyscalls++; }
81
82 inline uint64_t uid() { return _uid; }
83 inline uint64_t euid() { return _euid; }
84 inline uint64_t gid() { return _gid; }
85 inline uint64_t egid() { return _egid; }
86 inline uint64_t pid() { return _pid; }
87 inline uint64_t ppid() { return _ppid; }
88 inline uint64_t pgid() { return _pgid; }
89 inline void pgid(uint64_t pgid) { _pgid = pgid; }
90 inline uint64_t tgid() { return _tgid; }
91
92 const char *progName() const { return executable.c_str(); }
93
100 EmulatedDriver *findDriver(std::string filename);
101
102 // This function acts as a callback to update the bias value in
103 // the object file because the parameters needed to calculate the
104 // bias are not available when the object file is created.
105 void updateBias();
106 Addr getBias();
109
110 // This function allocates physical memory as backing store, and then maps
111 // it into the virtual address space of the process. The range of virtual
112 // addresses being configured starts at the address "vaddr" and is of size
113 // "size" bytes. If some part of this range of virtual addresses is already
114 // configured, this function will error out unless "clobber" is set. If
115 // clobber is set, then those existing mappings will be replaced.
116 //
117 // If the beginning or end of the virtual address range does not perfectly
118 // align to page boundaries, it will be expanded in either direction until
119 // it does. This function will therefore set up *at least* the range
120 // requested, and may configure more if necessary.
121 void allocateMem(Addr vaddr, int64_t size, bool clobber=false);
122
125 bool fixupFault(Addr vaddr);
126
127 // After getting registered with system object, tell process which
128 // system-wide context id it is assigned.
129 void
131 {
132 contextIds.push_back(context_id);
133 }
134
139 void revokeThreadContext(int context_id);
140
146 virtual bool mmapGrowsDown() const { return true; }
147
161 bool map(Addr vaddr, Addr paddr, int64_t size, bool cacheable = true);
162
163 void replicatePage(Addr vaddr, Addr new_paddr, ThreadContext *old_tc,
164 ThreadContext *new_tc, bool alloc_page);
165
166 virtual void clone(ThreadContext *old_tc, ThreadContext *new_tc,
167 Process *new_p, RegVal flags);
168
169 // thread contexts associated with this process
171
172 // system object which owns this process
174
176
177 // flag for using architecture specific page table
179 // running KVM requires special initialization
181 // flag for using the process as a thread which shares page tables
183
185
186 // Memory proxy for initial image load.
187 std::unique_ptr<SETranslatingPortProxy> initVirtMem;
188
195 class Loader
196 {
197 public:
198 Loader();
199
200 /* Loader instances are singletons. */
201 Loader(const Loader &) = delete;
202 void operator=(const Loader &) = delete;
203
204 virtual ~Loader() {}
205
214 virtual Process *load(const ProcessParams &params,
215 loader::ObjectFile *obj_file) = 0;
216 };
217
218 // Try all the Loader instance's "load" methods one by one until one is
219 // successful. If none are, complain and fail.
220 static Process *tryLoaders(const ProcessParams &params,
221 loader::ObjectFile *obj_file);
222
228 std::string executable;
229
243 std::string absolutePath(const std::string &path, bool host_fs);
244
253 std::string checkPathRedirect(const std::string &filename);
254
265 std::string tgtCwd;
266 std::string hostCwd;
267
268 // Syscall emulation uname release.
269 std::string release;
270
271 // Id of the owner of the process
272 uint64_t _uid;
273 uint64_t _euid;
274 uint64_t _gid;
275 uint64_t _egid;
276
277 // pid of the process and it's parent
278 uint64_t _pid;
279 uint64_t _ppid;
280 uint64_t _pgid;
281 uint64_t _tgid;
282
283 // Emulated drivers available to this process
285
286 std::shared_ptr<FDArray> fds;
287
289 std::shared_ptr<MemState> memState;
290
296
297 // Process was forked with SIGCHLD set.
298 bool *sigchld;
299
300 // Contexts to wake up when this thread exits or calls execve
302
303 // Track how many system calls are executed
305};
306
307} // namespace gem5
308
309#endif // __PROCESS_HH__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
EmulatedDriver is an abstract base class for fake SE-mode device drivers.
Each instance of a Loader subclass will have a chance to try to load an object file when tryLoaders i...
Definition process.hh:196
virtual Process * load(const ProcessParams &params, loader::ObjectFile *obj_file)=0
Each subclass needs to implement this method.
Loader(const Loader &)=delete
void operator=(const Loader &)=delete
loader::MemoryImage image
Definition process.hh:224
virtual bool mmapGrowsDown() const
Does mmap region grow upward or downward from mmapEnd? Most platforms grow downward,...
Definition process.hh:146
void allocateMem(Addr vaddr, int64_t size, bool clobber=false)
Definition process.cc:317
void replicatePage(Addr vaddr, Addr new_paddr, ThreadContext *old_tc, ThreadContext *new_tc, bool alloc_page)
Definition process.cc:347
uint64_t egid()
Definition process.hh:85
SEWorkload * seWorkload
Definition process.hh:175
void updateBias()
Definition process.cc:457
std::string absolutePath(const std::string &path, bool host_fs)
Return an absolute path given a relative path paired with the current working directory of the proces...
Definition process.cc:505
uint64_t _euid
Definition process.hh:273
std::unique_ptr< SETranslatingPortProxy > initVirtMem
Definition process.hh:187
virtual void clone(ThreadContext *old_tc, ThreadContext *new_tc, Process *new_p, RegVal flags)
Definition process.cc:167
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition process.cc:278
std::shared_ptr< MemState > memState
Definition process.hh:289
bool fixupFault(Addr vaddr)
Attempt to fix up a fault at vaddr by allocating a page on the stack.
Definition process.cc:365
uint64_t pid()
Definition process.hh:86
uint64_t _tgid
Definition process.hh:281
uint64_t uid()
Definition process.hh:82
std::vector< std::string > argv
Definition process.hh:226
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Definition process.cc:310
uint64_t pgid()
Definition process.hh:88
uint64_t _egid
Definition process.hh:275
std::shared_ptr< FDArray > fds
Definition process.hh:286
const char * progName() const
Definition process.hh:92
void assignThreadContext(ContextID context_id)
Definition process.hh:130
bool map(Addr vaddr, Addr paddr, int64_t size, bool cacheable=true)
Maps a contiguous range of virtual addresses in this process's address space to a contiguous range of...
Definition process.cc:404
uint64_t _pid
Definition process.hh:278
uint64_t _gid
Definition process.hh:274
bool useForClone
Definition process.hh:182
uint64_t _ppid
Definition process.hh:279
loader::ObjectFile * getInterpreter()
Definition process.cc:483
loader::MemoryImage interpImage
Definition process.hh:225
bool * sigchld
Definition process.hh:298
virtual void syscall(ThreadContext *tc)
Definition process.hh:80
uint64_t ppid()
Definition process.hh:87
std::string executable
Definition process.hh:228
std::vector< ContextID > vforkContexts
Definition process.hh:301
std::string hostCwd
Definition process.hh:266
std::vector< ContextID > contextIds
Definition process.hh:170
std::string checkPathRedirect(const std::string &filename)
Redirect file path if it matches any keys initialized by system object.
Definition process.cc:424
System * system
Definition process.hh:173
uint64_t _pgid
Definition process.hh:280
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition process.cc:288
bool * exitGroup
Definition process.hh:288
void pgid(uint64_t pgid)
Definition process.hh:89
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition process.cc:371
std::vector< std::string > envp
Definition process.hh:227
std::string tgtCwd
The cwd members are used to track changes to the current working directory for the purpose of executi...
Definition process.hh:265
std::string release
Definition process.hh:269
uint64_t gid()
Definition process.hh:84
EmulatedDriver * findDriver(std::string filename)
Find an emulated device driver.
Definition process.cc:413
uint64_t tgid()
Definition process.hh:90
Addr getStartPC()
Definition process.cc:497
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition process.cc:386
Process(const ProcessParams &params, EmulationPageTable *pTable, loader::ObjectFile *obj_file)
Definition process.cc:113
void revokeThreadContext(int context_id)
After delegating a thread context to a child process no longer should relate to the ThreadContext.
Definition process.cc:265
uint64_t _uid
Definition process.hh:272
loader::ObjectFile * objFile
Definition process.hh:223
Addr getBias()
Definition process.cc:489
statistics::Scalar numSyscalls
Definition process.hh:304
static Process * tryLoaders(const ProcessParams &params, loader::ObjectFile *obj_file)
Definition process.cc:93
uint64_t euid()
Definition process.hh:83
std::vector< EmulatedDriver * > drivers
Definition process.hh:284
EmulationPageTable * pTable
Definition process.hh:184
uint64_t childClearTID
Calls a futex wakeup at the address specified by this pointer when this process exits.
Definition process.hh:295
static std::stack< std::string > path
Definition serialize.hh:315
Abstract superclass for simulation objects.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
This is a simple scalar statistic, like a counter.
STL vector class.
Definition stl.hh:37
DrainState
Object drain/handover states.
Definition drain.hh:75
const Params & params() const
uint8_t flags
Definition helpers.cc:87
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
uint64_t RegVal
Definition types.hh:173
std::ostream CheckpointOut
Definition serialize.hh:66
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
int ContextID
Globally unique thread context ID.
Definition types.hh:239
Declaration of Statistics objects.

Generated on Tue Jun 18 2024 16:24:06 for gem5 by doxygen 1.11.0