Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα

βρηκα τελαιυταια ψαχνοντας τυχαια ενα site με τον τροπο του πως να γραψεις ενα μικρο υποτυπωδες λειτουργικο συστημα

εχω ωμως μια μια μικρη απορια οσο αναφορα αυτο

καταρχας ξερω{αν ειναι λαθος πειτε} οτι το BIOS ειναι γραμμενο σε assembly

ας υποθεσουμε οτι ενας υποτυπωδης πυρηνας επισης ειναι γραμμενος σε assembly

το BIOS εχει ενσωματωμενο compiler για να εκτελεσει ο πυρηνας τον κωδικα assembly η λειτουργει αλλιως ??

πχ ενα λειτουργικο σε C#{παραδειγμα φερνω } πως εκτελειται??

 

http://mikeos.berlios.de/write-your-own-os.html

αυτο το σιτε βρηκα

  • Απαντ. 42
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσ.

το BIOS εχει ενσωματωμενο compiler για να εκτελεσει ο πυρηνας τον κωδικα assembly η λειτουργει αλλιως ??

;;;;;

Το bios σε ότι και να είναι γραμμένο υπάρχει σαν εκτελέσιμος κώδικας στην rom του bios δεν γίνεται compile εκείνη την στιγμή.

Οποιοδήποτε λειτουργικό πλέων φορτώνεται από τα λεγόμενα bootloader(ntfsloader/grub),παλιά έπρεπε να δώσεις εντολή (win.com) :P για να φορτώσει.

Δημοσ.

......αυτο δεν μπορω να καταλαβω

εκτελεσιμος κωδικας σε τι ????

δηλαδη την assembly την καταλαβαινει ετσι ο επεξεργαστης χωρις προγραμμα μεταφρασης????

{δηλαδη πως δουλευουνε οι bootloaders εχουν μεταφραστη συγκεκριμενης γλωσσας που εχει γραφτει το λειτουργικο???}

Δημοσ.

Αν κάνεις μια φορά compile ένα πρόγραμμα γίνεται εκτελέσιμο,έτσι και το bios(και τα boot loader) είναι εκτελέσιμο, δεν είναι σε πηγιαίο κώδικα για να χρειάζεται πρόγραμμα μετάφρασης.

Δημοσ.

ΑΝΑΚΕΦΑΛΕΩΣΗ{αν κανω λαθος πειτε}

το bios ειναι ενα προγραμμα γραμμενο σε assebly το οπιο ειναι υπευθυνο για τον ελενχο των συσκευων και την μεταβιβαση ελενχου του υπολογιστη στο λειτουρκικο συστημα

οι bootloaders αναλαμβανουν να φωρτωσουν το λειτουργικο συστημα

{ευχαριστω TheELF}

Δημοσ.

ΑΝΑΚΕΦΑΛΕΩΣΗ{αν κανω λαθος πειτε}

το bios ειναι ενα προγραμμα γραμμενο σε assebly το οπιο ειναι υπευθυνο για τον ελενχο των συσκευων και την μεταβιβαση ελενχου του υπολογιστη στο λειτουρκικο συστημα

οι bootloaders αναλαμβανουν να φωρτωσουν το λειτουργικο συστημα

{ευχαριστω TheELF}

 

Το bios ειναι ενα hardware το οποιο εχει ως δουλεια να μας λεει οτι ολα λειτουργουν κανονικα (βλεπεις το pc δεν ειναι standard, μπορει να εχει διαφορους cpu/gpu/ram/etc).

 

 

Το assembly ειναι μια "εκδοχη" ενα readable machine code να το πω... Δεν χρειαζεται να το κανεις compile με την εννοια του compile. Βαλε ρε παιδι μου οτι machine code (το 01) ειναι το ιδιο με το assembly δηλαδη αντι να γραψεις "0110100101010110".... γραφεις ενα "push r1"

 

Λοιπον, το pc δουλευει με machine code / assembly. Εκτος απο το CPU υπαρχουν και αλλοι μικροεπεξεργαστες οπως το bios, mcc, io chipset etc.. Αυτοι αναλαμβανουν την συνδεση του ολου pc με το cpu, του προσφερουν ενα interface στην CPU.

 

Ολα τα παραπανω ειναι προγραμματισμενα. Ετσι οταν πατησεις το ΟΝ

1) Το bios ψαχνει για hardware

2) Κανει διαφορα checks

3) Και διαφορα αλλα που δεν τα γνωριζω

Οταν τελειωσει με αυτα που ειναι assembly, δινει την σκυταλη στον bootloader.Ο δε bootloader δεν ειναι τιποτα παρα ενα προγραμμα / assembly που αναλαμβανει να φορτωσει το OS που και το δε OS ειναι ενα προγραμμα ουσιαστικα ειναι ενα virtual machine που δημιουργει ενα πιο "ευκολο" interface του hardware.

 

Τωρα λες και για c#, για να φιταξεις κατι τετοιο πρεπει να εχει μεγαλα @@ -αν και εχουν φτιαξει- επειδη η .net ειναι virtual machine πανω στο OS που ειναι και αυτο virtual machine, δηλαδη εχεις machine -> virtual machine 1 -> virtual machine 2

 

Τεσπα, οτι θες να φτιαξεις, θα το φτιαξεις στην θεση του bootloader ειναι το πρωτο παραγμα που τρεχει (αυτο που μπορεις να προγραμματισεις!!!)

 

Ολα τα παραπανω ειναι γενικες γραμμες. Για περισσοτερα wiki, howstaffworks.

Δημοσ.

ΑΝΑΚΕΦΑΛΕΩΣΗ{αν κανω λαθος πειτε}

το bios ειναι ενα προγραμμα γραμμενο σε assebly το οπιο ειναι υπευθυνο για τον ελενχο των συσκευων και την μεταβιβαση ελενχου του υπολογιστη στο λειτουρκικο συστημα

οι bootloaders αναλαμβανουν να φωρτωσουν το λειτουργικο συστημα

{ευχαριστω TheELF}

Σωστός.

 

 

Σε πολύ γενικές γραμμές..

 

Το BIOS είναι το πρώτο πρόγραμμα που φορτώνει ο υπολογιστής (από την "μνήμη" του) με το που ανάβει, εκτελεί ορισμένους βασικούς ελέγχους στα υποσυστήματα του Η/Υ (προετιμάζει την κάρτα γραφικών, τις συσκευές PnP, τον δίαυλο μνήμης, τους ελεγκτές των εξωτερικών μονάδων μνήμης όπως HDD κλπ), και αφού οι έλεγχοι αυτοί ολοκληρωθούν με επιτυχία τότε ξεκινά να αναζητά στις κατάλληλες διαθέσιμες συσκευές (πχ. CD-ROM, HDD -παλαιότερα δισκέτες), πάντα σε συγκεκριμένο σημείο (θέση) και μέγεθος, τον BOOTLOADER, ένα πρόγραμμα (συνήθως γραμμένο σε συμβολικό κώδικα -ASSEMBLY) το οποίο αναλαμβάνει να ξεκινήσει το λειτουργικό σύστημα (Λ. Σ). Εσωτερικά αυτό δεν είναι μια απαραίτητα γραμμική διαδικασία (δηλαδή BIOS->BOOTLOADER->OS) καθώς μπορεί να μεσολαβούν διάφορα στάδια όπου ο μικρός σε μέγεθος αρχικός BOOTLOADER προετοιμάζει το περιβάλλον για το φόρτωμα περισσότερο πολύπλοκων προγραμμάτων (πχ. BIOS->BOOTLOADER->EXTENDED BOOTLOADER->OS) που αναλαμβάνουν με την σειρά τους να ολοκληρώσουν την εκκίνηση του Λ. Σ.

 

* Το BIOS φυσικά παρέχει και μια σειρά βασικών υπηρεσιών εισόδου & εξόδου στον Η/Υ (σε παραδοσιακή 16-μπίτι μορφή). Αυτές οι υπηρεσίες παλαιότερα εμπλουτίζονταν από το Λ. Σ. Σήμερα όμως υπερκαλύπτονται από το Λ. Σ. με το να επικοινωνεί απευθείας με το Hardware του υπολογιστή μέσο 32/64-bit Οδηγών. Όλα αυτά οδηγούν σταδιακά στην ανάγκη αντικατάστασης του παραδοσιακού BIOS από νεότερες τεχνολογίες.

 

 

Δημοσ.

ΑΝΑΚΕΦΑΛΕΩΣΗ{αν κανω λαθος πειτε}

το bios ειναι ενα προγραμμα γραμμενο σε assebly το οπιο ειναι υπευθυνο για τον ελενχο των συσκευων και την μεταβιβαση ελενχου του υπολογιστη στο λειτουρκικο συστημα

οι bootloaders αναλαμβανουν να φωρτωσουν το λειτουργικο συστημα

{ευχαριστω TheELF}

 

To ΒΙΟS ειναι firmware. Παίζει στην ROM. Εκει εχει εγκατασταθει

απο το εργοστασιο ... ειναι εκτελεσιμο

οπως σου ειπαν. Δεν μπορεις να χεις προσβαση για να τροποποιήσεις κατι. Αρα

πως θα το μεταγλώτιζες ? Μονο κάποιο update μπορεις να του κάνεις.

 

Αφου το BIOS κανει τον POST έλεγχο για τις συσκευες αν θυμαμαι καλα... πέρνει τον έλεγχο ο

σκληρός δίσκος.

 

Δες και στο σαιτ της IBM http://www.ibm.com/developerworks/linux/library/l-linuxboot/

Δημοσ.

Το assembly ειναι μια "εκδοχη" ενα readable machine code να το πω... Δεν χρειαζεται να το κανεις compile με την εννοια του compile. Βαλε ρε παιδι μου οτι machine code (το 01) ειναι το ιδιο με το assembly δηλαδη αντι να γραψεις "0110100101010110".... γραφεις ενα "push r1"

 

Αυτό.

 

Για να το πω λίγο διαφορετικά: ο επεξεργαστής όταν φτάσει να εκτελέσει κάτι, αυτό το κάτι είναι πάντα με τη μορφή bytes. Μπορεί για παράδειγμα να διαβάσει ένα byte και να δει ότι είναι 237, το οποίο σημαίνει ότι πρέπει να διαβάσουμε την τιμή του επόμενου byte και αν αυτή είναι 127 κάνουμε το Χ ενώ αν είναι 128 κάνουμε το Υ κλπ. Αυτές οι οδηγίες σε μορφή αριθμών είναι ο κώδικας μηχανής.

 

Η assembly είναι ένας εναλλακτικός τρόπος να αναπαραστήσουμε τα bytes αυτά με τρόπο που να μπορεί ένας άνθρωπος που τα διαβάζει να βγάλει και κάποιο νόημα. Π.χ. σε x86 κώδικα μηχανής η εντολή assembly "xor eax, eax" αντιστοιχεί στα νούμερα 33 C0. Προφανώς το πρώτο είναι ευκολότερο να διαβαστεί από το δεύτερο.

Δημοσ.

Πρέπει να αντιλιφθεις τι είναι αυτό το "μαύρο" κουτί που θες να προγραμματίσεις, σε φυσικό επίπεδο ή επίπεδο υλικού. Οπότε, ξεκίνα να διαβάζεις ψηφιακά ηλεκτρονικά, προχώρα σε συνδυαστικά και ακολουθιακά κυκλώματα (καταχωρητές, μνήμες, ολισθητές, ALU, κλπ) και μετά δες την αρχιτεκτονική ενός απλού μικροεπεξεργαστή (z80, 8086, κλπ) ή μικροελεγκτή (8051, κλπ), κάπου εκεί θα αρχίσεις να καταλαβαίνεις τι είναι η γλώσσα μηχανής και κατά προέκταση η συμβολική γλώσσα (assembly) και τι "εικονικά" αναφέρετε ως εκτελέσιμο. Είναι πολύ δουλειά, το ξέρω, αλλά μόνο έτσι γίνεται!

Δημοσ.

δηλαδη

ο επεξεργαστης εκτελει μονο 01100101010101

η assembly ειναι γλωσσα η οπια δεν ειναι απλα χαμηλου επιπεδου ειναι μια "αθρωπινη "μεταφραση του 0110001010101001100

η μετατροπη assembly > 0101010100 δεν ειναι ακριβως compile διοτι ο επεξεργαστης καταλαβαινει και μεταφραζει το xor eax, eax" σε 010101010

αυτο που δεν καταλαβα ειναι το αυτο το 33ΟC τι ειναι αυτο assembly η 01010???

 

το bios εκτος απο το να ελενξει αν ο υπολογιστης εχει τα απαρετητα για να ξεκινησει βρισκει τον καταληλο bootloader {αν υπαρχουν περρισσοτεροι μας δινει επιλογη}και κανει jump εκει ωστε να εκτελεστει ο κωδικας

Δημοσ.

Τα 010101010101 (δυαδικό σύστημα), 33 0c (δεκαεξαδικό σύστημα, πάλι νούμερο είναι) και η γλώσσα μηχανής (machine code) είναι το ίδιο πράγμα. Αυτό είναι το μόνο που καταλαβαίνει και εκτελεί ο επεξεργαστής. Οι περισσότερες ακολουθίες από νούμερα αντιστοιχούν σε εντολές που αναγνωρίζει και εκτελεί ο επεξεργαστής (το σύνολο των εντολών αυτών και η αντιστοιχία τους σε νούμερα μαζί ονομάζεται instruction set του επεξεργαστή). Άλλα νούμερα αποτελούν παραμέτρους γι' αυτές τις εντολές.

 

Όταν όμως θέλουμε να γράψουμε ένα πρόγραμμα σαν άνθρωποι δε μπορούμε να έχουμε μπροστά μας μια ατελειώτη σειρά από νούμερα γιατί δε μπορούμε να τα επεξεργαστούμε. Γι' αυτό γράφουμε σε γλώσσες προγραμματισμού, μία από τις οποίες είναι η assembly. Οι εντολές της assembly αντιστοιχούν ένα προς ένα με το instruction set του επεξεργαστή, κάτι που μας επιτρέπει να βλέπουμε και να γράφουμε "xor eax, eax" αντί για το ακόμα πιο ακαταλαβίστικο 33 0c ή 011011 0001100 όπως είναι στο δυαδικό. Όπως καταλαβαίνεις κάθε instruction set στην πραγματικότητα έχει τη δική του εκδοχή assembly αφού είναι γενικά διαφορετικό από τα υπόλοιπα.

 

Όπως και κάθε γλώσσα, έτσι και η assembly έχει compiler ο οποίος μετατρέπει τον κώδικα assembly σε κώδικα μηχανής για να μπορεί στη συνέχεια να εκτελεστεί. Οι compilers της assembly ονομάζονται assemblers. Το πρόγραμμα που κάνει την αντίστροφη δουλειά (κώδικα μηχανής σε assembly) ονομάζεται disassembler.

 

To bios στην ουσία είναι ένα software αποθηκευμένο στη μόνιμη εσωτερική ROM του υπολογιστή, κάτι που το κάνει να ανήκει στην υποκατηγορία firmware. Όταν το bios τρέξει ελέγχει τη λειτουργία των βασικών συστημάτων του υπολογιστή (μιλώντας μέσω των διάφορων διαύλων του hardware), κάτι που περιλαμβάνει την αναγνώριση και προετοιμασία των συσκευών αποθήκευσης. Όταν το bios ολοκληρώσει τη δουλειά του, το τελευταίο πράγμα που κάνει είναι να ψάξει στo MBR των συσκευών αποθήκευσης για να βρεί κάποιο partition που είναι σημαδεμένο ως bootable. Αν το βρει, φορτώνει τα περιεχόμενα του αντίστοιχου boot sector στη μνήμη. Ο boot sector περιέχει ένα άλλο πρόγραμμα (τον bootloader) το οποίο μόλις φορτωθεί παίρνει τη σκυτάλη από το bios.

 

Στη συνέχεια ο bootloader διαβάζει αρχεία από το filesystem του partition απ' όπου φορτώθηκε για να δει τι λειτουργικά υπάρχουν εγκατεστημένα και πως ξεκινάει το καθένα από αυτά. Όταν αποφασίσει σχετικά, με τη σειρά του φορτώνει και εκτελεί παραδίδοντας πάλι τη σκυτάλη στον loader του λειτουργικού, ο οποίος φορτώνει τον kernel και απο κει και πέρα το λειτουργικό έχει τον έλεγχο του υπολογιστή.

 

 

Παλιότερα ήταν πολύ συνηθισμένο για τους ιους να αντικαθιστούν τον bootloader κάποιου partition το οποίο μόλυναν. Ο bootloader-ιος έπαιρνε τον έλεγχο του υπολογιστή και με διάφορες τεχνικές κατάφερνε να παραμείνει "ζωντανός" και έχοντας τον έλεγχο κατά τη διάρκεια της φόρτωσης του λειτουργικού με αποτέλεσμα τελικά το λειτουργικό, αντί να έχει τον απόλυτο έλεγχο όπως νόμιζε, να έχει παραχωρήσει την "τελευταία λέξη" για κάθε απόφαση στον ιό χωρίς κανείς να έχει καταλάβει τίποτα.

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...