Eine Möglichkeit – wahrscheinlich keine gute – ist die enqueue()
Funktion zu ändern:
PUBLIC void enqueue(register struct proc *rp)
{
/* Add 'rp' to one of the queues of runnable processes. This function is
* responsible for inserting a process into one of the scheduling queues.
* The mechanism is implemented here. The actual scheduling policy is
* defined in sched() and pick_proc().
*/
int q = rp->p_priority; /* scheduling queue to use */
Statt rp->p_priority
zuzuweisen, weisen Sie einfach 0:
int q = 0;
Alle Prozesse werden dadurch die Warteschlange eingereiht auf aa Single-Priority-Queue (Queue-Nummer 0) und Sie haben ein einzelnes FCFS-System. Dies setzt natürlich voraus, dass enqueue()
die einzige Funktion ist, die Prozesse zu Warteschlangen hinzufügt. Es gibt eine gute Chance, dass es die einzige ist, aber Sie müssen die meisten des Minix-Kernels sicher wissen.
Mit dieser Änderung können Sie dann untersuchen, ob zu viel Platz verschwendet wird, um mehrere Warteschlangen zu unterstützen. Wenn dies der Fall ist, können Sie die Warteschlangendeklarationen entsprechend anpassen. Die Warteschlangenstruktur ist wahrscheinlich nur ein Array von Zeigern; die verfügbare Platzeinsparung ist daher nicht groß.
Beachten Sie jedoch, dass Sie wahrscheinlich nur FCFS nicht möchten; Die Prioritätswarteschlangen sind aus guten Gründen da. Zum Beispiel sollten deine Interrupt-Handler schneller bedient werden als das Monster, das für SETI arbeitet. Das bedeutet, dass einige Prioritäten gesetzt werden müssen.
Sie erhalten möglicherweise eine bessere Antwort, wenn Sie einen Link (URL) angeben, über den Personen die Quelle überprüfen können. Eine Möglichkeit besteht darin, die Prioritäten zu reduzieren: Stellen Sie alles auf Priorität 1 (oder einen anderen geeigneten Wert) ein. Es wird dann wahrscheinlich FCFS funktionieren. Wenn Sie die Dinge so entwirren möchten, dass Sie nur eine einzige (nicht priorisierte) Liste haben, müssen Sie den Code-Modus kennen, wissen, wo die Prioritätslisten erstellt werden (und dann nur eine erstellen) und vielleicht sogar die Priorität aus dem entfernen Schnittstellen. Dies ist jedoch eine viel umfangreichere Operation am Code und wahrscheinlich nicht nur diese Datei. –
Vielen Dank für diese Hilfe. Du hast erwähnt, dass ich die Priorität auf 1 oder andere geeignete Werte setzen sollte, und in diesem Fall hat jede Warteschlange die gleiche Priorität ... aber ich habe herausgefunden, dass es in minix tatsächlich 16 Warteschlangen gibt, die auf unterschiedlichen Prioritäten arbeiten, aber in FCFS alles, was ich brauche, um mit nur einer Warteschlange zu arbeiten, in der alle Prozesse zum Betrieb kommen, ist der Link = http://eng.upm.edu.my/~kmbs/teaching/OS/html/proc_8c.html, hier in der Enqueue-Funktion alle Prozesse werden in den MIN_USER_Q gestellt, das ist die Warteschlange, mit der ich arbeiten muss.Aber ich brauche weitere Hilfe zu Prioritäten, können Sie pls helfen? –