Hogyan írjunk operációs rendszert. Hogyan lehet bővíteni az operációs rendszert a számítógéphez

A gyermekek számára készült lázcsillapító szereket gyermekorvos írja fel. De vannak olyan helyzetek, amelyek nélkülözhetetlen segítséget nyújtanak láz esetén, ha a gyermeknek hanyagul kell arcot adnia. Ezután az apák magukra vállalják az újraélesztést és abbahagyják a lázcsillapító készítményeket. Mit lehet adni a csecsemőknek? Hogyan lehet csökkenteni a hőmérsékletet idősebb gyermekeknél? Melyek a legbiztonságosabb arcok?

Az "NT" rövidítés a marketingben az "New Technologies"-t jelenti, de a tervdokumentációban mást jelentett. A jobb oldalon, amikor a Windows NT-t felbontották egy új, 1988-ban még nem kiadott Windows NT-re, Intel processzor i860. A bula Yogo kódneve "N10" ( N T hu).

Az első verzió - Windows NT 3.1 - 5 év után jelent meg, 1993-ban adták ki. Jelenleg a csapatnak már 250 kiskereskedője volt.

Windows ma

  • 1 milliárd coristuvachiv
  • 140 millió sornyi kód (beleértve a tesztkódot és az eszközöket)
    A Windows kódja más. Néhány része 20 éve íródott, de csak a jelenlegi verzióban jelentek meg. Például a Web Services on Devices (WSD) kódja Windows Vista Az első verzióban használatos, a GDI kód ​​a fejlesztés utolsó szakaszában van és nem változtatható, a DirectX kód már jól kidolgozott, de folyamatosan változik.
  • 8000 kiskereskedő
  • 36 mov lokalizáció
  • 20 éves forgalmazás

Rozrobka Windows

20-30 évvel ezelőtt egyetlen programozási módszertan, a „Waterfall” volt győztes. A sorozat nyertese:

Specifikációk → Tervezés → Megvalósítás → Tesztelés → Szállítás.

De ez a módszertan csak kis projekteknél praktikus. Egy ilyen termékhez, például a Windowshoz, más módszerekre van szükség:

  • Termékciklus modell
  • Csapatszoftver folyamat
  • "Extrém programozás"

Mindezen módszereknek vannak hiányosságai. A Windows különböző kiskereskedői csoportjainál a parancs fejlesztési ugar és a komponens fejlesztési szakasza megállítja a fejlesztés eltérő módszertanának fejlődését.
A Windows, mint termék egésze esetében a termékciklus-modell díjazásban részesül:

  • Időtartam 3-4 hónap
  • Középkor - "vízesés"

Egy ilyen nagyságrendű termék kifejlesztésének legnagyobb problémája az, ha valaki, aki rendelkezik a technológiával, időt szakít rá. A gubacs szakaszban ott vannak azok a problémák, amelyek időben és kézenfekvő módszerekkel nyilvánvalóak. Ale'dina gazdag lett, tse azokkal, hogy minden megváltozik. A ringatáshoz:

  • Változhatunk
  • Változási lehetőség
  • Változás előtt áll a menetrend
  • Projektváltás
  • Coristuvachi változás

Függetlenül attól, hogy a különböző csapatok eltérően oszlanak meg, alkalmazzon "univerzális" szabályokat:

  • Köztes verziók (mérföldkövek, béta, CTP) kiadása a tesztelők széles skálája számára
  • Belső gyűjtemények kiadása rövid ciklusokból (1 doba)
  • Egyszerűség és kiváló tervezés
  • Jellemzők és parancskód olvasás
  • Egységtesztek
  • Ellenőrző tesztek (Build Verification Tests)
  • A Be-yaké promizhne hajtogatott lehet buti yakіnim (azokat lehet gyakorolni, amiket írnak)

Kijelölöm magamnak, hogy egy hónapig a Windows 7 build 6801-el dolgozom fő operációs rendszerként. otthoni számítógép, pozitív benyomásom volt erről a választásról.

A Windows megnyitásának teljes folyamata egy kis hajtogatást kér:

  • Termék impulzus
  • Rozrobka semmilyen módon nem pripinyaetsya
  • Schodenne automatikus tesztelés
  • Integráció a korai szakaszban
  • Vidpovidalnіst kiskereskedők
  • Nyilvánvaló malom a termékhez

Ha korábban csak egy kopoltyú volt a kilépési kódban, és az összes kereskedő módosította azt. A padlóburkolat-kereskedők Naraz csapata nagyszerű, de nem működik. A személytelen gіlok támogatja, köztük van a fő WinMain. A bőrlaboratóriumnak saját helyi gyártósora van, a változtatásokat a yakuba integrálják. A konvertált módosítások integrálva vannak a WinMainnel.

Schoden fejlesztési ciklus:

  • 15:00 - Belépés a kilépési kód vezérlő rendszerébe történő változtatás integrációjába
  • Tárhely 6 verzió (ingyenes/ellenőrzött – x86, x64, IA64)
  • 18:00 - Új verziók tesztelhetők
  • Az új verzió több ezer munkaállomásra és szerverre van telepítve tesztelés céljából
  • Automatizálási stresszteszt
  • 05:00 - A tesztprotokollokat elemzik, a hibákat diagnosztizálják
  • 09:00 – A hívások automatikusan elküldésre kerülnek a csapatoknak
  • 09:30 A Kerivnikiek Nemzeti Rada a Célok Eléréséért Csapatok

A projekt minden résztvevője, beleértve a legjelentősebb szerzőket is, a jövőbeli verziókat vikorizálja munkahelyi (vagy otthoni) számítógépén.

Miért írják a Windowst?

  • C, C++, C#, Assembler (x86, x64, IA64)
    Az összeszerelők zastosovuyutsya kommunikálni a kicserélt obsyazі csendes helyzetekben, ha nem tud nélküle
  • Visual Studio, Source Insight, build, nmake
  • Source Depot - külső szövegek vezérlésére szolgáló rendszer
  • WinDbg, KD, NTSD - tulajdonosok

Számos belső eszköz, például a build, beszerezhető a microsoft.com/whdc/devtools webhelyről.

Kernelek módosítása Windows 7 rendszerben

A Windows 7 kernel a következő változásokat ismerte fel:

  • Refaktorálás
    Miért nem látja a Windows grafikus alrendszerét?
    Nekem úgy tűnik, hogy a Windows grafikus alrendszere nem független, hanem a Win32 alrendszer része.
    A Windows 7 sok alacsony kategóriás összetevő-refaktorálást tartalmaz, hogy felszámolja az elavultságot. A Corystuvacham nem bánja, csak új Dll-eket jelentenek be, például a kernel32.dll-t a kernel32.dll-be és a kernelbase.dll-be forgácsolták.
    A szünet lehetővé tette a minimális kernel megtekintését, ami a MinWin (20 megabájt a lemezen).
  • EFI támogatás x86-hoz és x64-hez (mint például a Vista SP1)
    Sok virobnik próbálja rákényszeríteni a BIOS-t az EFI kapzsiságára.
  • Rögzítés VHD-ről (virtuális merevlemez)
  • A bővítmények párhuzamos inicializálása és a szolgáltatások elindítása
    Amikor a Windows elfoglalt, sok időt vesz igénybe a fabővítmények befejezése. A PNP menedzser feladata a buszmeghajtók (PCI, USB, FireWire, stb.) kivizsgálása, valamint a hozzájuk való csatolás. A processzor többnyire addig ellenőrzi, amíg a melléklet megerősítést nem kap (vagy nem). Adzhe ahhoz, hogy kijelöljön egy mellékletet a buszon, meg kell tapasztalnia őket. Ha van bűz, akkor a bűz válaszol, ha pedig nem, akkor csekket hoznak, és a processzor tétlen. Ezzel párhuzamosan a vikonannya tsikh zavdan hamarosan egy óra zavantazhennya.
  • Látható Dispatcher-zár a tervezőből és PFN-zár a memóriakezelőből
    A processzorok többi órajel-frekvenciája nem növekszik, és a számok számának növelésére szolgáló kód kidolgozása párhuzamos az utasítással mind az egy magon, mind a rendszer egyenlőén (többmagos) ). A zvyazku z tsimnél Bulo végzett nagyszerű robot enyhén csökkentett méretezés.
    Két "legmagasabb" zár, amelyek a magban voltak, de a diszpécserzárat és a PFN zárat eltávolították.
    Diszpécserzár Az egész lokot eltávolították, és a "mutatás" folyamát sprattokra osztották:
    • Mutatás: Folyamatban
    • Finomítás: kész
    • Mutatva: elismerte
    Feltörték a PFN-zárat, hogy megváltoztassák a memória fizikai oldalainak attribútumait. A többprocesszoros skin rendszerben a processzort ugyanahhoz a területhez való hozzáféréssel működtették, ami nagyszerű órákhoz vezetett.
  • Pidtrimka 256 logikai processzorok
    Korábban a Windowsban a gépszót affinitásmaszkként kezelték. Az egészet áttörték azokon, amelyekről olyan könnyű volt tudni a megfelelő processzorokat – a bőrt verte a processzor. Nyilvánvaló, hogy egy 32 bites rendszerben 32 logikai processzor volt, a 64 bites rendszerben pedig 64.
    A Windows 7 rendszerben az affinitásmaszk szegmensmodellre való áttérés eredményeként 256 logikai processzor támogatása vált lehetővé. A processzorok elkezdték csoportosítani a csoportokat/szegmenseket. Egy bőrcsoport legfeljebb 64 processzorral rendelkezhet. Emiatt nagy a káosz, a régi programok kisebb valószínűséggel lesznek egy csoportban processzorok, az új, új felülettel rendelkező programok pedig velünk, processzorokkal dolgoznak a rendszerben.
  • Az energiatakarékosság javítása: a processzorfoglalatok engedélyezése Manapság az energiatakarékosság nemcsak a laptoptulajdonosok, hanem az adatközpontok vezetői számára is komoly problémát jelent. Az áram 2%-át számítógépes adatközpontok szolgáltatják. Sokan közülük szervereik egy részét egy órára alacsony aktivitású coristuvachs (hétvégén) tartják.
    Bulo z'yasovano, scho vidnіshe tartalmazza a teljes protsessorny aljzat, alacsonyabb egy mag per kіlkoh, tk. Ily módon a teljes socket támogató infrastruktúra (memóriavezérlő) kikapcsolható.

Támogassa a Windows frissítést

A korábbi frissítések többnyire kumulatívak (akkumulatívak). Ez azt jelentette, hogy ha a megbocsátott kódot megbosszulják az összetevő korai frissítésében, akkor a későbbi verziók kegyelmi kódok lesznek. De nem minden coristuvachának van szüksége minden frissítésre, a bűz megváltoztathatja a konfigurációt.

A kiadás után (RTM) a Windows a kimeneti kód 2-es verziójával rendelkezik:

  • RTM GDR (General Distribution Release)
    Tartalmazza azokat az apró változtatásokat, amelyeket mindenki felismer. Jobb biztonságfejlesztés.
  • RTM LDR (korlátozott terjesztésű kiadás)
    Az ügyfélfrissítés telepítésének hónapja Windows Update válassza ki a kívánt kódot, és írja be a kódot.

Biztonsági frissítés

A biztonsági frissítés létrehozásának munkája az inkonzisztencia megnyilvánulásán alapul. Є masa különböző utak megnyilvánulás - belső parancsok bezpeki, bezpeki partnerek, kiskereskedők. Ha ellentmondásra derül fény, 2 párhuzamos folyamat indul el:

  • Javítások fejlesztése minden platformra
  • Keresse meg az "opciók" kifejezést
    A furcsaságok hasonló változatainak nagyszabású keresése minden platformon. Poshuk megegyezik a kóddal, de hasonló.

A javítás felülvizsgálata után megkezdődik a kód újbóli ellenőrzése. Ha a bűz befejeződött, a korrekció beépül a raktárba, és a raktárt tesztelésre küldik:

  • Kézi és automatikus alkatrészek tesztelése
  • Fájlformátumok automatikus tesztelése, egyesített komponensek stb. (Több mint egymillió lehetőség)
  • A rendszer egészének tesztelése, beleértve a pezsgőfürdő tesztelését is

Csak a minőségi kritériumainknak megfelelő módosítások adhatók ki a Windows Update and Download Centerben.

  • Következő >

Az "Operating System from 0 to 1" című könyv a GitHubon jelent meg, és több mint 2000 csillagot és 100 villát tartalmazhat. Amint érti a neveket, a її elolvasása után létrehozhatja saját operációs rendszerét - és talán a világon kevés programozó lehet menő.

Zavdyaki tsіy knizi megtanulod a támadást:

  • Ismerje meg, hogyan hozhat létre operációs rendszert a csarnok műszaki dokumentációja alapján. A való világban ez így működik, a Google-nek nem lehet kezeskedni a svéd véleményért.
  • Ismerje meg, hogyan hatnak egymásra a számítógép-összetevők egyenként, a szoftvertől az aljáig.
  • Tanulj meg saját magad kódot írni. Nem jó ötlet vakon másolni a kódot, megtanulod a problémák megoldását. A beszéd előtt a vakmásolás nem biztonságos.
  • Opanuyte az összes elsődleges eszközt az alacsony szintű bővítéshez.
  • Ismerje meg szerelőmet.
  • Magyarázza el, hogy a programok miért vannak olyan operációs rendszerként összeállítva, amely elindítja őket. Egy kis pillantást kaptunk a részegeknek valókra.
  • Találjuk ki, hogyan végezzünk programfejlesztést közvetlenül a platformon a GDB és a QEMU segítségével.
  • Nyelvi programozás: S. Shvidko Jógát tanulhatsz.
  • Linux alapismeretek. Elég a honlapunkon látni.
  • Fizikai alapismeretek: atomok, elektronok, protonok, neutronok, feszültség.

Segítő az x86 rendszer kerneljének létrehozásához. 1. rész. Csak a mag

Írjunk egy egyszerű kernelt, így a rendszerbetöltő GRUB x86-rendszer segítségével beszerezhetjük. A teljes mag megjelenik a képernyőn és a képernyőn.

Hogyan kerül bele egy x86-os rendszer?

Először írjuk meg a kernelt, és nézzük meg, hogyan veszi át a rendszer és adja át az irányítást a kernelnek.

A processzor több regisztere az azonos számú érték előtti óra elején. Az utasítások címén megadott regiszter (Instruction Pointer, EIP) felveszi a memória címét, így írja ki az utasítást a processzor. EIP előleg fizetéshez 0xFFFFFFFF0. Ily módon az x86-os processzorok hardver szinten a 0xFFFFFFFF0 címre küldik a robotot. Valójában 16 bájt 32 bites címtér van. Ezt a címet visszaállítási vektornak nevezzük.

Most a lapkakészlet memóriakártya garantálja, hogy a 0xFFFFFFF0 a BIOS részhez tartozik, nem a RAM-hoz. Ugyanakkor a BIOS a RAM-ba másolja magát, hogy többet megtudjon svéd hozzáférés. A 0xFFFFFFF0 címek már nem utasítások a memóriában lévő címre való ugrásra, a BIOS másolatának törlésére.

Így törik a BIOS kód. A BIOS hátulján találhatók a csatolmányok, melyeket a megállapított sorrendben lehet kihasználni. Shukaetsya mágikus szám, amely azt jelenti, chi є priyy zavantazhuvalnym (az első szektor 511 és 512 bájtja felelős 0xAA55).

Ha a BIOS tud egy érdekes mellékletet, akkor az első szektor helyett egy másolatot adok a RAM-hoz, a fizikai címtől kezdve 0x7c00; majd menjen a címre, és nézze meg az beszerzési kódot. Ezt a kódot hívják rendszerbetöltő.

A Bootloader a kernelt egy fizikai címre hajtja 0x100000. Ez a cím nyer kiindulási címet az x86-os rendszerek összes nagyszerű kerneljéhez.

Minden x86 processzor elindítja a robotot egy egyszerű 16 bites módban, amit ún valódi mód. A GRUB rendszerbetöltő 32 bites módot vált lopási mód, a CR0 regiszter alsó bitjének beállítása 1 . Ily módon a kernel zavantazhuetsya 32 bites védett módban.

Ügyeljen arra, hogy a Linux kernel GRUB Linux rögzítési protokollokat futtat, és valós módban rögzítse a kernelt. A mag független a rablási módtól.

Mire van szükségünk?

  • x86-számítógép;
  • Linux;
  • ld (GNU Linker);

Belépési pont beállítása az assemblerben

Nem akartam, hogy egy C körül vegyen, volt lehetőségem assemblerben írni. Írunk rá egy kis fájlt, ami a kernelünk kiindulópontja lesz. Minden, ami működőképes - hívó függvényt hív, C-ben van írva, hogy zupinyati potik programokat.

Hogyan tudjuk elérni, hogy ez a kód a kilépési ponton obov'yazkovo legyen?

Létrehozunk egy script-linkert, amely objektumfájlokat hoz létre a végleges fájl létrehozásához. Ezzel a szkripttel elmondhatjuk, hogy adatokat szeretne lekérni a 0x100000 címre.

Tengelykód az assemblerben:

kernel.asm bits 32 ;nasm direktíva - 32 bites szakasz . .bss resb 8192 ;8 KB a verem stack_space számára:

Az első utasítás, a 32. bit nem x86 assembler utasítás. Ez egy direktíva a NASM assembler számára, amely beállítja a processzorkód generálását, amely 32 bites módban működik. A mi vipadkánk nem obov'yazkovo, hanem csavart skarlátvörös.

Egy másik sorból a szakasz a kóddal kezdődik.

Globális – egy másik NASM direktíva, amely a kimeneti kód szimbólumait globálissá teszi. Ily módon a linker tudja, hogy hol található a start szimbólum – a belépési pontunk.

kmmain – ugyanaz a funkció, mint a kernel.c fájlhoz lesz rendelve. extern azt jelenti, hogy a funkció itt egy másik területen szólal meg.

Indítsuk el a függvényt, amely meghívja a kmmain függvényt és elindítja a processzort a hlt utasítással. Emiatt a cli utasításait is módosítanunk kell.

Ideális esetben látnunk kell egy kis memóriát, és meg kell mutatnunk egy veremjelzővel (esp). Úgy tűnik azonban, hogy a GRUB már most megöli helyettünk. Tim nem kisebb, de mindegy, láthatunk néhány helyet a BSS szekcióban, és áthelyezhetjük a veremjelző csutkájára. A megadott számú bájt lefoglalására a resb utasítást használjuk. Közvetlenül a kmain weekly előtt a veremjelző (esp) a mov utasítás kívánt helyére van állítva.

Kernel C-ben

A kernel.asm esetében eltávolítottuk a kmain() függvényre történő gyorskattintást. Ily módon az aktuális kódunk módosítható a kmmain() -ból:

/* * kernel.c */ void kmmain(void) ( const char *str = "az első kernelem"; char *vidptr = (char*)0xb8000; //video mem itt kezdődik. unsigned int i = 0; unsigned int j = 0;< 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; }

Csak annyit kell tennünk, hogy a kernelünk létrejöjjön, hogy töröljük a képernyőt az „első kernelem” sorban.

Először létrehozunk egy vidptr indikátort, amely a címen jelenik meg 0xb8000. A védett módban lévő tsієї címekből a videomemória javításra kerül. Szöveg képernyőn történő megjelenítéséhez 25 sort foglalunk le, 80 ASCII karakterből, 0xb8000-től kezdve.

A szimbólum nem 8, hanem 16 biten jelenik meg, maga a szimbólum az első bájtból, az attribútum-byte pedig a másik bájtból származik. Vin formázást rendel egy szimbólumhoz, például a yogo színt.

A zöld színű szimbólum megjelenítéséhez a fekete levéltetűn az első bájtba ezt a szimbólumot írjuk, a másikba pedig a 0x02 értéket. A 0 feketét, a 2 pedig a szöveg zöld színét jelenti.

Tengely színtáblázat:

0 - fekete, 1 - kék, 2 - zöld, 3 - cián, 4 - piros, 5 - bíbor, 6 - barna, 7 - világosszürke, 8 - sötétszürke, 9 - világoskék, 10/a - világoszöld, 11/b - Világos cián, 12/c - halványpiros, 13/d - Világos bíbor, 14/e - Világosbarna, 15/f - Fehér.

Magunkban világosszürke szöveg lesz fekete levéltetűben, így a bájt attribútum értéke 0x07.

Az első ciklusban a program egy üres szimbólumot jelenít meg a teljes zónára 80×25. Törölje a képernyőt. A következő ciklusban az „első kernelem” null-végződésű sor karakterei a „videomemóriába” íródnak 0x07-es attribútumbájttal. Tse villogott egy sort a képernyőn.

Boldog rész

Felelősek vagyunk a kernel.asm objektumfájllá való konvertálásáért a NASM segítséghez; Segítsünk a GCC-nek még egy objektumfájlt lefordítani a kernel.c-nek. Potim їх szükséges, hogy jöjjön zavantazhuvalnoe mag, scho vykonuєtsya.

Amelyhez vikoristovuvat zv'yazyuchy szkriptet, amely ld érvként kerül átadásra.

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

felteszem kimeneti formátum mint a 32 bites végrehajtható és összekapcsolható formátum (ELF). Az ELF az x86 architektúrájú Unix rendszerek szabványos bináris fájlformátuma. BELÉPÉS Egy argumentumra van szükség, amely hozzárendeli azt a karakterhez, amely a belépési pont. SZEKCIÓK- a legfontosabb része. Megjeleníti a fájlunk elrendezését, amely meg van jelölve. Mi vyznaєmo, jak lehet z'dnuvatisya különböző szakaszok és de їх remіstiti.

A SZEKCIÓK utáni bilincseknél egy pont (.) jelzi a 0x0 promóció pozíciójelzőjét. Megváltoztathatja, hogy miként dolgozunk.

Megnéztük a következő sort: .text: ( *(.text) ) . Zіrochka (*) - ez egy speciális karakter, amely bármilyen fájlnévhez használható. A Viraz *(.text) az adott bemeneti fájlokból származó összes szakaszt.szöveg.

Ily módon a linker az objektumfájlok kódjának összes szakaszát egyesíti a fájl egy szakaszába, amelyet a cím követ a helykeresőben (0x100000). A lichnik következő értéke drágább 0x100000 + az eltávolított szakasz mérete.

Hasonlóképpen más szakaszokra is vonatkozik.

grub és multiboot

Most az összes fájl készen áll a kernel létrehozása előtt. Ale, elvesztett még egy horgolást.

Használja a szabványos x86-kernel-rögzítést a rendszerbetöltő verzióból, amely az ún Multiboot specifikáció. A GRUB csak akkor zavarja a kernelünket, ha megfelel ezekkel a specifikációkkal.

Öröklődés, a kernel az első 8 kilobájtban képes lecserélni a fejlécet. Ezenkívül ez a fejléc 3 mezőért, azaz 4 bájtért felelős:

  • mágikus mező: bosszúbűvös szám 0x1BADB002 kernel azonosítására.
  • terület zászlókat: nincs rá szükségünk, állítsuk nullára
  • terület ellenőrző összeg: a jógát a kettővel előre hajtani, nulla a hibás.

A kernel.asm-ünk a következő lesz:

;;kernel.asm ;nasm direktíva - 32 bites bit 32 szakasz .text ;multiboot spec align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;ellenőrző összeg. m+f+c guilty buti 0 Global start extern kmain ;kmain a c file startban van definiálva: cli ;blokk megszakítja a mov esp, stack_space parancsot ;set veremmutató hívása kmain hlt ;leállítja a CPU szakaszt .bss resb 8192 ;8KB a verem stack_space számára :

Mi leszünk a mag

Most hozzuk létre az objektumfájlokat a kernel.asm és kernel.c fájlokból, és kapcsoljuk össze őket a szkriptünkkel.

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

A következő sor az assembler futtatása a kasm.o objektumfájl ELF-32 formátumú létrehozásához.

Gcc -m32 -c kernel.c -o kc.o

A "-c" opció biztosítja, hogy a fordítás után ne legyen láncolt kapcsolat.

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

Tehát futtassa a linkert a szkriptünkkel, és hozzon létre egy fájlt, amelynek neve kernel.

Most már grub és futtathatja a kernelt

A GRUB ellenőrizze, hogy a rendszermag neve megfelel-e a minta kernel- . Szóval változtasd meg a kernelt. Az enyém kernel-701 hívása.

Most tegye a jógát a könyvtárba /csomagtartó. Akinek szüksége van a szuperkoristuvacha jogaira.

Adja hozzá a következőket a grub.cfg GRUB konfigurációs fájlhoz:

Cím myKernel root (hd0,0) kernel /boot/kernel-701 ro

Ne felejtse el rendbe tenni a hiddenmenu direktívát sem.

Indítsa újra a számítógépet, és ellenőrizze a magok listáját a sajátjával. Válaszd a jógát, és táncolni fogsz:

Tse a magod! Dodamo a bemutatkozási/látogatási rendszer.

P.S.

  • Bármilyen alapból származó trükk esetén jobb, ha nyersz egy virtuális gépet.
  • A kernel futtatásához grub2 A config így néz ki: "kernel 7001" menü (set root="hd0,msdos1" multiboot /boot/kernel-7001 ro
  • Ha fel akarja törni a qemu emulátort, törje fel: qemu-system-i386 -kernel kernel

Eredeti: AsmSchool: Készíts operációs rendszert
Szerző: Mike Saunders
Megjelenés dátuma: 2016. április 15
Fordítás: A. Panin
Fordítás dátuma: 2016. április 16

4. rész: Kezdőként hagyja abba a sorozat korábbi cikkeinek olvasását, elkezdheti építeni a saját operációs rendszerét!

Mire való?

  • A fordítói munka elveinek megértéséhez.
  • A központi processzor utasításainak megértéséhez.
  • A kód optimalizálása a termelékenység érdekében.

Hosszú hónapokig jártunk egy hajtogató ösvényen, amely az egyszerű assembly nyelv fejlesztéséből fejlődött ki Linuxra, és a sorozat utolsó cikkében egy önellátó, személyi számítógépen írható kód kifejlesztésével ért véget. operációs rendszer nélkül. Nos, egyszerre megpróbáljuk összegyűjteni az összes információt, és létrehozni egy megfelelő operációs rendszert. Tehát vessünk egy pillantást Linus Torvalds módszerére, de a cob varto vіdpovіsti kedvéért a következő erőn: "Milyen az operációs rendszer? Milyen funkciókat tudunk elvégezni?"

Ebben a cikkben kevésbé összpontosítunk az operációs rendszer fő funkcióira: a zavantazhenny és a vykonanny programokra. Az összecsukható operációs rendszerek több funkcióval is rendelkeznek, például virtuális memóriakezeléssel és -feldolgozással hálós zacskók, de ezek helyes megvalósítása problémamentes munkát igényel, ezekben a cikkekben csak a fő funkciókat láthatjuk, mint minden operációs rendszerben. Múlt hónapban szakítottunk kis program, a Yaka a hajlékonylemez 512 bájtos szektorába került (az első szektorok egyike), és ezzel egyidejűleg még néhány troch hozzáadható a lemezről további adatok rögzítésének funkciójához.

Rozrobka rendszer zavantazhuvach

Megpróbálhatnánk a lehető leggyorsabban kommunikálni operációs rendszerünk bináris kódjával úgy, hogy azt a hajlékonylemez első 512 bájtos szektorába helyezzük, ugyanabba, amit a BIOS zavantazhuetsya, de ebben az esetben nem lehet megvalósítani a hajlékonylemez funkcióit. Ezért 512 bájtot választunk ki egy egyszerű rendszerrögzítő bináris kódjának elhelyezésére, amely rögzíti az operációs rendszer kernelének bináris kódját. működési memóriaés legyőzni a jógát. (Ha lehetséges, magát az operációs rendszer kernelt is bővíthetjük, illetve más programok bináris kódját is lefoglalhatjuk a lemezről és vikonuálhatjuk is, de erről egy kicsit kevesebbet mondunk.)

Ki tudod használni kilépési kód megtekintette a cikket segítségért: www.linuxvoice.com/code/lv015/asmschool.zip. És itt van a rendszerünk rögzítésének kódja a boot.asm fájlból:

BITS 16 jmp rövid indítás; Ugrás a címkére ugrás lemezleírás nop; Kiegészítés a lemezleírás előtt %include "bpb.asm" start: mov ax, 07C0h; Célcímek mov ds, ax; Adatszegmens mov ax, 9000h; Verem előkészítése mov ss, ax mov sp, 0FFFFh; A verem lefelé emelkedik! cld; Beállításjelző közvetlenül mov si, kern_filename hívás load_file jmp 2000h:0000h; Ugrás az operációs rendszer kernelének bináris kódjára, amelyet a kern_filename db "MYKERNELBIN" fájl rögzített, %include "disk.asm" szor 510-($-$$) db 0 ; A bináris kód kiegészítése nullákkal 510 bájtig dw 0AA55h; A rendszerrögzítési puffer bináris kódjának végének megjelölése: ; Cob puffer lemezterületért

Ebben a kódban a központi processzor első utasítása a jmp utasítás, mivel a következő BITS direktíva rejtve van, amely megmondja a NASM assemblernek azokat, amelyek nyerik a 16 bites módot. Ahogy énekelve emlékszel a sorozat előző cikkére, a BIOS, amely az 512 bájtos bináris kód lemezéről a zavantazhuetsya eszközzel, a csutkától indul, de meg kell változtatni az átmenetet a kihagyás jelére. speciális készlet Danich. Nyilvánvaló, hogy az elmúlt hónapban egyszerűen csak ráírtuk a kódot a lemezre (a dd segédprogram segítségére), és üresen hagytuk a lemezt.

Egyszerre egy hajlékonylemezt kell konvertálnunk egy másik MS-DOS (FAT12) fájlrendszerrel, és ahhoz, hogy megfelelően működjön ezzel a fájlrendszerrel, hozzá kell adni egy speciális adatkészletet egy szektorhoz. kukoricacső. Ezt a készletet BIOS-paraméterblokknak (BPB) hívják, és olyan adatokat kell tartalmaznia, mint a lemezcímke, a szektorok száma stb. Vіn nem hibás abban, hogy ebben a szakaszban elmondta nekünk, amelyhez több cikksorozat is szentelhető hasonló témákban, amelyekhez a világ minden instrukciót közzétett, és a bpb.asm okreme kódfájlban megadta.

A fentieken túl ez a kódexünkben található irányelv rendkívül fontos:

%include "bpb.asm"

Ez egy NASM direktíva, amely lehetővé teszi, hogy a fájlhoz rendelt kimeneti kódot a kimeneti kódfolyam fájl elé helyezze az összeállítási folyamatba. Így a lehető legrövidebbé és érthetőbbé tehetjük rendszerrögzítőnk kódját, amely tartalmazza a BIOS paraméterblokk megvalósításának minden részletét egy okremium fájlba. A BIOS paraméterblokk a szektor kezdete után három bájt után köteles bővülni, és mivel a jmp utasítás csak két bájtot vesz fel, a nop utasítást ) kell kiválasztanunk bájt kitöltési módszerrel, ami kimarad.

Robot egy verem

Dali Hozzuk Vikroistovati іNKrutsії, Analogіchni воломныму на мульій statt, az pіd készítmények reg_v ta verem, és Torzozhіyi CLD (Rosysiflowing Jak "Clear irány"), Scho Doszoloє Poshimi Porpor közvetlen énekel Іnstrurtsiy, mint Jak іnkstruvіya LODSB, Yaka Pіsl її Vicannya változtassa meg az SI regiszter értékét, de ne változtassa meg.

Ezután beírjuk a sor címét az SI regiszterbe, és meghívjuk a load_file függvényünket. Ale zamislitsya on khvilina - aje mi még nem bővítette ezt a funkciót! Tehát ez igaz, de a megvalósítás egy másik fájlban található a csatlakoztatott kimeneti kóddal, lemez.asm néven.

A FAT12 fájlrendszer, amelyet hajlékonylemezeken használnak és MS-DOS-ban formáznak, az egyik legegyszerűbb alapelem. fájlrendszerek, de a robotoknál s її helyett a chimali is kell a kódhoz. A load_file alprogram körülbelül 200 soros lehet, és ebben a cikkben nem fog szerepelni, de láthatjuk az operációs rendszer bővítésének folyamatát, és nem a dalfájlrendszer illesztőprogramját, ezért nem bölcs dolog ilyen rangot mutatni a magazin oldala. Végül gyakorlatilag a kimeneti kódfolyam fájl befejezése előtt hozzáadtuk a disk.asm kimeneti kódfájlt, és elfelejthetjük. (Mivel a FAT12 fájlrendszer felépítése még mindig megragadta, ezt egy csodálatos pillantással megtudhatja a http://tinyurl.com/fat12spec címen, majd megnézi a disk.asm kódfájlt - egy olyan kódot, amely megtalálható az új, jó kommentekben.)

Bármilyen okból kifolyólag, a load_file alprogram rögzíti a bináris kódot a nevű fájlból, állítsa be az SI regisztert, a 2000-es szegmenst 0 értékkel, ezután kell ugrani a videó első csutkájára. És ez minden – az operációs rendszer magját kihasználták, és a rendszert is kihasználták a nyomában!

Éneklősen említetted, hogy a MYKERNELBIN az operációs rendszer kernelének fájljaként helyettesíti a MYKERNEL.BIN-t a kódunkban, mivel az illeszkedik a DOS-ban hajlékonylemezeken nyert 8 + 3 elnevezési sémába. Valójában a FAT12 fájlrendszer rendelkezik a fájlnevek belső deklarációjával, és a helyet védjük, fájllá alakítva, mivel garantáltan nem kerül megvalósításra a load_file programunkban, a pont szimbólumát jelző mechanizmusban. hogy a fájlrendszer belsőleg megváltozott.

A disk.asm kimeneti kódfájlt tartalmazó direktívát tartalmazó sor után két sor került hozzáadásra, amelyek nullákat adnak a rendszerrögzítés bináris kódjához 512 bájtig, és tartalmazzák a bináris kód végének jelét. (a cikkek száma alapján történt). Itt a kódhoz hasonlóan a "puffer" címke is el lett rejtve, hogy nyerjen a load_file alprogram alatt. Zagalom, a load_file alprogram nagy helyet foglal el a RAM-ban néhány közbenső feladat végrehajtásához a folyamat során, hogy egy fájlt küldjön a lemezre, és elegendő szabad helyünk lehet, ha a zavantazhuvach rendszer foglalt, ezért bővítjük maga a puffer itt.

A rendszerindító összeállításához kövesse a következő parancsot:

nasm -f bin -o boot.bin boot.asm

Most létre kell hoznunk egy virtuális hajlékonylemez képét MS-DOS formátumban, és támadó parancsok segítségével hozzá kell adni a rendszerrögzítőnk bináris kódját az első 512 bájthoz:

Mkdosfs -C floppy.img 1440 dd conv=notrunc if=boot.bin of=floppy.img

Kinek, a folyamat rozrobki rendszer zavantazhuvach vvazhatimutsya befejezni! Most egy floppy hajlékonylemezről készíthetünk képet, amely lehetővé teszi az operációs rendszer kernelének bináris kódjának rögzítését a mykernel.bin és vikonati yoga nevű fájlból. Csekket adtak nekünk a robot egy részére - az operációs rendszer magjának fejlesztésére

Operációs rendszer kernel

Szeretnénk, ha az operációs rendszer magja felülírná a személytelen fontos feladatokat: távolítsa el a leállást, fogadja el a bemenetet coristuvacha-ként, állítsa vissza a támogatott paranccsal, és a coristuvach bevitele után távolítsa el a programokat a lemezről. Íme az operációs rendszer kernelkódja a mykernel.asm fájlból:

Mov ax, 2000h mov ds, ax mov es, ax loop: mov si, prompt call lib_print_string mov si, user_input call lib_input_string cmp byte , 0 je loop cmp word , "ls" je list_files mov cx, fail_ 3 movj 32768 jmp hurok hívása load_fail: mov si, load_fail_msg hívás lib_print_string jmp hurok list_files: mov si, file_list call lib_get_file_list call lib_print_string jmp loop prompt db 13, m3 ", 0 user_input time 0 libas 25 "dblist time 0 libas . "

Mielőtt megnézné a kódot, ellenőrizze a sor többi részét a direktívával, hogy tartalmazza a lib.asm kódfájlt, amely szintén megtalálható a webhelyünk asmschool.zip archívumában. A kék alprogramok könyvtára képernyővel, billentyűzettel, sorokkal és lemezekkel, valamint csavarható robotokhoz - így a kimeneti kódfájlt az operációs rendszer kernel kimeneti kódjának főfájljának végéhez kapcsoljuk a baloldal rablása érdekében. Az összes elérhető szoftverről további információért lépjen vissza a "Library Software Software lib.asm" disztribúciójához.

Az operációs rendszer kernelének kódjának első három sorában a 2000-es szegmensbe történő beillesztéshez adatokban kell kitölteni a szegmensek regisztereit, amelyeket a bináris kódból vettünk. Az ilyen utasítások, mint például a lodsb, garantáltan helyes működéséhez fontos, mivel a streaming szegmensből kell adatokat olvasni, nem pedig mást. Emiatt nem sértjük meg a szegmensek éves többletműveleteit; Operációs rendszerünk 64 Kb működési memóriával hatékony!

Jelet adtak a kódban, ami megerősíti a ciklust a csutkán. Bemutatjuk az egyik alprogramot a lib.asm könyvtárból, és magát a lib_print_stringet az adatok megjelenítéséhez. Az ébresztési sor előtti 13. és 10. bájt az új sorra való átállás szimbóluma, az ébresztés kezdete nem közvetlenül az ébresztés után jelenik meg, legyen szó programról, hanem újból induljon. sor.

Ha a lib.asm könyvtárból egy másik alprogramot használunk, akkor azt lib_input_string -nek fogom hívni, így a bevitelt a billentyűzet segítségére billentyűparancsként fogadjuk el, a pufferből mentő szimbólumot, melynek felhasználóneve a címen található. az SI regiszter. Esetünkben a puffer fülsiketítő az operációs rendszer kernelének kódjának végéhez közeledve a következő sorrenddel:

Felhasználói_beviteli idők 256 db 0

Dane vakon megengedi, hogy 256 karakterből álló startpuffert hozzon létre, nullákkal kitömve – lehet, hogy elég idő lesz egy ilyen egyszerű operációs rendszer parancsainak felszedésére, mint a miénk!

Áttekintést adtunk a coristuvach bevezetéséről. Mint a user_input puffer első bájtja nulla, csak az Enter billentyű lenyomásával, parancs beírása nélkül; ne felejtse el, hogy minden sor null karakterrel végződik. Ebben a rangban ebben az esetben az én hibám, hogy egyszerűen a ciklus elejére megyek, és újrakezdem a ciklust. Ha azonban először beírjuk ezt a parancsot, előfordulhat, hogy az ls parancs beírása helyett vissza kell fordítanunk. A jelen pillanatig az assemblerem programjainkban többet nézhetett, mint az okrém bájtok kiegyenlítését, de ne feledkezzünk meg azokról sem, amelyekkel kétbájtos értékek vagy gépszavak is kiegyenlíthetők. Ennek a kódnak az első gépi szava a user_input pufferből az ls i sornak megfelelő gépi szóval ebben a sorrendben, mintha a bűz azonos lenne, és az alatta található kódblokkba kerül. Ennek a kódblokknak a keretein belül a lib.asm könyvtárból egy másik alprogramot kell hozzáadnunk, hogy eltávolítsuk a coma által terjesztett fájlok listáját a lemezen (melyek mentéséhez a file_list puffer a hibás), ezt a listát jelenítjük meg. a képernyőn, és lépjen vissza a feldolgozáshoz.

Harmadik féltől származó programok Wiconn

Ha nem akarja beírni az ls parancsot, akkor értesíteni fogjuk, hogy a programot a lemezről futtatom, ezért érdemes megpróbálni beszerezni. A lib.asm könyvtárunk a lib_load_file alapvető alprogram megvalósítását váltja fel, a lemez FAT12 fájlrendszerének táblájának elemzésére: a segédregiszter fájl neve után a sor cob-ján lévő jelzőt veszi fel. AX, valamint a CX fájltámogatási program extra ország nevének értéke. A coristuvacha bevezetésével már megnyertük az SI regisztert a sor indikátorának kiválasztásához, így ezt a mutatót bemásoljuk az AX regiszterbe, ami után feltesszük a 32768 értéket, amely zsuv-nak van kiválasztva a bináris kód rögzítéséhez. a CX programfájlt.

De miért van szükségünk ugyanarra az értékre, mint a zsuv-nak egy programfájlból bináris kód rögzítéséhez? Nos, ez csak az egyik változata annak a kártyának, amely az operációs rendszerünk memóriáját formálta. Azokon keresztül, amelyek egy 64 Kb méretű szegmensben praktikusak, és a rögzítési rendszermagunk bináris kódja 0, ezeknél a kerneleknél az első 32 Kb memóriát, a rögzítéshez pedig a 32 Kb reshta-t kell módosítanunk. programok közül. Ebben a rangsorban a zsuv 32768 a szegmensünk közepe, és lehetővé teszi, hogy elegendő hozzáférést biztosítson a működési memóriához, mint az operációs rendszer magjához, valamint az összegabalyodott programokhoz.

Ha a lib_load_file szubrutinnak van egy még fontosabb művelete: ha nem találja a megadott nevű fájlt a lemezen, vagy valamilyen oknál fogva nem tudja eltávolítani a lemezről, akkor egyszerűen befejezze a robotot és állítsa be a speciális porting flag (carry flag). Az I. zászlós központi processzor lesz, amely bizonyos matematikai műveletek győzelme során kerül telepítésre, és jelenleg nem tudjuk hívni, de ha lehet, jelezhetjük ennek a zászlósnak a jelenlétét az okos döntések elfogadásához. Ahogyan a lib_load_asm alprogram beállítja az átviteli jelzőt, úgy a kódblokkhoz ugráshoz szükségünk van a jc utasításra (jump if carry), melynek keretein belül figyelmeztetés van a bocsánatról és a cob bekapcsolása a bevezetés feldolgozásának ciklusáról. a coristuvach.

Ugyanakkor a telepítések átvitelének hiánya jeléül lehetőség van egy visnovok létrehozására, így a lib_load_asm alprogram sikeresen betöltötte a bináris kódot a programfájlból a RAM-ba a 32768-as címen. És ezen felül, mivel ebben a programban lesz egy ret utasítás (a kódot hívó kódká alakításhoz), vétkesek leszünk, ha egyszerűen a koristuvach bevezetésének feldolgozási ciklusába fordulunk. Ezzel egy operációs rendszert hoztunk létre: a parancsok értelmezésének legegyszerűbb mechanizmusaiból és a hozzávetőleg 40 sor assembler kód határán megvalósított programok bonyolultságából áll, pedig van egy remek súgó a lib.asm könyvtárból. .

Az operációs rendszer kernelkódjának összeállításához kövesse a következő parancsot:

Nasm -f bin -o mykernel.bin mykernel.asm

Miért adjuk hozzá a mykernel.bin fájlt a hajlékonylemez-képhez? Mint tudod, a lemezképek további visszacsatolási mellékletek mögé történő csatlakoztatásához elérheti a floppy.img lemezképet annak letöltésével, vagy használhatja a GNU Mtools eszközt (www.gnu.org/software/mtools). Az MS-DOS / FAT12 fájlok tárolására szolgáló hajlékonylemezeken lévő robotok számára készült programkészlet ára az összes népszerű Linux disztribúció szoftvercsomagjában található tárolóból elérhető, így véletlenül gyorsabb lesz az alkalmas segédprogrammal. get, yum, pacman, vagy legyen az valamilyen más segédprogram, amely feltöri a szoftvercsomagok telepítését a disztribúciójában.

A vidpoid szoftvercsomag telepítése után a mykernel.bin fájlnak a floppy.img lemezképfájlhoz való hozzáadásához a következő parancsot kell használnia:

Mcopy -i floppy.img mykernel.bin::/

Adjon tiszteletet a mulatságos szimbólumoknak a kіntsi parancsokban: két fogantyú, két fogantyú és perjel. Most már készen is állunk az operációs rendszerünk elindítására, de miféle esze van valakinek, amíg nincs hozzá kiegészítés? Javítsuk ki ezt az érthetetlenséget, miután egy egyszerű kiegészítést tettünk az élhez. Tehát ezzel egyidejűleg egy kiegészítést fog kidolgozni a saját operációs rendszeréhez - csak mutassa meg, mennyivel nő a tekintélye a gikiv soraiban. Az aktuális kód mentése a test.asm fájlból:

Org 32768 mov ah, 0Eh mov al, "X" int 10h ret

Ez a kód egyszerűen a BIOS funkció segítségével megjeleníti az "X" karaktert a képernyőn, ami után elforgatja a vezérlőkódot, hogy rákattintson - véleményünk szerint ez a kód az operációs rendszer kódja. A Row org , amelyre a program kimeneti kódját nem a központi processzor, hanem a NASM assembler utasítása indítja el, ezekről emlékeztet arra, hogy a bináris kód belegabalyodik a 32768 működési memóriájába. .

Ez a kód is összeállítást igényel, és az eredményben használt bináris fájl hozzáadódik a hajlékonylemez képfájlhoz:

Nasm -f bin -o test.bin test.asm mcopy -i floppy.img test.bin::/

Most mélyen, készüljön fel arra, hogy megnézze a teljesítményrobot tökéletesítetlen eredményeit, és rögzítse a hajlékonylemez képét egy PC-emulátor, például a Qemu vagy a VirtualBox segítségével. Például a tsієї meti esetén a következő parancsot verheti:

Qemu-system-i386-fda floppy.img

Voila: a rendszerrögzítés boot.img , amelyet a lemezkép első szektorába integráltunk, rögzíti a mykernel.bin operációs rendszer kernelét, hogy megjelenítse a buszt. Írja be az ls-t a két lemezen szétszórt fájl nevének eltávolításához (mykernel.bin és test.bin), majd írja be a fennmaradó fájl nevét, hogy az X karakter is megjelenjen a képernyőn.

Ez klassz, nem? Most megkezdheti az operációs rendszer parancshéjának módosítását, új parancsok implementációinak hozzáadását és fájlok hozzáadását. további programokat lemezre. Ha ezt az operációs rendszert valódi PC-n szeretné futtatni, akkor vissza kell térnie a sorozat első cikkének "Rendszerindító futtatása valódi hardverplatformon" szakaszához - magukra a parancsokra van szükség. A következő hónapban megnehezítjük operációs rendszerünket, lehetővé téve, hogy a zavantazhuvannym programok elnyerjék a rendszerfunkciókat, és ily módon, megvalósítva az alkód koncepcióját, közvetlenül a rövid távú duplikációhoz. Még több robot áll előttünk.

A lib.asm könyvtár alprogramjai

Amint azt korábban említettük, a lib.asm könyvtár az alapvető alprogramok nagyszerű készletét kínálja az operációs rendszer kerneleiben való gépeléshez. okremih programok. Fellépéseik vikoristovuyut іnstruktsії ta kontsії, yakі eddig egyetlen cikk sem ієї sorozat, іnshі (így, mint a lemezes robotokhoz készült szoftverek) szorosan kapcsolódnak a fájlrendszerek csatolásának jellemzőihez, de ennek ellenére kompetensnek kell tekintenie magát ezekben a táplálkozásban , hibáztathatod, hogy megismerd a megvalósításukat és fedezd fel a munka alapelveit. Ami még fontosabb, azt fontos megbeszélni, hogyan hívjuk ki a mesterkódból:

  • lib_print_string - vegyük a null karakterrel végződő sor jelzőjét az SI súgóregiszter mögött, és jelenítsük meg ezt a sort a képernyőn.
  • lib_input_string – elfogad egy mutatót az SI segédregiszter mögötti pufferre, és ezt a puffert feltölti a kiegészítő billentyűzet mögötti bemeneti fájl által beírt karakterekkel. Az Enter billentyű lenyomása után a puffer sora null karakterrel zárul, és a vezérlő a hívó programkódra kerül.
  • lib_move_cursor - a kurzort arra a pozícióra mozgatja a képernyőn, amelyen a DH (sorszám) és DL (raktári szám) segédregiszterek koordinátái vannak átadva.
  • lib_get_cursor_pos - csúsztatva hívja az alprogramot a folyam sorszámok lekéréséhez és a DH és DL segédregiszterek helyére érvényes.
  • lib_string_uppercase - elfogadja a sorfej jelzőjét, amely null karakterrel végződik az AX segédregiszter után, és a sorkaraktereket nagybetűre fordítja.
  • lib_string_length - az AX segédregiszter után vegyük a null karakterrel végződő sor csutkáján lévő jelzőt, és fordítsuk az indexet az AX segédregiszter fölé.
  • lib_string_compare – két cob indikátort fogad el, amelyeket null karaktersorok zárnak le az SI és DI regiszterekben, valamint fordított sorokat. Állítsd át a zászlót úgy, hogy a sorok azonosak legyenek (a jc transzfer zászlóra való átálláshoz a pozícióváltáshoz), vagy lásd ugyanazt a zászlót, mintha a sorok különböznének (az utasítás módosításához). jnc).
  • lib_get_file_list - elfogadja a jelzőt a puffer cob-ján a további SI-regiszterhez, és a pufferbe helyez egy sort, amely null karakterrel végződik, hogy eltávolítsa a fájlnevek listáját a lemezről.
  • lib_load_file - elfogadja a sor jelzőjét a cob-on, amely lecseréli a fájlt, az AX és zawantage segédregiszterhez, a CX segédregiszterhez átvitt ofszet helyett. A memóriabájtokból másolt másolatok számát (a fájl kibontásához) fordítsa meg a további BX regiszterhez, vagy állítsa be az átviteli jelzőt, ha a megadott névről nem található fájl.

A WikiHow a wiki elvet követi, ami azt jelenti, hogy sok cikkünket sok szerző írja. Amikor a statisztikákat összevonták a її szerkesztésekkel és rövidítésekkel, 90 osib lett kezelve, beleértve a névtelenséget is.

A több százezer kódsorból összehajtott operációs rendszerek lehetővé teszik a coristuvach-ok számára, hogy számítógépes technológia. A stinkeket C, C ++ és assembler nyelvi programokkal írják.

Kroki

    Kezdetnek tanulj meg programozni. Az assembly nyelv ismerete szükséges; Javasoljuk, hogy az anyák megértsék az egyéb, alacsonyabb szintű kiegészítőket és programokat, például az S.

    Vznachte, valamiféle csatoláshoz be kell fektetni az operációs rendszerbe. Lehet CD, DVD, Flash memória, merevlemez vagy más számítógép.

    Verishit, amelyre szüksége van az operációs rendszer bachitjához. A Chi tse az operációs rendszer új verziója lehet grafikus felülettel (GUI) chi, talán minimalistabb? Szükséges, hogy tudd, olyan módon, amely közvetlenül összeomlik a folyamat csutka előtt.

    Adja meg, hogy az operációs rendszer melyik processzorplatformot támogatja. Az AI-32 és az x86_64 a két legnagyobb bővítési verzió személyi számítógépek, Ön is kiválaszthatja a legjobb választást.

    Te vagy az, aki a nullától függetlenül szeretne mindent megdolgozni, melyek azok a magok, amelyek alapján szeretné feldobni a rendszert. A Linux a semmiből egy projekt azoknak, akik szeretnék például saját Linux disztribúciót létrehozni.

    Válaszd ki, hogy melyiket választod a saját mestered vagy a Grand Unified Bootloader (GRUB) megnyeréséhez. A gazdaprogramok kódolásának szilánkjai a számítógép biztonsági helyiségének és a BIOS-nak nagy ismeretét kívánják meg, vagy módosíthatja a kernel programozásának ütemezését, ami megtehető.

    Döntse el, hogyan mozgassa programozását, amikor úgy dönt, hogy nyer. Zvichayno, amennyire csak lehetséges olyan operációs rendszert fejleszteni, mint az enyém, mint a Pascal vagy a BASIC, vagy inkább írjon C-ben vagy assemblerben. Az Assembler feltétlenül szükséges, mert az operációs rendszer fontos részei magának a nyelvnek a ismeretét igénylik. C++ új verzió OS.

    • Ha további C vagy C ++ kódokhoz szeretne operációs rendszert választani, akkor természetesen válasszon egy fordítót, majd egy másikat. Ez azt jelenti, hogy Ön köteles elolvasni a kiválasztott C/C++ fordító kézikönyvét/utasításait/dokumentációját, amely a készletben található. szoftverbiztonság vagy a forgalmazó honlapján. Ismerned kell a fordítót, sőt, a teljes C ++-hoz ismerned kell a sémát és az ABI-t. Valójában Ön megérti a győztes fejek különböző formátumait (ELF, PE, COFF, az elsődleges bináris toshcho), és ne feledje, hogy hivatalos formátumban A Windows PE (.exe) szerzői jogvédelem alatt áll.
  1. Válassza a Programming Interface (API) lehetőséget. Az egyik legjobb jó API a POSIX, de nincs jól dokumentálva. Minden Unix rendszer képes elfogadni a POSIX javítást, így triviális lenne Unix programokat csatolni az operációs rendszerhez.

    Vegye fel a kapcsolatot a tervezéssel. Hozzon létre monolitikus magokat és mikromagokat. A monolitikus kernelek a kernelben lévő összes szolgáltatást futtatják, ugyanakkor a mikrokernelek egy kis kernelt is futtathatnak az alapvető szolgáltatások megvalósításában. A monolit magok segítségével ez jobb, de a mikromagok javíthatják a szigetelést és megvédhetik az esetleges meghibásodásokat.

    Tekintse meg a fejlesztésről és a csapatban végzett munkáról szóló információkat. Ebben a rangban kevesebb, mint egy órára van szüksége a nagy problémák megoldására, és lehetővé teszi az operációs rendszer létrehozását rövid kapacitás rövid időre.

    Ne törölje újra a merevlemezt. Ne feledje, hogy a lemez formázása véglegesen törli az összes adatot! Csípje meg a GRUB-ot vagy egy másik kezelőt a számítógép más operációs rendszerről való másolásához, amíg a verziója ismét funkcionálisan készen nem áll.

    Kezdje kicsiben. A tiszteletet a dribnitsán az első sorba fordítani, hogy az átírás szövege felé haladjon először a hajtogatási elemekig, például az adott gazdag feladat memóriájának kezeléséhez.

    Tartson biztonsági másolatot a fennmaradó működő verzióról.Éppen ezért olyan nyugodt jelenleg, abszolút hibás az operációs rendszered jelenlegi verziója és a hamarosan megjelenő kiegészítők. Amikor a számítógép meghibásodik, ez a lehetetlenség összegabalyodik, amint azt maga is megérti, csodálatos módon egy másik példány megnyilvánulása lesz a robot számára, így Ön javíthatja a hibákat.

    Tesztelje az új operációs rendszert Virtuális gép. A számítógép újbóli cseréje után változtatás vagy fájlok átvitele a tesztgép működő számítógépéről, megnyerheti a programot, hogy futtassa az operációs rendszert a virtuális gépen, majd az operációs rendszer folytatja a folyamat futtatását. A VM-bővítmények közé tartozik a VMWare (amely a szervert is ingyenesen elérhetővé teszi), az alternatív forráskód, a Bochs, a Microsoft Virtual PC (nem őrült a Linuxtól) és az XVM VirtualBox.

    Adja ki a kiadási verziót. Ez lehetővé teszi a koristuvachok számára, hogy elmondják Önnek az operációs rendszer lehetséges hiányosságait.

  2. Az operációs rendszer egy koristuvach számára is hasznos lehet, ne felejtsd el hozzátenni alapvető funkciókat hogy a tervezés láthatatlan részévé váljon.

    • Ha a terjesztés befejeződött, gondolja át, hogy a kódot szabad hozzáféréshez szeretné-e adni, vagy magánjogokat kíván-e beállítani.
    • Ha azt szeretné, hogy rendszere életképes legyen, tegye a biztonsági funkciókat elsődleges prioritásnak.
    • Ne kezdje az operációs rendszer fejlesztési projektjét a programozás megtanulásának módszerével. Ha nem ismeri a C-t, C++-t, Pascalt, vagy bármilyen más képessége van, beleértve az indikátortípusokat, az alacsony szintű bitekkel végzett műveleteket, a csaták közötti váltást és az assemblert, az azt jelenti, hogy nem áll készen a létrehozásra. egy OS.
    • Tekintse meg ezeket a portálokat, például az OSDev-t és az OSDever-t, amelyek segítenek az operációs rendszer fejlesztésében. Külön tisztelje meg azokat, akiket jobban megmozgat az OSDev.org akarata, így Ön önállóan fordult az oldalhoz, és nem jött el a fórumra. Azonban ti mindannyian vyrishili jöttek a fórum tagjainak lávájába, akiknek a hibája miatt meg kellene gondolnia magát. Te vagy a felelős a C vagy C++ és a mov x86 assembler ismeretéért. Ön felelős azért is, hogy megértse a programozás mély és összetett megértését, mint például a linkelt listák, a sorok stb. Az OSDev politikája, hogy közvetlenül beszél azokról, akik nem úgy döntenek, hogy új programozókat ápoljanak. Hogy sikerül bővíteni az OS-t, rájöttem, hogy "isten" vagy a programozás terén. A munkafüzetet a választott architektúra processzorával is el kell olvasnia; például x86 (Intel), ARM, MIPS, PPC stb. Egy ilyen útmutató a processzor felépítéséről könnyen megtalálható egy további Google kereséshez (Intel Manuals, ARM kézikönyvek stb.). Ne regisztráljon az OSDev.org fórumra, hogy nyilvánvaló hírfolyamokat tegyen közzé. Csak felhozom, hogy ismételjem meg a "Read the ***ing Manual" kshtalt. Ha hibás vagy, próbáld meg elolvasni a Wikipédiát, segíts a különféle eszközökhöz, ahogy a győzelem mellett döntesz.
    • Fordítsa meg a lehetséges holtpontok és más kegyelmek jelenlétét. A Nedolіki, bezvikhodі és іnshі problémák befolyásolhatják az operációs rendszer tervezését.
    • Ha a legegyszerűbb módot szeretné, mutasson meg olyan Linux disztribúciókat, mint a Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd vagy SUSE Studio és SUSE KIWI. Tim nem kisebb, az operációs rendszer, ami történik, a cégnek elsőként be kell vezetnie ezt a szolgáltatást (ha van joga bővíteni, módosítani és elindítani, ha szükséges, a GPL alatt).
    • Jó megoldás lenne egy teljesen új részleg létrehozása a fejlesztés alatt álló operációs rendszer számára.

    Előleg

    • Nedbale, ha átírja az operációs rendszert merevlemezre, rossz jóga lehet. Légy tisztelettudó
    • Két nap múlva sem látja újra készen a rendszert. Szabaduljon meg a feltört operációs rendszertől, majd lépjen tovább a fejlettebb anyagokra.
    • Ha kiépítjük, például adatmentes bájtokat írunk néhány I/O portba, akkor tönkretesszük az operációs rendszerünket, és (elméletileg) elégethetjük a birtokunkat.
    • Ne ellenőrizze, hogy könnyű-e felébreszteni az operációs rendszert. Іsnuє személytelen összecsukható kölcsönös függőségek. Például annak érdekében, hogy az operációs rendszert nagyszámú processzorral építsék fel, a memóriakezelő hibás egy „blokkoló” mechanizmusban, amely egyik napról a másikra blokkolja a processzorok hozzáférését ugyanahhoz az erőforráshoz. A Vykoristovuvani blokkok továbbítják a tervező jelenlétét, így egy adott pillanatban csak egy processzor fordul kritikus erőforráshoz, a többi pedig helyreállítási módban van. Védje meg a gyalugép robotját, hogy leessen a memóriakezelő jelenlétében. Tse butt parlagon a vіd vzaєmoblokuvannya. Nincs szabványos módszer az ilyen problémák kezelésére; a bőr a szerzője az operációs rendszernek, hogyan kell ellenőrizni, szerezni képesítést, hogy ismerje a saját elképzelését.
Támogassa a projektet – ossza meg erőfeszítéseit, drágám!
Olvassa el is
Hogyan telepítsem az avast ingyenes víruskeresőt Hogyan telepítsem az avast ingyenes víruskeresőt Hogyan tisztítsuk meg a számítógépet'ютер від вірусів самостійно Hogyan tisztítsa meg a számítógépét a vírusoktól egyedül Hogyan tisztítsuk meg újra a számítógépet'ютер від вірусів Hogyan lehet újra megtisztítani a számítógépet a vírusoktól