Maison > développement back-end > C++ > le corps du texte

Développement du système d'exploitation (la vérité)

Mary-Kate Olsen
Libérer: 2024-09-19 18:17:11
original
312 Les gens l'ont consulté

OS Development (The truth)

Table des matières

  • Présentation
  • 1. Le chargeur de démarrage : lancer les choses
  • 2. Entrer dans le noyau : là où la magie opère
  • 3. Choisir votre langue
  • 4. Sécurité : n'écrasez pas l'avion
  • 5. Optimiser pour la vitesse
  • 6. Configuration des pilotes de base
    • Pilote vidéo 6.1
    • Pilote de clavier 6.2
    • Pilote d'E/S 6.3
  • 7. Écrire un shell : l'interface utilisateur
  • 8. Construire un système de fichiers personnalisé
  • 9. Ajout d'un pilote de souris : cliquez et déplacez
  • 10. Construire une interface graphique simple
  • 11. Gestion des fenêtres et des événements
  • 12. Créer une application Bloc-notes : du clic à la saisie
  • 13. Touches finales : donner l'impression d'être un système d'exploitation

Introduction

Construire un système d'exploitation à partir de zéro est l'une des expériences les plus difficiles et les plus enrichissantes que vous puissiez vivre en tant que développeur. Contrairement au développement d'applications de haut niveau, où une bibliothèque existe pour presque tout, le développement de systèmes d'exploitation vous oblige à travailler au plus près du métal, en touchant directement le matériel, en gérant manuellement la mémoire et en contrôlant tous les aspects du fonctionnement de votre machine.

D'après mon expérience, créer un système d'exploitation signifie approfondir le langage assembleur, lutter avec le matériel et lutter contre les crashs, les redémarrages (surtout les redémarrages) et les longues sessions de débogage. Si vous pensez que le débogage d’un chargeur de démarrage est difficile, essayez de le faire sans le luxe des outils modernes. Le développement du système d'exploitation vous amène à remettre en question vos choix de vie plus de fois que vous ne pouvez le compter.

Cela dit, décomposons tout cela, du chargeur de démarrage à un environnement de bureau entièrement fonctionnel où vous pouvez déplacer une souris et ouvrir un éditeur de texte pour taper.


1. Le chargeur de démarrage : lancer les choses

Qu'est-ce qu'un chargeur de démarrage ?

Le bootloader est la première étape de tout parcours de développement de système d'exploitation. Lorsque votre ordinateur s'allume, le BIOS prend le relais, vérifie votre matériel, puis charge votre chargeur de démarrage du disque vers la mémoire. Le travail de ce petit programme consiste à préparer le processeur et à charger le noyau de votre système d’exploitation en mémoire. Vous devez écrire le bootloader en assembleur car vous traitez directement du matériel à ce stade.

Lorsque le chargeur de démarrage démarre, le processeur est en mode réel 16 bits, ce qui signifie qu'il ne peut adresser que 1 Mo de mémoire. La première chose à faire est de charger le noyau depuis le disque et de le déplacer vers la mémoire. Après cela, le chargeur de démarrage fait passer le processeur en mode protégé 32 bits, c'est là que le plaisir commence. Le changement de mode nécessite la configuration de la Global Descriptor Table (GDT) pour gérer les segments de mémoire et l'activation du Protection Enable (PE) dans le registre de contrôle du processeur. Si vous vous trompez, le système se bloque ou se bloque dans une boucle de démarrage, ce qui m'est arrivé plus de fois que je ne voudrais l'admettre.

Mode réel vs mode protégé

En mode réel, tout est super limité – registres 16 bits, accès mémoire 1 Mo, aucune protection mémoire. C'est pourquoi passer en mode protégé est si important. Une fois en mode protégé, votre processeur a accès à des registres 32 bits, à un adressage mémoire plus grand et à des fonctionnalités avancées telles que le multitâche et la pagination (mémoire virtuelle). Le chargeur de démarrage a pour objectif de rendre cette transition fluide.


2. Entrer dans le noyau : là où la magie opère

Une fois que le processeur passe en mode protégé, le chargeur de démarrage confie le contrôle au noyau. Le noyau est le cœur du système d'exploitation et est responsable de tout gérer : le matériel, la mémoire, les processus et les ressources système.

Lorsque le noyau démarre, il doit configurer plusieurs systèmes critiques :

  1. Paging: Ini ialah skim pengurusan memori yang membolehkan OS memberikan setiap proses ruang memori mayanya sendiri. Tanpanya, semua proses akan berkongsi memori yang sama, iaitu resipi untuk bencana.
  2. Pengendalian Gangguan: Kernel perlu mengendalikan gangguan, yang merupakan isyarat daripada perkakasan (seperti papan kekunci atau pemacu cakera) bahawa sesuatu memerlukan perhatian segera. Untuk melakukan ini, anda perlu mentakrifkan Jadual Deskriptor Interrupt (IDT), yang memetakan gangguan kepada fungsi pengendali tertentu dalam kernel.
  3. Penjadualan Tugas: Dalam mana-mana OS yang menjalankan berbilang proses, kernel memerlukan cara untuk mengurus masa CPU. Penjadual menentukan proses mana yang mendapat masa dan masa CPU, memastikan sistem responsif dan cekap.

Membina inti ialah tugas yang panjang dan kompleks, tetapi ia juga merupakan salah satu yang paling bermanfaat. Di sinilah anda dapat melihat kerja dalaman sistem pengendalian dan mengawal setiap butiran kecil tentang cara mesin anda berkelakuan.


3. Memilih Bahasa Anda

Apabila membina OS, anda perlu memilih bahasa pengaturcaraan yang sesuai untuk setiap tugas. pemuat but biasanya ditulis dalam pemasangan, kerana anda perlu mengawal perkakasan secara langsung. Walau bagaimanapun, sebaik sahaja anda berada dalam mod dilindungi dan menggunakan kernel, kebanyakan pembangun bertukar kepada C kerana ia memberikan anda kawalan tahap rendah tanpa perlu menulis segala-galanya dalam pemasangan.

Sesetengah pembangun menggunakan C++ untuk pembangunan kernel, kerana ia menawarkan ciri berorientasikan objek yang boleh memudahkan pengurusan sistem yang kompleks. Walau bagaimanapun, C++ dilengkapi dengan overhed tambahan, dan pengurusan memori dalam C++ boleh menjadi lebih rumit dalam persekitaran OS. C memberikan anda kuasa mentah dan kesederhanaan yang diperlukan untuk pengaturcaraan sistem.


4. Keselamatan: Jangan Terhempas Kapal Terbang

Dalam pembangunan OS, keselamatan adalah kritikal. Tidak seperti pengaturcaraan peringkat tinggi, di mana ranap sistem mungkin hanya bermaksud mesej ralat atau penutupan aplikasi, dalam pembangunan OS, ranap sistem biasanya bermaksud but semula sistem penuh. Anda bekerja dengan memori secara langsung, yang bermaksud jika anda merosakkan pengurusan memori, anda boleh merosakkan data sistem, menulis ganti struktur penting atau menyebabkan panik kernel.

Inti perlu melaksanakan perlindungan memori untuk menghalang satu proses daripada menimpa memori yang lain. Ini dilakukan menggunakan paging, yang memetakan setiap proses ke ruang memori mayanya sendiri. Jika anda salah melakukan ini, keseluruhan sistem menjadi tidak stabil, dan anda akan mengejar pepijat memori selama beberapa hari. Percayalah, saya pernah ke sana.


5. Mengoptimumkan Kepantasan

Kelajuan ialah faktor utama dalam menjadikan OS anda berasa responsif. Kernel yang perlahan bermaksud sistem yang perlahan, jadi pengoptimuman untuk prestasi adalah penting. Berikut ialah beberapa bidang utama yang menentukan kelajuan:

  • Pengendalian Gangguan: Daripada sentiasa mengundi untuk input (yang membazirkan kitaran CPU), anda harus menyediakan gangguan perkakasan. Dengan cara ini, CPU hanya bertindak balas apabila terdapat input sebenar, seperti penekan kekunci atau paket rangkaian tiba.
  • Penjadualan Tugas: Penjadual yang baik akan mengimbangi masa CPU antara proses dengan cekap, memastikan tiada proses berlaku sepanjang masa CPU manakala yang lain kelaparan. Terdapat banyak algoritma penjadualan yang berbeza untuk dipilih, seperti round-robin atau berasaskan keutamaan penjadualan.
  • Lazy Loading: Jangan muatkan semuanya ke dalam memori sekaligus. Laksanakan kelui permintaan, di mana hanya bahagian program yang sebenarnya digunakan dimuatkan ke dalam memori. Ini membantu menjimatkan memori dan mempercepatkan prestasi sistem.

6. Menyediakan Pemacu Asas

Sekarang anda telah menjalankan kernel, tiba masanya untuk membina pemacu untuk berinteraksi dengan perkakasan. Pemacu ialah jambatan antara OS anda dan perkakasan, membolehkan OS berkomunikasi dengan perkara seperti papan kekunci, paparan dan pemacu cakera.

6.1 Pemacu Video

Pada mulanya, OS anda mungkin akan bermula dalam mod teks, di mana anda mencetak aksara terus ke memori video (biasanya di alamat 0xB8000). Ini bagus untuk nyahpepijat dan output asas, tetapi akhirnya, anda akan mahu beralih ke antara muka pengguna grafik (GUI). Ini memerlukan pemacu video yang boleh mengurus kawalan tahap piksel, resolusi skrin dan kedalaman warna.

Menyediakan pemacu video ialah langkah besar ke arah mencipta OS grafik, tetapi ia juga merupakan salah satu tugas yang lebih kompleks kerana ia melibatkan pemahaman cara perkakasan paparan anda berfungsi dan mengurus sejumlah besar data untuk setiap bingkai.

6.2 Pemacu Papan Kekunci

pemacu papan kekunci ialah salah satu bahagian terpenting dalam OS interaktif. Apabila anda menekan kekunci, papan kekunci menghantar kod imbasan ke CPU. Tugas pemacu papan kekunci adalah untuk menterjemahkan kod imbasan itu kepada watak atau tindakan yang boleh difahami oleh OS. Ini melibatkan penyediaan pengendali gangguan untuk IRQ1, gangguan perkakasan yang dihasilkan oleh papan kekunci.

Sebaik sahaja pemacu papan kekunci berfungsi, anda boleh mula membina antara muka pengguna yang lebih kompleks, mengambil input daripada pengguna dan memproses arahan.

6.3 Pemandu I/O

Pemacu I/O ialah perkara yang membolehkan OS anda membaca dan menulis ke cakera. Ini penting untuk perkara seperti memuatkan atur cara, menyimpan fail dan menyimpan data. Pada mulanya, anda mungkin akan berinteraksi dengan cakera menggunakan gangguan BIOS, tetapi apabila OS anda matang, anda akan mahu beralih ke lebih banyak

kaedah I/O lanjutan yang tidak bergantung pada BIOS, seperti berkomunikasi terus dengan pengawal cakera.


7. Menulis Shell: Antara Muka Pengguna

Sebaik sahaja pemacu asas anda berfungsi, tiba masanya untuk membina shell – antara muka baris perintah (CLI) yang membolehkan pengguna berinteraksi dengan OS. Shell ialah tempat pengguna boleh menaip arahan, melaksanakan program dan berinteraksi dengan sistem fail.

Melaksanakan shell ialah langkah yang menarik kerana ia merupakan salah satu tempat pertama OS anda mula berasa interaktif. Anda perlu mengendalikan input pengguna (dari papan kekunci), memproses arahan dan melaksanakan program. Di sinilah juga anda mula melihat kepentingan keupayaan kernel anda untuk berbilang tugas dan mengurus proses dengan cekap.


8. Membina Sistem Fail Tersuai

sistem fail ialah perkara yang membolehkan OS anda menyimpan dan mendapatkan semula data pada cakera. Walaupun anda boleh menggunakan sistem fail sedia ada (seperti FAT atau ext4), membina sistem fail tersuai anda sendiri memberi anda lebih kawalan dan boleh menjadi cabaran yang menyeronokkan.

Sistem fail asas hendaklah:

  • Peruntukkan ruang pada cakera untuk fail baharu.
  • Jejak nama fail, saiz fail dan metadata.
  • Benarkan membaca dan menulis fail dengan cekap.

Apabila OS anda berkembang, anda juga perlu mengendalikan ciri yang lebih maju seperti:

  • Direktori: Menyusun fail ke dalam hierarki.
  • Kebenaran: Mengawal siapa yang boleh membaca, menulis atau melaksanakan fail.
  • Pecahan: Menangani fail yang terpecah merentas berbilang kawasan cakera.

Merancang sistem fail adalah sukar kerana ia melibatkan pengimbangan prestasi, kebolehpercayaan dan kemudahan penggunaan. Sistem fail yang direka bentuk dengan buruk boleh menyebabkan kerosakan data, prestasi perlahan atau ruang terbuang pada cakera.


9. Menambah Pemacu Tetikus: Klik dan Alih

Sekarang OS anda mempunyai CLI dan boleh mengendalikan input papan kekunci, tiba masanya untuk menambah sokongan tetikus. Pemacu tetikus bertanggungjawab untuk menjejaki pergerakan tetikus dan menterjemahkannya ke dalam tindakan pada skrin seperti menggerakkan kursor atau mengklik butang.

Membina pemacu tetikus melibatkan pengendalian IRQ12, gangguan perkakasan yang dijana oleh tetikus dan memproses data pergerakan. Setelah anda memasang pemacu tetikus, anda boleh mula berfikir tentang membina antara muka pengguna grafik (GUI).


10. Membina GUI Mudah

Satu antara muka pengguna grafik (GUI) membawa OS anda daripada antara muka baris arahan kepada sesuatu yang kelihatan dan kelihatan seperti persekitaran desktop moden. Pada peringkat ini, anda perlu membina tetingkap, butang, menu dan elemen interaktif lain yang pengguna boleh klik dengan tetikus.

Mencipta GUI melibatkan pengurusan perenderan grafik (melukis tetingkap dan ikon), mengendalikan peristiwa input (klik, menekan kekunci, dsb.), dan melaksanakan sistem untuk mengurus berbilang tetingkap dan aplikasi.

Pada mulanya, GUI anda mungkin sangat asas – hanya satu tetingkap yang boleh berinteraksi dengan pengguna. Tetapi apabila OS anda semakin matang, anda perlu menambah ciri yang lebih maju seperti saiz semula tetingkap, fungsi seret dan lepas dan animasi.


11. Mengendalikan Windows dan Acara

Setelah anda menyediakan asas GUI, langkah seterusnya ialah membina sistem untuk mengurus tetingkap dan acara. Ini melibatkan pengendalian berbilang tetingkap serentak, setiap satu berpotensi menjalankan aplikasi yang berbeza dan memastikan setiap tetingkap menerima peristiwa input yang betul (seperti klik tetikus atau penekanan papan kekunci).

Anda juga perlu melaksanakan tetingkap perintah-z (tetingkap yang mana di atas), meminimumkan/memaksimumkan dan menyeret. Di sinilah keadaan mula berasa lebih seperti persekitaran desktop tradisional.


12. Mencipta Apl Notepad: Dari Klik ke Taip

Untuk menjadikan GUI anda lebih berfungsi, anda perlu membina aplikasi asas, seperti apl Notepad. Apl Notepad ialah editor teks ringkas yang membolehkan pengguna menaip, mengedit dan menyimpan fail. Membina apl seperti ini melibatkan:

  • Mengendalikan input teks dari papan kekunci.
  • Memaparkan teks ke skrin.
  • Membenarkan operasi fail asas seperti buka, simpan dan tutup.

Ini adalah latihan yang hebat dalam menyusun segala-galanya: GUI anda, sistem fail anda dan pengendalian input anda semuanya dimainkan di sini. Sebaik sahaja anda mempunyai apl Notepad yang berfungsi, anda akan mempunyai asas OS yang berfungsi sepenuhnya.


13. Sentuhan Akhir: Menjadikannya Terasa Seperti OS

Pada ketika ini, OS anda berfungsi, tetapi sentiasa ada butiran kecil yang membuatkannya terasa lebih gilap. Perkara seperti:

  • Akaun dan kebenaran pengguna: Membenarkan berbilang pengguna mempunyai tetapan dan fail mereka sendiri.
  • Rangkaian: Menambah sokongan untuk TCP/IP supaya OS anda boleh menyambung ke Internet.
  • Panggilan sistem: Mencipta antara muka yang boleh digunakan oleh aplikasi untuk berinteraksi dengan kernel.

Setiap butiran kecil yang anda tambah mendekatkan OS anda kepada perasaan seperti sistem yang lengkap. Ia adalah proses yang panjang dan mencabar, tetapi pada akhirnya, anda akan mencipta sesuatu yang benar-benar unik - sistem pengendalian yang dibina dari awal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!