Πώς να δημιουργήσετε μόνοι σας ένα λειτουργικό σύστημα. Πώς να γράψετε ένα λειτουργικό σύστημα από την αρχή. Λειτουργία - χειριστής διακοπής πληκτρολογίου

Τι πρέπει να γνωρίζετε για να γράψετε ένα λειτουργικό σύστημα

Η δημιουργία ενός λειτουργικού συστήματος είναι μια από τις πιο δύσκολες εργασίες στον προγραμματισμό γιατί απαιτεί εκτεταμένη και πολύπλοκη γνώση σχετικά με τον τρόπο λειτουργίας ενός υπολογιστή. Ποια από όλα? Ας μάθουμε παρακάτω.

Τι είναι το OS

Ένα λειτουργικό σύστημα (OS) είναι λογισμικό που λειτουργεί με το υλικό του υπολογιστή και τους πόρους του και είναι μια γέφυρα μεταξύ του υλικού και του λογισμικού ενός υπολογιστή.

Οι υπολογιστές πρώτης γενιάς δεν είχαν λειτουργικά συστήματα. Τα προγράμματα στους πρώτους υπολογιστές περιλάμβαναν κώδικα για την άμεση λειτουργία του συστήματος, επικοινωνία με περιφερειακές συσκευές και υπολογισμούς, για τους οποίους γράφτηκε αυτό το πρόγραμμα. Εξαιτίας αυτής της κατάστασης, ακόμη και προγράμματα που ήταν απλά στη λογική ήταν δύσκολο να εφαρμοστούν σε λογισμικό.

Καθώς οι υπολογιστές γίνονταν πιο διαφορετικοί και περίπλοκοι, η συγγραφή προγραμμάτων που λειτουργούσαν τόσο ως λειτουργικό σύστημα όσο και ως εφαρμογή έγινε απλώς άβολη. Ως εκ τούτου, για να διευκολύνουν τη συγγραφή προγραμμάτων, οι ιδιοκτήτες υπολογιστών άρχισαν να αναπτύσσουν λογισμικό. Έτσι εμφανίστηκαν τα λειτουργικά συστήματα.

Το λειτουργικό σύστημα παρέχει όλα τα απαραίτητα για την εκτέλεση των προγραμμάτων των χρηστών. Η εμφάνισή τους σήμαινε ότι τα προγράμματα δεν χρειάζονταν πλέον να ελέγχουν ολόκληρο τον όγκο της εργασίας στον υπολογιστή (αυτό είναι ένα εξαιρετικό παράδειγμα ενθυλάκωσης). Τώρα τα προγράμματα χρειάζονταν να δουλεύουν ειδικά με το λειτουργικό σύστημα και το ίδιο το σύστημα φρόντιζε τους πόρους και την εργασία με περιφερειακά (πληκτρολόγιο, εκτυπωτής).

Σύντομη ιστορία των λειτουργικών συστημάτων

Γλώσσα Γ

Όπως αναφέρθηκε παραπάνω, υπάρχουν πολλές γλώσσες προγραμματισμού υψηλού επιπέδου για τη σύνταξη ενός λειτουργικού συστήματος. Ωστόσο, το πιο δημοφιλές από αυτά είναι το C.

Μπορείτε να ξεκινήσετε να μαθαίνετε αυτή τη γλώσσα από εδώ. Αυτός ο πόρος θα σας μυήσει σε βασικές έννοιες και θα σας προετοιμάσει για πιο προχωρημένες εργασίες.

«Learn C the Hard Way» είναι ο τίτλος ενός άλλου βιβλίου. Εκτός από τη συνηθισμένη θεωρία, περιέχει πολλές πρακτικές λύσεις. Αυτό το σεμινάριο θα καλύψει όλες τις πτυχές της γλώσσας.

Ή μπορείτε να επιλέξετε ένα από αυτά τα βιβλία:

  • "The C Programming Language" των Kernighan και Ritchie.
  • "C Programming Absolute Beginner's Guide" των Parry και Miller.

Ανάπτυξη ΛΣ

Αφού καταλάβετε όλα όσα χρειάζεται να γνωρίζετε σχετικά με την επιστήμη των υπολογιστών, τη γλώσσα assembly και τη C, θα πρέπει να διαβάσετε τουλάχιστον ένα ή δύο βιβλία σχετικά με την πραγματική ανάπτυξη του λειτουργικού συστήματος. Ακολουθούν μερικοί πόροι για αυτό:

"Linux από το μηδέν". Η διαδικασία συναρμολόγησης του λειτουργικού συστήματος Linux συζητείται εδώ (το εγχειρίδιο έχει μεταφραστεί σε πολλές γλώσσες, συμπεριλαμβανομένων των ρωσικών). Εδώ, όπως και σε άλλα σχολικά βιβλία, θα σας παρέχονται όλες οι απαραίτητες βασικές γνώσεις. Βασιζόμενοι σε αυτά, μπορείτε να δοκιμάσετε τις δυνάμεις σας στη δημιουργία ενός λειτουργικού συστήματος. Για να γίνει το λογισμικό μέρος του λειτουργικού συστήματος πιο επαγγελματικό, υπάρχουν προσθήκες στο σχολικό βιβλίο:

Οδηγός για τη δημιουργία πυρήνα για σύστημα x86. Μέρος 1. Μόνο ο πυρήνας

Ας γράψουμε έναν απλό πυρήνα που μπορεί να εκκινηθεί χρησιμοποιώντας τον φορτωτή εκκίνησης GRUB σε ένα σύστημα x86. Αυτός ο πυρήνας θα εμφανίσει ένα μήνυμα στην οθόνη και θα περιμένει.

Πώς εκκινείται ένα σύστημα x86;

Πριν ξεκινήσουμε να γράφουμε τον πυρήνα, ας καταλάβουμε πώς το σύστημα εκκινεί και μεταφέρει τον έλεγχο στον πυρήνα.

Οι περισσότεροι καταχωρητές επεξεργαστών περιέχουν ήδη ορισμένες τιμές κατά την εκκίνηση. Ο καταχωρητής που δείχνει τη διεύθυνση των εντολών (Instruction Pointer, EIP) αποθηκεύει τη διεύθυνση μνήμης όπου βρίσκεται η εντολή που εκτελείται από τον επεξεργαστή. Το προεπιλεγμένο EIP είναι 0xFFFFFFFFFF0. Έτσι, οι επεξεργαστές x86 σε επίπεδο υλικού αρχίζουν να λειτουργούν στη διεύθυνση 0xFFFFFFFF0. Αυτά είναι στην πραγματικότητα τα τελευταία 16 byte του χώρου διευθύνσεων 32-bit. Αυτή η διεύθυνση ονομάζεται διάνυσμα επαναφοράς.

Τώρα ο χάρτης μνήμης chipset διασφαλίζει ότι το 0xFFFFFFFF0 ανήκει σε ένα συγκεκριμένο τμήμα του BIOS, όχι σε RAM. Αυτή τη στιγμή, το BIOS αντιγράφεται στη μνήμη RAM για ταχύτερη πρόσβαση. Η διεύθυνση 0xFFFFFFFF0 θα περιέχει μόνο μια εντολή για μετάβαση στη διεύθυνση στη μνήμη όπου είναι αποθηκευμένο ένα αντίγραφο του BIOS.

Έτσι αρχίζει να εκτελείται ο κώδικας του BIOS. Το BIOS αρχικά αναζητά μια συσκευή που μπορεί να εκκινήσει από, με προκαθορισμένη σειρά. Αναζητείται ένας μαγικός αριθμός για να καθοριστεί εάν η συσκευή είναι εκκινήσιμη (το 511ο και το 512ο byte του πρώτου τομέα πρέπει να είναι ίσα με 0xAA55).

Όταν το BIOS βρει μια συσκευή εκκίνησης, αντιγράφει τα περιεχόμενα του πρώτου τομέα της συσκευής στη μνήμη RAM, ξεκινώντας από τη φυσική διεύθυνση 0x7c00; μετά πηγαίνει στη διεύθυνση και εκτελεί τον ληφθέν κώδικα. Αυτός ο κωδικός ονομάζεται bootloader.

Ο bootloader φορτώνει τον πυρήνα σε μια φυσική διεύθυνση 0x100000. Αυτή η διεύθυνση χρησιμοποιείται ως αρχική διεύθυνση σε όλους τους μεγάλους πυρήνες σε συστήματα x86.

Όλοι οι επεξεργαστές x86 ξεκινούν σε μια απλή λειτουργία 16-bit που ονομάζεται πραγματική λειτουργία. Ο bootloader GRUB αλλάζει τη λειτουργία σε 32-bit προστατευμένη λειτουργία, ορίζοντας το χαμηλό bit του καταχωρητή CR0 σε 1 . Έτσι, ο πυρήνας φορτώνεται σε προστατευμένη λειτουργία 32-bit.

Σημειώστε ότι στην περίπτωση του πυρήνα Linux, το GRUB βλέπει τα πρωτόκολλα εκκίνησης του Linux και εκκινεί τον πυρήνα σε πραγματική λειτουργία. Ο πυρήνας μεταβαίνει αυτόματα σε προστατευμένη λειτουργία.

Τι χρειαζόμαστε?

  • x86 υπολογιστής;
  • Linux;
  • ld (GNU Linker);

Ρύθμιση του σημείου εισόδου στο assembler

Ανεξάρτητα από το πόσο θα θέλατε να περιοριστείτε μόνο στο C, θα πρέπει να γράψετε κάτι στο assembler. Θα γράψουμε πάνω του ένα μικρό αρχείο που θα χρησιμεύσει ως αφετηρία για τον πυρήνα μας. Το μόνο που θα κάνει είναι να καλέσει μια εξωτερική συνάρτηση γραμμένη σε C και να σταματήσει τη ροή του προγράμματος.

Πώς μπορούμε να βεβαιωθούμε ότι αυτός ο κωδικός είναι το σημείο εκκίνησης;

Θα χρησιμοποιήσουμε ένα σενάριο σύνδεσης που συνδέει αρχεία αντικειμένων για να δημιουργήσουμε το τελικό εκτελέσιμο αρχείο. Σε αυτό το σενάριο θα υποδείξουμε ρητά ότι θέλουμε να φορτώσουμε δεδομένα στη διεύθυνση 0x100000.

Εδώ είναι ο κωδικός assembler:

;;kernel.asm bits 32 ;nasm directive - 32 bit section .text global start extern kmain ;kmain ορίζεται στο c file start: cli ;block interrupts mov esp, stack_space ;set stack pointer call kmain hlt ;διακοπή της ενότητας CPU .bss resb 8192 ;8KB για stack stack_space:

Η πρώτη οδηγία, bits 32, δεν είναι μια εντολή συναρμολόγησης x86. Αυτή είναι μια οδηγία προς τη συναρμολόγηση NASM που καθορίζει τη δημιουργία κώδικα για έναν επεξεργαστή που λειτουργεί σε λειτουργία 32-bit. Στην περίπτωσή μας αυτό δεν είναι απαραίτητο, αλλά γενικά χρήσιμο.

Η ενότητα με τον κωδικό ξεκινά στη δεύτερη γραμμή.

παγκόσμια είναι μια άλλη οδηγία NASM που καθιστά τα σύμβολα πηγαίου κώδικα παγκόσμια. Με αυτόν τον τρόπο ο σύνδεσμος γνωρίζει πού βρίσκεται το σύμβολο έναρξης - το σημείο εισόδου μας.

Το kmain είναι μια συνάρτηση που θα οριστεί στο αρχείο kernel.c. extern σημαίνει ότι η συνάρτηση δηλώνεται κάπου αλλού.

Μετά έρχεται η συνάρτηση start, η οποία καλεί τη συνάρτηση kmain και σταματά τον επεξεργαστή με την εντολή hlt. Αυτός είναι ο λόγος για τον οποίο απενεργοποιούμε τις διακοπές εκ των προτέρων χρησιμοποιώντας την οδηγία cli.

Στην ιδανική περίπτωση, πρέπει να εκχωρήσουμε λίγη μνήμη και να την δείξουμε με έναν δείκτη στοίβας (esp). Ωστόσο, φαίνεται ότι το GRUB το έχει ήδη κάνει αυτό για εμάς. Ωστόσο, θα εξακολουθείτε να εκχωρείτε λίγο χώρο στην ενότητα BSS και να μετακινείτε τον δείκτη στοίβας στην αρχή του. Χρησιμοποιούμε την εντολή resb, η οποία διατηρεί τον καθορισμένο αριθμό byte. Αμέσως πριν καλέσετε το kmain, ο δείκτης στοίβας (esp) ρυθμίζεται στη σωστή θέση με την εντολή mov.

Ο πυρήνας στο C

Στο kernel.asm κάναμε μια κλήση στη συνάρτηση kmain(). Έτσι, ο κώδικας "C" μας θα πρέπει να ξεκινήσει την εκτέλεση με kmain():

/* * kernel.c */ void kmain(void) ( const char *str = "ο πρώτος μου πυρήνας"; char *vidptr = (char*)0xb8000; //video mem ξεκινά εδώ. unsigned int i = 0; unsigned int j = 0; /* αυτός ο βρόχος καθαρίζει την οθόνη * υπάρχουν 25 γραμμές κάθε μία από 80 στήλες· κάθε στοιχείο παίρνει 2 byte */ ενώ(j< 80 * 25 * 2) { /* blank character */ vidptr[j] = " "; /* attribute-byte - light grey on black screen */ vidptr = 0x07; j = j + 2; } j = 0; /* this loop writes the string to video memory */ while(str[j] != "\0") { /* the character"s ascii */ vidptr[i] = str[j]; /* attribute-byte: give character black bg and light grey fg */ vidptr = 0x07; ++j; i = i + 2; } return; }

Το μόνο που θα κάνει ο πυρήνας μας είναι να καθαρίσει την οθόνη και να εμφανίσει τη γραμμή "ο πρώτος μου πυρήνας".

Πρώτα δημιουργούμε έναν δείκτη vidptr που δείχνει τη διεύθυνση 0xb8000. Σε προστατευμένη λειτουργία, η "μνήμη βίντεο" ξεκινά από αυτήν τη διεύθυνση. Για να εμφανίσουμε κείμενο στην οθόνη, δεσμεύουμε 25 γραμμές των 80 χαρακτήρων ASCII, ξεκινώντας από 0xb8000.

Κάθε χαρακτήρας δεν εμφανίζεται με τα συνηθισμένα 8 bit, αλλά με 16. Το πρώτο byte αποθηκεύει τον ίδιο τον χαρακτήρα και το δεύτερο - χαρακτηριστικό-byte . Περιγράφει τη μορφοποίηση του χαρακτήρα, όπως το χρώμα του.

Για να εμφανίσουμε τον πράσινο χαρακτήρα s σε μαύρο φόντο, γράφουμε αυτόν τον χαρακτήρα στο πρώτο byte και την τιμή 0x02 στο δεύτερο. Το 0 σημαίνει μαύρο φόντο, το 2 σημαίνει πράσινο χρώμα κειμένου.

Εδώ είναι το χρωματολόγιο:

0 - Μαύρο, 1 - Μπλε, 2 - Πράσινο, 3 - Κυανό, 4 - Κόκκινο, 5 - Ματζέντα, 6 - Καφέ, 7 - Ανοιχτό Γκρι, 8 - Σκούρο Γκρι, 9 - Ανοιχτό Μπλε, 10/a - Ανοιχτό πράσινο, 11/b - Ανοιχτό Κυανό, 12/c - Ανοιχτό Κόκκινο, 13/d - Ανοιχτό Ματζέντα, 14/e - Ανοιχτό Καφέ, 15/f - Λευκό.

Στον πυρήνα μας θα χρησιμοποιήσουμε ανοιχτό γκρι κείμενο σε μαύρο φόντο, οπότε το byte του χαρακτηριστικού μας θα έχει την τιμή 0x07.

Στον πρώτο βρόχο, το πρόγραμμα εκτυπώνει ένα κενό σύμβολο σε ολόκληρη τη ζώνη 80x25. Αυτό θα καθαρίσει την οθόνη. Στον επόμενο κύκλο, χαρακτήρες από τη συμβολοσειρά με μηδενικό τερματισμό "ο πρώτος μου πυρήνας" με ένα byte χαρακτηριστικού ίσο με 0x07 εγγράφονται στη "μνήμη βίντεο". Αυτό θα εκτυπώσει τη συμβολοσειρά στην οθόνη.

Συνδετικό μέρος

Πρέπει να συναρμολογήσουμε το kernel.asm σε ένα αρχείο αντικειμένου χρησιμοποιώντας το NASM. στη συνέχεια χρησιμοποιήστε το GCC για να μεταγλωττίσετε το kernel.c σε άλλο αρχείο αντικειμένου. Στη συνέχεια, πρέπει να συνδεθούν στον πυρήνα της εκτελέσιμης εκκίνησης.

Για να γίνει αυτό, θα χρησιμοποιήσουμε ένα δεσμευτικό σενάριο, το οποίο μεταβιβάζεται στο ld ως όρισμα.

/* * link.ld */ OUTPUT_FORMAT(elf32-i386) ENTRY(start) SECTIONS ( . = 0x100000; .text: ( *(.text) ) .data: ( *(.data) ) .bss: ( *( .bss) ) )

Πρώτα θα ρωτήσουμε Μορφή εξόδουως 32-bit εκτελέσιμη και συνδεόμενη μορφή (ELF). Το ELF είναι μια τυπική μορφή δυαδικού αρχείου για συστήματα Unix x86. ΕΙΣΟΔΟΣπαίρνει ένα όρισμα που καθορίζει το όνομα του συμβόλου που είναι το σημείο εισόδου. ΕΝΟΤΗΤΕΣ- αυτό είναι το πιο σημαντικό μέρος. Καθορίζει τη σήμανση του εκτελέσιμου αρχείου μας. Καθορίζουμε πώς πρέπει να συνδεθούν τα διάφορα τμήματα και πού να τα τοποθετήσουμε.

Σε παρένθεση μετά από SECTIONS, η τελεία (.) εμφανίζει τον μετρητή θέσης, ο οποίος είναι προεπιλεγμένος σε 0x0. Μπορεί να αλλάξει, αυτό που κάνουμε.

Ας δούμε την παρακάτω γραμμή: .text: ( *(.text) ) . Ο αστερίσκος (*) είναι ένας ειδικός χαρακτήρας που ταιριάζει με οποιοδήποτε όνομα αρχείου. Η έκφραση *(.text) σημαίνει όλες τις ενότητες .text από όλα τα αρχεία εισόδου.

Έτσι, ο σύνδεσμος ενώνει όλα τα τμήματα κώδικα των αρχείων αντικειμένων σε ένα τμήμα του εκτελέσιμου αρχείου στη διεύθυνση στον μετρητή θέσης (0x100000). Μετά από αυτό, η τιμή του μετρητή θα είναι ίση με 0x100000 + το μέγεθος του τμήματος που προκύπτει.

Το ίδιο συμβαίνει και με άλλα τμήματα.

Grub και Multiboot

Τώρα όλα τα αρχεία είναι έτοιμα για τη δημιουργία του πυρήνα. Μένει όμως ένα ακόμη βήμα.

Υπάρχει ένα πρότυπο για τη φόρτωση πυρήνων x86 με χρήση ενός bootloader που ονομάζεται Προδιαγραφές πολλαπλής εκκίνησης. Το GRUB θα εκκινήσει τον πυρήνα μας μόνο εάν πληροί αυτές τις προδιαγραφές.

Μετά από αυτά, ο πυρήνας θα πρέπει να περιέχει μια κεφαλίδα στα πρώτα 8 kilobyte του. Επιπλέον, αυτή η κεφαλίδα πρέπει να περιέχει 3 πεδία, τα οποία είναι 4 byte:

  • μαγικόςπεδίο: περιέχει μαγικό αριθμό 0x1BADB002να προσδιορίσει τον πυρήνα.
  • πεδίο σημαίες: δεν το χρειαζόμαστε, ας το μηδενίσουμε.
  • πεδίο άθροισμα ελέγχου: αν το προσθέσετε με τα δύο προηγούμενα, θα πρέπει να πάρετε μηδέν.

Το kernel.asm μας θα μοιάζει με αυτό:

;;kernel.asm ;nasm directive - 32 bit bit 32 section .text ;multiboot spec align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;check. Το m+f+c θα πρέπει να είναι μηδέν καθολική εκκίνηση extern kmain ;kmain ορίζεται στο αρχείο c start: cli ;block interrupts mov esp, stack_space ;set stack pointer call kmain hlt ;stop the CPU section .bss resb 8192 ;8KB for stack stack_space:

Χτίζοντας τον πυρήνα

Τώρα θα δημιουργήσουμε αρχεία αντικειμένων από τα kernel.asm και kernel.c και θα τα συνδέσουμε χρησιμοποιώντας το σενάριό μας.

Nasm -f elf32 kernel.asm -o kasm.o

Αυτή η γραμμή θα εκτελέσει το assembler για να δημιουργήσει το αρχείο αντικειμένου kasm.o σε μορφή ELF-32.

Gcc -m32 -c πυρήνας.c -o kc.o

Η επιλογή "-c" διασφαλίζει ότι δεν εμφανίζεται κρυφή σύνδεση μετά τη μεταγλώττιση.

Ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o

Αυτό θα τρέξει το σύνδεσμο με το σενάριο μας και θα δημιουργήσει ένα εκτελέσιμο που ονομάζεται πυρήνας.

Ρύθμιση του grub και εκκίνηση του πυρήνα

Το GRUB απαιτεί το όνομα του πυρήνα για να ικανοποιεί το μοτίβο πυρήνα- . Μετονομάστε λοιπόν τον πυρήνα. Ονόμασα τον πυρήνα μου-701.

Τώρα βάλτε το στον κατάλογο /μπότα. Για να το κάνετε αυτό θα χρειαστείτε δικαιώματα υπερχρήστη.

Στο αρχείο διαμόρφωσης GRUB grub.cfg, προσθέστε τα εξής:

Τίτλος myKernel root (hd0,0) kernel /boot/kernel-701 ro

Μην ξεχάσετε να αφαιρέσετε την οδηγία του κρυφού μενού εάν υπάρχει.

Κάντε επανεκκίνηση του υπολογιστή σας και θα δείτε μια λίστα με πυρήνες συμπεριλαμβανομένου του δικού σας. Επιλέξτε το και θα δείτε:

Αυτός είναι ο πυρήνας σας! Ας προσθέσουμε ένα σύστημα εισόδου/εξόδου.

ΥΣΤΕΡΟΓΡΑΦΟ.

  • Για τυχόν κόλπα πυρήνα, είναι καλύτερο να χρησιμοποιήσετε μια εικονική μηχανή.
  • Για να τρέξετε τον πυρήνα μέσα grub2το config πρέπει να μοιάζει με αυτό: menuentry "kernel 7001" ( set root="hd0,msdos1" multiboot /boot/kernel-7001 ro )
  • εάν θέλετε να χρησιμοποιήσετε τον εξομοιωτή qemu, χρησιμοποιήστε: qemu-system-i386 -kernel kernel

Η συντομογραφία "NT" σημαίνει "Νέες Τεχνολογίες" στο μάρκετινγκ, αλλά στην τεκμηρίωση του έργου σήμαινε κάτι εντελώς διαφορετικό. Το γεγονός είναι ότι τα Windows NT αναπτύχθηκαν για τον νέο επεξεργαστή Intel i860, ο οποίος δεν είχε κυκλοφορήσει ακόμη το 1988. Η κωδική του ονομασία ήταν "N10" ( Ν Τ en).

Η πρώτη έκδοση, τα Windows NT 3.1, κυκλοφόρησε 5 χρόνια αργότερα, το 1993. Σε αυτό το σημείο, η ομάδα είχε ήδη 250 προγραμματιστές.

Windows σήμερα

  • 1 δισεκατομμύριο χρήστες
  • 140 εκατομμύρια γραμμές κώδικα (συμπεριλαμβανομένου του κωδικού δοκιμής και των οργάνων)
    Ο κώδικας των Windows είναι πολύ διαφορετικός. Κάποια μέρη γράφτηκαν πριν από 20 χρόνια, μερικά εμφανίστηκαν μόνο στην τρέχουσα έκδοση. Για παράδειγμα, ο κώδικας Web Services on Devices (WSD) στα Windows Vista υπάρχει στην πρώτη του έκδοση, ο κώδικας GDI βρίσκεται στα τελικά στάδια της ανάπτυξής του και παραμένει σχεδόν αμετάβλητος, ο κώδικας DirectX έχει ήδη αναπτυχθεί καλά, αλλά αλλάζει ενεργά στο τον παρόντα χρόνο.
  • 8000 προγραμματιστές
  • 36 γλώσσες εντοπισμού
  • 20 χρόνια ανάπτυξης

Ανάπτυξη Windows

Πριν από 20-30 χρόνια χρησιμοποιήθηκε μόνο μία μεθοδολογία προγραμματισμού, το «Waterfall». Είναι μια σειρά:

Προδιαγραφές → Σχεδιασμός → Υλοποίηση → Δοκιμή → Παράδοση.

Αλλά αυτή η μεθοδολογία λειτουργεί μόνο για μικρά έργα. Για ένα προϊόν όπως τα Windows σήμερα, χρειάζονται διαφορετικές μεθοδολογίες:

  • Μοντέλο κύκλου προϊόντος
  • Διαδικασία λογισμικού ομάδας
  • "Ακραίος Προγραμματισμός"

Όλες αυτές οι μεθοδολογίες έχουν τόσο πλεονεκτήματα όσο και μειονεκτήματα. Ανάλογα με το μέγεθος της ομάδας και το στάδιο ανάπτυξης του στοιχείου, διαφορετικές ομάδες ανάπτυξης των Windows χρησιμοποιούν διαφορετικές μεθοδολογίες ανάπτυξης.
Για τα Windows, ως σύνολο προϊόντος, χρησιμοποιείται το μοντέλο κύκλου προϊόντος:

  • Περίοδοι 3-4 μηνών
  • Μέσα στην περίοδο - "καταρράκτης"

Η μεγαλύτερη πρόκληση για την ανάπτυξη ενός προϊόντος αυτής της κλίμακας είναι ότι η ανάπτυξη απαιτεί χρόνο. Στο αρχικό στάδιο, επιλύονται εκείνα τα προβλήματα που υπάρχουν στην τρέχουσα στιγμή και χρησιμοποιώντας υπάρχοντα μέσα. Το μόνο όμως που είναι σταθερό είναι ότι όλα θα αλλάξουν. Με τα χρόνια ανάπτυξης:

  • Οι απαιτήσεις θα αλλάξουν
  • Οι ευκαιρίες θα αλλάξουν
  • Το πρόγραμμα εργασίας θα αλλάξει
  • Το έργο θα αλλάξει
  • Οι χρήστες θα αλλάξουν

Παρά το γεγονός ότι διαφορετικές ομάδες αναπτύσσονται διαφορετικά, υπάρχουν «καθολικοί» κανόνες:

  • Κυκλοφορία ενδιάμεσων εκδόσεων (ορόσημα, beta, CTP) για τις μάζες των δοκιμαστών
  • Αποδέσμευση εσωτερικών συγκροτημάτων με σύντομους κύκλους (1 ημέρα)
  • Απλότητα και αξιοπιστία σχεδιασμού
  • Κριτικές προσωπικών και ομαδικών κωδικών
  • Δοκιμές μονάδων
  • Δοκιμές επαλήθευσης κατασκευής
  • Οποιαδήποτε ενδιάμεση συναρμολόγηση πρέπει να είναι υψηλής ποιότητας (αυτό που γράφεται πρέπει να λειτουργεί)

Θα ήθελα να σημειώσω μόνος μου ότι μετά από ένα μήνα εργασίας με το Windows 7 build 6801 ως το κύριο λειτουργικό σύστημα στον οικιακό μου υπολογιστή, σχημάτισα μια θετική εντύπωση για αυτήν την έκδοση.

Ολόκληρη η διαδικασία ανάπτυξης των Windows βασίζεται στην καθημερινή κατασκευή:

  • Αυτός είναι ο παλμός του προϊόντος
  • Η ανάπτυξη δεν σταματά ποτέ
  • Καθημερινή αυτόματη δοκιμή
  • Ένταξη σε πρώιμο στάδιο
  • Ευθύνη προγραμματιστή
  • Προφανής κατάσταση του προϊόντος

Μια φορά κι έναν καιρό, υπήρχε μόνο ένας κλάδος πηγαίου κώδικα και όλοι οι προγραμματιστές έκαναν αλλαγές απευθείας σε αυτό. Τώρα η ομάδα ανάπτυξης είναι τόσο μεγάλη που δεν λειτουργεί. Υποστηρίζονται πολλά υποκαταστήματα, μεταξύ των οποίων υπάρχει το κύριο - WinMain. Κάθε εργαστήριο έχει τον δικό του κλάδο τοπικής ανάπτυξης στον οποίο ενσωματώνονται οι αλλαγές. Οι δοκιμασμένες αλλαγές ενσωματώνονται τελικά στο WinMain.

Ημερήσιος κύκλος ανάπτυξης:

  • 15:00 - Εγκρίθηκαν αλλαγές για ενσωμάτωση στο σύστημα ελέγχου πηγαίου κώδικα
  • Δημιουργία 6 εκδόσεων (Δωρεάν/Ελεγμένο - x86, x64, IA64)
  • 18:00 - Νέες εκδόσεις είναι διαθέσιμες για δοκιμή
  • Η νέα έκδοση είναι εγκατεστημένη σε αρκετές χιλιάδες σταθμούς εργασίας και διακομιστές για δοκιμή
  • Αυτοματοποιημένο stress test
  • 05:00 - Αναλύονται οι αναφορές δοκιμών, διαγιγνώσκονται βλάβες
  • 09:00 - Οι συνοπτικές αναφορές αποστέλλονται αυτόματα στις ομάδες
  • 09:30 - Συγκεντρωτική συνάντηση αρχηγών ομάδων για τον καθορισμό στόχων

Όλοι οι συμμετέχοντες στο έργο, συμπεριλαμβανομένων των πιο ανώτερων στελεχών, χρησιμοποιούν ενδιάμεσες εκδόσεις στους υπολογιστές εργασίας τους (και συνήθως στο σπίτι).

Σε τι είναι γραμμένα τα Windows;

  • C, C++, C#, Assembly (x86, x64, IA64)
    Οι συναρμολογητές χρησιμοποιούνται σε σχετικά περιορισμένο βαθμό σε καταστάσεις όπου δεν μπορούν να αποφευχθούν.
  • Visual Studio, Source Insight, build, nmake
  • Source Depot - σύστημα ελέγχου πηγών
  • WinDbg, KD, NTSD - προγράμματα εντοπισμού σφαλμάτων

Πολλά εσωτερικά εργαλεία, όπως το build, μπορούν να ληφθούν από τη microsoft.com/whdc/devtools.

Αλλαγές στον πυρήνα των Windows 7

Ο πυρήνας των Windows 7 έχει υποστεί τις ακόλουθες αλλαγές:

  • Ανακατασκευή
    Γιατί δεν μπορώ να αφαιρέσω το υποσύστημα γραφικών στα Windows;
    Η απάντηση σε αυτή την ερώτηση από τεχνική άποψη είναι ότι το υποσύστημα γραφικών στα Windows δεν είναι ανεξάρτητο, είναι μέρος του υποσυστήματος Win32.
    Τα Windows 7 έχουν ανακατασκευάσει πολλά στοιχεία χαμηλού επιπέδου για να διαλύσει τις εξαρτήσεις. Αυτό δεν θα είναι αντιληπτό στους χρήστες, θα εμφανιστούν μόνο νέα Dll, για παράδειγμα, το kernel32.dll χωρίστηκε σε kernel32.dll και kernelbase.dll.
    Αυτή η κατάτμηση κατέστησε δυνατή την εκχώρηση ενός ελάχιστου πυρήνα που ονομάζεται MinWin (20 megabyte στο δίσκο).
  • Υποστήριξη EFI για x86 και x64 (ίδιο με το Vista SP1)
    Πολλοί κατασκευαστές προσπαθούν να απαλλαγούν από το BIOS υπέρ του EFI.
  • Εκκίνηση από VHD (εικονικός σκληρός δίσκος)
  • Παράλληλη αρχικοποίηση συσκευών και έναρξη υπηρεσιών
    Κατά την εκκίνηση των Windows, χρειάζεται πολύς χρόνος για τη δημιουργία του δέντρου συσκευών. Ο διαχειριστής PNP πρέπει να κάνει δημοσκόπηση των προγραμμάτων οδήγησης διαύλου (PCI, USB, FireWire, κ.λπ.) για να δει τι συσκευές διαθέτουν. Και τις περισσότερες φορές ο επεξεργαστής περιμένει να ανταποκριθούν οι συσκευές (ή όχι). Εξάλλου, για να αναγνωρίσετε τις συσκευές στο λεωφορείο, πρέπει να τις κάνετε δημοσκόπηση. Εάν είναι, τότε θα ανταποκριθούν, και αν όχι, τότε πρέπει να περιμένετε και ο επεξεργαστής είναι αδρανής. Η παράλληλη εκτέλεση αυτών των εργασιών μειώνει τους χρόνους φόρτωσης.
  • Αφαίρεση κλειδώματος διεκπεραιωτή από τον προγραμματιστή και κλειδώματος PFN από τη διαχείριση μνήμης
    Τα τελευταία χρόνια, οι συχνότητες ρολογιού του επεξεργαστή δεν αυξάνονται και η ανάπτυξη κινείται προς την αύξηση του αριθμού των παράλληλων εκτελούμενων εντολών τόσο σε επίπεδο ενός πυρήνα όσο και σε επίπεδο συστήματος (πολλαπλών πυρήνων). Από αυτή την άποψη, έχει γίνει πολλή δουλειά για τη βελτίωση της κλιμάκωσης.
    Τα δύο πιο «καυτά» λουκέτα που υπήρχαν στον πυρήνα, το κλείδωμα Dispatcher και το κλείδωμα PFN, αφαιρέθηκαν.
    Το κλείδωμα διεκπεραιωτή χρησιμοποιήθηκε από τον προγραμματιστή όταν άλλαξε η κατάσταση των νημάτων. Αυτό το κλείδωμα αφαιρέθηκε και η κατάσταση νήματος "αναμονής" χωρίστηκε σε πολλά:
    • Αναμονή: Σε εξέλιξη
    • Σε εκκρεμότητα: Ολοκληρώθηκε
    • Αναμονή: Ακυρώθηκε
    Το κλείδωμα PFN χρησιμοποιήθηκε κατά την αλλαγή των χαρακτηριστικών των σελίδων φυσικής μνήμης. Σε ένα σύστημα πολλαπλών επεξεργαστών, κάθε επεξεργαστής ζήτησε πρόσβαση σε αυτό το κλείδωμα, κάτι που οδήγησε σε πολύ χρόνο.
  • Υποστηρίζει 256 λογικούς επεξεργαστές
    Προηγουμένως, στα Windows, η λέξη μηχανή χρησιμοποιούταν ως μάσκα συγγένειας. Αυτό έγινε επειδή ήταν εύκολο να βρεθούν ελεύθεροι επεξεργαστές - κάθε bit αντιπροσωπεύει έναν επεξεργαστή. Αντίστοιχα, ένα σύστημα 32 bit υποστήριζε 32 λογικούς επεξεργαστές και ένα σύστημα 64 bit υποστήριζε 64.
    Στα Windows 7, ως αποτέλεσμα της μετάβασης στο μοντέλο τμήματος μάσκας συγγένειας, κατέστη δυνατή η υποστήριξη για 256 λογικούς επεξεργαστές. Οι επεξεργαστές άρχισαν να ομαδοποιούνται σε ομάδες/τμήματα. Κάθε ομάδα μπορεί να περιέχει έως και 64 επεξεργαστές. Το αποτέλεσμα είναι συμβατότητα προς τα πίσω, τα παλιά προγράμματα «βλέπουν» μόνο επεξεργαστές σε μια ομάδα και τα νέα προγράμματα που χρησιμοποιούν νέες διεπαφές λειτουργούν με όλους τους επεξεργαστές του συστήματος.
  • Βελτιωμένη εξοικονόμηση ενέργειας: απενεργοποίηση υποδοχών επεξεργαστήΣήμερα, όχι μόνο οι κάτοχοι φορητών υπολογιστών, αλλά και οι κάτοχοι κέντρων δεδομένων αντιμετωπίζουν σοβαρό πρόβλημα εξοικονόμησης ενέργειας. Στις ΗΠΑ, το 2% της ηλεκτρικής ενέργειας καταναλώνεται από κέντρα δεδομένων υπολογιστών. Πολλοί από αυτούς απενεργοποιούν μέρος των διακομιστών τους σε περιόδους χαμηλής δραστηριότητας χρηστών (σαββατοκύριακα).
    Διαπιστώθηκε ότι είναι πολύ πιο κερδοφόρο να απενεργοποιήσετε ολόκληρη την υποδοχή επεξεργαστή από έναν πυρήνα σε πολλούς, επειδή Σε αυτήν την περίπτωση, μπορείτε να απενεργοποιήσετε ολόκληρη την υποδομή υποστήριξης υποδοχής (ελεγκτής μνήμης).

Συντήρηση Windows, ενημερώσεις

Προηγουμένως, οι ενημερώσεις ήταν συχνά σωρευτικές. Αυτό σήμαινε ότι εάν ο κώδικας σφαλμάτων περιλαμβανόταν σε μια πρώιμη ενημέρωση ενός στοιχείου, οι νεότερες εκδόσεις θα περιείχαν επίσης αυτόν τον κώδικα. Αλλά δεν χρειάζονται όλοι οι χρήστες όλες οι ενημερώσεις, έχουν διαφορετικές διαμορφώσεις.

Υπάρχουν πλέον 2 εκδόσεις του πηγαίου κώδικα μετά την κυκλοφορία (RTM) στα Windows:

  • RTM GDR (General Distribution Release)
    Περιλαμβάνει αυτές τις λίγες αλλαγές που προορίζονται για όλους. Κυρίως διορθώσεις ασφαλείας.
  • RTM LDR (Περιορισμένη Έκδοση Διανομής)
    Κατά την εγκατάσταση μιας ενημέρωσης, ο πελάτης του Windows Update επιλέγει τον κλάδο που χρειάζεται και εγκαθιστά τον κώδικα από αυτόν.

Δημιουργία ενημέρωσης ασφαλείας

Η εργασία για τη δημιουργία μιας ενημέρωσης ασφαλείας ξεκινά με τον εντοπισμό μιας ευπάθειας. Υπάρχουν πολλές διαφορετικές μέθοδοι ανίχνευσης - ομάδες εσωτερικής ασφάλειας, συνεργάτες ασφαλείας, προγραμματιστές. Όταν εντοπιστεί μια ευπάθεια, ξεκινούν 2 παράλληλες διεργασίες:

  • Ανάπτυξη μιας επιδιόρθωσης για όλες τις πλατφόρμες
  • Αναζήτηση για "επιλογές"
    Μεγάλης κλίμακας αναζήτηση για παρόμοια τρωτά σημεία σε όλες τις πλατφόρμες. Αναζητήστε όχι τον ίδιο κωδικό, αλλά για παρόμοιους.

Μόλις αναπτυχθεί μια επιδιόρθωση, αρχίζουν οι έλεγχοι κώδικα. Όταν ολοκληρωθούν, η επιδιόρθωση ενσωματώνεται στο build και το build αποστέλλεται για δοκιμή:

  • Χειροκίνητη και αυτόματη δοκιμή εξαρτημάτων
  • Αυτόματος έλεγχος παραμορφώσεων μορφής αρχείου, στοιχείων δικτύου κ.λπ. (πάνω από ένα εκατομμύριο επιλογές)
  • Δοκιμή του συστήματος στο σύνολό του, συμπεριλαμβανομένης της δοκιμής συμβατότητας προς τα πίσω

Μόνο επιδιορθώσεις που πληρούν όλα τα κριτήρια ποιότητας επιτρέπεται να κυκλοφορούν στο Windows Update and Download Center.

  • Εμπρός >

Αν φτάσουμε στην ουσία...

Ένα λειτουργικό σύστημα είναι ένα πράγμα που υλοποιεί το multitasking (συνήθως) και διαχειρίζεται την κατανομή των πόρων μεταξύ αυτών των εργασιών και γενικά. Πρέπει να βεβαιωθείτε ότι οι εργασίες δεν μπορούν να βλάψουν η μία την άλλη και να λειτουργούν σε διαφορετικούς τομείς της μνήμης και να εργάζονται με συσκευές με τη σειρά τους, τουλάχιστον αυτό είναι. Πρέπει επίσης να παρέχετε τη δυνατότητα μετάδοσης μηνυμάτων από τη μια εργασία στην άλλη.

Επίσης, το λειτουργικό σύστημα, εάν υπάρχει μακροπρόθεσμη μνήμη, πρέπει να παρέχει πρόσβαση σε αυτό: να παρέχει δηλαδή όλες τις λειτουργίες για την εργασία με το σύστημα αρχείων. Είναι ελάχιστο.

Σχεδόν παντού, ο πρώτος κώδικας εκκίνησης πρέπει να είναι γραμμένος σε γλώσσα assembly - υπάρχουν πολλοί κανόνες σχετικά με το πού πρέπει να είναι, πώς πρέπει να μοιάζει, τι πρέπει να κάνει και ποιο μέγεθος δεν πρέπει να υπερβαίνει.

Για έναν υπολογιστή, πρέπει να γράψετε ένα bootloader στο ASMA, το οποίο θα καλείται από το BIOS και το οποίο θα πρέπει, χωρίς να υπερβαίνει τα τέσσερα και μερικές εκατοντάδες byte, να κάνει κάτι και να εκκινήσει το κύριο λειτουργικό σύστημα - έλεγχος μεταφοράς στον κύριο κώδικα, ο οποίος στο το εγγύς μέλλον μπορεί να γραφτεί σε C.

Για το ARM, πρέπει να δημιουργήσετε έναν πίνακα διακοπών στο ACMA (επαναφορά, διάφορα σφάλματα, διακοπές IRQ, FIQ κ.λπ.) και να μεταφέρετε τον έλεγχο στον κύριο κωδικό. Αν και, σε πολλά περιβάλλοντα ανάπτυξης, τέτοιος κώδικας είναι διαθέσιμος για σχεδόν κάθε ελεγκτή.

Δηλαδή, για αυτό χρειάζεστε:

  1. Γνωρίστε τη γλώσσα assembler της πλατφόρμας προορισμού.
  2. Γνωρίστε την αρχιτεκτονική του επεξεργαστή και όλων των ειδών τις εντολές και καταχωρήσεις υπηρεσίας για να τον ρυθμίσετε ώστε να λειτουργεί στην επιθυμητή λειτουργία. Σε έναν υπολογιστή, πρόκειται για μια μετάβαση σε προστατευμένη λειτουργία, για παράδειγμα, ή σε λειτουργία 64-bit... Στο ARM, αυτό ρυθμίζει το ρολόι του πυρήνα και των περιφερειακών.
  3. Μάθετε ακριβώς πώς θα ξεκινήσει το λειτουργικό σύστημα, πού και πώς πρέπει να προωθήσετε τον κωδικό σας.
  4. Γνωρίστε τη γλώσσα C - είναι δύσκολο να γράψετε μεγάλο κώδικα στο Asma χωρίς εμπειρία, η διατήρησή του θα είναι ακόμα πιο δύσκολη. Επομένως, πρέπει να γράψετε τον πυρήνα στο C.
  5. Γνωρίστε τις αρχές λειτουργίας του ΛΣ. Λοιπόν, υπάρχουν πολλά βιβλία στα ρωσικά για αυτό το θέμα, αν και δεν ξέρω αν είναι όλα καλά.
  6. Να έχετε πολλή υπομονή και επιμονή. Θα υπάρξουν λάθη και θα πρέπει να βρεθούν και να διορθωθούν. Θα χρειαστεί επίσης να διαβάσετε πολύ.
  7. Να έχεις πολύ και πολύ χρόνο.

Περαιτέρω. Ας πούμε ότι έγραψες κάτι. Πρέπει να δοκιμάσουμε αυτό το πράγμα. Είτε χρειάζεστε μια φυσική συσκευή στην οποία θα πραγματοποιηθούν τα πειράματα (πίνακας εντοπισμού σφαλμάτων, δεύτερος υπολογιστής), είτε έναν εξομοιωτή για αυτήν. Το δεύτερο είναι συνήθως πιο εύκολο και γρήγορο στη χρήση. Για υπολογιστή, για παράδειγμα, VMWare.

Υπάρχουν επίσης πολλά άρθρα σχετικά με αυτό το θέμα στο Διαδίκτυο, αν ψάξετε καλά. Υπάρχουν επίσης πολλά παραδείγματα έτοιμων λειτουργικών συστημάτων με πηγαίους κώδικες.

Αν θέλετε πραγματικά, μπορείτε ακόμη και να δείτε τον πηγαίο κώδικα του παλιού πυρήνα των συστημάτων NT (Windows), τόσο ξεχωριστά (που δημοσιεύτηκε από τη Microsoft, με σχόλια και διάφορα είδη υλικού αναφοράς) όσο και σε συνδυασμό με τον παλιό OS (διέρρευσε).

Το WikiHow λειτουργεί σαν ένα wiki, πράγμα που σημαίνει ότι πολλά από τα άρθρα μας είναι γραμμένα από πολλούς συγγραφείς. Κατά τη δημιουργία αυτού του άρθρου, 90 άτομα, μεταξύ των οποίων και ανώνυμα, εργάστηκαν για την επεξεργασία και τη βελτίωσή του.

Τα λειτουργικά συστήματα, που αποτελούνται από εκατοντάδες χιλιάδες γραμμές κώδικα, επιτρέπουν στους χρήστες να αλληλεπιδρούν με το υλικό του υπολογιστή. Συνήθως είναι γραμμένα στις γλώσσες προγραμματισμού C, C++ και assembly.

Βήματα

    Πρώτα, μάθετε προγραμματισμό.Απαιτείται γνώση assembler. Συνιστάται επίσης ανεπιφύλακτα η κατανόηση άλλων πρόσθετων γλωσσών προγραμματισμού χαμηλότερου επιπέδου, όπως η C.

    Αποφασίστε σε ποια συσκευή θέλετε να φορτώσετε το λειτουργικό σύστημα.Αυτό μπορεί να είναι ένα CD, DVD, συσκευή μνήμης flash, σκληρός δίσκος ή άλλος υπολογιστής.

    Αποφασίστε πώς θέλετε να μοιάζει το λειτουργικό σας σύστημα.Θα πρέπει να είναι ένα πλήρες λειτουργικό σύστημα με γραφικό περιβάλλον χρήστη (GUI) ή ίσως κάτι πιο μινιμαλιστικό; Πρέπει να ξέρετε ποια κατεύθυνση να ακολουθήσετε πριν ξεκινήσετε τη διαδικασία.

    Ελέγξτε ποια πλατφόρμα επεξεργαστή θα υποστηρίζει το λειτουργικό σας σύστημα.Το AI-32 και το x86_64 είναι οι δύο πιο κοινές εκδόσεις για προσωπικούς υπολογιστές, επομένως μπορούν να θεωρηθούν η καλύτερη επιλογή.

    Αποφασίστε αν προτιμάτε να κάνετε τα πάντα μόνοι σας από την αρχή ή αν υπάρχουν πυρήνες βάσει των οποίων θα θέλατε να χτίσετε το σύστημα. Το Linux από την αρχή είναι ένα έργο για όσους θέλουν, για παράδειγμα, να δημιουργήσουν τη δική τους διανομή Linux.

    Επιλέξτε εάν πρόκειται να χρησιμοποιήσετε τον δικό σας bootloader ή τον προ-ενσωματωμένο Grand Unified Bootloader (GRUB). Επειδή η κωδικοποίηση του δικού σας προγράμματος εκκίνησης απαιτεί εκτεταμένη γνώση του υλικού του υπολογιστή και του BIOS, μπορεί να ωθήσει πίσω το πρόγραμμα προγραμματισμού για τον ζωντανό πυρήνα.

    Πάρτε μια απόφαση σχετικά με τη γλώσσα προγραμματισμού που πρόκειται να χρησιμοποιήσετε.Φυσικά, είναι πολύ πιθανό να αναπτυχθεί ένα λειτουργικό σύστημα σε μια γλώσσα όπως η Pascal ή η BASIC, αλλά είναι προτιμότερο να γραφτεί σε C ή γλώσσα assembly. Η γλώσσα assembly είναι απολύτως απαραίτητη, καθώς ορισμένα σημαντικά μέρη του λειτουργικού συστήματος απαιτούν γνώση της συγκεκριμένης γλώσσας. Η C++, από την άλλη πλευρά, περιέχει τις λέξεις-κλειδιά που απαιτούνται για την εκτέλεση της πλήρους έκδοσης του λειτουργικού συστήματος.

    • Για να δημιουργήσετε ένα λειτουργικό σύστημα χρησιμοποιώντας κώδικα C ή C++, φυσικά θα χρησιμοποιήσετε τον ένα μεταγλωττιστή ή τον άλλο. Αυτό σημαίνει ότι πρέπει να διαβάσετε το εγχειρίδιο/οδηγίες/τεκμηρίωση για τον επιλεγμένο μεταγλωττιστή C/C++ που παρέχεται μαζί με το λογισμικό ή είναι διαθέσιμος στον ιστότοπο του διανομέα. Θα πρέπει να μάθετε πολλά περίπλοκα πράγματα για τον μεταγλωττιστή και θα πρέπει επίσης να μάθετε τη σχεδίασή του και το ABI για να βελτιώσετε τη C++. Αναμένεται να κατανοήσετε τις διάφορες μορφές εργασιών εκτέλεσης (ELF, PE, COFF, κανονικό δυαδικό, κ.λπ.) και θα σημειώσετε ότι η εγγενής μορφή PE των Windows (.exe) προστατεύεται από πνευματικά δικαιώματα.
  1. Επιλέξτε Application Programming Interface (API).Μια επιλογή από καλά API είναι το POSIX, όπως είναι καλά τεκμηριωμένο. Όλα τα συστήματα Unix έχουν τουλάχιστον μερική υποστήριξη για το POSIX, επομένως θα ήταν ασήμαντο να ομαδοποιήσετε προγράμματα Unix στο λειτουργικό σας σύστημα.

    Αποφασίστε για ένα σχέδιο.Υπάρχουν μονολιθικοί πυρήνες και μικροπυρήνες. Οι μονολιθικοί πυρήνες εκτελούν όλες τις υπηρεσίες στον πυρήνα, ενώ οι μικροπυρήνες έχουν έναν μικρό πυρήνα σε συνδυασμό με μια προσαρμοσμένη υλοποίηση υπηρεσιών. Γενικά, οι μονολιθικοί πυρήνες είναι πιο γρήγοροι, αλλά οι μικροπυρήνες έχουν καλύτερη απομόνωση και προστασία από πιθανά σφάλματα.

    Σκεφτείτε την ανάπτυξη και την ομαδική εργασία.Με αυτόν τον τρόπο, θα ξοδεύετε λιγότερο χρόνο στην επίλυση μεγάλων προβλημάτων, επιτρέποντάς σας να δημιουργήσετε ένα καλύτερο λειτουργικό σύστημα σε λιγότερο χρόνο.

    Μην σκουπίζετε εντελώς τον σκληρό σας δίσκο.Θυμηθείτε, η μορφοποίηση του δίσκου θα διαγράψει οριστικά όλα τα δεδομένα σας! Χρησιμοποιήστε το GRUB ή άλλο διαχειριστή για να κάνετε διπλότυπη εκκίνηση του υπολογιστή σας από άλλο λειτουργικό σύστημα έως ότου η έκδοσή σας είναι πλήρως λειτουργικά έτοιμη.

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

    Διατηρήστε ένα αντίγραφο ασφαλείας της πιο πρόσφατης έκδοσης που λειτουργεί.Αυτό παρέχει λίγη ηρεμία σε περίπτωση που κάτι πάει εντελώς στραβά με την τρέχουσα έκδοση του λειτουργικού σας λειτουργικού συστήματος ή με επόμενες προσθήκες. Εάν ο υπολογιστής σας χαλάσει και δεν μπορεί να εκκινήσει, όπως καταλαβαίνετε οι ίδιοι, η ύπαρξη ενός δεύτερου αντιγράφου για εργασία θα είναι μια εξαιρετική ευκαιρία, ώστε να μπορείτε να διορθώσετε τα υπάρχοντα προβλήματα.

    Δοκιμάστε το νέο σας λειτουργικό σύστημα σε μια εικονική μηχανή.Αντί να κάνετε επανεκκίνηση του υπολογιστή σας κάθε φορά που κάνετε αλλαγές ή μεταφέρετε αρχεία από τον υπολογιστή παραγωγής σας στη δοκιμαστική μηχανή, μπορείτε να χρησιμοποιήσετε μια εφαρμογή για να εκτελέσετε το λειτουργικό σύστημα σε μια εικονική μηχανή ενώ το τρέχον λειτουργικό σύστημα συνεχίζει να εκτελείται. Οι εφαρμογές VM περιλαμβάνουν το VMWare (το οποίο διαθέτει επίσης δωρεάν διακομιστή), εναλλακτικό ανοιχτού κώδικα, Bochs, Microsoft Virtual PC (μη συμβατό με Linux) και XVM VirtualBox.

    Κυκλοφόρησε μια έκδοση έκδοσης.Αυτό θα επιτρέψει στους χρήστες να σας ενημερώσουν για πιθανά ελαττώματα στο λειτουργικό σας σύστημα.

  2. Το λειτουργικό σύστημα θα πρέπει επίσης να είναι φιλικό προς το χρήστη, επομένως φροντίστε να προσθέσετε χρήσιμες λειτουργίες που γίνονται αναπόσπαστο μέρος του σχεδιασμού σας.

    • Μόλις ολοκληρωθεί η ανάπτυξη, σκεφτείτε εάν θέλετε να κάνετε τον κώδικα δημόσια διαθέσιμο ή να τον κάνετε ιδιωτικό.
    • Βεβαιωθείτε ότι έχετε θέσει τις λειτουργίες ασφαλείας στην πρώτη σας προτεραιότητα, εάν θέλετε το σύστημά σας να είναι βιώσιμο.
    • Μην ξεκινήσετε ένα έργο ανάπτυξης λειτουργικού συστήματος με στόχο να μάθετε να προγραμματίζετε. Εάν δεν γνωρίζετε C, C++, Pascal ή οποιαδήποτε από τις άλλες σχετικές γλώσσες και χαρακτηριστικά, συμπεριλαμβανομένων των τύπων δείκτη, των λειτουργιών bit χαμηλού επιπέδου, της εναλλαγής bit, της ενσωματωμένης συναρμολόγησης κ.λπ., τότε δεν είστε ακόμα έτοιμοι για τη δημιουργία ΛΣ.
    • Περιηγηθείτε σε πύλες όπως το OSDev και το OSDever για να σας βοηθήσουν να βελτιώσετε το δικό σας λειτουργικό σύστημα. Λάβετε ιδιαίτερα υπόψη σας ότι για τα περισσότερα ζητήματα, η κοινότητα του OSDev.org προτιμά να συμβουλεύεστε μόνοι σας το περιεχόμενο του ιστότοπου αντί να συμμετέχετε σε ένα φόρουμ. Εάν παρόλα αυτά αποφασίσετε να ενταχθείτε στις τάξεις των μελών του φόρουμ, πρέπει να υπάρχουν ορισμένες προϋποθέσεις για αυτό. Πρέπει να έχετε άριστη γνώση της γλώσσας assembly C ή C++ και x86. Θα πρέπει επίσης να κατανοήσετε γενικές και σύνθετες έννοιες στον προγραμματισμό, όπως Συνδεδεμένες λίστες, Ουρές κ.λπ. Η κοινότητα OSDev δηλώνει ρητά στους κανόνες της ότι κανείς δεν πρόκειται να φροντίσει για παιδιά νέους προγραμματιστές. Εάν προσπαθείτε να αναπτύξετε ένα λειτουργικό σύστημα, είναι αυτονόητο ότι είστε θεός προγραμματισμού. Απαιτείται επίσης να διαβάσετε το εγχειρίδιο του επεξεργαστή για την αρχιτεκτονική του επεξεργαστή που επιλέγετε. για παράδειγμα x86 (Intel), ARM, MIPS, PPC κ.λπ. Ένα τέτοιο βιβλίο αναφοράς για τη δομή του επεξεργαστή μπορεί εύκολα να βρεθεί με αναζήτηση στο Google ("Intel Manuals", "ARM manuals" κ.λπ.). Μην εγγραφείτε στο φόρουμ του OSDev.org για να κάνετε προφανείς ερωτήσεις. Αυτό θα έχει απλώς ως αποτέλεσμα απαντήσεις όπως "Διαβάστε το εγχειρίδιο f***ing". Αρχικά, θα πρέπει να δοκιμάσετε να διαβάσετε τη Wikipedia, εγχειρίδια για τα διάφορα εργαλεία που πρόκειται να χρησιμοποιήσετε.
    • Ελέγξτε για πιθανά νεκρά σημεία και άλλα σφάλματα. Κενά, αδιέξοδα και άλλα προβλήματα μπορεί να επηρεάσουν τη σχεδίαση του λειτουργικού σας συστήματος.
    • Εάν θέλετε μια απλούστερη μέθοδο, σκεφτείτε τις διανομές Linux όπως το Fedora Revisor, το Custom Nimble X, το Puppy Remaster, το PCLinuxOS mklivecd ή το SUSE Studio και το SUSE KIWI. Ωστόσο, το λειτουργικό σύστημα που δημιουργείται ανήκει στην εταιρεία που εισήγαγε για πρώτη φορά αυτήν την υπηρεσία (αν και έχετε το δικαίωμα να το διανέμετε ελεύθερα, να το αλλάζετε και να το εκτελείτε όπως θέλετε σύμφωνα με την GPL).
    • Μια καλή λύση θα ήταν να δημιουργήσετε ένα εντελώς νέο διαμέρισμα για το λειτουργικό σύστημα που αναπτύσσεται.

    Προειδοποιήσεις

    • Η απρόσεκτη αντιγραφή του λειτουργικού συστήματος στον σκληρό δίσκο μπορεί να τον καταστρέψει εντελώς. πρόσεχε
    • Δεν θα έχετε ένα εντελώς ολοκληρωμένο σύστημα σε δύο εβδομάδες. Ξεκινήστε με ένα λειτουργικό σύστημα με δυνατότητα εκκίνησης και μετά προχωρήστε σε πιο ενδιαφέροντα πράγματα.
    • Εάν κάνετε κάτι απερίσκεπτο, όπως να γράφετε τυχαία byte σε τυχαίες θύρες εισόδου/εξόδου, θα καταστρέψετε το λειτουργικό σας σύστημα και θα μπορούσατε (θεωρητικά) να τηγανίσετε το υλικό σας.
    • Μην περιμένετε να είναι εύκολο να δημιουργήσετε ένα ποιοτικό λειτουργικό σύστημα. Υπάρχουν πολλές σύνθετες αλληλεξαρτήσεις. Για παράδειγμα, για να μπορεί το λειτουργικό σύστημα να χειρίζεται πολλούς επεξεργαστές, ο διαχειριστής μνήμης πρέπει να διαθέτει μηχανισμούς "κλειδώματος" για να αποτρέπει την πρόσβαση επιπλέον επεξεργαστών στον ίδιο πόρο ταυτόχρονα. Τα "μπλοκ" που χρησιμοποιούνται περιλαμβάνουν έναν προγραμματιστή για να διασφαλιστεί ότι μόνο ένας επεξεργαστής έχει πρόσβαση σε έναν κρίσιμο πόρο ανά πάσα στιγμή, ενώ όλοι οι άλλοι είναι αδρανείς. Ωστόσο, η λειτουργία του προγραμματιστή εξαρτάται από την παρουσία του διαχειριστή μνήμης. Αυτό είναι ένα παράδειγμα εξάρτησης από αδιέξοδο. Δεν υπάρχει τυπικός τρόπος επίλυσης προβλημάτων όπως αυτό. Κάθε δημιουργός λειτουργικού συστήματος αναμένεται να είναι αρκετά ικανός για να βρει τη δική του λύση.
Συνεχίζοντας το θέμα:
OS

Πώς να λαμβάνω SMS online μέσω Διαδικτύου; Για να λαμβάνετε SMS online, υπάρχουν ειδικοί ιστότοποι που παρέχουν έναν ειδικό εικονικό αριθμό στον οποίο μπορείτε να λαμβάνετε...

Νέα άρθρα
/
Δημοφιλής