Du hast ja einen Pointer auf den aktuellen Task, oder nicht? Den könntest du auch für die Suche nehmen.
« Antwort #20 am: 30. November 2014, 20:30 »
09. November 2026, 18:31
static struct task* c_task = NULL; // Diese Zeile steht weiter oben im Code
// Code am Ende des Interrupthandlers:
if (cpu != new_cpu) {
c_task = getCurrentTask();
asm volatile("mov %0, %%cr3" : : "r" (c_task->context->pagedir));
}
struct task* getCurrentTask(void) {
if (current_task != NULL) {
return current_task;
}
return first_task;
}
Ok danke, das heißt ich sollte meien Tasks erstmal eine eindeutige ID zuweisen...Nein, ich meinte damit eher, dass es verschiedene Datenstrukturen mit verschiedenen Vor- und Nachteilen gibt.
