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

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

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

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

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

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

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

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

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

Writing kernels for fun and profit

Ανάπτυξη και Σχεδίαση Λογισμικού

Δομημένος Προγραμματισμός

Προγραμματισμός Συστημάτων

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

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

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 1 Hello World

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

Προγραμματισμός Ι (ΗΥ120)

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 4: Ρουτίνες καθυστέρησης. [Συγγραφή ρουτίνας καθυστέρησης]

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

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

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

ΔΕΙΚΤΕΣ ΚΑΙ ΔΙΕΥΘΥΝΣΕΙΣ

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

Υποπρογράμματα (Subroutines)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Ε-85: Ειδικά Θέµατα Λογισµικού

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

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Ανάπτυξη και Σχεδίαση Λογισμικού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Διαδικασιακός Προγραμματισμός

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

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

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

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ: Ηλεκτρονικής και Υπολογιστών

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

Προγραμματισμός Ταυτόχρονος Προγραμματισμός

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

Μεθόδων Επίλυσης Προβλημάτων

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 3: Εντολές λογικών πράξεων και εντολές κλήσης ρουτινών

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

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

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

; Οι HL δείχνουν την επόµενη θέση µνήµης MVI A, 38H CMP H JNZ DO_FLMEM ; POP B. ; Ανάκτηση καταχωρητών απο το σωρό.

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

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

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Ορισµός της Στοίβας Περίληψη H λειτουργία της Στοίβας (γενικά, αλλά και στο QtSpim pim) Η χρησιµότητα της Στοίβας στους Μικροεπεξεργαστές Κλήση συνάρτ

Ερωτήσεις θεωρίας MY. Μέρος Α. Υλικό.

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

MIPS functions and procedures

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγικά & Βασικές Έννοιες

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED)

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

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

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Λειτουργικά Συστήματα Πραγματικού Χρόνου

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Διάλεξη 5: Δείκτες και Συναρτήσεις

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Εισαγωγικά & Βασικές Έννοιες

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Στοίβες με Δυναμική Δέσμευση Μνήμης

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

ΕΡΓΑΣΤΗΡΙΟ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΙΙ Εργαστήριο 2 ο ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ- ΨΕΥΔΟΕΝΤΟΛΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ- ΔΙΑΔΙΚΑΣΙΕΣ (ΕΙΣΑΓΩΓΗ)

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

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

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

Αρχιτεκτονική Υπολογιστών Ασκήσεις Εργαστηρίου

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

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

Εισαγωγή στον Προγραμματισμό (με. τη C)

Transcript:

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

Περιγραφή Διαχείριση διεργασιών μέσα από protected mode. Υπάρχων κώδικας: Περνάει σε protected mode Αρχικοποιεί όλες τις δομές Δίνει τον έλεγχο σε μία protected mode συνάρτηση με το όνομα main

Περιγραφή Συνέχεια Υπάρχων κώδικας: Όταν χτυπάει το IRQ0 αυξάνει τον timer δίνει τον έλεγχο στο default task (συνάρτηση main()) μέσω call στον selector του default task (TSS_SEL) Υπάρχουν άλλα δύο tasks χρήστη: TASK1_SEL, entry_point = task1 TASK2_SEL, entry_point = task2

Σκοπός Υλοποίηση μίας main για το default task που θα έχει τον ρόλο του scheduler

Στόχος Πιο αναλυτικά Πρέπει να γράψουμε: μία συνάρτηση main που θα καλείται από την αρχικοποίηση του protected mode θα εκτελείται μέχρι τα active bits και των δύο διεργασιών χρήστη να γίνουν μηδέν θα εξετάζει ποιες από τις δύο διεργασίες (TASK1_TSS_SEL και TASK2_TSS_SEL) είναι ενεργές θα κάνει task ing ανάμεσα σε όσες διεργασίες είναι ενεργές

Δομή κώδικα Το κεντρικό μας αρχείο περιέχει μόνο τον κώδικα της εφαρμογής Τα υπόλοιπα βρίσκονται σε βοηθητικά αρχεία που κάνουμε include στο κεντρικό μας: macros.mac stdlib.asm gdt.asm idt.asm stdio_32bit.asm

Αρχείο macros.mac Περιέχει τις δηλώσεις των structs seg_descriptor: Περιγράφει τους descriptors task_state_seg: Περιγράφει τα TSS struc seg_descriptor limit0_15: resw 1 base0_15: resw 1 base16_23: resb 1 type_dpl: resb 1 limit16_19: resb 1 base24_31: resb 1 endstruc struc task_state_seg tss_back_link: resd 1 tss_esp0: resd 1... endstruc

Αρχείο macros.mac Όπως και στο προηγούμενο εργαστήριο: Δέσμευση και αρχικοποίηση - παράδειγμα: label: istruc struct_name at member_1, dw value... at member_n, db value iend Προσπέλαση - παράδειγμα: mov eax,[struct_variable + member_n]

Αρχείο stdlib.asm Περιέχει την αρχικοποίηση και τον τερματισμό του συστήματος Περιέχει το πέρασμα στο protected mode και την επιστροφή στο real mode Διεπαφή με τον κώδικά μας: Περνάμε στο stdlib.asm κάνοντας jump στην start, από την αρχή του αρχείου μας Το stdlib.asm δίνει τον έλεγχο σε μία protected mode συνάρτηση με το όνομα main

Αρχείο stdlib.asm Αλλαγές σε σχέση με το παρελθόν: Η αρχικοποίηση των base addresses των descriptors γίνεται με χρήση της συνάρτησης initialize_descriptor_base() Αρχικοποιούμε τα TSS των δύο tasks χρήστη με την συνάρτηση initialize_tss() Δίνουμε παραμετρικά: backlink, code selector, data selectors, stack selector, stack pointer, entry point

Αρχεία gdt.asm και idt.asm Περιέχουν τα descriptor tables και σχετικές μεταβλητές Αλλαγές: Έχουν δεσμευτεί TSS descriptors και stack descriptors για τα δύο tasks χρήστη

Αρχείο stdio_32bits.asm Περιέχει τις συναρτήσεις εκτύπωσης και καθαρισμού που υλοποιήσαμε στο προηγούμενο εργαστήριο Δεν χρησιμοποιούνται σε αυτό το εργαστήριο

Αρχείο PM_task_.asm Το κεντρικό μας αρχείο Περιέχει τον κώδικα της εφαρμογής μας Περιέχει τα includes των υπόλοιπων αρχείων

Αρχείο PM_task_.asm Δεδομένα: active1, active2: αρχικοποιούνται σε 1, μηδενίζονται στον τερματισμό του αντίστοιχου task timer: ο μετρητής των ticks του hardware timer BSS: Στοίβες για real mode και για κάθε ένα από τα protected mode tasks

Αρχείο PM_task_.asm Κώδικας: main() -> την γράφετε εσείς task1() -> γεμίζει την οθόνη με κόκκινα χαμόγελα από πάνω προς τα κάτω. To tss στο οποίο δείχνει ο TASK1_TSS_SEL, έχει eip αρχικοποιημένο σε task1 task2() -> γεμίζει την οθόνη με πράσινα χαμόγελα από κάτω προς τα πάνω. To tss στο οποίο δείχνει ο TASK2_TSS_SEL, έχει eip αρχικοποιημένο σε task2

Αρχείο PM_task_.asm ISR: unhand timer_isr Εξυπηρετεί μέσω interrupt gate το int 0x08h Αυξάνει την μεταβλητή timer Κάνει call στο TSS_SEL:0, δηλαδή task στο task του scheduler

Scheduler task 1 task 2 IRQ0 IRQ0 timer_isr main() call TSS_SEL:0 Πρέπει: def_task_busy_bit = 0 Μετά: taskx_busy_bit = 1 def_task_busy_bit = 1 def_task_nt = 1 def_task_backlink = taskx

Scheduler 1 ος Τρόπος task 1 task 2 IRQ0 IRQ0 timer_isr main() Πρέπει: taskx_busy_bit = 0 jmp taskx_tss_sel:0 Μετά: taskx_busy_bit = 1 taskx_nt = 0 def_task_busy_bit = 0 call TSS_SEL:0 Πρέπει: def_task_busy_bit = 0 Μετά: taskx_busy_bit = 1 def_task_busy_bit = 1 def_task_nt = 1 def_task_backlink = taskx

Scheduler 2 ος Τρόπος task 1 task 2 IRQ0 IRQ0 timer_isr main() Πρέπει: taskx_busy_bit = 0 call taskx_tss_sel:0 Μετά: taskx_busy_bit = 1 taskx_nt = 1 def_task_busy_bit = 1 call TSS_SEL:0 Πρέπει: def_task_busy_bit = 0 Μετά: taskx_busy_bit = 1 def_task_busy_bit = 1 def_task_nt = 1 def_task_backlink = taskx

Scheduler 3 ος Τρόπος task 1 task 2 IRQ0 IRQ0 timer_isr main() iret με def_task_backlink = taskx_tss_sel Πρέπει: taskx_busy_bit = 1 Μετά: taskx_busy_bit = 1 taskx_nt = 0 def_task_busy_bit = 0 def_task_nt = 0 call TSS_SEL:0 Πρέπει: def_task_busy_bit = 0 Μετά: taskx_busy_bit = 1 def_task_busy_bit = 1 def_task_nt = 1 def_task_backlink = taskx