Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Sistemi operativ i ngjashëm me UNIX: shkrimi i kernelit në C. Konfigurimi manual i kernelit Linux

Si të kompozoni krijoni bërthama semantike faqja është e saktë.


Mirëdita, të dashur miq lexues! Sot në këtë artikull dua të diskutoj çështjen e përpilimit të saktë të bërthamës semantike të faqes dhe blogut. Në fund të fundit, një bërthamë semantike e kompozuar saktë është një peng promovim i suksesshëm burim në Motorë kërkimi... Është fakt që thelbi semantik ndikon në natyrën e promovimit.

Para se të shqyrtojmë çështjen e përpilimit të një bërthame semantike, do të doja të sqaroja se çfarë është njësoj një bërthamë semantike?

Kështu që, thelbi semantik i faqes - një listë me fjalë kyçe që karakterizojnë temën kryesore të burimit. Gurutë e SEO-së e kompozojnë atë në mënyrë që e njëjta faqe të shfaqet në motorët e kërkimit pozicionet e larta rezultatet e kërkimit për pyetje të ndryshme kyçe që u përpiluan dhe u përfshinë në listën e bërthamës semantike. Dhe kështu, do të thotë se përpilimi i saktë i bërthamës semantike është një garanci promovim efektiv faqe në motorët e kërkimit për pyetje të ndryshme kërkimi, por tematikisht të ngjashme me njëra-tjetrën.

Përpilimi i bërthamës semantike të një faqeje dhe një blogu është thelbësisht i ndryshëm. Dhe në përgjithësi, thelbi semantik përdoret për blogun vetëm sepse një emër tjetër për këtë ndoshta nuk është shpikur ende.

Prandaj, le të hedhim një vështrim në ndryshimet midis bërthamës për një blog dhe një faqe interneti dhe të vendosim tashmë për metodologjinë e përpilimit të tyre. Thelbi semantik i një blogu nuk është një listë me fjalë kyçe që karakterizojnë temën e blogut; kjo është një listë e fjalëve kyçe për të cilat është planifikuar promovimi. A e ndjeni ndryshimin? Nëse jo, lexojeni këtë edhe disa herë derisa ta kuptoni.

Si të hartoni një bërthamë semantike

Tani le të hedhim një vështrim më të afërt. Nëse në faqe përpilohet bërthama semantike dhe përfshihet në strukturën e sajtit. Ajo bërthamë semantike e blogut është përmbledhja e fjalëve kyçe në programin e shënimeve ose e regjistruar në përgjithësi në një fletore, sipas së cilës blogeri vendosi të kalojë në pozicionet kryesore të motorëve të kërkimit. Kjo do të thotë, thelbi i blogut mund të përshkruhet si një plan promovimi i motorit të kërkimit dhe asgjë më shumë. Është e thjeshtë, ndoshta seoshniki e pluhuros trurin e tyre me të gjitha këto terma, në mënyrë që një fillestar në ndërtimin e faqeve dhe blogging të ikë nga e gjithë kjo. Gjithsesi…

Dhe kështu, thelbi semantik i faqes është i përbërë përafërsisht si më poshtë! Për shembull, ju duhet të promovoni një faqe të dedikuar për shitjen e këpucëve në internet në krye të rezultateve të kërkimit. Më të përshtatshmet janë llogaritur për këtë faqe. fjalë kyçe... Për shembull, duke përdorur shërbimin - Yandex. Dhe kështu ne dërgojmë një kërkesë në shërbim, marrim diçka të tillë.

Shitja e këpucëve ka shumë të ngjarë të përfshihet në titullin e titullit të vetë faqes. Dhe pjesa tjetër do të shkruhet në bërthamën semantike të përpiluar të faqes.

Për shembull, nëse një faqe shet këpucë për fëmijë, atëherë fjala "shitje e këpucëve për fëmijë" duhet të përfshihet në thelb, dhe nëse faqja (dyqan online) nuk është e specializuar në shitjen me shumicë të këpucëve, atëherë nuk ka kuptim të përfshihet fjala kyçe "shitje me shumicë e këpucëve" në thelb ... Në fund të fundit, ky është një përparim i kotë pyetje kërkimi... Në fakt, përpilimi i një bërthame semantike për një faqe është një aktivitet shumë kompleks që kërkon shumë njohuri dhe aftësi.

Si të krijoni thelbin semantik të blogut tuaj

Blog është një çështje tjetër! Ai nuk ka nevojë të formojë thelbin në mënyrë kaq kategorike. Mjafton të hartoni fjalë kyçe që përcaktojnë temën e blogut dhe të shkruani artikuj të optimizuar për to.

Nuk është e nevojshme që një blog të promovojë faqet kryesore, sepse një blog pëlqen ditar elektronik ju mund të krijoni mijëra faqe dhe të promovoni secilën faqe nën disa pyetje kyçe... Për të zbuluar se si të formoni saktë fjalë kyçe, lexoni artikullin mbi zgjedhjen e fjalëve kyçe. Pasi të keni bërë një listë me fjalë kyçe, filloni të shkruani artikuj të optimizuar për to. Kjo eshte e gjitha përzgjedhja e fjalëve kyçe dhe shkrimi i artikujve të optimizuar është përpilimi i bërthamës semantike.

Megjithatë, ekziston një shtojcë për bloget e WordPress. Të gjitha në një paketë SEO në e cila duhet të regjistrojë një listë të fjalëve kyçe që karakterizojnë temën e blogut tuaj. Kjo shtojcë është shumë e dobishme për promovimi i motorit të kërkimit Blogu juaj. Pra, sigurohuni që ta instaloni dhe konfiguroni këtë shtojcë në panelin e administratorit.

Unë do të tregoj në foto se ku të regjistrohet lista e fjalëve kyçe për thelbin e blogut. Këtu është menyja kryesore e shtojcave, këtu duhet të regjistroni fjalët kyçe për të cilat planifikoni të promovoni në motorët e kërkimit.

Pra, për të përshkruar saktë të gjitha këto seksione, duhet të ndiqni një algoritëm të caktuar.

Në titullin e faqes kryesore shkruani emrin e blogut tuaj dhe 1 - 2 fjalë kyçe për të cilat dëshironi të shkoni në krye.

Në përshkrim, ju gjithashtu duhet të bëni disa fjali në të cilat specifikoni gjithashtu 2-3 fjalë kyçe për të cilat dëshironi të arrini majën.

Dhe gjithashtu në kolonën "Fjalë kyçe" ju duhet të zgjidhni nga 10 - 15 fjalë kyçe për të cilat gjithashtu dëshironi të arrini pozicionet kryesore të rezultateve të kërkimit.

Dua të vërej se në këtë kolonë keni vendosur promovimin e faqes kryesore. Nëse zgjidhni fjalët kyçe të duhura atëherë faqja kryesore do të lëvizë lart në motorët e kërkimit për fjalët kyçe të dhëna.

Por pas instalimit të shtojcës, një fushë e ngjashme do t'i shtohet të dhënave, ku tashmë mund të konfiguroni dhe shkruani fjalë kyçe të ndryshme për secilën faqe të veçantë.

Unë mendoj se sot ju thashë se si të kompozoni thelbin semantik të blogut dhe faqes suaj.

Të kompozosh një bërthamë semantike për një blog do të thotë të planifikosh promovimin e fjalë të caktuara... Mos u mbingarkoni duke kompozuar fjalë kyçe dhe duke shkruar artikuj përkatës në blogun tuaj. Kjo është faza e parë optimizimi i brendshëm blogun tuaj.

Epo, nuk ju them lamtumirë, të dashur miq! Deri herën tjetër në artikuj të rinj!

Tani e tutje do të shkruaj gjithnjë e më shumë për optimizimin e brendshëm, pasi është shumë i rëndësishëm. 80% e promovimit të suksesshëm varet nga optimizimi i brendshëm i blogut dhe 20% varet nga faktorët e jashtëm... Mos nxitoni në bursat dhe blini lidhje me blogun tuaj. Në vend të kësaj, përqendrohuni në personalizimin e brendshëm të blogut tuaj. Për të mos humbur artikuj të dobishëm për optimizimin e brendshëm, mos harroni

Përzgjedhja e më të mirëve fakte interesante, hidhini një sy dhe relaksohuni!

Kur filloni të lexoni mësime për promovimin e faqeve në internet, gjithmonë fillon me krijimin e një bërthame semantike. Për fillestarët, ky hap i parë është më i vështiri. Përveç faktit se nuk është menjëherë e qartë se çfarë është kjo bërthamë semantike, nuk është ende e qartë se çfarë qëllimi ka dhe si të krijohet saktë.

Në këtë artikull, ne do të flasim se si të krijojmë saktë thelbin semantik të faqes. Dhe gjithashtu do të mësoni se çfarë është dhe pse është bërë. Në fakt, nuk ka asgjë të komplikuar dhe të vështirë në konceptin e një bërthame semantike. Le ta kuptojmë.

Askush nuk i është përgjigjur ende pyetjes se cila është thelbi semantik i tillë me fjalë të thjeshta siç do të bëjmë tani. Pra, thelbi semantik i faqes është një listë frazash kyçe me të cilat do të promovohet. Gjithçka! E gjithë pika e konceptit në një fjali të shkurtër dhe të qartë. Dhe nuk ka nevojë të turbullosh asgjë me terma të zgjuar.

Nëse futeni më thellë në termin, atëherë semantika është një shkencë që merret me mbushjen semantike të njësive leksikore. Me fjalë të thjeshta, semantika studion kuptimin e diçkaje. V SEO semantike thelbi e bën të qartë kuptimin e të gjithë sajtit, çdo seksioni të tij ose një artikulli të vetëm të zgjedhur. Kjo bëhet e qartë për motorin e kërkimit, vizitorin, të gjithë zhvilluesit që do të punojnë me sitin.

Thelbi semantik, pa ekzagjerim, është themeli i të gjithë përparimit.

Si të përdoret thelbi semantik dhe për çfarë shërben

Funksionet e bërthamës semantike përfshijnë aspektet e mëposhtme të promovimit të faqes në internet:

  • Më së shumti detyra kryesore thelbi semantik është të kuptuarit e strukturës së sitit dhe plotësinë e tij. Duke e parë atë, mund të imagjinoni se cilat seksione do të ketë faqja dhe cilat artikuj do të jenë në secilin seksion. Dhe kështu, të gjitha disavantazhet dhe shqetësimet e strukturës janë menjëherë të dukshme, dhe ato mund të eliminohen në një fazë të hershme.
  • Semantika përcakton vektorin e përmbajtjes. Falë një kuptimi më të mirë të strukturës së faqes, ju mund të zgjidhni frazat kryesore më të rëndësishme dhe efektive.
  • Thelbi semantik është plani i përmbajtjes së faqes për shumë vite në vijim. Sa herë që ju duhet të shkruani artikuj, mund të shikoni atje dhe të shihni se çfarë përmbajtje është planifikuar dhe në cilën pjesë të faqes duhet të jetë.
  • Nëse planifikohet promovim me pagesë siti, për shembull, për shkak të reklamimit kontekstual, atëherë falë thelbit semantik, mund të llogarisni koston e promovimit.

Si të krijoni një bërthamë semantike

Së pari ju duhet të vendosni se ku do të merrni frazat kryesore për kernel. Burimi më i mirë për fillestarët është shërbimi Yandex WordPStat, i cili tregon sa herë në muaj një pyetje e veçantë është futur në kërkimin Yandex. WordStat ka një shumëllojshmëri të funksione të dobishme, për shembull, ju mund të filtroni pyetje sipas rajonit ose pajisjes, të shikoni pyetje të ngjashme dhe shumë më tepër. Dhe më e rëndësishmja, është plotësisht falas. Më shumë për këtë.

Ju mund të përdorni një shumëllojshmëri të programe me pagesë, por për fillestarët, WordStat është më i përshtatshëm për shkak të thjeshtësisë së tij. Përveç kësaj, është i përshtatshëm jo vetëm për Runet, ku mbizotëron Yandex. Nëse po promovoni një faqe brenda CIS, atëherë mund ta përdorni me siguri dhe statistikat në Google do të jenë pothuajse të njëjta.

Thelbi kryesor i krijimit të një bërthame semantike është koleksioni i frazave kryesore që përshtaten disi me temën e faqes. Ato duhet të formalizohen dhe sistemohen disi. Për këtë, tabelat janë më të përshtatshmet, për shembull Excel, tabelat në Google doc ose të ngjashme.

Dhe për efikasitet më të madh, grafikët shtesë mund të shtohen në tabelën thelbësore semantike:

  • Natyrisht, duhet të ketë një grafik me frazën më kyçe.
  • Sigurisht, kolona me emrin e seksionit të faqes ku do të përdoret kjo frazë.
  • Ju mund të shtoni një kolonë me titullin dhe përshkrimin e meta etiketave dhe menjëherë të shkruani një titull dhe përshkrim për artikullin duke përdorur të specifikuar fraza kyçe... Së pari, do të jetë menjëherë e qartë se për çfarë të shkruani një artikull, dhe së dyti, atëherë nuk do të ketë nevojë të hutoni dhe shpikni atë.
  • Ju mund të bëni një kolonë për të treguar numrin e karaktereve në artikull për një frazë kyçe të caktuar, në mënyrë që të kuptoni më mirë planin e përmbajtjes.
  • Kur bëhet fjalë për promovimin reklamat kontekstuale, duhet të shtoni koston e reklamës për çdo kërkesë.
  • Gjithçka që duhet të jetë e nevojshme mund të shkruhet me siguri në tabelën e bërthamës sematike. Nuk ka asnjë model për këtë, kështu që ju mund të bëni çfarë të doni dhe është e përshtatshme atje.

Gabime të zakonshme kur krijoni një bërthamë semantike

Tani ju e dini se si të krijoni saktë thelbin semantik të faqes. Le të hedhim një vështrim në disa nga gabimet e zakonshme që bëjnë SEO fillestarët.

  • Nëse thelbi parashikon ndarjen e faqes në kategori, atëherë gabim i zakonshëmështë krijimi i niveleve të thella të foleve. Niveli i dytë rekomandohet dhe jo më tej. Kjo do të thotë, ju mund të krijoni një titull, një nëntitull, dhe kjo është e gjitha, nuk është më e mundur ta ndani atë më tej në tituj më të vegjël.
  • Fillestarët mund të injorojnë pyetje me frekuencë të ulët, duke qenë se ata besojnë se është jopraktike përdorimi i tyre, ata ende nuk do të sjellin shumë trafik. Por në fakt, e kundërta është e vërtetë. Për një faqe të re, janë pikërisht pyetjet me frekuencë të ulët dhe jo konkurruese ato që nevojiten.
  • Ju nuk mund t'i besoni plotësisht shërbimit me të cilin do të nxirren frazat kryesore. Dhe fillestarët bëjnë pikërisht këtë. Makinat mund të jenë të gabuara dhe të zgjedhin atë të gabuar.
  • Nuk ka nevojë të krijoni një artikull për hir të një fraze kyçe. Nëse gjeni frazat "shes urgjentisht një shtëpi" dhe "shit një shtëpi shpejt", atëherë nuk ka kuptim të bëni dy artikuj të ndryshëm për ta.

UNIX-si sistemi operativ interesante për të analizuar, si dhe për të shkruar kernelin tuaj që do të printojë një mesazh. Epo, të shkruajmë?

Sistemi operativ i ngjashëm me UNIX dhe nisja e një makinerie x86

Çfarë është një sistem operativ i ngjashëm me UNIX? Është një OS i ndikuar nga UNIX. Por, përpara se të fillojmë të shkruajmë një kernel për të, le të shohim se si makina fillon dhe transferon kontrollin në kernel.

Shumica e regjistrave të procesorit x86 kanë vlera të përcaktuara mirë pas ndezjes. Regjistri i treguesve të instruksionit (EIP) përmban adresën e memories për instruksionin e ekzekutuar nga procesori. EIP është i koduar në vlerën 0xFFFFFFF0. Kështu, procesori ka udhëzime të qarta në adresën fizike 0xFFFFFFF0, e cila në thelb është 16 bajt e fundit të hapësirës së adresave 32-bit. Kjo adresë quhet vektori i rivendosjes.

Memoria e çipave tani siguron që 0xFFFFFFFF0 të përshtatet një pjesë të caktuar BIOS, jo RAM. Ndërkohë, BIOS kopjon veten në RAM për më shumë akses i shpejtë... Kjo quhet hijezim. Adresa 0xFFFFFFF0 do të përmbajë vetëm udhëzimet për të shkuar në adresën e memories ku BIOS-i është kopjuar vetë.

Kështu, kodi BIOS fillon të ekzekutohet. Së pari kërkon BIOS pajisje boot sipas rendit të konfiguruar të pajisjes së nisjes. Kërkon një numër të caktuar magjik për të përcaktuar nëse pajisja është e bootable (bajt 511 dhe 512 të sektorit të parë janë 0xAA55).

Pasi BIOS zbulon pajisjen e nisjes, kopjon përmbajtjen e sektorit të parë të pajisjes në RAM duke filluar nga adresa fizike 0x7c00; më pas kalon në adresën dhe ekzekuton kodin që sapo keni ngarkuar. Ky kod quhet bootloader.

Bootloader pastaj ngarkon kernelin në adresën fizike 0x100000. Adresa 0x100000 përdoret si adresa fillestare për të gjitha bërthamat e mëdha në makinat x86.

Të gjithë procesorët x86 fillojnë në një modalitet të thjeshtuar 16-bit të quajtur adresat reale. Ngarkuesi GRUB kalon në modalitetin e mbrojtur 32-bit duke vendosur bitin më pak të rëndësishëm të CR0 në 1. Kështu, kerneli futet në modalitetin e mbrojtur 32-bit.

Ju lutemi vini re se në rast zbulimi Kernelet Linux, GRUB do të marrë regjistrin e nisjes dhe do të nisë kernelin Linux në të mënyrë reale... Dhe kerneli Linux do të kalojë në modalitetin e mbrojtur.

Çfarë na duhet?

  • kompjuter x86 (natyrisht)
  • Montues NASM
  • ld (Lidhës GNU)
  • Burimi

Epo, do të ishte mirë të kishim një ide se si funksionon një OS i ngjashëm me UNIX. Kodi burimor mund të gjendet në depon e Github.

Pika e hyrjes dhe nisjes së kernelit

Së pari, le të shkruajmë një skedar të vogël në assembler x86 që do të jetë pika fillestare për fillimin e kernelit. Ky skedar do të telefonojë funksioni i jashtëm në C dhe më pas do të ndalojë rrjedhën e programit.

Si siguroheni që ky kod të shërbejë si pikënisje për kernelin?

Ne do të përdorim një skript lidhës që lidh skedarët e objektit për të krijuar finalen skedari i ekzekutueshëm bërthamat. Në këtë skenar, ne do ta tregojmë në mënyrë eksplicite atë skedar binar duhet të ngarkohet në adresën 0x100000. Kjo adresë është vendi ku duhet të jetë kerneli.

Këtu është kodi i montimit:

;; kernel.asm bit 32; nasm directive - seksion 32 bit .tekst start global extern kmain; kmain përcaktohet në fillimin e skedarit C: cli; blloku i ndërprerjes mov esp, stack_space; vendosja e treguesit të stivës thirrja kmain hlt; seksioni i ndalimit të procesorit . bss resb 8192; 8 KB për stack_space:

Instruksioni i biteve të parë 32 nuk është një instruksion montimi x86. Kjo është një direktivë për montuesin NASM që thotë se duhet të gjenerojë kod për të ekzekutuar në një procesor që funksionon në modalitetin 32-bit. Kjo nuk kërkohet në shembullin tonë, megjithatë është praktikë e mirë- për të treguar gjëra të tilla në mënyrë eksplicite.

Rreshti i dytë fillon me një seksion teksti. Këtu do të vendosim të gjithë kodin tonë.

globale është një tjetër direktivë NASM që përdoret për vendosjen e simboleve Kodi i burimit si globale.

kmain është një funksion i personalizuar që do të përcaktohet në skedarin tonë kernel.c. extern deklaron se funksioni është përcaktuar diku tjetër.

Funksioni start thërret funksionin kmain dhe ndalon CPU-në me komandën hlt. Ndërprerjet mund ta zgjojnë CPU-në nga ekzekutimi i një instruksioni hlt. Prandaj, fillimisht ne çaktivizojmë ndërprerjet duke përdorur instruksionin cli.

Në mënyrë ideale, duhet të ndani pak memorie për pirgun dhe ta drejtoni atë duke përdorur një tregues të stivës (esp). Megjithatë, GRUB e bën atë për ne, dhe treguesi i stivës është vendosur tashmë. Megjithatë, për të qenë të sigurt, ne do të ndajmë pak hapësirë ​​në seksionin BSS dhe do të vendosim treguesin e stivës në fillim të memories së ndarë. Për ta bërë këtë, ne përdorim komandën resb, e cila rezervon kujtesën në bajt. Pas kësaj, mbetet një etiketë që tregon skajin e pjesës së rezervuar të kujtesës. Përpara se të telefononi kmain, treguesi i stivës (esp) përdoret për të treguar këtë hapësirë ​​duke përdorur komandën mov.

Kernel në C

Në kernel.asm, ne bëmë një thirrje në funksionin kmain (). Kështu, kodi C do të fillojë të ekzekutohet në kmain ():

/ * * kernel.c * / void kmain (void) (const char * str = "kerneli im i parë"; char * vidptr = (char *) 0xb8000; // kujtesa video fillon këtu e panënshkruar int i = 0; e panënshkruar int j = 0; / * ky lak pastron ekranin * / ndërsa (j< 80 * 25 * 2) { /* пустой символ */ vidptr[j] = " "; /* байт атрибутов */ vidptr = 0x07; j = j + 2; } j = 0; /* в этом цикле строка записывается в видео память */ while(str[j] != "\0") { /* ascii отображение */ vidptr[i] = str[j]; vidptr = 0x07; ++j; i = i + 2; } return; }

* bërthama.c

void kmain (i pavlefshëm)

const char * str = "kerneli im i parë";

i panënshkruar int i = 0;

i panënshkruar int j = 0;

/ * ky lak pastron ekranin * /

ndërsa (j< 80 * 25 * 2 ) {

/ * karakter bosh * /

vidptr [j] = "";

/ * bajt atributesh * /

vidptr [j + 1] = 0x07;

j = j + 2;

j = 0;

/ * në këtë lak, rreshti shkruhet në kujtesën e videos * /

ndërsa (str [j]! = "\ 0") (

/ * ekran ascii * /

vidptr [i] = str [j];

vidptr [i + 1] = 0x07;

i = i + 2;

kthimi;

Kerneli ynë do të pastrojë ekranin dhe do të printojë në të vargun "kerneli im i parë".

Së pari, ne krijojmë një tregues vidptr që tregon 0xb8000. Kjo adresë është fillimi i kujtesës video të modalitetit të mbrojtur. Kujtesa e tekstit të ekranit është vetëm një pjesë e memories në hapësirën tonë të adresave. I/O për ekranin në kartën e kujtesës fillon me 0xb8000 dhe mbështet 25 rreshta me 80 personazhet ascii cdo njeri.

Çdo element karakteri në këtë memorie teksti përfaqësohet nga 16 bit (2 bajt), jo me 8 bit (1 bajt) me të cilët jemi mësuar. Bajti i parë duhet të ketë një paraqitje të karaktereve ASCII. Bajt i dytë është bajt i atributit. Ai përshkruan formatimin e simbolit, duke përfshirë atribute të ndryshme si ngjyra.

Për të printuar një karakter me në të gjelbër në një sfond të zi, ne do të ruajmë karakterin s në bajtin e parë të adresës së kujtesës video dhe vlerën 0x02 në bajtin e dytë.

0 është sfondi i zi dhe 2 është jeshil.

Më poshtë është një tabelë e kodeve për ngjyra të ndryshme:

0 - E zezë, 1 - Blu, 2 - Jeshile, 3 - Cyan, 4 - E kuqe, 5 - Magenta, 6 - Kafe, 7 - Gri e hapur, 8 - Gri e errët, 9 - Blu e hapur, 10 / a - Jeshile e hapur, 11 / b - Cyan e lehtë, 12 / c - E kuqe e lehtë, 13 / d - Magenta e lehtë, 14 / e - kafe e lehtë, 15 / f - e bardhë.

0 - E zezë, 1 - Blu, 2 - Jeshile, 3 - Cyan, 4 - E kuqe, 5 - Magenta, 6 - Kafe, 7 - Gri e hapur, 8 - Gri e errët, 9 - Blu e hapur, 10 / a - Jeshile e hapur, 11 / b - Cyan e lehtë, 12 / c - E kuqe e lehtë, 13 / d - Magenta e lehtë, 14 / e - kafe e lehtë, 15 / f - e bardhë.

Në kernelin tonë, ne do të përdorim karaktere gri të lehta në një sfond të zi. Prandaj, bajti ynë i atributit duhet të jetë 0x07.

Ne fillim ndërsa lak programi shkruan një karakter null me atribut 0x07 në të gjitha 80 kolonat me 25 rreshta. Kjo pastron ekranin.

Në ciklin e dytë while, karakteret e vargut "kerneli im i parë" shkruhen në një pjesë të kujtesës video. Për çdo karakter, bajt i atributit përmban vlerën 0x07.

Kështu, linja do të shfaqet në ekran.

Pjesa lidhëse

Ne përpilojmë kernel.asm dhe NASM në një skedar objekti dhe më pas përdorim GCC për të përpiluar kernel.c në një skedar tjetër objekti. Tani detyra jonë është t'i lidhim këto objekte me kernelin e ekzekutueshëm të bootable.

Për ta bërë këtë, ne përdorim një skript të qartë lidhës që mund t'i kalohet si argument ld (lidhësi ynë).

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

* lidhje.ld

OUTPUT_FORMAT (elf32 - i386)

HYRJA (fillimi)

SEKSIONET

0x100000;

Teksti: (* (. Tekst))

Të dhënat: (* (. Të dhëna))

Bss: (* (. Bss))

Së pari, ne vendosëm formatin e daljes së ekzekutuesit në 32-bit të ekzekutueshëm (ELF). ELF - format standard skedar binar për Sisteme të ngjashme me Unix në arkitekturën x86.

HYRJA merr një argument. Ai specifikon emrin e simbolit, i cili duhet të jetë pika hyrëse e ekzekutuesit tonë.

SECTIONS është pjesa më e rëndësishme ku përcaktojmë shënimin e skedarit të ekzekutueshëm. Kjo specifikon se si duhet të kombinohen seksionet e ndryshme dhe ku do të vendosen.

V mbajtëse kaçurrelë pas një deklarate SECTIONS, karakteri i pikës (.) - paraqet numëruesin e vendndodhjes.

Numëruesi i vendndodhjes inicializohet gjithmonë në 0x0 në fillim të bllokut SECTIONS. Mund të ndryshohet duke i caktuar një vlerë të re.

Siç u përmend, kodi i kernelit duhet të fillojë me 0x100000. Kështu, ne kemi vendosur numëruesin e vendndodhjes në 0x100000.

Shiko tek rreshti tjetër .tekst: (* (. tekst))

Ylli (*) është një karakter i veçantë që do të përputhet me çdo emër skedari. Kjo do të thotë, shprehja * (. Tekst) nënkupton të gjitha seksionet e hyrjes .tekst nga të gjithë skedarët hyrës.

Kështu, lidhësi bashkon të gjitha seksionet e tekstit të skedarëve të objektit në seksionin e tekstit të skedarit të ekzekutueshëm në adresën e ruajtur në numëruesin e vendndodhjes. Seksioni i kodit të ekzekutuesit fillon me 0x100000.

Pasi lidhësi vendos seksionin e prodhimit të tekstit, numëruesi i vendndodhjes vendoset në 0x1000000 + madhësia e seksionit të prodhimit të tekstit.

Po kështu, seksionet e të dhënave dhe bss bashkohen dhe vendosen në vlerat e numëruesit të vendndodhjes.

Grub dhe Multiboot

Tani të gjithë skedarët e nevojshëm për të ndërtuar kernelin janë gati. Por meqenëse ne synojmë të ngarkojmë kernelin me duke përdorur GRUB, duhet edhe një gjë.

Ekziston një standard për nisjen e kerneleve të ndryshme x86 duke përdorur një ngarkues të ngarkimit të quajtur specifikimi Multiboot.

GRUB do të nisë një kernel vetëm nëse përputhet me specifikimin Multiboot.

Sipas tij, kerneli duhet të përmbajë kokën brenda 8 kilobajtëve të tij të parë.

Përveç kësaj, ky titull duhet të përmbajë 3 fusha shtesë:

  • Fusha e numrit magjik: përmban numrin magjik 0x1BADB002, për të identifikuar kokën.
  • Fusha e flamujve: nuk na nevojitet tani, thjesht vendoseni vlerën e tij në zero.
  • Fusha kontrolluese: kur specifikohet, duhet të kthejë zero për një shumë me dy fushat e para.

Pra, kernel.asm do të duket kështu:

;;kernel.asm;direktiva nasm - 32 bit 32 seksion .tekst; spec i multiboot align 4 dd 0x1BADB002; numra magjik dd 0x00; flamujt dd - (0x1BADB002 + 0x00); shuma e kontrollit... mh + f + ks duhet të jetë i barabartë me zero kmain e jashtëm i fillimit global; kmain përcaktohet në fillimin e skedarit të jashtëm: cli; bllokimi i ndërprerjes mov esp, stack_space; treguesi i stivës thirr kmain hlt; seksioni i ndalimit të procesorit .bss resb 8192; 8 KB për pirg stack_space:

; ; bërthama. asm

; direktiva nasm - 32 bit

bitet 32

seksioni. teksti

; Specifikim multiboot

rreshtoj 4

dd 0x1BADB002; numra magjik

dd 0x00; flamujt

dd - (0x1BADB002 + 0x00); shuma e kontrollit. mch + f + ks duhet të jetë zero

fillimi global

ekstern kmain; kmain përcaktohet në një skedar të jashtëm

filloni:

cli; bllokimi i ndërprerjeve

mov esp, stack _ space; tregues i stivës

telefononi kmain

hlt; ndalimi i procesorit

Artikujt kryesorë të lidhur