Membina sistem pengendalian dari awal ialah salah satu pengalaman paling mencabar dan bermanfaat yang boleh anda miliki sebagai pembangun. Tidak seperti pembangunan aplikasi peringkat tinggi, di mana perpustakaan wujud untuk hampir segala-galanya, pembangunan OS memaksa anda bekerja hampir dengan logam, menyentuh perkakasan secara langsung, mengurus memori secara manual dan mengawal setiap aspek cara mesin anda berjalan.
Dari pengalaman saya, membina OS bermakna mendalami bahasa pemasangan, bergelut dengan perkakasan dan bergelut melalui ranap, but semula (TERUTAMA but semula) dan sesi nyahpepijat yang panjang. Jika anda fikir menyahpepijat pemuat but adalah sukar, cuba lakukannya tanpa kemewahan alatan moden. Pembangunan OS membuatkan anda mempersoalkan pilihan hidup anda lebih banyak kali daripada yang anda boleh kira.
Yang berkata, mari kita pecahkan semuanya, daripada pemuat but kepada persekitaran desktop yang berfungsi sepenuhnya di mana anda boleh menggerakkan tetikus dan membuka editor teks untuk menaip.
pemuat but ialah langkah pertama dalam mana-mana perjalanan pembangunan OS. Apabila komputer anda dihidupkan, BIOS mengambil alih, menyemak perkakasan anda, dan kemudian memuatkan pemuat but anda daripada cakera ke dalam memori. Tugas program kecil ini adalah untuk menyediakan CPU dan memuatkan kernel sistem pengendalian anda ke dalam memori. Anda perlu menulis pemuat but dalam pemasangan kerana anda berurusan secara langsung dengan perkakasan pada peringkat ini.
Apabila pemuat but bermula, CPU berada dalam mod sebenar 16-bit, yang bermaksud ia hanya boleh menangani 1MB memori. Perkara pertama yang perlu anda lakukan ialah memuatkan kernel dari cakera dan memindahkannya ke memori. Selepas itu, pemuat but menukar CPU kepada mod dilindungi 32-bit, di mana keseronokan bermula. Menukar mod memerlukan penyediaan Global Descriptor Table (GDT) untuk mengurus segmen memori dan mendayakan bit Protection Enable (PE) dalam daftar kawalan CPU. Jika anda tersilap melakukan ini, sistem sama ada membeku atau ranap ke dalam gelung but, yang berlaku kepada saya lebih kerap daripada yang saya mahu akui.
Dalam mod sebenar, semuanya sangat terhad – daftar 16-bit, akses memori 1MB, tiada perlindungan memori. Inilah sebabnya mengapa menukar kepada mod dilindungi adalah sangat penting. Setelah berada dalam mod terlindung, CPU anda mempunyai akses kepada daftar 32-bit, pengalamatan memori yang lebih besar dan ciri lanjutan seperti multitasking dan paging (memori maya). Pemuat but adalah tentang membuat peralihan ini berlaku dengan lancar.
Setelah CPU bertukar kepada mod dilindungi, pemuat but menyerahkan kawalan ke kernel. Kernel ialah teras sistem pengendalian dan bertanggungjawab mengurus segala-galanya: perkakasan, memori, proses dan sumber sistem.
Apabila kernel bermula, ia perlu menyediakan beberapa sistem kritikal:
Membina kernel adalah 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.
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 datang 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.
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.
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:
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.
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.
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.
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.
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.
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:
Apabila OS anda berkembang, anda juga perlu mengendalikan ciri yang lebih maju seperti:
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.
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).
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 boleh diklik oleh pengguna 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.
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.
Untuk menjadikan GUI anda lebih berfungsi, anda perlu membina aplikasi asas, seperti apl Notepad. Apl Notepad ialah penyunting teks ringkas yang membolehkan pengguna menaip, mengedit dan menyimpan fail. Membina apl seperti ini melibatkan:
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.
Pada ketika ini, OS anda berfungsi, tetapi sentiasa ada butiran kecil yang menjadikannya lebih digilap. Perkara seperti:
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.
Atas ialah kandungan terperinci Pembangunan OS (Kebenaran). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!