TD3 II.2 Manage processes counter

This commit is contained in:
Yorick Barbanneau 2021-12-16 15:31:30 +01:00
parent 479d37133c
commit dcb11cf311
3 changed files with 24 additions and 2 deletions

View file

@ -168,6 +168,10 @@ AddrSpace::AddrSpace (OpenFile * executable)
DEBUG('x', "Initialize memory map size:%d\n", bitmapSize); DEBUG('x', "Initialize memory map size:%d\n", bitmapSize);
memoryMap = new BitMap(bitmapSize); memoryMap = new BitMap(bitmapSize);
memoryMap->Mark(0); memoryMap->Mark(0);
semProcessesCounter->P();
processes++;
semProcessesCounter->V();
DEBUG('x', "Increase Process counter:%d\n", processes);
#endif //CHANGED #endif //CHANGED
AddrSpaceList.Append(this); AddrSpaceList.Append(this);
@ -180,15 +184,31 @@ AddrSpace::AddrSpace (OpenFile * executable)
AddrSpace::~AddrSpace () 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; delete [] pageTable;
pageTable = NULL; pageTable = NULL;
AddrSpaceList.Remove(this); AddrSpaceList.Remove(this);
#ifdef CHANGED #ifdef CHANGED
DEBUG('c',"Delete Semaphores, memorymap\n");
delete semThreadsCounter; delete semThreadsCounter;
delete semAllocateUserStack; delete semAllocateUserStack;
delete memoryMap; delete memoryMap;
semProcessesCounter->P();
processes--;
semProcessesCounter->V();
DEBUG('c', "Decrease Process counter:%d\n", processes);
#endif #endif
if ( processes == 0 ){
DEBUG('c', "No more processes on RAM, call Exit()\n");
interrupt->Powerdown();
}
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View file

@ -125,7 +125,7 @@ ExceptionHandler (ExceptionType which)
case SC_Halt: case SC_Halt:
{ {
DEBUG ('s', "Shutdown, initiated by user program.\n"); DEBUG ('s', "Shutdown, initiated by user program.\n");
interrupt->Powerdown (); interrupt->Powerdown();
break; break;
} }
#ifdef CHANGED #ifdef CHANGED
@ -133,9 +133,10 @@ ExceptionHandler (ExceptionType which)
{ {
// while (1) // while (1)
// currentThread->Yield(); // currentThread->Yield();
DEBUG('x',"Exit\n");
int ret = machine->ReadRegister(4); int ret = machine->ReadRegister(4);
printf("Exit code %d\n", ret); printf("Exit code %d\n", ret);
interrupt->Powerdown(); // do_ThreadExit();
break; break;
} }
case SC_PutChar: case SC_PutChar:

View file

@ -86,6 +86,7 @@ void do_ThreadExit(){
DEBUG('x', "Decrease numbers of Threads:%d\n",currentThread->space->threads); DEBUG('x', "Decrease numbers of Threads:%d\n",currentThread->space->threads);
if ( currentThread->space->threads == 0 ){ if ( currentThread->space->threads == 0 ){
DEBUG('x', "Delete Userspace, no more Threads\n");
// No threads remains, desallocate addrspace // No threads remains, desallocate addrspace
delete currentThread->space; delete currentThread->space;
currentThread->space = NULL; currentThread->space = NULL;