Writing kernels for fun and profit

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

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

Μετάφραση ενός Προγράμματος Εξαιρέσεις

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

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

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

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

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

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πέτρος Παναγή Σελ. 1

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

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΟΡΓΑΝΩΣΗ Η/Υ

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

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

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

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

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

Data-Level Parallelism Linking & Loading

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

Chapter 2. Εντολές : Η γλώσσα του υπολογιστή. (συνέχεια) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L.

Modbus basic setup notes for IO-Link AL1xxx Master Block

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

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

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

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

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

8bit demo coding horror

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 13. Εξαιρέσεις και Διακοπές (Exceptions and Interrupts)

ΔΙΑΛΕΞΗ 8: ΕΙΚΟΝΙΚΗ (Virtual) ΜΝΗΜΗ

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

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

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

Προχωρηµένα Θέµατα Αρχιτεκτονικής

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

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

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 2 Οργάνωση μνήμης Καταχωρητές του MIPS Εντολές του MIPS 1

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Λειτουργικά Συστήματα Ι. Διαχείριση Μνήμης (Memory Management)

ΕΑΠ/ΠΛΗ22/ΑΘΗ.3 4 η ΟΣΣ 15/03/2014 Συμπληρωματικές Διαφάνειες

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

Εισαγωγή στην Πληροφορική

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

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

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Μελέτη των επεξεργαστών 32 bit της εταιρίας Microchip Technology και ανάπτυξη σειράς υποδειγµατικών εφαρµογών

Περίγραμμα. Μορφή εντολής SWI. Διακοπές Λογισμικού - SoftWare Interrupts (SWIs) Τι είναι τα SWI? Εξαιρέσεις και Διακοπές.

ΔΙΑΛΕΞΗ 8: ΕΙΚΟΝΙΚΗ (Virtual) ΜΝΗΜΗ

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

Εργαστήριο Αρ. 1. Εισαγωγή στην Αρχιτεκτονική MIPS. Πώς Δημιουργείτε ένα Executable Αρχείο

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

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

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

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

Εισαγωγή Βασικές εντολές Εκτέλεση βήµα-βήµα Εξέταση/Ανάθεση GDB-101. Νίκος Ντάρµος Τµήµα Πληροφορικής Πανεπιστήµιο Ιωαννίνων

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

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

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

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

Lab 1: C/C++ Pointers and time.h. Panayiotis Charalambous 1

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

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

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

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

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

LANGUAGE OF THE MACHINE. TEI Κρήτης, Τμ. ΕΠΠ, Αρχιτεκτονική Υπολογιστών. Οργάνωση Υπολογιστή. Τυπική οργάνωση υπολογιστή

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

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

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

ΠΡΟΛΟΓΟΣ... xxi ΣΗΜΕΙΩΣΗ ΠΡΟΣ ΤΟΝ ΔΙΔΑΣΚΟΝΤΑ... xxiv ΣΗΜΕΙΩΣΗ ΠΡΟΣ ΤΟΝ ΑΝΑΓΝΩΣΤΗ... xxv ΣΗΜΕΙΩΣΗ ΠΡΟΣ ΤΟΥΣ ΦΟΙΤΗΤΕΣ... xxv

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Πίνακας Συμβόλων

Περιγραφή και Έλεγχος ιεργασιών

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

File Management και I/O στο UNIX

Τελική Εξέταση, Απαντήσεις/Λύσεις

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

Σειρά Ασκήσεων 3: Προσπελάσεις Μνήµης στον MIPS

Οργάνωση και Σχεδίαση Υπολογιστών Η Διασύνδεση Υλικού και Λογισμικού, 4 η έκδοση. Σύντομη Εισαγωγή στη χρήση του προσομοιωτή και συμβολομεταφραστή

Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο

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

Transcript:

Writing kernels for fun and profit Γιάννης Τσιομπίκας nuclear@memberfsforg 23 Μαρτίου 2011

Γιατί; It s FUN! Εξοικείωση με το hardware Εμβάθυνση στον θαυμαστό κόσμο των λειτουργικών συστημάτων Μια καλή δικαιολογία να γράψουμε assembly (FUN!!!) Post-apocalyptic computing syndrom

Πώς; Πλατφόρμα IBM PC-συμβατοί με 32bit intel CPU (80386 και άνω) Εργαλεία GNU C compiler GNU binutils (assembler, linker, etc) GNU make GNU debugger GNU GRUB (legacy) QEMU

Booting Η εκτέλεση ξεκινάει από την ROM (BIOS) σε 16 bit real mode BIOS Φορτώνει το πρώτο sector (512 bytes) στην διεύθυνση 7c00 jump στην διεύθυνση 7c00 Boot Loader Φορτώνει τον kernel στην μνήμη Ενεργοποιεί το A20 line Βάζει τον επεξεργαστή σε protected mode jump στο entry point του kernel

Booting Η εκτέλεση ξεκινάει από την ROM (BIOS) σε 16 bit real mode BIOS Φορτώνει το πρώτο sector (512 bytes) στην διεύθυνση 7c00 jump στην διεύθυνση 7c00 Boot Loader Φορτώνει τον kernel στην μνήμη Ενεργοποιεί το A20 line Βάζει τον επεξεργαστή σε protected mode jump στο entry point του kernel

Booting Η εκτέλεση ξεκινάει από την ROM (BIOS) σε 16 bit real mode BIOS Φορτώνει το πρώτο sector (512 bytes) στην διεύθυνση 7c00 jump στην διεύθυνση 7c00 Boot Loader Φορτώνει τον kernel στην μνήμη Ενεργοποιεί το A20 line Βάζει τον επεξεργαστή σε protected mode jump στο entry point του kernel

Multiboot Multiboot header: offset μέγεθος πεδίο 0 4 magic identifier 4 4 flags 8 4 checksum 12 4 header address 16 4 load address 20 4 load end address 24 4 bss end address 28 4 entry address 32 4 video mode type 36 4 video mode width 40 4 video mode height 44 4 video mode color depth

Multiboot code # define MAGIC 0 x1badb002 # define FLAGS 0 align 4 /* multiboot header */ long MAGIC long FLAGS long -( MAGIC + FLAGS ) /* checksum */

Entry code # define STACK_ SIZE 0 x4000 text globl kentry kentry : /* setup a temporary kernel stack */ movl $( stack + STACK_ SIZE ), % esp /* reset eflags */ pushl $0 popf /* call the kernel main function */ call kmain /* dropped out of main, halt the CPU */ cli hlt /* space for the temporary kernel stack */ comm stack, STACK_ SIZE

Text output VGA text mode video memory: b8000

Text output - call graph

x86 memory model Segments ορίζονται από 8-byte descriptors στον GDT (ή LDT) Λογικές διευθύνσεις αποτελούμενες από segment και offset Segment selector registers επιλέγουν ποιο segment χρησιμοποιείται σε κάθε περίπτωση Προαιρετικό paging με page tables 2 επιπέδων

Paging Virtual address translation Τα 10 ανώτερα bits [22, 31] είναι index στο page directory (διαλέγουν page table) Τα επόμενα 10 bits [12, 21] είναι index στο επιλεγμένο page table (διαλέγουν page) Τα κατώτερα 12 bits είναι το offset μέσα στο page

Interrupts Τύποι interrupts Hardware interrupts Software interrupts Exceptions

Exceptions # name type error code 0 divide error fault no 1 debug trap/fault no 2 NMI N/A N/A 3 breakpoint trap no 4 overflow trap no 5 bound range exceeded fault no 6 invalid opcode fault no 7 device not available fault no 8 double fault abort 0 9 co-proc segment overrun abort no 10 invalid TSS fault selector 11 segment not present fault selector 12 stack fault fault selector or 0 13 general protection fault selector or 0 14 page fault fault special flags 15 reserved N/A N/A 16 floating point fault no 17 alignment check fault EXT bit 18 machine check abort no 19 SIMD floating point fault no Τα interrupts 0 έως 31 είναι reserved για CPU exceptions

Hardware interrupts static void init_pic ( int offset ) { /* send ICW1 saying we ll follow with ICW4 later on */ outb ( ICW1_INIT ICW1_ICW4_NEEDED, PIC1_CMD ); outb ( ICW1_INIT ICW1_ICW4_NEEDED, PIC2_CMD ); /* send ICW2 with IRQ remapping */ outb ( offset, PIC1_DATA ); outb ( offset + 8, PIC2_DATA ); /* send ICW3 to setup the master / slave rel */ /* set bit3 = 3 rd int pin cascaded */ outb (4, PIC1_DATA ); /* set slave ID to 2 */ outb (2, PIC2_DATA ); /* send ICW4 to set 8086 mode ( no calls ) */ outb ( ICW4_8086, PIC1_DATA ); outb ( ICW4_8086, PIC2_DATA ); } /* done, reset the data port to 0 */ outb (0, PIC1_DATA ); outb (0, PIC2_DATA );

Hardware interrupts static void init_pic ( int offset ) { /* send ICW1 saying we ll follow with ICW4 later on */ outb ( ICW1_INIT ICW1_ICW4_NEEDED, PIC1_CMD ); outb ( ICW1_INIT ICW1_ICW4_NEEDED, PIC2_CMD ); /* send ICW2 with IRQ remapping */ outb ( offset, PIC1_DATA ); outb ( offset + 8, PIC2_DATA ); /* send ICW3 to setup the master / slave rel */ /* set bit3 = 3 rd int pin cascaded */ outb (4, PIC1_DATA ); /* set slave ID to 2 */ outb (2, PIC2_DATA ); /* send ICW4 to set 8086 mode ( no calls ) */ outb ( ICW4_8086, PIC1_DATA ); outb ( ICW4_8086, PIC2_DATA ); } /* done, reset the data port to 0 */ outb (0, PIC1_DATA ); outb (0, PIC2_DATA );

Επόμενα βήματα; Διαχείριση μνήμης (kernel malloc) Processes ATA driver & filesystem Διάφορα: tty, timers, rtc

THE END Ερωτήσεις; Links http://nuclearsdf-euorg/articles/kerneldev http://codelabwordpresscom http://wwwlinuxinsidegr IRC: #osdev στο GRnet