TD3 II.2 Manage processes counter
This commit is contained in:
parent
479d37133c
commit
dcb11cf311
3 changed files with 24 additions and 2 deletions
|
@ -168,6 +168,10 @@ AddrSpace::AddrSpace (OpenFile * executable)
|
|||
DEBUG('x', "Initialize memory map size:%d\n", bitmapSize);
|
||||
memoryMap = new BitMap(bitmapSize);
|
||||
memoryMap->Mark(0);
|
||||
semProcessesCounter->P();
|
||||
processes++;
|
||||
semProcessesCounter->V();
|
||||
DEBUG('x', "Increase Process counter:%d\n", processes);
|
||||
#endif //CHANGED
|
||||
|
||||
AddrSpaceList.Append(this);
|
||||
|
@ -180,15 +184,31 @@ AddrSpace::AddrSpace (OpenFile * executable)
|
|||
|
||||
AddrSpace::~AddrSpace ()
|
||||
{
|
||||
#ifdef CHANGED
|
||||
for(unsigned i = 0; i < numPages; i++) {
|
||||
pageProvider->ReleasePage(pageTable[i].physicalPage);
|
||||
}
|
||||
#endif
|
||||
|
||||
DEBUG('s',"Delete Page Table\n");
|
||||
delete [] pageTable;
|
||||
pageTable = NULL;
|
||||
|
||||
AddrSpaceList.Remove(this);
|
||||
#ifdef CHANGED
|
||||
DEBUG('c',"Delete Semaphores, memorymap\n");
|
||||
delete semThreadsCounter;
|
||||
delete semAllocateUserStack;
|
||||
delete memoryMap;
|
||||
semProcessesCounter->P();
|
||||
processes--;
|
||||
semProcessesCounter->V();
|
||||
DEBUG('c', "Decrease Process counter:%d\n", processes);
|
||||
#endif
|
||||
if ( processes == 0 ){
|
||||
DEBUG('c', "No more processes on RAM, call Exit()\n");
|
||||
interrupt->Powerdown();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
|
@ -125,7 +125,7 @@ ExceptionHandler (ExceptionType which)
|
|||
case SC_Halt:
|
||||
{
|
||||
DEBUG ('s', "Shutdown, initiated by user program.\n");
|
||||
interrupt->Powerdown ();
|
||||
interrupt->Powerdown();
|
||||
break;
|
||||
}
|
||||
#ifdef CHANGED
|
||||
|
@ -133,9 +133,10 @@ ExceptionHandler (ExceptionType which)
|
|||
{
|
||||
// while (1)
|
||||
// currentThread->Yield();
|
||||
DEBUG('x',"Exit\n");
|
||||
int ret = machine->ReadRegister(4);
|
||||
printf("Exit code %d\n", ret);
|
||||
interrupt->Powerdown();
|
||||
// do_ThreadExit();
|
||||
break;
|
||||
}
|
||||
case SC_PutChar:
|
||||
|
|
|
@ -86,6 +86,7 @@ void do_ThreadExit(){
|
|||
DEBUG('x', "Decrease numbers of Threads:%d\n",currentThread->space->threads);
|
||||
|
||||
if ( currentThread->space->threads == 0 ){
|
||||
DEBUG('x', "Delete Userspace, no more Threads\n");
|
||||
// No threads remains, desallocate addrspace
|
||||
delete currentThread->space;
|
||||
currentThread->space = NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue