Paging-System



  • Hy habe folgendes Problem:
    Ich soll überlegen, wie ich meine Speicherverwaltung erweitern müssten, um ein Paging-System mit Auslagerung von Speicherbereichen auf die Festplatte zu realisieren. Geben Sie an, wie die Funktionen mymalloc und myfree abgeändert werden müssen und geben Sie alle zusätzlichen Funktionen/Funktionalität an, die Sie zur Verfügung stellen müssen, damit die neu-definierten Funktionen praktisch nutzbar sind. Geben Sie alle benötigten bzw. veränderten Funktionssignaturen mit allen Parametern und Rückgabewerten an (kein Pseudocode!).

    Wäre super, wenn mir jemand helfen könnte 😕

    Hier ist meine mymalloc Funktion:

    void* mymalloc(unsigned int size, int line) {   
    	void* result = NULL;
    	if (size > 0) {
    		memInfo* foundLocation = NULL;
    		if (selectedStrategy == BEST_FIT) {
    			foundLocation = bestFit(size);
    		} else if (selectedStrategy == FIRST_FIT) {
    			foundLocation = findFirst(size);
    		}
    		// Wurde ein Bereich gefunden.
    		if (foundLocation != NULL) {
    			result = (void*) (memory + foundLocation->start);
    			foundLocation->line = line;
    			vector<memInfo*>::iterator it = memoryAllocation.begin();
    			while (it != memoryAllocation.end()) {
    				memInfo *curr = *it;
    				if (curr->start > foundLocation->start) {
    					break;
    				}
    				it++;
    			}
    			memoryAllocation.insert(it, foundLocation);
    		}
    	}
    	return result;
    }
    

    Hier ist meine myfree Funktion:

    void myfree(void *p) {
    	vector<memInfo*>::iterator it = memoryAllocation.begin();
    	bool freed = false;
    	while (it != memoryAllocation.end()) {
    		memInfo *curr = *it;
    		if ((void*) (memory + curr->start) == p) {
    			memoryAllocation.erase(it);
    			freed = true;
    			delete curr;
    			break;
    		}
    		it++;
    	}
    	if (!freed) {
    		throw "SegFault";
    	}
    }
    

  • Mod

    Meine Antwort auf die gleichlautende Frage im C++-Forum gilt auch hier.


Anmelden zum Antworten