PCEventQueue pcEventQueue;
std::vector<ThreadContext *> threadContexts;
- int numcpus;
+ int _numContexts;
- int getNumCPUs()
+ ThreadContext *getThreadContext(ThreadID tid)
{
- if (numcpus != threadContexts.size())
- panic("cpu array not fully populated!");
+ return threadContexts[tid];
+ }
- return numcpus;
+ int numContexts()
+ {
+ assert(_numContexts == (int)threadContexts.size());
+ return _numContexts;
}
+ /** Return number of running (non-halted) thread contexts in
+ * system. These threads could be Active or Suspended. */
+ int numRunningContexts();
+
#if FULL_SYSTEM
Platform *platform;
uint64_t init_param;
int page_ptr;
+ protected:
+ uint64_t next_PID;
+
+ public:
+ uint64_t allocatePID()
+ {
+ return next_PID++;
+ }
+
+ /** Amount of physical memory that is still free */
+ Addr freeMemSize();
+
+ /** Amount of physical memory that exists */
+ Addr memSize();
+
#endif // FULL_SYSTEM
#endif // FULL_SYSTEM
- int registerThreadContext(ThreadContext *tc, int tcIndex);
- void replaceThreadContext(ThreadContext *tc, int tcIndex);
+ int registerThreadContext(ThreadContext *tc, int assigned=-1);
+ void replaceThreadContext(ThreadContext *tc, int context_id);
void serialize(std::ostream &os);
void unserialize(Checkpoint *cp, const std::string §ion);