Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Lajme
  • Krijimi i kernelit të sistemit operativ. Sistemi operativ i ngjashëm me UNIX: shkrimi i kernelit në C

Krijimi i kernelit të sistemit operativ. Sistemi operativ i ngjashëm me UNIX: shkrimi i kernelit në C

Semantic Core është një emër i frikshëm që SEO-të kanë dalë për t'iu referuar një gjëje mjaft të thjeshtë. Thjesht duhet të zgjedhim pyetjet kryesore për të cilat do të promovojmë faqen tonë.

Dhe në këtë artikull do t'ju tregoj se si të kompozoni saktë thelbin semantik në mënyrë që faqja juaj të shkojë shpejt në TOP dhe të mos ngecë me muaj. Ka edhe “sekretet” e veta.

Dhe përpara se të kalojmë në përpilimin e SY, le të hedhim një vështrim se çfarë është dhe çfarë duhet të arrijmë përfundimisht.

Cili është thelbi semantik me fjalë të thjeshta

Sado e çuditshme mund të duket, por thelbi semantik është një skedar i rregullt excel, i cili përmban një listë të pyetjeve kryesore për të cilat ju (ose autori juaj i kopjeve) do të shkruani artikuj për sitin.

Për shembull, kështu duket thelbi im semantik:

Unë i kam shënuar me të gjelbër ato fjalë kyçe për të cilat kam shkruar tashmë artikuj. E verdha - ato për të cilat do të shkruaj artikuj në të ardhmen e afërt. Dhe qelizat e pangjyrë - kjo do të thotë se do të vijë në këto kërkesa pak më vonë.

Për çdo kërkesë kyçe, kam përcaktuar frekuencën, konkurencën dhe kam dalë me një titull "të mbetet në mendje". Ju duhet të merrni për të njëjtin skedar. Tani SN-ja ime përbëhet nga 150 fjalë kyçe. Kjo do të thotë se më pajis "material" për të paktën 5 muaj përpara (edhe nëse shkruaj një artikull në ditë).

Më poshtë do të flasim për çfarë të përgatiteni nëse papritmas vendosni të porosisni mbledhjen e bërthamës semantike nga specialistët. Këtu do të them shkurt - do t'ju jepet e njëjta listë, por vetëm për mijëra "çelës". Megjithatë, në SA, nuk është sasia e rëndësishme, por cilësia. Dhe ne do të fokusohemi në këtë.

Pse keni nevojë për një bërthamë semantike?

Dhe në fakt, pse na duhet kjo mundim? Në fund të fundit, thjesht mund të shkruani artikuj cilësorë dhe të tërhiqni një audiencë me këtë, apo jo? Po, ju mund të shkruani, por nuk do të jeni në gjendje të tërhiqni.

Gabimi kryesor që bëjnë 90% e blogerëve është thjesht shkrimi i artikujve me cilësi të lartë. Nuk po bëj shaka, ato kanë përmbajtje vërtet interesante dhe të dobishme. Por motorët e kërkimit nuk dinë për këtë. Ata nuk janë psikikë, janë thjesht robotë. Prandaj, ata nuk e vendosin artikullin tuaj në TOP.

Këtu ka një pikë tjetër delikate me titullin. Për shembull, ju keni një artikull me cilësi shumë të lartë me temën "Si të bëni biznes në një" libër mordo ". Aty përshkruani gjithçka rreth Facebook-ut me shumë detaje dhe në mënyrë profesionale. Përfshirë mënyrën e promovimit të komuniteteve atje. Artikulli juaj është artikulli më cilësor, i dobishëm dhe interesant për këtë temë në internet. Askush nuk ishte i shtrirë pranë jush. Por ende nuk do t'ju ndihmojë.

Pse artikujt me cilësi të lartë fluturojnë jashtë TOP

Imagjinoni që faqja juaj të mos vizitohet nga një robot, por nga një inspektor (vlerësues) i drejtpërdrejtë nga Yandex. Ai e kuptoi që ju keni artikullin më të lezetshëm. Dhe rukami ju vendos në vendin e parë në rezultatet e kërkimit për kërkesën "Promovimi i komunitetit në Facebook".

A e dini se çfarë ndodh më pas? Ju do të fluturoni nga atje shumë shpejt. Sepse në artikullin tuaj, edhe në radhë të parë, askush nuk do të klikojë. Njerëzit futin kërkesën "Promovimi i komunitetit në Facebook", dhe titulli juaj është "Si të bëjmë biznes në një" mordobook "si duhet. Origjinale, e freskët, qesharake, por ... jo sipas kërkesës. Njerëzit duan të shohin saktësisht atë që po kërkonin, jo krijuesin tuaj.

Prandaj, artikulli juaj do të jetë i papunë për të zënë një vend në TOP të SERP. Dhe një vlerësues i gjallë, një admirues i flaktë i krijimtarisë suaj, mund t'i lutet autoriteteve aq sa duan t'ju lënë të paktën në TOP-10. Por nuk do të ndihmojë. Të gjitha vendet e para do t'i zënë artikujt, bosh, si lëvozhgat e farave, që u kopjuan nga njëra-tjetra nga nxënësit e djeshëm.

Por këta artikuj do të kenë titullin e saktë "përkatës" - "Promovimi i komunitetit të Facebook nga e para" ( hap pas hapi, në 5 hapa, nga A në Z, falas etj.) Ofenduese? Ende do. Epo, luftoni kundër padrejtësisë. Le të bëjmë së bashku një bërthamë semantike kompetente në mënyrë që artikujt tuaj të zënë vendet e para që meritojnë.

Një arsye tjetër për të filluar të bëni SJ tani

Ekziston edhe një gjë për të cilën njerëzit mendojnë pak për disa arsye. Ju duhet të shkruani artikuj shpesh - të paktën çdo javë, dhe mundësisht 2-3 herë në javë në mënyrë që të fitoni më shumë trafik dhe më shpejt.

Të gjithë e dinë këtë, por pothuajse askush nuk e bën këtë. Dhe të gjitha sepse ata kanë "stanjacion krijues", "ata nuk mund ta detyrojnë veten në asnjë mënyrë", "vetëm dembelizëm". Por në fakt, i gjithë problemi është pikërisht në mungesë të një bërthame specifike semantike.

Unë futa një nga çelësat e mi bazë - "smm" në fushën e kërkimit, dhe Yandex më dha menjëherë një duzinë këshilla, çfarë tjetër mund të jetë me interes për njerëzit që janë të interesuar për "smm". Më duhet vetëm t'i kopjoj këta çelësa në një fletore. Pastaj do të kontrolloj secilën prej tyre në të njëjtën mënyrë dhe do të mbledh të dhëna gjithashtu për ta.

Pas fazës së parë të mbledhjes së SN, duhet të keni një dokument teksti në të cilin do të ketë 10-30 çelësa bazë të gjerë, me të cilët do të punojmë më tej.

Hapi # 2 - Analizimi i çelësave bazë në SlovoEB

Sigurisht, nëse shkruani një artikull për kërkesën "webinar" ose "smm", atëherë një mrekulli nuk do të ndodhë. Ju kurrë nuk do të jeni në gjendje të arrini TOP-in për një kërkesë kaq të gjerë. Ne duhet të ndajmë çelësin bazë në shumë pyetje të vogla për këtë temë. Dhe ne do ta bëjmë këtë me ndihmën e një programi të veçantë.

Unë jam duke përdorur KeyCollector por është i paguar. Ju mund të përdorni një analog falas - programin SlovoEB. Mund ta shkarkoni nga faqja zyrtare.

Gjëja më e vështirë në punën me këtë program është konfigurimi i saktë i tij. Unë po tregoj se si të konfiguroni dhe përdorni siç duhet Slovoeb. Por në atë artikull, unë fokusohem në zgjedhjen e çelësave për Yandex Direct.

Dhe këtu, le të hedhim një vështrim hap pas hapi në veçoritë e përdorimit të këtij programi për përpilimin e një bërthame semantike për SEO.

Së pari, ne krijojmë një projekt të ri dhe e emërtojmë atë sipas çelësit të gjerë që dëshironi të analizoni.

Unë zakonisht i jap projektit të njëjtin emër si çelësi im bazë, në mënyrë që të mos ngatërrohem më vonë. Dhe po, unë do t'ju paralajmëroj për një gabim tjetër. Mos u përpiqni të analizoni të gjithë çelësat bazë në të njëjtën kohë. Atëherë do të jetë shumë e vështirë për ju të filtroni fjalë kyçe "boshe" nga kokrrat e arit. Le të analizojmë një nga një çelës.

Pas krijimit të projektit, ne kryejmë operacionin bazë. Kjo do të thotë, ne në fakt analizojmë çelësin përmes Yandex Wordstat. Për ta bërë këtë, klikoni në butonin "Vorstat" në ndërfaqen e programit, futni çelësin tuaj bazë dhe klikoni "Fillimi i mbledhjes".

Për shembull, le të analizojmë çelësin bazë për blogun tim "reklamim kontekstual".

Pas kësaj, procesi do të fillojë dhe pas një kohe programi do të na japë një rezultat - deri në 2000 pyetje kryesore, të cilat përmbajnë "reklamim kontekstual".

Gjithashtu, pranë çdo kërkese do të ketë një frekuencë "të ndyrë" - sa herë ky çelës (+ format dhe bishtat e tij të fjalëve) është kërkuar në muaj përmes Yandex. Por unë nuk ju këshilloj të nxirrni ndonjë përfundim nga këto shifra.

Hapi # 3 - Mbledhja e frekuencave kryesore të sakta

Frekuenca e pistë nuk do të na tregojë asgjë. Nëse fokusoheni në të, atëherë mos u habitni më vonë kur çelësi juaj për 1000 kërkesa nuk sjell asnjë klikim në muaj.

Ne duhet të nxjerrim frekuencën e pastër. Dhe për ta bërë këtë, së pari zgjedhim të gjithë çelësat e gjetur me shenja, dhe më pas klikojmë në butonin "Yandex Direct" dhe e fillojmë përsëri procesin. Tani Slovoeb do të kërkojë frekuencën e saktë të kërkesës në muaj për çdo çelës.

Tani kemi një pamje objektive - sa herë është futur një kërkesë nga përdoruesit e internetit në muajin e fundit. Tani unë propozoj të grupoj të gjitha pyetjet kryesore sipas frekuencës, në mënyrë që të jetë më i përshtatshëm për të punuar me ta.

Për ta bërë këtë, klikoni në ikonën "filtri" në kolonën "Frekuenca"! ", Dhe specifikoni - për të filtruar çelësat me vlerën "më të vogël ose të barabartë me 10".

Tani programi do t'ju tregojë vetëm ato pyetje, frekuenca e të cilave është më e vogël ose e barabartë me vlerën "10". Ju mund t'i fshini këto pyetje ose t'i kopjoni për të ardhmen në një grup tjetër të pyetjeve kryesore. Më pak se 10 është shumë pak. Shkrimi i artikujve për këto pyetje është një humbje kohe.

Tani duhet të zgjedhim ato fjalë kyçe që do të na sjellin pak a shumë trafik të mirë. Dhe për këtë duhet të zbulojmë një parametër më shumë - nivelin e përputhjes së kërkesës.

Hapi # 4 - Kontrollimi i pyetjeve konkurruese

Të gjithë "çelësat" në këtë botë ndahen në 3 lloje: me frekuencë të lartë (HF), me frekuencë të mesme (MF), me frekuencë të ulët (LF). Ato mund të jenë gjithashtu shumë konkurruese (VC), konkurruese mesatare (SK) dhe konkurruese të ulëta (NK).

Si rregull, kërkesat për HF pranohen në të njëjtën kohë nga QV. Kjo do të thotë, nëse një kërkesë kërkohet shpesh në internet, atëherë ka shumë faqe që duan ta promovojnë atë. Por kjo nuk është gjithmonë rasti, ka përjashtime të lumtura.

Arti i përpilimit të një bërthame semantike qëndron pikërisht në gjetjen e pyetjeve të tilla që kanë një frekuencë të lartë dhe niveli i tyre i konkurrencës është i ulët. Është shumë e vështirë të përcaktohet me dorë niveli i konkurrencës.

Mund të përqendroheni në tregues të tillë si numri i faqeve kryesore në TOP-10, gjatësia dhe cilësia e teksteve. niveli i besimit dhe grimcat e faqeve në TOP të lëshimit sipas kërkesës. E gjithë kjo do t'ju japë një ide se sa e vështirë është beteja për pozicione për këtë pyetje të veçantë.

Por unë ju rekomandoj që të përfitoni nga shërbimi Mutagen... Ai merr parasysh të gjithë parametrat që përmenda më lart, plus një duzinë të tjera për të cilat as ju dhe as unë nuk kemi dëgjuar ndoshta. Pas analizave, shërbimi jep vlerën e saktë - cili është niveli i konkurrencës për këtë kërkesë.

Këtu kontrollova pyetjen "konfigurimi i reklamave kontekstuale në google adwords". Mutagjeni na tregoi se ky çelës ka një konkurrencë "më shumë se 25" - kjo është vlera maksimale që tregon. Dhe kjo pyetje ka vetëm 11 shikime në muaj. Pra, definitivisht nuk na përshtatet.

Ne mund të kopjojmë të gjithë çelësat që kemi marrë në Slovoeb dhe të bëjmë një kontroll me shumicë në Mutagen. Pas kësaj na mbetet vetëm të shikojmë listën dhe të marrim ato kërkesa që kanë shumë kërkesa dhe nivel të ulët konkurrence.

Mutagen është një shërbim me pagesë. Por ju mund të bëni 10 kontrolle në ditë falas. Për më tepër, kostoja e verifikimit është shumë e ulët. Për gjithë kohën që kam punuar me të, nuk kam shpenzuar ende as 300 rubla.

Nga rruga, në kurriz të nivelit të konkurrencës. Nëse keni një faqe të re, atëherë është më mirë të zgjidhni pyetje me një nivel konkurrimi 3-5. Dhe nëse keni promovuar për më shumë se një vit, atëherë mund të merrni 10-15.

Nga rruga, në kurriz të shpeshtësisë së kërkesave. Tani duhet të bëjmë hapin përfundimtar, i cili do t'ju lejojë të tërheqni shumë trafik edhe për kërkesat me frekuencë të ulët.

Hapi # 5 - Mbledhja e bishtave për çelësat e zgjedhur

Siç është vërtetuar dhe verifikuar shumë herë, faqja juaj do të marrë pjesën më të madhe të trafikut jo nga çelësat kryesorë, por nga të ashtuquajturat "bisht". Kjo është kur një person fut fjalë kyçe të çuditshme në kutinë e kërkimit, me një frekuencë 1-2 në muaj, por kërkesa të tilla ka shumë.

Për të parë "bishtin" - thjesht shkoni te Yandex dhe futni fjalën kyçe të zgjedhur në shiritin e kërkimit. Ja çfarë do të shihni përafërsisht.

Tani ju vetëm duhet t'i shkruani këto fjalë shtesë në një dokument të veçantë dhe t'i përdorni ato në artikullin tuaj. Për më tepër, nuk keni nevojë t'i vendosni gjithmonë pranë çelësit kryesor. Përndryshe, motorët e kërkimit do të shohin "mbi-optimizimin" dhe artikujt tuaj do të bien në rezultatet e kërkimit.

Thjesht përdorni ato në vende të ndryshme në artikullin tuaj dhe më pas do të merrni edhe trafik shtesë prej tyre. Unë do t'ju rekomandoja gjithashtu që të përpiqeni të përdorni sa më shumë forma fjalësh dhe sinonime të jetë e mundur për pyetjen tuaj kryesore të fjalës kyçe.

Për shembull, ne kemi një kërkesë - "Konfigurimi i reklamave kontekstuale". Ja se si ta riformuloni atë:

  • Personalizo = personalizo, bëj, ndërto, ekzekuto, ekzekuto, aktivizo, pret ...
  • Reklamim kontekstual = kontekst, direkt, ngacmues, YAN, adwords, cms. direkt, AdWords ...

Asnjëherë nuk e dini saktësisht se si njerëzit do të kërkojnë informacion. Shtojini të gjitha këto fjalë shtesë në thelbin tuaj semantik dhe përdorni ato kur shkruani tekste.

Pra, ne mbledhim një listë prej 100 - 150 fjalë kyçe. Nëse kjo është hera e parë që përpiloni thelbin semantik, mund t'ju duhen disa javë.

Apo ndoshta mirë, thyej sytë? Ndoshta ka një mundësi për t'ua deleguar përgatitjen e KL specialistëve që do ta bëjnë më mirë dhe më shpejt? Po, ka specialistë të tillë, por jo gjithmonë duhet të përdorni shërbimet e tyre.

A duhet të porosis një CJ nga specialistët?

Në përgjithësi, specialistët në përpilimin e bërthamës semantike do t'ju marrin vetëm hapat 1 - 3 nga diagrami ynë. Ndonjëherë, për një tarifë të madhe shtesë, do të bëhen gjithashtu hapat 4-5 - (mbledhja e bishtave dhe kontrollimi i konkurrencës së kërkesave).

Pas kësaj, ata do t'ju japin disa mijëra fjalë kyçe me të cilat do t'ju duhet të punoni në të ardhmen.

Dhe pyetja këtu është, a do të shkruani artikuj vetë, apo do të punësoni autorë kopjimi për këtë. Nëse doni të fokusoheni në cilësi, jo në sasi, atëherë duhet të shkruani vetë. Por atëherë nuk do t'ju mjaftojë vetëm të merrni një listë çelësash. Do t'ju duhet të zgjidhni tema që i dini mjaft mirë për të shkruar një artikull cilësor.

Dhe këtu lind pyetja - pse, atëherë, kemi nevojë për specialistë në SY? Pajtohem, analizimi i çelësit bazë dhe mbledhja e frekuencave të sakta (hapat # 1-3) nuk është aspak e vështirë. Do t'ju marrë fjalë për fjalë gjysmë ore kohë.

Gjëja më e vështirë është të zgjidhni kërkesat RF, të cilat kanë konkurrencë të ulët. Dhe tani, siç rezulton, keni nevojë për HF-NK, për të cilën mund të shkruani një artikull të mirë. Kjo është pikërisht ajo që do t'ju marrë 99% të kohës tuaj duke punuar në thelbin semantik. Dhe asnjë specialist nuk do ta bëjë këtë për ju. Epo, a ia vlen të shpenzoni para për të porositur shërbime të tilla?

Kur shërbimet e një specialisti në CN janë të dobishme

Është një çështje tjetër nëse fillimisht planifikoni të tërhiqni autorë të kopjimit. Atëherë nuk keni nevojë të kuptoni temën e kërkesës. As autorët tuaj të kopjimit nuk do ta kuptojnë atë. Ata thjesht do të marrin disa artikuj mbi këtë temë dhe do të përpilojnë tekstin e tyre prej tyre.

Artikuj të tillë do të jenë bosh, të varfër, pothuajse të padobishëm. Por do të ketë shumë prej tyre. Ju mund të shkruani vetëm 2-3 artikuj me cilësi të lartë në javë. Dhe ushtria e autorëve të kopjimit do t'ju ofrojë 2-3 mut tekst në ditë. Në të njëjtën kohë, ato do të optimizohen për kërkesat, që do të thotë se do të tërheqin një lloj trafiku.

Në këtë rast, po, mos ngurroni të punësoni një specialist në YA. Le të kompozojnë edhe TK për copywriters në të njëjtën kohë. Por ju e kuptoni, do të kushtojë edhe disa para.

Përmbledhje

Le të kalojmë përsëri në pikat kryesore në artikull për të konsoliduar informacionin.

  • Thelbi semantik është thjesht një listë fjalësh kyçe për të cilat do të shkruani artikuj në faqe për promovim.
  • Është e nevojshme të optimizoni tekstet për pyetjet e sakta kryesore, përndryshe edhe artikujt tuaj me cilësi më të lartë nuk do të shkojnë kurrë në TOP.
  • SN është si një plan përmbajtjeje për mediat sociale. Të ndihmon të mos biesh në një “krizë krijuese” dhe të dish gjithmonë saktësisht se për çfarë do të shkruash nesër, pasnesër dhe pas një muaji.
  • Për të përpiluar bërthamën semantike, është e përshtatshme të përdorni programin falas Slovoeb, ju vetëm duhet.
  • Ka pesë hapa për përpilimin e një CL: 1 - Përzgjedhja e çelësave bazë; 2 - Parsing çelësat bazë; 3 - Mbledhja e frekuencës së saktë për kërkesat; 4 - Kontrollimi i konkurencës së çelësave; 5 - Mbledhja e "bishtave".
  • Nëse doni të shkruani vetë artikuj, atëherë është më mirë ta bëni vetë thelbin semantik, për veten tuaj. Përpiluesit CL nuk do të jenë në gjendje t'ju ndihmojnë këtu.
  • Nëse dëshironi të punoni për sasinë dhe të përdorni shkrimtarët e kopjimit për të shkruar artikuj, atëherë është plotësisht e mundur të përfshini delegimin dhe përpilimin e bërthamës semantike. Sikur të kishte para të mjaftueshme për gjithçka.

Shpresoj se ky tutorial ishte i dobishëm për ju. Ruajeni në të preferuarat tuaja për të mos e humbur dhe ndajeni me miqtë tuaj. Mos harroni të shkarkoni librin tim. Aty ju tregoj rrugën më të shpejtë nga zero në milionin e parë në internet (ekstrakt nga përvoja personale për 10 vjet =)

Shihemi me vone!

Dmitry Novosyolov juaj

Le të shkruajmë një kernel të thjeshtë që mund të ngarkohet me ngarkuesin x86 GRUB. Ky kernel do të shfaqë një mesazh në ekran dhe do të presë.

Si nis një sistem x86?

Para se të fillojmë të shkruajmë kernelin, le të kuptojmë se si sistemi fillon dhe transferon kontrollin në kernel.

Në shumicën e regjistrave të procesorit, në fillimin, tashmë gjenden vlera të caktuara. Regjistri që tregon adresën e instruksioneve (Instruction Pointer, EIP) ruan adresën e memories në të cilën shtrihet instruksioni që ekzekutohet nga procesori. EIP parazgjedhur është 0xFFFFFFF0... Kështu, procesorët x86 në nivelin e harduerit fillojnë të punojnë në 0xFFFFFFFF0. Ky është në të vërtetë 16 bajtë e fundit të hapësirës së adresave 32-bit. Kjo adresë quhet vektori i rivendosjes.

Tani, karta e kujtesës së çipave siguron që 0xFFFFFFF0 i përket një pjese specifike të BIOS-it, jo RAM-it. Në këtë kohë, BIOS kopjon veten në RAM për akses më të shpejtë. Adresa 0xFFFFFFF0 do të përmbajë vetëm një udhëzim për të kaluar në një adresë në memorie ku ruhet një kopje e BIOS-it.

Kështu fillon të ekzekutohet kodi BIOS. Së pari, BIOS kërkon një pajisje nga e cila do të niset, në një renditje të paracaktuar. Duke kërkuar për një numër magjik që përcakton nëse pajisja është e bootable (bajt 511 dhe 512 të sektorit të parë duhet të jenë të barabarta me 0xAA55).

Kur BIOS gjen një pajisje boot, ai kopjon përmbajtjen e sektorit të parë të pajisjes në RAM, duke filluar nga adresa fizike 0x7c00; më pas kalon në adresë dhe ekzekuton kodin e ngarkuar. Ky kod quhet bootloader.

Bootloader ngarkon kernelin në një adresë fizike 0x100000... Kjo adresë përdoret si adresa fillestare në të gjitha kernelet e mëdha në sistemet x86.

Të gjithë procesorët x86 fillojnë në një modalitet të thjeshtë 16-bit të quajtur regjimi real... Bootloader GRUB kalon modalitetin në 32-bit modaliteti i mbrojtur duke vendosur bitin e poshtëm të regjistrit CR0 në 1 ... Kështu, kerneli nis në modalitetin e mbrojtur 32-bit.

Vini re se në rastin e kernelit Linux, GRUB sheh regjistrat e nisjes së Linux dhe ngarkon kernelin në modalitetin real. Kerneli kalon automatikisht në modalitetin e mbrojtur.

Çfarë na duhet?

  • kompjuter x86;
  • Linux;
  • ld (GNU Linker);

Vendosja e pikës së hyrjes në asembler

Sado që nuk do të doja të kufizohesha në një C, më duhet të shkruaj diçka në assembler. Ne do të shkruajmë një skedar të vogël mbi të që do të shërbejë si pikënisje për kernelin tonë. Gjithçka që do të bëjë është të thërrasë një funksion të jashtëm të shkruar në C dhe të ndalojë rrjedhën e programit.

Si mund të sigurohemi që ky kod është pikërisht pika fillestare?

Ne do të përdorim një skript lidhës që lidh skedarët e objektit për të krijuar ekzekutuesin përfundimtar. Në këtë skript, ne do të tregojmë qartë se duam të ngarkojmë të dhëna në 0x100000.

Këtu është kodi i asemblerit:

;; bit kernel.asm 32; direktiva nasm - seksioni 32 bit .tekst start global extern kmain; kmain përcaktohet në fillimin e skedarit c: cli; ndërprerjet e bllokut mov esp, stack_space; vendosja e treguesit të stivës thirrja kmain hlt; ndaloni seksionin e CPU .bss resb 8192; 8 KB për stack_space:

Udhëzimi i parë, bitet 32, nuk është një instruksion montimi x86. Kjo është një direktivë për asamblerin NASM për të gjeneruar kod për një procesor që funksionon në modalitetin 32-bit. Në rastin tonë, kjo nuk është e nevojshme, por përgjithësisht e dobishme.

Seksioni me kodin fillon në rreshtin e dytë.

globale është një tjetër direktivë NASM që i bën simbolet e kodit burimor global. Kështu, lidhësi e di se ku ndodhet simboli i fillimit - pika jonë e hyrjes.

kmain është një funksion që do të përcaktohet në skedarin kernel.c. extern do të thotë se funksioni është deklaruar diku tjetër.

Pastaj vjen funksioni start, i cili thërret funksionin kmain dhe ndalon procesorin me instruksionin hlt. Kjo është arsyeja pse ne i çaktivizojmë ndërprerjet paraprakisht me udhëzimin cli.

Idealisht, ne duam të ndajmë pak memorie dhe ta drejtojmë atë me një tregues stek (esp). Megjithatë, duket sikur GRUB e ka bërë tashmë këtë për ne. Megjithatë, ju do të ndani ende pak hapësirë ​​në seksionin BSS dhe do ta zhvendosni treguesin e stivës në fillimin e tij. Ne përdorim instruksionin resb, i cili rezervon numrin e caktuar të bajteve. Menjëherë përpara se të telefononi kmain, treguesi i stivës (esp) vendoset në vendndodhjen e dëshiruar me instruksionin mov.

Bërthama në C

Në kernel.asm, ne bëmë një thirrje në funksionin kmain (). Kështu, kodi ynë "cish" duhet të fillojë ekzekutimin me kmain ():

/ * * kernel.c * / void kmain (void) (const char * str = "kerneli im i parë"; char * vidptr = (char *) 0xb8000; // video mem fillon këtu. unsigned int i = 0; unsigned int j = 0; / * ky sythe pastron ekranin * ka 25 rreshta secila nga 80 kolona; secili element merr 2 bajt * / ndërsa (j< 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; }

Gjithçka që kerneli ynë do të bëjë është të pastrojë ekranin dhe të printojë vargun "kerneli im i parë".

Së pari, ne krijojmë një tregues vidptr që tregon adresën 0xb8000... "Kujtesa video" fillon nga kjo adresë në modalitetin e mbrojtur. Për të shfaqur tekstin në ekran, rezervojmë 25 rreshta me 80 karaktere ASCII, duke filluar nga 0xb8000.

Çdo karakter nuk shfaqet me 8 bit të zakonshëm, por 16. Bajt i parë përmban vetë karakterin, dhe i dyti - atributin-byte. Ai përshkruan formatimin e një simboli, siç është ngjyra e tij.

Për të shfaqur një karakter të gjelbër s në një sfond të zi, ne shkruajmë këtë karakter në bajtin e parë dhe vlerën 0x02 në të dytin. 0 do të thotë sfond i zi, 2 do të thotë ngjyrë jeshile e tekstit.

Këtu është grafiku i ngjyrave:

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 - e purpurt e lehtë, 14 / e - kafe e lehtë, 15 / f - e bardhë.

Në kernelin tonë, ne do të përdorim tekst gri të çelur në një sfond të zi, kështu që atributi ynë i bajtit do të jetë 0x07.

Në ciklin e parë, programi nxjerr një karakter bosh në të gjithë zonën 80x25. Kjo do të pastrojë ekranin. Në ciklin tjetër, karakteret nga vargu me fund të pavlefshëm "kerneli im i parë" me një bajt atributi të barabartë me 0x07 shkruhen në "memorien video". Kjo do të printojë vargun në ekran.

Pjesa lidhëse

Ne duhet të përpilojmë kernel.asm në një skedar objekti duke përdorur NASM; pastaj përdorni GCC për të përpiluar kernel.c në një skedar tjetër objekti. Pastaj ato duhet t'i bashkëngjiten kernelit të ekzekutueshëm të bootable.

Për ta bërë këtë, ne do të përdorim një skript bind që i kalohet ld si argument.

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

Së pari, ne do të vendosim formati i daljes si format 32-bit i ekzekutueshëm dhe i lidhur (ELF). ELF është formati standard i skedarit binar për sistemet x86 Unix. HYRJA merr një argument duke specifikuar emrin e simbolit që është pika hyrëse. SEKSIONETështë pjesa më e rëndësishme. Ai përcakton shënimin e skedarit tonë të ekzekutueshëm. Ne përcaktojmë se si duhet të lidhen seksionet e ndryshme dhe ku t'i vendosim ato.

Në kllapa pas SECTIONS, një pikë (.) përfaqëson numëruesin e pozicionit, i cili është 0x0 si parazgjedhje. Mund të ndryshohet, gjë që ne bëjmë.

Shikojmë rreshtin tjetër: .tekst: (* (. Teksti)). Një yll (*) është një karakter i veçantë që përputhet me çdo emër skedari. Shprehja * (. Tekst) nënkupton të gjitha seksionet .tekst nga të gjithë skedarët hyrës.

Kështu, lidhësi kombinon të gjitha seksionet e kodit të skedarit të objektit në një seksion të skedarit të ekzekutueshëm në adresën në numëruesin e pozicionit (0x100000). Pas kësaj, vlera e numëruesit do të jetë e barabartë me 0x100000 + madhësia e seksionit që rezulton.

Në mënyrë të ngjashme, gjithçka ndodh me seksionet e tjera.

Grub dhe Multiboot

Të gjithë skedarët tani janë gati për të krijuar një kernel. Por ka mbetur edhe një hap.

Ekziston një standard për nisjen e kerneleve x86 duke përdorur një bootloader të quajtur Specifikimi i shumëboot... GRUB do të nisë kernelin tonë vetëm nëse i plotëson këto specifika.

Pas tyre, kerneli duhet të përmbajë kokën në 8 KB të tij të parë. Përveç kësaj, ky kokë duhet të përmbajë 3 fusha, të cilat janë 4 bajt:

  • magjike fushë: përmban numër magjik 0x1BADB002 për të identifikuar kernelin.
  • fushë flamujt: nuk na duhet, vendoseni në zero.
  • fushë shuma e kontrollit: nëse e shtoni me dy të mëparshmet, duhet të merrni zero.

Kernel.asm ynë do të bëhet si ky:

;; kernel.asm; direktiva nasm - 32 bit 32 seksion .tekst; përafrimi i specifikave të shumëboot 4 dd 0x1BADB002; dd magjike 0x00; flamujt dd - (0x1BADB002 + 0x00); shuma e kontrollit. m + f + c duhet të jetë zero kmain e jashtme e nisjes globale; kmain përcaktohet në fillimin e skedarit c: cli; bllokon ndërprerjet mov esp, stack_space; vendos treguesin e stivës thirr kmain hlt; ndal seksionin e CPU .bss resb 8192; 8 KB për stack stack_space:

Ndërtimi i bërthamës

Tani do të krijojmë skedarë objektesh nga kernel.asm dhe kernel.c dhe do t'i lidhim ato duke përdorur skriptin tonë.

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

Kjo linjë do të ekzekutojë assemblerin për të gjeneruar skedarin e objektit kasm.o në formatin ELF-32.

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

Opsioni -c siguron që asnjë lidhje e fshehur nuk ndodh pas përpilimit.

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

Kjo do të nisë lidhësin me skriptin tonë dhe do të krijojë një ekzekutues të quajtur bërthama.

Konfigurimi i grub-it dhe fillimi i kernelit

GRUB kërkon që emri i kernelit të përputhet me kernelin e modelit- ... Pra riemëroni kernelin. Unë e emërova kernelin tim-701.

Tani vendoseni në drejtori / çizme... Kjo do të kërkojë të drejtat e superpërdoruesit.

Në skedarin e konfigurimit GRUB grub.cfg shtoni sa vijon:

Titulli myKernel root (hd0,0) kernel / boot / kernel-701 ro

Mos harroni të hiqni direktivën e menusë së fshehur, nëse ka një të tillë.

Rinisni kompjuterin tuaj dhe do të shihni gjithashtu një listë kernelash me tuajat. Zgjidhni atë dhe do të shihni:

Një sistem operativ i ngjashëm me UNIX-in është interesant për t'u 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.

Karta e memories së chipset-it tani siguron që 0xFFFFFFF0 të jetë në një hartë në një pjesë specifike të BIOS-it dhe jo në RAM. Ndërkohë, BIOS kopjon veten në RAM për akses më të 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. BIOS fillimisht kërkon një pajisje nisjeje 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 modaliteti i adresës reale. Ngarkuesi i nisjes 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.

Vini re se nëse zbulohet një kernel Linux, GRUB do të marrë regjistrin e nisjes dhe do të nisë kernelin Linux në modalitetin real. 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ë thërrasë një funksion të jashtëm 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 ekzekutuesin përfundimtar të kernelit. Në këtë skript, ne do të tregojmë në mënyrë eksplicite se skedari 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 domosdoshmërisht në shembullin tonë, por është praktikë e mirë që këto gjëra të specifikohen 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 e përdorur për të vendosur simbolet e kodit burimor 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. Ekrani I/O i kartës së kujtesës fillon me 0xb8000 dhe mbështet 25 rreshta me 80 karaktere ascii secila.

Ç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 ngjyrë të gjelbër në sfond të zi, ne 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 - e purpurt 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 - e purpurt 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.

Në ciklin e parë while, programi shkruan një karakter bosh 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 është formati standard i skedarit binar për sistemet e 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.

Brenda kllapave kaçurrelë pas deklaratës 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.

Shikoni rreshtin e mëposhtëm .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ë nisim kernelin duke përdorur GRUB, nevojitet pak më shumë.

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; përafrimi i specifikave të shumëboot 4 dd 0x1BADB002; numrat magjikë dd 0x00; flamujt dd - (0x1BADB002 + 0x00); shuma kontrolluese. mh + f + ks duhet të jetë zero kmain e jashtme e nisjes globale; 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 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

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 çfarë është thelbi semantik me fjalë kaq 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. Në SEO, thelbi semantik bën të mundur kuptimin e të gjithë faqes, çdo seksioni ose një artikulli të vetëm të marrë. 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:

  • Detyra më e rëndësishme e bërthamës semantike është të kuptojë strukturën e sitit dhe plotësinë e saj. 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 planifikoni të promovoni faqen tuaj mbi një bazë të paguar, për shembull, përmes reklamave kontekstuale, atëherë falë thelbit semantik, mund të llogaritni 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ë sërë veçorish të dobishme, të tilla si filtrimi i pyetjeve sipas rajonit ose pajisjes, shikimi i pyetjeve të lidhura dhe më shumë. Dhe më e rëndësishmja, është plotësisht falas. Më shumë për këtë.

Mund të përdorni një sërë programesh me pagesë, por WordStat është më i përshtatshëm për fillestarët, 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 duhen formalizuar dhe sistemuar disi. Për këtë, spreadsheets, të tilla si Excel, Google Doc spreadsheets, ose të ngjashme janë më të përshtatshmet.

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ë.
  • Mund të shtoni një kolonë me meta etiketat e titullit dhe të përshkrimit dhe të shkruani menjëherë titullin dhe përshkrimin për artikullin duke përdorur frazën kryesore të specifikuar. 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.
  • Nëse po flasim për promovimin e reklamave kontekstuale, duhet të shtoni koston e reklamimit për secilën 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 sitit në kategori, atëherë një 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.
  • Të rinjtë mund të injorojnë kërkesat me frekuencë të ulët, pasi mendojnë se është jopraktike t'i përdorin ato, 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.

Kjo seri artikujsh i kushtohet programimit të nivelit të ulët, domethënë arkitekturës kompjuterike, dizajnit të sistemit operativ, programimit të gjuhës së asamblesë dhe fushave të ngjashme. Deri më tani, dy habrauzera janë angazhuar me shkrim - dhe. Për shumë nxënës të shkollave të mesme, studentë dhe programues profesionistë, këto tema rezultojnë të jenë shumë të vështira për t'u mësuar. Ka shumë literaturë dhe kurse për programimin e nivelit të ulët, por është e vështirë të merret një pasqyrë e plotë dhe gjithëpërfshirëse prej tyre. Është e vështirë, pasi të keni lexuar një ose dy libra mbi sistemet e montimit dhe operimit, të paktën në terma të përgjithshëm të imagjinoni se si funksionon në të vërtetë ky sistem kompleks prej hekuri, silikoni dhe shumë programesh - një kompjuter.

Secili e zgjidh problemin e të mësuarit në mënyrën e vet. Dikush lexon shumë literaturë, dikush përpiqet të kalojë shpejt në praktikë dhe të kuptojë gjatë rrugës, dikush përpiqet t'u shpjegojë miqve gjithçka që po studion. Dhe ne vendosëm t'i kombinojmë këto qasje. Pra, në këtë kurs artikujsh, ne do të demonstrojmë hap pas hapi se si të shkruajmë një sistem operativ të thjeshtë. Artikujt do të jenë të një natyre të përgjithshme, domethënë nuk do të përmbajnë informacione shteruese teorike, megjithatë, ne gjithmonë do të përpiqemi të ofrojmë lidhje me materiale të mira teorike dhe t'u përgjigjemi të gjitha pyetjeve që lindin. Ne nuk kemi një plan të qartë, kështu që shumë vendime të rëndësishme do të merren gjatë rrugës, duke marrë parasysh komentet tuaja.

Ndoshta ne do ta çojmë qëllimisht procesin e zhvillimit në një ndalesë, në mënyrë që t'ju lejojmë juve dhe vetes të kuptoni plotësisht të gjitha pasojat e një vendimi të gabuar, si dhe të përmirësojmë disa aftësi teknike mbi të. Pra, nuk duhet t'i merrni vendimet tona si të vetmet të sakta dhe të na besoni verbërisht. Edhe një herë theksojmë se presim që lexuesit të jenë aktivë në diskutimin e artikujve, gjë që duhet të ndikojë fuqishëm në zhvillimin dhe shkrimin e përgjithshëm të artikujve të mëpasshëm. Në mënyrë ideale, ne do të dëshironim të shihnim disa nga lexuesit të bashkohen në zhvillimin e sistemit me kalimin e kohës.

Do të supozojmë se lexuesi tashmë është i njohur me bazat e asamblesë dhe gjuhëve C, si dhe konceptet bazë të arkitekturës kompjuterike. Kjo do të thotë, ne nuk do të shpjegojmë se çfarë është një regjistër ose, të themi, memorie me akses të rastësishëm. Nëse nuk keni njohuri të mjaftueshme, gjithmonë mund t'i referoheni literaturës shtesë. Një listë e shkurtër e referencave dhe lidhjeve për faqet me artikuj të mirë janë në fund të artikullit. Është gjithashtu e dëshirueshme që të jeni në gjendje të përdorni Linux, pasi të gjitha udhëzimet e përpilimit do të jepen posaçërisht për këtë sistem.

Dhe tani - më shumë në pikën. Në pjesën tjetër të artikullit, ne do të shkruajmë një program klasik "Hello World". Hello World ynë do të dalë pak specifik. Nuk do të funksionojë nga ndonjë sistem operativ, por drejtpërdrejt, si të thuash, "në metal të zhveshur". Para se të vazhdojmë drejtpërdrejt me shkrimin e kodit, le të kuptojmë se si saktësisht po përpiqemi ta bëjmë këtë. Dhe për këtë ju duhet të merrni parasysh procesin e nisjes së kompjuterit tuaj.

Pra, merrni kompjuterin tuaj të preferuar dhe shtypni butonin më të madh në njësinë e sistemit. Ne shohim një ekran të gëzuar me spërkatje, njësia e sistemit bie me gëzim me një altoparlant dhe pas një kohe sistemi operativ ngarkohet. Siç e kuptoni, sistemi operativ ruhet në hard disk, dhe këtu lind pyetja: si sistemi operativ nisi në mënyrë magjike në RAM dhe filloi të ekzekutohej?

Dije këtë: sistemi që është në çdo kompjuter është përgjegjës për këtë, dhe emri i tij - jo, jo Windows, troket gjuhën tuaj - quhet BIOS. Emri i tij qëndron për Sistemin Bazë Input-Output, që është, sistemi bazë input-output. BIOS ndodhet në një mikrocircuit të vogël në motherboard dhe fillon menjëherë pasi të keni shtypur butonin e madh ON. BIOS ka tre detyra kryesore:

  1. Zbuloni të gjitha pajisjet e lidhura (procesor, tastierë, monitor, RAM, kartë video, kokë, krahë, krahë, këmbë dhe bisht ...) dhe kontrolloni ato për funksionim. Programi POST (Power On Self Test) është përgjegjës për këtë. Nëse hardueri jetik nuk gjendet, atëherë asnjë softuer nuk do të jetë në gjendje të ndihmojë dhe në këtë pikë altoparlanti i sistemit do të kërcëjë diçka të keqe dhe OS nuk do të arrijë fare në OS. Le të mos flasim për të trishtuarit, supozoni se kemi një kompjuter plotësisht që funksionon, gëzohuni dhe kaloni në ekzaminimin e funksionit të dytë BIOS:
  2. Sigurimi i sistemit operativ me një grup funksionesh bazë për të punuar me harduer. Për shembull, përmes funksioneve të BIOS-it, mund të shfaqni tekst në ekran ose të lexoni të dhëna nga tastiera. Prandaj, ai quhet sistemi bazë I / O. Në mënyrë tipike, sistemi operativ i qaset këtyre funksioneve përmes ndërprerjeve.
  3. Nisja e ngarkuesit të sistemit operativ. Në këtë rast, si rregull, lexohet sektori i nisjes - sektori i parë i bartësit të informacionit (disketa, hard disk, CD, flash drive). Rendi i mediave të votimit mund të caktohet në BIOS SETUP. Sektori i nisjes përmban një program që nganjëherë quhet ngarkuesi kryesor i nisjes. Përafërsisht, detyra e bootloader-it është të nisë sistemin operativ. Procesi i nisjes së një sistemi operativ mund të jetë shumë specifik dhe shumë i varur nga veçoritë e tij. Prandaj, ngarkuesi primar shkruhet drejtpërdrejt nga zhvilluesit e OS dhe shkruhet në sektorin e nisjes gjatë instalimit. Në momentin që nis ngarkuesi, procesori është në modalitetin real.
Lajm i trishtuar: madhësia e ngarkuesit duhet të jetë vetëm 512 bajt. Pse kaq pak? Për ta bërë këtë, duhet të njihemi me pajisjen e disketës. Këtu është një foto informative:

Fotografia tregon sipërfaqen e një disku. Disketa ka 2 sipërfaqe. Çdo sipërfaqe ka gjurmë (gjurmë) në formë unaze. Çdo pistë është e ndarë në pjesë të vogla, të harkuara të quajtura sektorë. Pra, historikisht, një sektor floppy ka një madhësi prej 512 bajt. Sektori i parë në disk, sektori i nisjes, lexohet nga BIOS në segmentin zero të memories në offset 0x7C00, dhe më pas kontrolli transferohet në këtë adresë. Ngarkuesi i nisjes zakonisht ngarkon në memorje jo vetë OS, por një ngarkues tjetër programi i ruajtur në disk, por për ndonjë arsye (ka shumë të ngjarë, kjo arsye është madhësia) që nuk përshtatet në një sektor.Dhe meqenëse deri më tani roli i sistemit operativ tonë luhet nga një banal Hello World, qëllimi ynë kryesor është të bëjeni kompjuterin të besojë në ekzistencën e sistemit tonë operativ, qoftë edhe vetëm në një sektor, dhe drejtojeni atë.

Si funksionon sektori i çizmeve? Në një PC, kërkesa e vetme për sektorin e nisjes është që dy bajtët e tij të fundit të përmbajnë vlerat 0x55 dhe 0xAA - nënshkrimi i sektorit të nisjes. Pra, tashmë është pak a shumë e qartë se çfarë duhet të bëjmë. Le të shkruajmë kodin! Kodi i mësipërm është shkruar për montuesin yasm.

seksioni. teksti

përdorni16

org 0x7C00 ; programi ynë është i ngarkuar në 0x7C00

filloni:

mov ax, cs

mov ds, sëpatë ; zgjidhni segmentin e të dhënave



mov si, mesazh

cld ; drejtim për komandat e vargut

mov ah, 0x0E ; Numri i funksionit BIOS

mov bh, 0x00 ; faqe memorie video

puts_loop:

lodsb ; ngarkoni karakterin tjetër në al

test al, al ; karakteri null do të thotë fundi i rreshtit

jz vendos_loop_dalje

int 0x10 ; thirrni funksionin BIOS

jmp puts_loop

puts_loop_exit:

jmp $; cikli i përjetshëm



mesazh:

db "Përshëndetje Botë!" , 0

përfundoni:

herë 0x1FE - përfundimi + fillimi db 0

db 0x55, 0xAA ; nënshkrimi i sektorit të nisjes

Ky program i shkurtër kërkon një sërë shpjegimesh të rëndësishme. Linja org 0x7C00 është e nevojshme në mënyrë që asembleri (dua të them programin, jo gjuhën) të llogarisë saktë adresat për etiketat dhe variablat (puts_loop, puts_loop_exit, message). Kështu e informojmë se programi do të ngarkohet në memorie në adresën 0x7C00.
Në rreshta
mov ax, cs

mov ds, sëpatë
segmenti i të dhënave (ds) vendoset i barabartë me segmentin e kodit (cs), pasi në programin tonë të dhënat dhe kodi ruhen në një segment.

Më pas mesazhi "Përshëndetje Botë!" Shfaqet karakter për karakter në lak. Për këtë përdoret funksioni 0x0E i ndërprerjes 0x10. Ai ka parametrat e mëposhtëm:
AH = 0x0E (numri i funksionit)
BH = numri i faqes së videos (mos u shqetësoni akoma, specifikoni 0)
AL = kodi i karakterit ASCII

Në rreshtin "jmp $" programi varet. Dhe me të drejtë, nuk ka nevojë që ajo të ekzekutojë kod shtesë. Sidoqoftë, në mënyrë që kompjuteri të funksionojë përsëri, do t'ju duhet të rindizni.

Në rreshtin "herë 0x1FE-finish + start db 0", pjesa tjetër e kodit të programit (përveç dy bajtit të fundit) është e mbushur me zero. Kjo bëhet në mënyrë që pas kompilimit, nënshkrimi i sektorit të nisjes të shfaqet në dy bajtet e fundit të programit.

Ne e kuptuam disi kodin e programit, tani le të përpiqemi ta përpilojmë këtë lumturi. Për përpilim, ne kemi nevojë, në fakt, një montues - siç u përmend më lart

Artikujt kryesorë të lidhur