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);
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();
}
}
//----------------------------------------------------------------------

View file

@ -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:

View file

@ -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;