Professional Documents
Culture Documents
Αναφορα λειτουργικα
Αναφορα λειτουργικα
Αρχικά, έγινε η εγκατάσταση του λειτουργικού στο VMware και η επαλήθευση οτι το
σύστημα εγκαταστάθηκε σωστά μέσα απο κάποια tests. Αφού έγινε η εξοικείωση με την δομή του
λειτουργικού, έγιναν οι απαραίτητες αλλαγές ώστε να εισάγουμε δίκαιη χρονοδρομολόγηση.
Σαν πρώτο βήμα μεταφέρθηκε η ταυτότητα του οδηγού ομάδας από το pm στο kernel κατά
την κλήση της fork(). Αυτό έγινε με την προσθήκη του πεδίου rmc->mp_procgrp στην κλήση της
sys_fork() στην συνάρτηση do_fork() μέσα στο αρχείο pm/forkexit.c ( η κλήση ήταν sys_fork(who,
child_nr, rmc->mp_procgrp); ). Τροποποιήθηκε επίσης το syslib.h όπου προστέθηκε το groupid
στα ορίσματα της sys_fork.( _PROTOTYPE( int sys_fork, (int parent, int child, int groupid)); )Η
επιβεβαίωση έγινε τυπώνοντας την ταυτότητα του οδηγού ομάδας μιας νέας διεργασίας στη
συνάρτηση do_fork() του αρχείου kernel/system/do_fork.c χρησιμοποιώντας την kprintf()
kprintf("---%d---\n",m_ptr->m1_i3); . Στο σημείο η διαδιεργασιακή επικοινωνία έγινε με την
χρήση μηνυμάτων. Tροποιήθηκε το sys_fork.c και προστέθηκε το int groupid; και το m.m1_i3 =
groupid;.
Στην συνέχεια, τροποιήθηκε η δομή proc στο proc.h και συμπεριλήφθηκαν τα πεδία
procgrp, proc_usage, gpr_usage και fss_priority. (int procgrp; float proc_usage; float grp_usage;
float fss_priority; ).Έπειτα, έγινε τροποίηση στο proc.h όπου μειώθηκε το συνολικό λήθος ουρών
απο 16 σε 9. Διατηρήθηκαν το USER_Q=7 και το IDLE_Q=8, ενω μειώθηκε το MIN_USER_Q=7.
Κατόπιν, έγιναν οι απαραίτητες τροποποίησεις για την δίκαιη χρονοδρομολόγηση του Minix
3.0. Ενημερώθηκαν τα πεδία procgrp, proc_usage, gpr_usage και fss_priority μεσα στην
lock_dequeue() που βρίσκεται στο proc.c για όλες τις διεργασίες που περιμένουν στην ουρά
rdy_head[USER_Q]. (i -> proc_usage = i->proc_usage/2.0; i -> grp_usage = i->grp_usage/2.0;
i -> fss_priority = i->proc_usage/2.0 + i->grp_usage*number/4 + 80; i = i->p_nextready; ).
Επίσης στην lock_dequeue() έγιναν κάποιες ενημερώσεις για τον υπολογισμό του κόστους.
lock(4, "dequeue");
bill_ptr->proc_usage += kostos;
bill_ptr->grp_usage += kostos;
i = rdy_head[USER_Q];
while(i != NIL_PROC){
if(j==NIL_PROC){
number++;
}
i = i->p_nextready;
}
i = rdy_head[USER_Q];
while(i!=NIL_PROC){
i -> proc_usage = i->proc_usage/2.0;
i -> grp_usage = i->grp_usage/2.0;
i -> fss_priority = i->proc_usage/2.0 + i->grp_usage*number/4 + 80;
i = i->p_nextready;
}
dequeue(rp);
unlock(4);
}