Προηγμένοι Μικροεπεξεργαστές. Protected Mode & Multitasking

Σχετικά έγγραφα
Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 2 Addressing

Προηγμένοι Μικροεπεξεργαστές. Paging & Segmentation

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Αρχιτεκτονική-ΙI Ενότητα 6 :

Αρχιτεκτονική x86(-64) 32-bit και 64-bit λειτουργία. Αρχιτεκτονική x86(-64) Αρχιτεκτονική επεξεργαστών x86(-64) Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 3 Task Switching in PM

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

Εικονική Μνήμη (Virtual Μemory)

Writing kernels for fun and profit

Προηγμένοι Μικροεπεξεργαστές. Παρουσίαση Εργασιών

Δημήτρης Πρίτσος. ISLAB HACK: Βασικές Έννοιες της Αρχιτεκτονικής

Εικονική Μνήμη (Virtual Μemory)

Προηγμένοι Μικροεπεξεργαστές. Έλεγχος Ροής Προγράμματος

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης III

Καταχωρητές & τμήματα μνήμης του Ματθές Δημήτριος Καθηγητής Πληροφορικής

Σημειώσεις για τον 80x86

Εικονική Μνήμη (virtual memory)

Αρχιτεκτονική Υπολογιστών

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Εργαστήριο 3 ΟΡΓΑΝΩΣΗ ΤΗΣ ΚΜΕ. Εισαγωγή

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

Dr. Kerneldev or: how I learned to stop worrying and love the pagefault

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Intel x86 ISA. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών ΗΥ

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Instruction Execution Times

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

Τέτοιες λειτουργίες γίνονται διαμέσου του

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών - Μηχανικών Υπολογιστών. Αρχιτεκτονική Υπολογιστών Νεκτάριος Κοζύρης.

Αρχιτεκτονική Υπολογιστών

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

Στοιχεία από Assembly Γιώργος Μανής

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Αρχιτεκτονική υπολογιστών

Προηγμένοι Μικροεπεξεργαστές. Παρουσίαση Projects

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

Κεντρική Μονάδα Επεξεργασίας (ΚΜΕ) Τμήματα ΚΜΕ (CPU) Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (Ι)

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Οργάνωση Υπολογιστών (Ι)

Αρχιτεκτονική Υπολογιστών

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εικονική Μνήμη (Virtual memory)

Διαχείριση Κύριας Μνήμης

Εικονική Μνήμη (virtual memory)

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική Υπολογιστών

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ

Θ. Ζαχαριάδης Αν. Καθηγητής. Λ. Σαράκης Καθ. Εφαρμογών

Ανάπτυξη rootkit σε Λειτουργικό Σύστημα Linux

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών ARM και x86

Αρχιτεκτονική υπολογιστών

Virtual Memory. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

The challenges of non-stable predicates

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

Λειτουργικά Συστήματα (ΗΥ321)

Λειτουργικά Συστήματα

MIPS functions and procedures

ΕΠΛ605 Εργασία 1 Ημερομηνία Παράδοσης 12/9/2018 στην αρχή του μαθήματος

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαχείριση μνήμης Εργαστηριακές Ασκήσεις

Modbus basic setup notes for IO-Link AL1xxx Master Block

Κεντρική Μονάδα Επεξεργασίας

Λειτουργικά Συστήματα (ΗΥ222)

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

6. Επιστροφή ελέγχου στο σημείο εκκίνησης

Λειτουργικά Συστήματα. Εισαγωγή

Κεφάλαιο 7 Ιεραρχία Μνήμης (Memory Hierarchy)

Υποστήριξη διαδικασιών στο υλικό των υπολογιστών

EPL475:Εργαστήριο 5, GDB

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Reminders: linear functions

Keyboard. Ασσιούρας Ιωάννης 5593 Βούκας Ιωάννης 5001 Πρωτονοτάριος Ιωάννης 6072

Λειτουργικά Συστήματα

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονικές Συνόλου Εντολών (ΙΙ)

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Κρυφές Μνήμες. (οργάνωση, λειτουργία και απόδοση)

Λειτουργικά Συστήματα Η/Υ

CYTA Cloud Server Set Up Instructions

Εισαγωγή στην πληροφορική -4

i Όλες οι σύγχρονες ΚΜΕ είναι πολυπλοκότερες!

Αρχιτεκτονική Υπολογιστών

Μικροαρχιτεκτονική του LC3

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Αρχιτεκτονική Υπολογιστών

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

Μάθημα 8: Διαχείριση Μνήμης

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Εικονική Μνήμη (virtual memory)

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Transcript:

Προηγμένοι Μικροεπεξεργαστές Protected Mode & Multitasking

Μοντέλο Μνήμης Πριν τους 80386 η x86 αρχιτεκτονική ήταν 16 bit υπεραρκετά για τα PCs της εποχής Εκτός από την διευθυνσιοδότηση 16 bit διευθυνσιοδοτούν άμεσα μόνο 64ΚΒ μνήμης Πολύ λίγο για desktop συστήματα

Μοντέλο Μνήμης Στόχος της intel: Διαθέσιμη μνήμη 1MB Διευθύνσεις των 20 bit Προφανείς επιλογές: Καθαρή 32 bit αρχιτεκτονική Το 1978 αυτή η κίνηση θα ήταν ασύμφορη 8085-like διευθυνσιοδότηση: 2 16-bit registers σχηματίζουν μία 32 bit διεύθυνση 32-bit διεύθυνσης ήταν υπερβολικά πολλά Ο τρόπος διευθυνσιοδότησης του 8085 είναι δύστροπος Λύση(?): πιο περίπλοκο μοντέλο μνήμης

Μοντέλο Μνήμης Η διεύθυνση είναι 20 bits Μνήμη 00000h fffffh

Μοντέλο Μνήμης Η διεύθυνση είναι 20 bits 00000h Μνήμη Seg X 0000h Σχηματίζεται από δύο 16 bit κομμάτια 16*X Seg X 1. Το segment επιλέγει 64KB της μνήμης από το συνολικό 1MB ffffh fffffh

Μοντέλο Μνήμης Η διεύθυνση είναι 20 bits 00000h Μνήμη Seg X 0000h Σχηματίζεται από δύο 16 bit κομμάτια 16*X Seg X offset 1. Το segment επιλέγει 64KB της μνήμης από το συνολικό 1MB 2. To offset επιλέγει μία διεύθυνση μέσα στον χώρο του segment ffffh fffffh

Μοντέλο Μνήμης Η διεύθυνση είναι 20 bits 00000h Μνήμη Seg X 0000h Σχηματίζεται από δύο 16 bit κομμάτια 16*X Seg X offset 1. Το segment επιλέγει 64KB της μνήμης από το συνολικό 1MB 2. To offset επιλέγει μία διεύθυνση μέσα στον χώρο του segment ffffh Η πλήρης διεύθυνση συμβολίζεται segment : offset fffffh

Segment Registers Πως δίνουμε τους δύο 16 bit αριθμούς με μία εντολή; Το offset δίνεται κανονικά από την ίδια την εντολή Tο segment βρίσκεται οπωσδήποτε σε έναν segment register 8086 80286: Code Segment (CS) Data Segment (DS) Extra Segment (ES) Stack Segment (SS) 80386 Pentium4: Δύο επιπλέον registers, οι GS και FS

Segment Registers Δεν είναι όλοι οι segment registers ισοδύναμοι Κάθε ένας χρησιμοποιείται εξ' ορισμού για κάποιους τύπους προσπελάσεων Οι default χρήσεις τους: CS: IP/EIP (Ανάγνωση εντολών) SS: SP/ESP και BP/EBP (χρήση στοίβας) ES: string εντολές DS: Όλες οι άλλες προσπελάσεις μνήμης

Segment Registers Στους πρώτους x86 επιτρεπόταν μόνο η default χρήση των segment registers Όχι πια: Κάθε συνδυασμός segment και offset επιτρέπεται Αν χρησιμοποιούμε έναν segment register για την default χρήση του, τότε μπορούμε να τον παραλήψουμε στην εντολή Πχ mov ax, [1000h] αντί για mov ax, ds:[1000h] Διαφορετικά επιβάλλεται να τον αναφέρουμε

Μοντέλο μνήμης - Πλεονεκτήματα Μεγάλο address space με μικρό overhead Οι διευθύνσεις στον κώδικα είναι μόνο offset (16-bit) Οι μονάδες του επεξεργαστή έχουν πλάτος 16-bit Μόνο τα τελευταία στάδια του address calculation έχουν πλάτος 20-bit

Μοντέλο μνήμης - Πλεονεκτήματα Multiprogramming Jumps και moves μπορούν να αναφέρονται μόνο στο offset Το πρόγραμμα δεν χρειάζεται να ξέρει που θα τοποθετηθεί στην μνήμη Segment = επιλογή του OS στο runtime Μπορούμε να φορτώσουμε πολλαπλά προγράμματα στην μνήμη και να τα εκτελέσουμε

Μοντέλο μνήμης - Μειονεκτήματα Τα προγράμματα μπορούν να προσπελάσουν άμεσα μόνο 4 segments των 64KB 256KB Δύσκολο να το διαχειριστεί αποδοτικά μία γλώσσα υψηλού επιπέδου Τα 20 bits πολύ γρήγορα αποδείχθηκαν λίγα

Εξέλιξη 80386 Pentium 4: 32 bit καταχωρητές Μόνο με το offset μπορούμε να προσπελάσουμε όλη την μνήμη Δεν χρειαζόμαστε πραγματικά τα segments Μόνο για συμβατότητα προς τα πίσω

Εξέλιξη Core 2 Μέλλον Οι segment registers υπάρχουν ακόμη Αλλά είναι γειωμένοι στο μηδέν Τα segments ξεκινούν από το 0x000 και καλύπτουν όλη την μνήμη Πρακτικά το segmentation της μνήμης δεν υπάρχει πια

Γιατί Protected Mode; Real Mode: Έξυπνος τρόπος για παροχή 20 bit διευθύνσεων σε 16 bit αρχιτεκτονική Ήδη από το 1981 20 bit ήταν λίγα Διέξοδοι: 1. Καθαρή 32 bit αρχιτεκτονική 2. Τροποποίηση του segmentation μηχανισμού, ώστε να παράγει μεγαλύτερες διευθύνσεις

Γιατί Protected Mode; Πρόβλημα: Οι 8086 και 8088 ήταν τρομερά επιτυχημένοι Η PC αρχιτεκτονική και όλες οι εφαρμογές για αυτήν απαιτούσαν x86 επεξεργαστές Χωρίς backward compatibility το κόστος για την χρήση των νέων Intel επεξεργαστών θα ήταν πολύ μεγάλο Αποτέλεσμα: Η Intel διάλεξε την λύση με την μεγαλύτερη προς τα πίσω συμβατότητα

Γιατί Protected Mode; 1η Απόπειρα: 80286 (1982) Ξεκινά σε real mode (100% συμβατότητα προς τα πίσω) Αν ο χρήστης ή το OS το διαλέξει, πέρασμα σε protected mode 64MB φυσικής μνήμης, 1GB λογικής μνήμης Τα segments δεν αντιστοιχούν άμεσα σε περιοχές μνήμης Μηχανισμοί προστασίας υλοποιημένοι πάνω στο segmentation Τα περισσότερα 8086 και 8088 προγράμματα μπορούν να εκτελεστούν σε protected mode με μικρές τροποποιήσεις

Γιατί Protected Mode; 2η Απόπειρα: 80386 (1985) Πραγματική 32 bit αρχιτεκτονική Ομοίως ξεκινά σε real mode Σε protected mode: 4GB φυσικής και λογικής μνήμης (32 bit addresses) Καλύτεροι μηχανισμοί προστασίας Δυνατότητα για επιστροφή σε real mode Με κάποιες αλλαγές πολλά 8086 και 8088 προγράμματα μπορούν να τρέξουν σε protected mode Και όσα δεν μπορούν Virtual Mode

Γιατί Protected Mode; Οι καταχωρητές γενικού σκοπού επεκτείνονται ΑΧ ΕΑΧ, ΒΧ ΕΒΧ κοκ EAX AH AX AL 31 16 15 Παρά τα 32 bit των 386, το segmentation έμεινε 8 7 Backward compatibility Μονάδα διαχείρισης και προστασίας μνήμης 0

Real Mode Address Translation Selector = 0100H 00000Η 01000Η 10FFFΗ Μνήμη Seg 0100 FFFFFΗ

Protected Mode Address Translation GDT 0 0000Η Μνήμη Selector = 0100H Descriptor 20H Base Addr Size Rights F FFFFΗ FFFF FFFF Η

Selector Selector Τιμή που φορτώνουμε στους Segment Registers Bits 15-3: Θέση του Descriptor στο DT Bit 2: Επιλογή Global ή Local DT Bits 1-0: Requested Privilege Level 15 3 2 1 0 Descriptor No D T RPL

Protected Mode Address Translation GDT 0 0000Η Μνήμη Selector = 0100H Descriptor 20H Base Addr Size Rights F FFFFΗ FFFF FFFF Η

Protected Mode Address Translation GDT 0 0000Η Μνήμη Selector = 0100H Descriptor 20H Base Addr Size Rights F FFFFΗ FFFF FFFF Η

Descriptors Οι descriptors Επιλέγονται από τους selectors Περιγράφουν κάποιο segment ή ορίζουν κάποια πύλη Έχουν μέγεθος 8 bytes

Descriptors Διάφοροι τύποι descriptor: Segment Descriptor Data ή Code Segment Descriptor System Descriptor: LDT segment descriptor Task State Segment descriptor Call Gate descriptor Task Gate descriptor Interrupt Gate descriptor Ο τύπος καθορίζεται από το πεδίο TYPE του desctiptor

Descriptors Types of segment descriptors

Segment Descriptor Ο Segment Descriptor περιγράφει ένα segment κώδικα ή δεδομένων Τα 8 bytes του descriptor δίνουν Τύπο του Descriptor Διεύθυνση Βάσης του Segment Μέγεθος του Segment Privilege Level Εκτελέσιμο ή Δεδομένα Δικαιώματα Read ή Read/Write κα

Code Segment Descriptor 7 BASE(B31-B24) G D 0 A LIMIT V (L19-L16) 6 5 P DPL 1 1 C R A BASE(B23-B16) 4 3 1 BASE (B15-B0) LIMIT (L0-L15) 2 0 Αρχή του Segment = Base Μέγεθος = Limit ( ή Limit * 4K αν G = 1) A (Accessed) = Set αν έχει χρησιμοποιηθεί R (Read) = Μπορούμε να κάνουμε load C (conforming) - protection related G (Granularity bit) = ρυθμίζει την μετάφραση του Limit

Data Segment Descriptor 7 BASE(B31-B24) G B 0 A LIMIT V (L19-L16) 6 5 P DPL 1 0 E W A BASE(B23-B16) 4 3 1 BASE (B15-B0) LIMIT (L0-L15) 2 0 Αρχή του Segment = Base Μέγεθος = Limit ( ή Limit * 4K αν G = 1) A (Accessed) = Set αν έχει χρησιμοποιηθεί W (Write) = Μπορούμε να κάνουμε store E (Expansion) = ρυθμίζει την μετάφραση του Limit G (Granularity bit) = ρυθμίζει την μετάφραση του Limit

Segment Descriptor Bit Position Name Function 7 6-5 4 3 2 1 3 2 1 Present (P) Descriptor Privilege Level (DPL) Segment Descriptor Type (S) Executable(E) Expansion Direction(ED) Writeable(W) Executable(E) Conforming(C) Readable(R) P=1 Segment is mapped into physical memory P=0 No mapping to physical memory exists, base and limit are not used Segment privilege attribute used in privilege tests S=1 Code or Data segment descriptor S=0 System segment Descriptor or Gate Descriptor E=0 Data segment descriptor type is : ED=0 Expand Up segment ED=1 Expand Down segment W= 0 Data segment may not be written into W= 1 Data segment may be written into E=1 Code segment descriptor type is: C=1 Code segment may only be executed When CPL DPL and CPL remains unchanged R=0 Code segment may not be read R=1 Code segment may be read 0 Accessed(A) A=0 Segment has not been accessed A=1 Segment selector has been loaded into segment register or used by selector test instruction

Non System Segment descriptors P bit indicates whether segment is present in memory or not. P = 0 -> Segment is not present and P = 1-> Segment is present. DPL: defines privilege level of the segment. Used to protect segment from low privilege caller.

Non System Segment descriptors S: Used to distinguish between non system segment and system segment descriptors. S = 1-> Non system segment descriptor. E: Executable; Used to distinguish between data and code segments. E=0 -> Data segment including stack. E = 1 -> Code segment. ED/C: Expand direction/conforming; When E=0, then this bit functions as ED, ED indicates whether the segment is data or stack. ED = 0 -> Data segment( access segment randomly). Offset address limit. ED = 1 -> Stack segment LIFO.

Non System Segment descriptors When E =1, then this bit functions as C ( conforming) bit. Used to distinguish between conforming and nonconforming code segments. C= 0 -> Non conforming code segment. C = 1 -> Conforming code segment. R/W Read/Write. When E= 0( data segment), then this bit functions as W bit. This bit indicates whether data segment is writable or not. W = 0 -> data segment is not writable. W= 1 -> data segment is writable.

Non System Segment descriptors When E =1 (code segment) then this bit functions as R bit. This bit indicates whether code segment is readable or not. R = 0 -> code segment is not readable and R = 1 -> code segment is readable. A: Accessed; This bit indicates whether the segment is accessed or not. A= 1 -> Segment accessed. This bit is reset by OS periodically. A= 0 -> Segment not accessed

System Segment descriptor Type All system descriptors are present in GDT while some system descriptors are present in LDTs. Normally system segment descriptor are used by OS. The value of S in right access byte is 0. Their functions are fixed and specified by Intel. The type of system descriptor is indicated by type field. The system segment descriptors have no Accessed bit, instead the type field (3 bits) is now extended to 4 bits. The system segment descriptors contain the information about tables (LDT), tasks(tss) and gates (call gate, interrupt gate, task gate, trap gate) of the OS.

Name Value Description Type 0 1 2 3 4 5 6 7 8 9 A B C D E F P 0 1 System descriptors Reserved Available 16 bit TSS LDT Busy 16 bit TSS Call Gate Task Gate 16 bit Interrupt gate 16 bit Trap gate Reserved Available 32 bit TSS Reserved Busy 32 bit TSS 32 bit Call Gate Reserved 32 bit Interrupt Gate 32 bit Trap Gate Descriptor contents are not valid Descriptor contents are valid DPL 0-3 Descriptor Privilege level 0,1,2, or 3 BASE 32-bit number Base address of special system data segment in memory LIMIT 20-bit number Offset of last byte in segment from the base

LDT descriptor (s=0, Type 2)

LDT descriptor (s=0, Type 2) The LDT descriptors are present in the GDT. They contain the information about the LDT. LDT contains the segment descriptors that are unique to a particular task. The DPL field of the descriptor is ignored as this descriptor can only be accessed with a privilege level of 0. Here type field =2 i.e. it specifies a LDT descriptor.

Task State Segment Task State Segment (TSS) Ένα για κάθε task Κρατάει την κατάσταση του task όταν αυτό φεύγει από τον επεξεργαστή Registers γενικού σκοπού, ESP, EIP Segment registers LDT Selector IO Permissions Διευκολύνει το multi-tasking

TSS Structure EBX EDX I/O MAP BASE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 LDT GS T ECX EAX EFLAGS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 FS INSTRUCTION POINTER (EIP) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DS SS CS ES 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 CR3 ESP2 SS2 SS1 EDI ESP1 ESI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SS0 EBP ESP 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ESP0 BACKLINK

Task State Segment Όταν φορτώνεται ένα task αντιγράφεται η κατάσταση του από το TSS του στον επεξεργαστή Όταν βγάζουμε ένα task από τον επεξεργαστή αντιγράφεται η κατάστασή του από τον επεξεργαστή στο TSS

TSS Descriptor Όπως κάθε segment, το TSS περιγράφεται από έναν descriptor που επιλέγεται από έναν selector O selector του tss είναι και το αναγνωριστικό του task Ο selector του τρέχοντος task βρίσκεται στον task register Aπευθείας φόρτωση μόνο σε ειδικές περιπτώσεις Συνήθης φόρτωση: θα φορτώναμε selector στον CS Πχ για ένα task με TSS το tss1 και selector τον 18h: jmp 18h:0 ή call 18h:0

TSS Descriptor 7 5 3 1 BASE(B31-B24) P DPL 0 TYPE 1 0 1 B B A S E (B15-B0) LIMIT (L0-L15) G 0 0 A LIMIT V (L19-L16) BASE(B23-B16) 6 4 2 0 B (busy bit) = 1 αν το task εκτελείται To limit πρέπει να είναι τουλάχιστον 103

Interrupt Gate Descriptor Δίνουν πληροφορίες για την κλήση μίας ISR Συγκεκριμένα: Code Segment Selector της ISR Offset της ISR μέσα στο code segment Privileges

Interrupt Gate Descriptor 7 OFFSET(A31-A16) 6 5 P DPL 0 1 1 1 0 00H 4 3 1 SEGMENT SELECTOR OFFSET (A0-A15) 2 0

Gate descriptors (S=0, Type 4,5,6,7,C,F) Whenever 4,5,6,7 is specified in type field it specifies a call gate, task gate, interrupt gate and trap gate respectively. All fields are same as specified earlier except the word count, selector and offect. The word count field specifies the number of parameters that are to be copied from caller s stack to the called procedure s stack.

Gate descriptors (S=0, Type 4,5,6,7,C,F) Call gate are used to modified privilege levels. Trap and interrupt gates are used in interrupt and exception handling. The task gates are used in multitasking system

Descriptor Tables Τα DTs είναι πίνακες όπου περιέχονται descriptors Και αντίστροφα: όλοι οι descriptors πρέπει να βρίσκονται σε κάποιο DT O αριθμός του descriptor που δίνει ο selector είναι η θέση του descriptor στον πίνακα Ξεκινούν από όπου θέλουμε και έχουν (σχεδόν) όποιο μέγεθος θέλουμε Μέγιστος αριθμός εγγραφών = 8K Μέγιστο μέγεθος = 64ΚΒ

Descriptor Tables Μέχρι τρεις ενεργοί πίνακες κάθε στιγμή: GDT: Descriptors για όλα τα task (και OS) LDT: Descriptors μόνο για το ενεργό task IDT: Descriptors για Interrupt Gates Οι διευθύνσεις βάσης και τα μεγέθη τους φορτώνονται στους ειδικούς καταχωρητές GDTR, LDTR, IDTR Η πρώτη εγγραφή του GDT (selector = 0h) είναι δεσμευμένη NULL Descriptor

Σύνοψη Address Translation Αντί για segment number -> selector Ο selector επιλέγει descriptor από ένα descriptor table Ο descriptor περιγράφει τα χαρακτηριστικά του segment, δίνει την φυσική του θέση στην μνήμη και ορίζει δικαιώματα χρήσης

Segment-Based Protection Οι descriptors μας παρέχουν δυνατότητες για να ελέγξουμε την χρήση δεδομένων ή την εκτέλεση κώδικα 1. Type checking 2. Limit checking 3. Restricting access to data 4. Restricting control transfers 5. Restriction of instruction set Πιθανές παραβιάσεις οδηγούν σε exception

1. Type checking Χρησιμοποιεί το πεδίο TYPE για να ελέγξει την εγκυρότητα της εντολής Επιβάλλει την χρήση του σωστού τύπου selector/descriptor για κάθε εντολή. Πχ: Μόνο selectors για segment descriptors στους segment registers Μόνο interrupt και task gates στον IDT Μόνο selectors για TSS descriptors στο task switching

1. Type checking Αποτρέπει βάσει του πεδίου TYPE: Selectors για non-executable segments στον CS Selectors για executable segments χωρίς read δικαιώματα στους υπόλοιπους registers Selectors για read-only segments στον SS Store σε executable segment Store σε data segment που είναι read only

2. Limit Checking Σε κάθε προσπέλαση μνήμης ελέγχεται αν το offset βρίσκεται μέσα στα όρια που επιβάλλονται από το limit Γενικά 0 <= offset <= limit Αν G = 1 0 <= offset <= limit * 4K Aν Ε = 1 64K - 1 >= offset => limit + 1 Aν G = E = 1 4G - 1 >= offset >= limit * 4K + 1

Privilege Levels Στην x86 αρχιτεκτονική 4 επίπεδα προνομίων Level 0: Kernel (Πλήρη δικαιώματα) Level 1: Υπηρεσίες του OS και drivers Level 2: Επεκτάσεις του OS Level 3: Επίπεδο Χρήστη (Ελάχιστα δικαιώματα)

Privilege Levels Στην πράξη μόνο επίπεδο 0 και 3 Απαγορεύουν σε κώδικα χαμήλων προνομίων (κώδικα χρήστη) Να αλλοιώσει την κατάσταση του OS Να αλλάξει τον τρόπο που αυτό λειτουργεί Να υποκλέψει ξένα δεδομένα Ένα ελαττωματικό πρόγραμμα δεν παγώνει το σύστημα Ένα κακόβουλο πρόγραμμα δεν μολύνει εύκολα το λειτουργικό

Privilege Levels Τρεις τύποι privilege level Current Privilege Level (CPL) Το επίπεδο του εκτελούμενου code segment Descriptor Privilege Level (DPL) Πεδίο του descriptor. Καθορίζει τα ελάχιστα προνόμια (μέγιστο CPL) που απαιτούνται για την χρήση του segment Requested Privilege Level (RPL) Ορίζεται στα bits 0-1 του selector Δείχνει τα δικαιώματα με τα οποία θέλουμε να χρησιμοποιήσουμε ένα segment

3. Restricting access to data Η χρήση ενός data selector επιτρέπεται αν: Ο descriptor που επιλέγει ο selector έχει DPL μεγαλύτερο ή ίσο του max (CPL, RPL) 3 2 1 0

4. Restricting control transfers Through call gates Για να κληθεί ένα call gate πρέπει Να μπορεί να προσπελαστεί από την τρέχουσα διεργασία max(cpl, RPL) <= gate_dpl To target segment να έχει χαμηλότερο αριθμητικά επίπεδο Target segment DPL <= CPL 3 2 1 0 G X G

4. Restricting control transfers Through call gates Τα call gates είναι τύπος descriptor Παρόμοιος με τα interrupt gates Μεταφέρει τον έλεγχο σε συγκεκριμένο segment και offset Προσφέρει πρόσβαση σε κώδικα υψηλότερων προνομίων Οι συναρτήσεις χρήστη μπορούν να χρησιμοποιήσουν κώδικα του OS αλλά μόνο με τους δικούς του όρους Φορτώνεται διαφορετική στοίβα, ώστε να απομονωθούν πλήρως τα επίπεδα προνομίων

4. Restricting control transfers Direct transfers Για near calls και jumps (μέσα στο ίδιο segment) γίνεται μόνο limit checking Για far calls και jumps (σε διαφορετικό segment) πρέπει: Αν το segment είναι nonconforming, το CPL να είναι ίσο με το target DPL Αν το segment είναι conforming, το CPL μπορεί να είναι μεγαλύτερο ή ίσο του DPL 3 2 1 0 Ok if conforming