320 likes | 483 Views
MS-DOS. Ενός χρήστη Μονοπρογραμματισμού Για έναν επεξεργαστή ( Intel 80xxx). Υλοποίηση του MS-DOS. Το MS-DOS είναι δομημένο σε 3 επίπεδα : To BIOS ( βασικό σύστημα εισόδου/εξόδου) και την επέκτασή του στο ibmbio.com (io.sys) .
E N D
MS-DOS • Ενός χρήστη • Μονοπρογραμματισμού • Για έναν επεξεργαστή (Intel 80xxx)
Υλοποίηση του MS-DOS • Το MS-DOS είναι δομημένο σε 3 επίπεδα : • To BIOS (βασικό σύστημα εισόδου/εξόδου) και την επέκτασή του στο ibmbio.com (io.sys). • Τον Πυρήνα (kernel) που αποτελείται από το ibmdos.com (msdos.sys). • Τον Φλοιό (shell) που αποτελείται από το command.com • Το BIOSείναι ένα σύνολο οδηγών συσκευών χαμηλού επιπέδου που απομονώνει το MS-DOS από τις λεπτομέρειες του υλικού. Βρίσκεται σε ROM και αναπτύσσεται από τους κατασκευαστές Η/Υ (όχι από τη Microsoft). Π.χ. ρουτίνες ανάγνωσης πλήκτρων, εμφάνισης χαρακτήρων στην οθόνη, ανάγνωσης απόλυτων τομέων στο δίσκο, κ.λ.π. • Το ibmbio.com (io.sys), αποτελεί το interface ανάμεσα στον πυρήνα και στο BIOS, έτσι ώστε ο πυρήνας να καλεί ρουτίνες του io.sys και όχι απευθείας το BIOS. Περιέχει επίσης ρουτίνες I/O που δεν υπάρχουν στη ROM.
Υλοποίηση του MS-DOS • Το ibmdos.com (msdos.sys)περιέχει τον πυρήνα του Λ.Σ. και είναι υπεύθυνο για την διαχείριση διεργασιών, την διαχείριση μνήμης, το σύστημα αρχείων και τη διερμηνεία των κλήσεων συστήματος (system calls). • Το command.comείναι ο φλοιός, δηλαδή το τμήμα που βλέπει ο χρήστης και στο οποίο μπορεί να εκτελεί προγράμματα και εντολές. • Αποτελείται από δύο τμήματα: ένα μόνιμο κομμάτι (resident) που παραμένει πάντα στη μνήμη και ένα παροδικό (transient) που φορτώνεται στην περιοχή υψηλής μνήμης και χρησιμοποιείται όταν ο φλοιός είναι ενεργός. Αν η μνήμη αυτή χρησιμοποιηθεί από άλλα προγράμματα, μόλις αυτά τερματισθούν, το παροδικό κομμάτι που είχε σβηστεί ξαναφορτώνεται στη μνήμη.
Εκκίνηση του MS-DOS • Οι Η/Υ με Λ.Σ. MS-DOS ξεκινούν ως εξής : • Με το άνοιγμα του διακόπτη η CPU ξεκινά με PC=0xFFFF0 που αντιστοιχεί στη ROM. Εκεί υπάρχει διακλάδωση στη διαδικασία εκκίνησης του BIOS. • Αυτή αρχικά εκτελεί διαγνωστικούς ελέγχους του hardware (μνήμη RAM, αναγνώριση δίσκων, CD-ROM κ.λ.π.) • Ακολούθως επιχειρεί να διαβάσει τον boot sector της δισκέτας A:, και αν αυτό δεν είναι δυνατό, τότε διαβάζει τον boot sector του δίσκουκαι τo partition table. Μετά επιλέγεται το active primary partition και φορτώνεται και εκτελείται ο boot sector αυτού του partition. • Ο τομέας εκκίνησης εξετάζει το root directory για να εντοπίσει και να φορτώσει το ibmbio.com (io.sys) και το ibmdos.com (msdos.sys) και μεταφέρει τον έλεγχο στο io.sys. • Το io.sys καλεί ρουτίνες του BIOS ώστε να προετοιμάσει το υλικό και μετά η sysinit διαβάζει το config.sys για να φορτώσει οδηγούς συσκευών. • Τελικά ο πυρήνας φορτώνει και εκτελεί τον φλοιό (command.com) ο οποίος εκτελεί (αν υπάρχει) το Autoexec.bat.
Κατάσταση μνήμης μετά την εκκίνηση
Διεργασίες στο MS-DOS • Το MS-DOS υποστηρίζει δύο κατηγορίες εκτελέσιμων αρχείων (com και exe) τα οποία δημιουργούν διεργασίες με ελαφρά διαφορετικά χαρακτηριστικά : • Διεργασίες που ξεκινούν από comαρχεία (*.com) : επιτρέπεται να έχουν ένα τμήμα μεγέθους μέχρι 64ΚΒ κοινό για κώδικα, δεδομένα και στοίβα. • Η διεργασία δεσμεύει όλη τη μνήμη. Για να εκτελεστεί μια θυγατρική διεργασία πρέπει πρώτα να απελευθερωθεί η επιπλέον μνήμη (πέρα από τα 64ΚΒ). • Το εκτελέσιμο αρχείο στο δίσκο είναι ίδιο byte προς byte με τον κώδικα μηχανής που εκτελείται στη μνήμη. Δεν υπάρχει επικεφαλίδα (header). com Code Segment Stack 64K Πρόγραμμα στο δίσκο Data Segment Code Segment MS-DOS
Διεργασίες στο MS-DOS • Διεργασίες που ξεκινούν από exeαρχεία (*.exe) :έχουν ανεξάρτητα τμήματα. Τα exe αρχεία περιέχουν στην αρχή μία επικεφαλίδα με πληροφορίες για την τοποθέτηση του κώδικα στη μνήμη. • Η επικεφαλίδα ξεκινά πάντα με τα bytes 4D16, 5A16 (7710, 9010 ή ‘M’, ‘Z’). Το MS-DOS δεν κοιτά την επέκταση του ονόματος (.com ή .exe) αλλά τα δύο πρώτα byte του αρχείου. 640KB Stack Πρόγραμμα στο δίσκο Heap Δυναμική μνήμη exe Data Segment Code Segment Επικεφαλίδα Code Segment MS-DOS
Πρόθεμα τμήματος κώδικα • Τα πρώτα 256 bytes κάθε διεργασίας στη μνήμη αποτελούν ένα ειδικό τμήμα που ονομάζεται PSP(Program Segment Prefix – Πρόθεμα Τμήματος Κώδικα). • Το PSP δημιουργείται κατά την φόρτωση της διεργασίας στη μνήμη και δεν περιέχει κώδικα, αλλά στοιχεία του Λ.Σ. που αφορούν τη διεργασία : • Το μέγεθος του κώδικα της διεργασίας • Δείκτη στο μπλοκ περιβάλλοντος (environment block) που περιέχει τις μεταβλητές συστήματος (π.χ. TEMP=C:\Temp). • Διεύθυνση της ρουτίνας διαχείρισης του πατήματος των πλήκτρων Ctrl+C. • Τις παραμέτρους εκτέλεσης του προγράμματος (π.χ. dira:*.* /w). • Δείκτη στο PSP της γονικής διεργασίας. • Πίνακα περιγραφέων αρχείων (file descriptor table) που περιέχει έναν χαρακτηριστικό αριθμό για κάθε αρχείο που ανοίγει η διεργασία, καθώς και την τρέχουσα θέση στο αρχείο (0=stdin, 1=stdout, 2=stderr, 3=…).
Πρόθεμα τμήματος κώδικα • Στις διεργασίες που ξεκινούν από com αρχεία το PSP είναι μέρος των διευθύνσεων της διεργασίας, δηλαδή ο κώδικας ξεκινά από την διεύθυνση 256 (από 0-255 είναι το PSP). • Οι διεργασίες που ξεκινούν από exe αρχεία μετατοπίζονται πάνω από το PSP το οποίο είναι εκτός των διευθύνσεων της διεργασίας, δηλαδή ο κώδικας ξεκινά από την διεύθυνση 0 της διεργασίας. 640KB Stack Heap Δυναμική μνήμη Stack 64KB Data Segment Data Segment Code Segment Code Segment Διεύθ. 256 Διεύθ. 0 PSP PSP Διεύθ. 0 MS-DOS MS-DOS Διεργασία από com Διεργασία από exe
Αποδοτική διαχείριση μνήμης διεργασιών • Το MS-DOS δεν υποστηρίζει καμία μέθοδο για αύξηση της διαθέσιμης μνήμης στις διεργασίες (εικονική μνήμη, σελιδοποίηση, εναλλαγή σελίδων κ.λ.π.). • Όταν μία μεγάλη διεργασία ξεκινά μία θυγατρική, ενδέχεται να μην υπάρχει η απαιτούμενη μνήμη για την εκτέλεσή της. Έτσι κάθε διεργασία που δημιουργεί θυγατρικές κατασκευάζεται σε 2 μέρη: το (μικρό) στέλεχος και τον κύριο κορμό. xcopy.exe PSP Κύριος κορμός editor Command.com Command.com PSP PSP Στέλεχος Στέλεχος Στέλεχος PSP PSP PSP Command.com Command.com Command.com Command.com PSP PSP PSP PSP MS-DOS MS-DOS MS-DOS MS-DOS
Διεργασίες στο MS-DOS • Το MS-DOS δεν υποστηρίζει πολυπρογραμματισμό και ταυτόχρονη εκτέλεση διεργασιών. • Η βασική διεργασία που εκτελείται αρχικά είναι το command.com • Με την πληκτρολόγηση εντολής ο φλοιός δημιουργεί την θυγατρική διεργασία και αναστέλλεται έως ότου αυτή ολοκληρωθεί. • Οι εντολές εκτελούνται πάντα στο προσκήνιο (σε αντίθεση με το Unix) • Γονική και θυγατρική διεργασία δεν μπορούν να εκτελούνται παράλληλα. • Μπορεί να υπάρχουν πολλές διεργασίες στη μνήμη αλλά μόνο μία (η τελευταία) είναι ενεργή. Οι άλλες είναι υπό αναστολή. • TSR – Terminate and Stay Resident : προγράμματα που τερματίζουν αλλά παραμένουν στη μνήμη χωρίς να απελευθερώνουν τα αγαθά που κατέχουν. Τα TSR εγκαθιστούν δικούς τους χειριστές διακοπών έτσι ώστε να παρεμβαίνουν και να εκτελούνται όταν δημιουργούνται interrupts (π.χ. βελάκι πάνω ενεργοποιεί το doskey). • Με την ύπαρξη των TSR και των διακοπών υλοποιείται ένα σύστημα ψευδοπαραλληλισμού διεργασιών.
Μονοπρογραμματισμός στο MS-DOS • Παράδειγμα αλυσιδωτής δημιουργίας διεργασιών: • Τ1 : η ενεργή διεργασία είναι ο φλοιός (command.com). • Τ2 : στον φλοιό εκτελείται μία εφαρμογή χρήστη και γίνεται ενεργή. • Τ3 : η εφαρμογή χρησιμοποιεί την εντολή xcopy που γίνεται ενεργή. • Τ4 : τελειώνοντας η xcopy επιστρέφουμε στην εφαρμογή. • Τ5 : τελειώνοντας η εφαρμογή ο φλοιός ξαναγίνεται ενεργός. Τ3 Τ4 Τ5 Τ1 Τ2
Ψευδοπαραλληλισμός με χρήση TSR • Παράδειγμα ψευδοπαραλληλισμού διεργασιών με TSR-διακοπές: • Τ1 : Ο φλοιός είναι ενεργός. Έχει φορτωθεί TSR για Ελληνικά/Αγγλικά. • Τ2 : Από τον φλοιό εκτελείται μία εφαρμογή χρήστη (π.χ. Edit). • Τ3 : Ο χρήστης πατάει Alt+Shift και παράγει διακοπή που ενεργοποιεί το TSR. Η εφαρμογή τελεί υπό αναστολή. • Τ4 : Με το τέλος της ρουτίνας διακοπής επιστρέφουμε στην εφαρμογή. • Τ5 : Με το τέλος της εφαρμογής επιστρέφουμε στο φλοιό. Τ5 Τ3 Τ4 Τ2 Τ1
Υλοποίηση διεργασιών στο DOS • Όταν μια διεργασία καλεί την κλήση συστήματος LOAD_AND_EXEC για να δημιουργήσει θυγατρική, τότε το Λ.Σ. εκτελεί τα εξής βήματα : • Βρίσκει ένα μπλοκ στη μνήμη που να χωράει τη θυγατρική διεργασία. Στα exe αρχεία το απαιτούμενο μέγεθος μνήμης περιγράφεται στην επικεφαλίδα (header). Στις διεργασίες από αρχεία com αποδίδεται ολόκληρη η διαθέσιμη μνήμη. • Δημιουργεί το PSP στα πρώτα 256 bytes της μνήμης που δεσμεύτηκε με τις απαραίτητες πληροφορίες. Ένας δείκτης δείχνει προς τη γονική διεργασία. • Φορτώνει τον εκτελέσιμο κώδικα από το αρχείο στην δεσμευμένη μνήμη ξεκινώντας από το πρώτο byte μετά το PSP. • Δίνει τον έλεγχο στο πρόγραμμα. Στα exe αρχεία η διεύθυνση εκκίνησης του κώδικα περιέχεται στην επικεφαλίδα. Στις διεργασίες από com αρχεία η διεύθυνση εκκίνησης είναι σταθερή και είναι η 010016 = 25610δηλαδή είναι η πρώτη εντολή κώδικα μηχανής αμέσως μετά το PSP.
Το μοντέλο μνήμης του DOS • Ο επεξεργαστής 8088 μπορούσε να προσπελάσει 1ΜΒ μνήμης με 20 γραμμές διευθύνσεων (220=1048576). Για συμβατότητα όμως με τον 8080 είχε καταχωρητές διευθύνσεων των 16 bits (216=65536). Έτσι επινοήθηκε η μέθοδος των παραγράφων (paragraphs). • Κάθε διεύθυνση των 16 bits δεν αναφέρεται σε απόλυτη διεύθυνση αλλά στην αρχή μίας δεκαεξάδας από bytes. Η τελευταία δεκαεξάδα είναι η FFFF16 που αναφέρεται στην διεύθυνση FFFF016= 1048560. • Για την προσπέλαση οποιασδήποτε διεύθυνσης μνήμης εκτός από την διεύθυνση παραγράφου (segment) χρειάζεται και μία διεύθυνση μετατόπισης (offset). Έτσι οι διευθύνσεις σχηματίζονται ως segment:offset (π.χ. το 17ο byte μνήμης έχει διεύθυνση 0001:0001 αλλά και 0000:0011). • Για να βρούμε την απόλυτη διεύθυνση μνήμης ακολουθούμε τον απλό τύπο : Απόλυτη διεύθυνση = segment X 16 + offset.
Τμήματα μνήμης • Ο 8088 είχε 4 16μπιτους καταχωρητές για διευθύνσεις segments: • CS : Code Segment, για την διεύθυνση segment του κώδικα. • DS : Data Segment, για την διεύθυνση segment των δεδομένων. • SS : Stack Segment, για την διεύθυνση segment της στοίβας. • ES : Extra Segment, επιπλέον διεύθυνση segment γενικής χρήσης. • Το κάθε τμήμα (κώδικα, δεδομένων, στοίβας, έξτρα) έχοντας σταθερή διεύθυνση segment, μπορεί μέσω του μεταβλητού 16μπιτου offset να έχει μέγεθος μέχρι 64Κ. • Αλλάζοντας τιμή στον segment register κάποιου τμήματος είναι δυνατή η επανατοποθέτηση (relocation) του τμήματος σε οποιαδήποτε δεκαεξάδα μνήμης. 8FFFF16 = 589823 Stacksegment SS=800016 = 32768 8000016 = 524288 6FFFF16 = 458751 Data Segment DS=600016 = 24576 6000016 = 393216 4FFFF16 = 327679 Code Segment 4000016 = 262144 CS=400016 = 16384 MS-DOS
Συμβατική, ανώτερη και υψηλή μνήμη • Το MS-DOS χρησιμοποιεί μόνο τα πρώτα 640ΚΒ που ονομάζονται Συμβατική Mνήμη (conventional memory). • Η περιοχή πάνω από τα 640ΚΒ και έως το 1ΜΒ (384ΚΒ) ονομάζεται Ανώτερη Μνήμη (Upper Memory Area – UMA) και σε αυτήν απεικονίζεται το ROM BIOS και διευθύνσεις που χρησιμοποιούν οι συσκευές (καταχωρητές, buffers κ.λ.π.). • Ο 80286 μπορούσε να προσπελάσει 16 MB μνήμης. • Λαμβάνοντας την τελευταία δεκαεξάδα (FFFF16) και προσθέτοντας σε αυτήν το offset που μπορεί να είναι από 000016έως FFFF16 παίρνουμε την περιοχή διευθύνσεων FFFF:0000 (1048560) έως FFFF:FFFF (1114095). • Από αυτή την περιοχή μόνο τα πρώτα 16 bytes είναι μέσα στο 1 ΜΒ (1048560-1048575). Τα υπόλοιπα 65520 bytes είναι πάνω από το 1ΜΒ και ονομάζονται Υψηλή Περιοχή Μνήμης (High Memory Area–HMA) • Στην HMA μπορούν να φορτώνονται τμήματα του MS-DOS ή και οδηγοί συσκευών ώστε να απελευθερώνουν έως και 65520 επιπλέον bytes από τη συμβατική μνήμη των 640Κ.
Η εκτεταμένη μνήμη • Η μνήμη πάνω από την HMA και έως τα 16ΜΒ ονομάζεται Εκτεταμένη μνήμη (Extended memory - XMS). • To MS-DOS δεν επέτρεπε την χρήση της από προγράμματα αλλά μπορούσε να την εκμεταλλευτεί ως RAM-Disk. • Από την έκδοση 5.0 και μετά το MS-DOS επέτρεπε την αντιστοίχιση τμημάτων της Εκτεταμένης μνήμης σε κενές περιοχές της UMA ώστε να χρησιμοποιούνται και από προγράμματα. 16 MB Extended memory Extended memory RAM Disk HMA HMA 1 MB BIOS, Drivers I/O memory UMA UMA 640ΚΒ Προγράμματα Προγράμματα Conventional Memory Command.com Command.com PSP PSP MS-DOS MS-DOS
Τμήματα επικάλυψης • Μία μέθοδος για αύξηση της διαθέσιμης μνήμης κάτω από τα 640ΚΒ για χρήση από προγράμματα είναι η μέθοδος των Τμημάτων Επικάλυψης (overlays). • Κάθε μεγάλο πρόγραμμα (π.χ. πρόγραμμα λογιστικής) αποτελείται από ένα βασικό τμήμα (.exe) που είναι πάντα φορτωμένο στη μνήμη και από πολλά ανεξάρτητα υποτμήματα (overlays - *.ovl) που μπορούν να εναλλάσσονται στον ίδιο χώρο φυσικής μνήμης. • Το βασικό τμήμα αναλαμβάνει να φορτώνει κάθε φορά το κατάλληλο overlay. Δίσκος 640ΚΒ Αποθήκη Βασικό τμήμα Αποθήκη Πελάτες PSP Command.com Τιμολόγια Προμ/τές PSP MS-DOS
Η διευρυμένη μνήμη • H μέθοδος των overlays είναι κατάλληλη για προγράμματα αλλά όχι για μεγάλα αρχεία δεδομένων. • Το 1987 οι Lotus, Intel και Microsoft ανέπτυξαν ειδικές κάρτες μνήμης και software ώστε να μπορεί ο 8088 να «βλέπει» μεγάλα ποσά μνήμης. Το πρότυπο αυτό ονομάστηκε LIM-EMS (Expanded Memory System). • Το 1ΜΒ διευθύνσεων του 8088 χωρίζεται σε 64 σελίδες των 16ΚΒ. Η διευρυμένη μνήμη (μέχρι 32 ΜΒ) χωρίζεται επίσης σε σελίδες (έως και 2048) των 16Κ. Το hardware στην κάρτα EMS μπορεί να απεικονίζει οποιαδήποτε σελίδα της διευρυμένης μνήμης σε οποιαδήποτε από τις 64 σελίδες των λογικών διευθύνσεων (0..1ΜΒ). Σελίδα 2048 32 ΜΒ LIM-EMS memory Σελίδα 2047 ... 1 ΜΒ Σελίδα 64 Σελίδα 514 Σελίδα 63 ... Σελίδα 513 8088 Σελίδα 512 Σελίδα 5 ... Σελίδα 4 Σελίδα 4 Σελίδα 3 Σελίδα 3 Σελίδα 2 Σελίδα 2 Σελίδα 1 Σελίδα 1
Μέθοδοι διαχείρισης μνήμης στο DOS • Η διαχείριση μνήμης στο MS-DOS είναι περίπλοκη λόγω του περιορισμού του 8088 στο 1ΜΒ μνήμης και του MS-DOS στα 640Κ. Έχουν χρησιμοποιηθεί 5 συνολικά τεχνικές.
Διαχείριση δεσμευμένων/ελεύθερων τμημάτων • Η διαχείριση των δεσμευμένων ή ελεύθερων τμημάτων μνήμης δεν γίνεται με πίνακες αλλά κατανεμημένα όπως και στις διεργασίες. • Η προσπελάσιμη μνήμη του 1 ΜΒ χωρίζεται σε συνεχόμενα τμήματα που ονομάζονται αρένες. • Κάθε αρένα ξεκινά στην αρχή μίας παραγράφου (δεκαεξάδας / seg-ment). Στην αρχή κάθε αρένας εγγράφεται μία επικεφαλίδα που ονομάζεται arena header(16 bytes) και περιέχει : • Δείκτη προς το PSP της διεργασίας που έχει δεσμεύσει την αρένα ή 0 αν η αρένα είναι ελεύθερη. • Το μέγεθος της αρένας. • Το όνομα του προγράμματος που δέσμευσε την αρένα όταν η αρένα περιέχει το ίδιο το πρόγραμμα και όχι επιπλέον δεσμευμένη μνήμη. • Οι αρένες δεν σχηματίζουν ενωμένη λίστα (όπως τα PSP) αλλά με σειριακή σάρωση των αρένων μπορούν να βρεθούν τα δεσμευμένα και τα ελεύθερα τμήματα μνήμης (αφού σε κάθε header υπάρχει το μέγεθος).
Αρένες • Όταν αναζητείται από το Λ.Σ. κάποιο ελεύθερο τμήμα μνήμης, σαρώνονται όλες οι αρένες από κάτω προς τα πάνω. • Όταν βρεθεί μία αρκετά μεγάλη ελεύθερη αρένα τότε δεσμεύεται μόνο η μνήμη που χρειάζεται και δημιουργείται μία επιπλέον αρένα με το εναπομείναν ελεύθερο τμήμα. • Όταν αποδεσμεύεται μία αρένα δεν ενώνεται με τα γειτονικά της ελεύθερα τμήματα παρά μόνο σε επόμενη σάρωση των αρένων. 1 ΜΒ ROM - BIOS Ελεύθερη Αρένα Ανώτερη μνήμη Μνήμη Ι/Ο Ελεύθερη Αρένα RAM οθόνης 640K Ελεύθερη Αρένα Αρένα Συμβατική μνήμη Lotus123.exe Επικε- φαλίδα Αρένας Command.com MS-DOS
Το σύστημα αρχείων του DOS • Ο τομέας εκκίνησης περιέχει τον bootstrap loader και κρίσιμες πληροφορίες για το σύστημα αρχείων. • Στο τέλος του υπάρχει ο πίνακας διαμερίσεων. • Περιέχει την αρχή και το τέλος της κάθε διαμέρισης (έως 4). • Μια διαμέριση είναι πάντα ενεργή για τη διαδικασία της εκκίνησης.
Πίνακας κατανομής αρχείων (FAT) Μέγεθος Δίσκου Αρχείο Α : 6 8 4 2 Αρχείο Β : 5 9 12 Αρχείο Γ : 10 3 13 Μη κατανεμημένο • Ο αριθμός FFF16σημαίνει «Τέλος Αρχείου» (EOF). • Ο αριθμός 00016 σημαίνει«Ελεύθερος Cluster» (FREE). • O αριθμός FF716σημαίνει «Kατεστραμμένος Cluster» (BAD). Τέλος Αρχείου Κατεστραμμένο Cluster
Εγγραφές καταλόγων 16 bits Attributes αρχείων : • A : (Archive bit) δείχνει ότι το αρχείο έχει τροποποιηθεί από το τελευταίο backup. • D : (Directory bit) δείχνει ότι το αρχείο είναι κατάλογος. • V : (Volume Label bit) δείχνει ότι το αρχείο περιέχει την ετικέτα δίσκου. • S : (System bit) δείχνει ότι πρόκειται για αρχείο συστήματος. • H : (Hidden bit) καθορίζει αν το αρχείο θα φαίνεται ή όχι. • R: (Read-only bit) καθορίζει ότι το αρχείο είναι μόνο για ανάγνωση. Όνομα Αρχείου(8 byte) Επέκταση(3 byte) Δεσμευμένος χώρος για μελλοντική χρήση(10 byte) Ώρα(2 byte) Ημερομηνία(2 byte) Διεύθ. 1ου cluster (2 byte) Μέγεθος Αρχείου(4byte)
Η κλήση συστήματος OPEN • Για το άνοιγμα ενός αρχείου από μία διεργασία καλείται η κλήση του MS_DOS‘OPEN’ η οποία λειτουργεί ως εξής : • Το MS-DOS ψάχνει στο PSP της διεργασίας για το αν υπάρχει ελεύθερος χώρος στον πίνακα περιγραφέων αρχείων (file descriptor table) που έχειμέγεθος 20 bytes. Αν βρεθεί τότε αναζητείται ελεύθερος χώρος στον κεντρικό πίνακα αρχείων του MS-DOS (system file table). • Αν βρεθεί τότε εξετάζεται αν το αρχείο είναι ειδικό αρχείο (con, lpt, …). Αν όχι εξετάζεται αν ο πρώτος χαρακτήρας είναι ‘\’ (απόλυτη ή σχετική διεύθυνση). Στη συνέχεια αναζητείται το αρχείο στο δένδρο των καταλόγων. • Αν βρεθεί τότε η εγγραφή καταλόγου για το αρχείο αντιγράφεται στον κεντρικό πίνακα αρχείων και ο δείκτης θέσης αρχείου μηδενίζεται (δείχνει στην αρχή). • Ο Α/Α εγγραφής του αρχείου στον κεντρικό πίνακα αρχείων καθώς και ο δείκτης θέσης αντιγράφονται και στο PSP της διεργασίας που ανοίγει το αρχείο.
Υλοποίηση εισόδου/εξόδου στο DOS • Όλη η Ε/Ε στο DOS γίνεται μέσω ειδικών αρχείων χαρακτήρων ή μπλοκ, ανάλογα με τη συσκευή. • Για κάθε συσκευή υπάρχει οδηγός συσκευής που περιέχει το πρόγραμμα Ε/Ε. • Μερικοί οδηγοί περιλαμβάνονται ήδη στο io.sys. • Επιπλέον οδηγοί μπορούν να φορτωθούν κατά την εκκίνηση με την εντολή DEVICE ή στο autoexec.bat. • Κάθε οδηγός είναι πρόγραμμα σε C, assembly ή άλλη γλώσσα μεταγλωττισμένο σε αρχείο .com, .exe ή .sys. • Αποτελείται από την επικεφαλίδα (header) μήκους 18 byte και τον κώδικα Ι/Ο χωρισμένο σε 2 τμήματα : • Το τμήμα διαχείρισης των κλήσεων συστήματος, και • Το τμήμα εκτέλεσης των διαδικασιών εισόδου/εξόδου. • Η επικεφαλίδα αποτελείται από τον δείκτη στον επόμενο οδηγό, τον πίνακα χαρακτηριστικών του οδηγού, δύο δείκτες για τα δύο τμήματα του κώδικα και το όνομα του οδηγού μέχρι 8 χαρακτήρες (‘com1’, ‘lpt1’, ‘con’ κ.λ.π.).
Οδηγοί συσκευών • Οι οδηγοί συσκευών είναι διασυνδεδεμένοι σε μία ενωμένη λίστα. Το MS-DOS κρατά ένα δείκτη στην κορυφή της λίστας για να μπορεί να προσπελαύνει όλους τους οδηγούς συσκευών. • Κάθε νέος οδηγός τοποθετείται στην κορυφή της λίστας και επομένως έχει πλεονέκτημα γιατί προσπελαύνεται πρώτος. • Οι ιδιότητες ενός οδηγού συσκευής αποτελούνται από 16 bits (2 bytes). Το κάθε bit δηλώνει και ένα χαρακτηριστικό του οδηγού. Δείκτης σε επόμενο οδηγό Δείκτης σε επόμενο οδηγό Επικεφαλίδα Header Ιδιότητες Οδηγού Ιδιότητες Οδηγού Δείκτης κλήσεων Δείκτης κλήσεων Δείκτης κώδικα Ι/Ο Δείκτης κώδικα Ι/Ο Όνομα : com1 Όνομα : lpt1 Διαδικασίες I/O Διαδικασίες I/O Κλήσεις MS-DOS Κλήσεις MS-DOS Διαδοχικοί οδηγοί com1 και lpt1
Πρόοδος κλήσης συστήματος για Ε/Ε • Ένα πρόγραμμα κάνει κλήση READ ή WRITE. Αφού το αρχείο είναι ανοιχτό, η συσκευή βρίσκεται ακολουθώντας το PSP και τον κεντρικό πίνακα αρχείων. • Κατασκευάζεται ένα μήνυμα αίτησης με 13 bytes τουλάχιστον που περιέχει: • Κωδικό εντολής READ ή WRITE. • Διεύθυνση μνήμης από όπου θα γίνει ανάγνωση ή όπου θα γίνει η εγγραφή. • Διεύθυνση συσκευής για συσκευές τύπου μπλοκ. • Πλήθος bytes • Από την επικεφαλίδα του οδηγού διαβάζεται ο δείκτης προς τον διαχειριστή κλήσεων και καλείται (εξετάζει το μήνυμα και αποθηκεύει πεδία). • Στη συνέχεια το Λ.Σ. διαβάζει τον δείκτη στην ρουτίνα Ι/Ο και την καλεί για να ξεκινήσει η επικοινωνία. • Κατά τον τερματισμό ο οδηγός επιστρέφει έναν κωδικό εξόδου σχετικά με το αν η εκτέλεση ήταν επιτυχής ή όχι.