Начало - Софтуер
Семантично ядро ​​- как да го съставим правилно? Да напишем ядро! Създаваме най-простото работещо ядро ​​на операционната система Семантично ядро ​​на страницата.

Нека напишем просто ядро, което може да се стартира с помощта на GRUB буутлоудъра на x86 система. Това ядро ​​ще покаже съобщение на екрана и ще изчака.

Как се зарежда x86 система?

Преди да започнем да пишем ядрото, нека разберем как системата зарежда и прехвърля контрола към ядрото.

Повечето регистри на процесора вече съдържат определени стойности при стартиране. Регистърът, сочещ към адреса на инструкциите (Instruction Pointer, EIP), съхранява адреса на паметта, където се намира инструкцията, изпълнена от процесора. EIP по подразбиране е 0xFFFFFFFF0. Така x86 процесорите на хардуерно ниво започват да работят на адрес 0xFFFFFFF0. Всъщност това са последните 16 байта от 32-битовия адресно пространство. Този адрес се нарича вектор за нулиране.

Сега картата на паметта на чипсета гарантира, че 0xFFFFFFF0 принадлежи към определена част от BIOS, а не към RAM. По това време BIOS се копира в RAM за повече бърз достъп. Адрес 0xFFFFFFF0 ще съдържа само инструкция за прескачане до адреса в паметта, където се съхранява копие на BIOS.

Ето как кодът на BIOS започва да се изпълнява. BIOS първо търси устройство, от което може да стартира, в предварително зададен ред. Намерено е магическо число, което определя дали устройството може да се стартира (511-ият и 512-ият байт на първия сектор трябва да са равни на 0xAA55).

Когато BIOS открие устройство за зареждане, той копира съдържанието на първия сектор на устройството в RAM, като започне от физическия адрес 0x7c00; след това отива на адреса и изпълнява изтегления код. Този код се нарича буутлоудър.

Буутлоудърът зарежда ядрото на физически адрес 0x100000. Този адрес се използва като начален адрес във всички големи ядра на x86 системи.

Всички x86 процесори започват в прост 16-битов режим, наречен реален режим. GRUB буутлоудърът превключва режима на 32-битов защитен режим, задавайки ниския бит на регистър CR0 на 1 . Така ядрото се зарежда в 32-битов защитен режим.

Имайте предвид, че в случай на ядрото на Linux, GRUB вижда протоколите за зареждане на Linux и зарежда ядрото в реален режим. Ядрото автоматично преминава в защитен режим.

какво ни трябва

  • x86 компютър;
  • Linux;
  • ld (GNU Linker);

Задаване на входна точка в асемблер

Колкото и да искате да се ограничите само до C, ще трябва да напишете нещо на асемблер. Ще напишем малък файл върху него, който ще служи като отправна точка за нашето ядро. Всичко, което ще направи, е да извика външна функция, написана на C, и да спре потока на програмата.

Как можем да сме сигурни, че този код е началната точка?

Ще използваме скрипт за свързване, който свързва обектни файлове, за да създаде крайния изпълним файл. В този скрипт изрично ще посочим, че искаме да заредим данни на адрес 0x100000.

Ето асемблерния код:

;;kernel.asm bits 32 ;nasm директива - 32-битова секция .text global start extern kmain ;kmain е дефиниран в c файла start: cli ;блок прекъсва mov esp, stack_space ;задава указател на стека извикване kmain hlt ;спиране на секцията на процесора .bss resb 8192 ;8KB за стека stack_space:

Първата инструкция, битове 32, не е x86 инструкция за асемблиране. Това е директива към NASM асемблера, която определя генерирането на код за процесор, работещ в 32-битов режим. В нашия случай това не е необходимо, но обикновено е полезно.

Разделът с кода започва на втория ред.

global е друга директива на NASM, която прави символи изходен кодглобален. По този начин линкерът знае къде е началният символ - нашата входна точка.

kmain е функция, която ще бъде дефинирана във файла kernel.c. extern означава, че функцията е декларирана някъде другаде.

След това идва функцията start, която извиква функцията kmain и спира процесора с инструкцията hlt. Ето защо деактивираме прекъсванията предварително, като използваме инструкцията cli.

В идеалния случай трябва да заделим малко памет и да посочим към нея с указател на стека (esp). Въпреки това изглежда, че GRUB вече е направил това за нас. Все пак ще отделите малко място в раздела BSS и ще преместите указателя на стека в началото му. Използваме инструкцията resb, която запазва определения брой байтове. Непосредствено преди извикването на kmain, указателят на стека (esp) се настройва на правилното място с инструкцията mov.

Ядрото в C

В kernel.asm извикахме функцията kmain(). Така нашият “C” код трябва да започне изпълнение с kmain() :

/* * kernel.c */ void kmain(void) ( const char *str = "моето първо ядро"; char *vidptr = (char*)0xb8000; //video mem започва тук. unsigned int i = 0; unsigned int j = 0; /* този цикъл изчиства екрана * има 25 реда от 80 колони; всеки елемент отнема 2 байта */ while(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; }

Всичко, което нашето ядро ​​ще направи, е да изчисти екрана и да покаже реда „моето първо ядро“.

Първо създаваме указател vidptr, който сочи към адреса 0xb8000. В защитен режим "видео паметта" започва от този адрес. За да покажем текст на екрана, запазваме 25 реда от 80 ASCII знака, започващи от 0xb8000.

Всеки символ се показва не от обичайните 8 бита, а от 16. Първият байт съхранява самия знак, а вторият - атрибут-байт. Той описва форматирането на знака, като неговия цвят.

За да покажем зеления символ s на черен фон, ще запишем този символ в първия байт и стойността 0x02 във втория. 0 означава черен фон, 2 означава зелен цвят на текста.

Ето цветната диаграма:

0 - черно, 1 - синьо, 2 - зелено, 3 - циан, 4 - червено, 5 - магента, 6 - кафяво, 7 - светло сиво, 8 - тъмно сиво, 9 - светло синьо, 10/a - светло зелено, 11/b - Светло циан, 12/c - Светло червено, 13/d - Светло магента, 14/e - Светло кафяво, 15/f - Бяло.

В нашето ядро ​​ще използваме светлосив текст на черен фон, така че нашият атрибут байт ще има стойност 0x07.

В първия цикъл програмата отпечатва празен символ върху цялата зона 80x25. Това ще изчисти екрана. В следващия цикъл знаците от нулевия низ "моето първо ядро" с байт на атрибута, равен на 0x07, се записват във "видео памет". Това ще отпечата низа на екрана.

Свързваща част

Трябва да сглобим kernel.asm в обектен файл с помощта на NASM; след това използвайте GCC, за да компилирате kernel.c в друг обектен файл. След това те трябва да бъдат прикрепени към изпълнимото зареждащо ядро.

За да направим това, ще използваме обвързващ скрипт, който се предава на ld като аргумент.

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

Първо ще попитаме изходен форматкато 32-битов изпълним и свързваем формат (ELF). ELF е стандартен двоичен файлов формат за Unix x86 системи. ВХОДприема един аргумент, указващ името на символа, който е входната точка. РАЗДЕЛИ- това е най-важната част. Той дефинира маркирането на нашия изпълним файл. Ние определяме как да бъдат свързани различните секции и къде да ги поставим.

В скоби след СЕКЦИИ точката (.) показва брояча на позициите, който по подразбиране е 0x0. Може да се промени, което и правим.

Нека да разгледаме следния ред: .text: ( *(.text) ) . Звездичка (*) е специален характер, съответстващи на всяко име на файл. Изразът *(.text) означава всички .text секции от всички входни файлове.

По този начин линкерът обединява всички кодови секции на обектните файлове в една секция на изпълнимия файл на адреса в брояча на позиции (0x100000). След това стойността на брояча ще бъде равна на 0x100000 + размера на получения раздел.

Същото се случва и с други секции.

Grub и Multiboot

Сега всички файлове са готови за създаване на ядрото. Но остава още една крачка.

Има стандарт за зареждане на x86 ядра с помощта на буутлоудър, наречен Multiboot спецификация. GRUB ще стартира нашето ядро ​​само ако отговаря на тези спецификации.

След тях ядрото трябва да съдържа заглавие в първите си 8 килобайта. Освен това тази заглавка трябва да съдържа 3 полета, които са 4 байта:

  • магическиполе: съдържа магическо число 0x1BADB002за идентифициране на ядрото.
  • поле знамена: не ни трябва, нека го занулим.
  • поле контролна сума: ако го добавите към предишните две, трябва да получите нула.

Нашият kernel.asm ще изглежда така:

;;kernel.asm ;nasm директива - 32 бита бита 32 секция .text ;multiboot spec подравняване 4 dd 0x1BADB002 ;magic dd 0x00 ;флагове dd - (0x1BADB002 + 0x00) ;контролна сума. m+f+c трябва да е нула глобален старт extern kmain ;kmain е дефиниран в c файла start: cli ;блок прекъсва mov esp, stack_space ;задаване на указател на стека повикване kmain hlt ;спиране на CPU секцията .bss resb 8192 ;8KB за стека пространство_стек:

Изграждане на ядрото

Сега ще създадем обектни файлове от kernel.asm и kernel.c и ще ги свържем с помощта на нашия скрипт.

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

Този ред ще стартира асемблера, за да създаде обектния файл kasm.o във формат ELF-32.

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

Опцията „-c“ гарантира, че след компилирането няма скрито свързване.

Ld -m elf_i386 -T link.ld -o ядро ​​kasm.o kc.o

Това ще изпълни линкера с нашия скрипт и ще създаде изпълним файл, наречен ядро.

Настройка на grub и стартиране на ядрото

GRUB изисква името на ядрото, за да отговаря на шаблона на ядрото- . Така че преименувайте ядрото. Нарекох моето ядро-701.

Сега го поставете в директорията /зареждане. За да направите това, ще ви трябват права на суперпотребител.

В конфигурационния файл GRUB grub.cfg добавете следното:

Заглавие myKernel root (hd0,0) kernel /boot/kernel-701 ro

Не забравяйте да премахнете директивата за скрито меню, ако има такава.

Рестартирайте компютъра си и ще видите списък с ядра, включително вашето. Изберете го и ще видите:

Това е вашето ядро! Нека добавим система за вход/изход.

P.S.

  • За всякакви трикове на ядрото е по-добре да използвате виртуална машина.
  • За да стартирате ядрото grub2конфигурацията трябва да изглежда така: menuentry "kernel 7001" ( set root="hd0,msdos1" multiboot /boot/kernel-7001 ro )
  • ако искате да използвате емулатора qemu, използвайте: qemu-system-i386 -kernel kernel

Семантичното ядро ​​е страшно име, което SEO специалистите измислиха, за да обозначат доста просто нещо. Просто трябва да изберем ключовите заявки, за които ще рекламираме нашия сайт.

И в тази статия ще ви покажа как правилно да съставите семантично ядро, така че вашият сайт бързо да достигне ТОП и да не застоява с месеци. Тук също има „тайни“.

И преди да преминем към компилирането на SY, нека разберем какво е това и до какво трябва да стигнем в крайна сметка.

Какво е семантичното ядро ​​в прости думи

Колкото и да е странно, но семантичното ядро ​​е обичайното excel файл, който изброява ключовите заявки, за които вие (или вашият копирайтър) ще пишете статии за сайта.

Например, ето как изглежда моето семантично ядро:

Маркирал съм в зелено тези ключови заявки, за които вече съм написал статии. Жълти - тези, за които смятам да пиша статии в близко бъдеще. А безцветните клетки означават, че тези заявки ще дойдат малко по-късно.

За всяка ключова заявка определих честотата, конкурентоспособността и измислих „закачливо“ заглавие. Трябва да получите приблизително същия файл. Сега моят CN се състои от 150 ключови думи. Това означава, че получавам „материал“ поне 5 месеца предварително (дори ако пиша по една статия на ден).

По-долу ще говорим за какво трябва да се подготвите, ако изведнъж решите да поръчате събирането на семантичното ядро ​​от специалисти. Тук ще кажа накратко - те ще ви дадат същия списък, но само за хиляди „ключове“. В SY обаче не е важно количеството, а качеството. И ние ще се съсредоточим върху това.

Защо изобщо се нуждаем от семантично ядро?

Но наистина, защо имаме нужда от това мъчение? В крайна сметка можете просто да пишете качествени статии и да привличате аудитория, нали? Да, можете да пишете, но няма да можете да привличате хора.

Основната грешка на 90% от блогърите е просто писането на висококачествени статии. Не се шегувам, имат наистина интересни и полезни материали. Но търсачките не знаят за това. Те не са екстрасенси, а просто роботи. Съответно те не класират статията ви в ТОП.

Има още един тънък момент в заглавието. Например, имате много висококачествена статия на тема „Как правилно да водим бизнес в книга с лице“. Там описваш всичко за Фейсбук много подробно и професионално. Включително как да насърчаваме общностите там. Вашата статия е най-качествената, полезна и интересна в интернет по тази тема. Никой не лежеше до теб. Но пак няма да ти помогне.

Защо висококачествените статии изпадат от ТОП

Представете си, че уебсайтът ви е посетен не от робот, а от жив инспектор (оценител) от Yandex. Той разбра, че имате най-готината статия. И ръцете ви поставят на първо място в резултатите от търсенето за заявката „Популяризиране на общност във Facebook“.

Знаете ли какво ще се случи след това? Така или иначе много скоро ще излетиш оттам. Защото никой няма да кликне върху вашата статия, дори и на първо място. Хората въвеждат заявката „Насърчаване на общност във Facebook“ и вашето заглавие е „Как правилно да управлявате бизнес в книга с лице“. Оригинално, свежо, забавно, но... не по поръчка. Хората искат да видят точно това, което търсят, а не вашата креативност.

Съответно статията ви ще изпразни мястото си в ТОП резултатите от търсенето. И един жив оценител, пламенен почитател на работата ви, може да моли властите колкото иска да ви оставят поне в ТОП 10. Но няма да помогне. Всички първи места ще бъдат заети от празни статии, като люспи от семена, които вчерашните ученици копираха един от друг.

Но тези статии ще имат правилното „уместно“ заглавие - „Насърчаване на общност във Facebook от нулата“ ( стъпка по стъпка, в 5 стъпки, от А до Я, безплатнои т.н.) Обидно ли е? разбира се Е, борете се срещу несправедливостта. Нека създадем компетентно семантично ядро, така че вашите статии да заемат заслужените първи места.

Още една причина да започнете да пишете СИНОПСИС точно сега

Има още нещо, за което по някаква причина хората не мислят много. Трябва да пишете статии често - поне всяка седмица и за предпочитане 2-3 пъти седмично - за да печелите повече трафики по-бързо.

Всеки знае това, но почти никой не го прави. И всичко това, защото имат „творчески застой“, „просто не могат да се насилят“, „просто са мързеливи“. Но всъщност целият проблем се крие в липсата на специфично семантично ядро.

Въведох един от основните си ключове в полето за търсене - „smm“ и Yandex веднага ми даде дузина съвети за това какво друго може да бъде интересно за хората, които се интересуват от „smm“. Всичко, което трябва да направя, е да копирам тези ключове в тетрадка. След това ще проверя всеки от тях по същия начин и ще събера съвети за тях.

След първия етап на събиране на ключови думи трябва да завършите с текстов документ, съдържащ 10-30 широки основни ключа, с които ще работим по-нататък.

Стъпка #2 — Разбор на основните ключове в SlovoEB

Разбира се, ако напишете статия за заявката „уебинар“ или „smm“, тогава чудо няма да се случи. Никога няма да можете да стигнете до ТОП за толкова широка заявка. Трябва да разделим основния ключ на много малки заявки по тази тема. И ние ще направим това с помощта на специална програма.

Ползвам KeyCollector, но е платен. Можете да използвате безплатен аналог - програмата SlovoEB. Можете да го изтеглите от официалния сайт.

Най-трудното при работата с тази програма е правилното й настройване. Ще ви покажа как правилно да настроите и използвате Sloboeb. Но в тази статия се фокусирам върху избора на ключове за Yandex Direct.

И тук нека разгледаме стъпка по стъпка характеристиките на използването на тази програма за създаване на семантично ядро ​​за SEO.

Първо създаваме нов проект и го именуваме с широкия ключ, който искате да анализирате.

Обикновено давам на проекта същото име като моя основен ключ, за да избегна объркване по-късно. И да, ще ви предупредя за още една грешка. Не се опитвайте да анализирате всички основни ключове наведнъж. Тогава ще ви бъде много трудно да филтрирате „празни“ ключови заявки от златни зърна. Нека анализираме ключ по ключ.

След като създадем проекта, извършваме основната операция. Тоест ние всъщност анализираме ключа чрез Yandex Wordstat. За да направите това, щракнете върху бутона „Worstat“ в интерфейса на програмата, въведете своя основен ключ и щракнете върху „Стартиране на събирането“.

Например, нека анализираме основния ключ за моя блог „контекстна реклама“.

След това процесът ще започне и след известно време програмата ще ни даде резултата - до 2000 ключови заявки, които съдържат „контекстуална реклама“.

Освен това до всяка заявка ще има „мръсна“ честота - колко пъти този ключ (+ неговите словоформи и опашки) е търсен на месец чрез Yandex. Но не ви съветвам да правите изводи от тези цифри.

Стъпка #3 - Събиране на точната честота за ключовете

Мръсната честота няма да ни покаже нищо. Ако се съсредоточите върху него, тогава не се изненадвайте, когато вашият ключ за 1000 заявки не донесе нито едно кликване на месец.

Трябва да идентифицираме чистата честота. И за да направим това, първо избираме всички намерени ключове с отметки, след което щракваме върху бутона „Yandex Direct“ и започваме процеса отново. Сега Slovoeb ще търси точната честота на заявките на месец за всеки ключ.

Сега имаме обективна картина - колко пъти каква заявка е въведена от интернет потребителите през последния месец. Сега предлагам да групираме всички ключови заявки по честота, за да улесним работата с тях.

За да направите това, щракнете върху иконата „филтър“ в колоната „Честота“. ", и посочете - филтриране на ключове със стойността "по-малко или равно на 10".

Сега програмата ще ви покаже само онези заявки, чиято честота е по-малка или равна на стойността „10“. Можете да изтриете тези заявки или да ги копирате в друга група ключови заявки за бъдеща употреба. По-малко от 10 е много малко. Писането на статии за тези искания е загуба на време.

Сега трябва да изберем онези ключови заявки, които ще ни донесат повече или по-малко добър трафик. И за да направим това, трябва да разберем още един параметър - нивото на конкурентоспособност на заявката.

Стъпка #4 — Проверка на конкурентоспособността на заявките

Всички „клавиши“ в този свят са разделени на 3 типа: високочестотни (HF), средни честоти (MF), ниски честоти (LF). Те също могат да бъдат силно конкурентни (HC), умерено конкурентни (SC) и ниско конкурентни (LC).

По правило HF заявките също са VC. Тоест, ако дадена заявка се търси често в Интернет, тогава има много сайтове, които искат да я популяризират. Но това не винаги е така; има щастливи изключения.

Изкуството на компилирането на семантично ядро ​​се състои именно в намирането на заявки, които имат висока честота и ниско ниво на конкуренция. Много е трудно ръчно да се определи нивото на конкуренцията.

Можете да се съсредоточите върху показатели като брой основни страници в ТОП 10, дължина и качество на текстовете. ниво на доверие и цици на сайтове в ТОП резултатите от търсенето при поискване. Всичко това ще ви даде известна представа колко силна е конкуренцията за класиране за тази конкретна заявка.

Но ви препоръчвам да използвате Мутагенна услуга. Той взема предвид всички параметри, които споменах по-горе, плюс дузина други, за които нито вие, нито аз вероятно дори сме чували. След анализ услугата дава точна стойност - какво ниво на конкуренция има тази заявка.

Тук проверих заявката „настройване на контекстна реклама в google adwords“. Mutagen ни показа, че този ключ има конкурентоспособност "повече от 25" - това е максималната стойност, която показва. И тази заявка има само 11 прегледа на месец. Така че определено не ни подхожда.

Можем да копираме всички ключове, които намерихме в Slovoeb и да направим масова проверка в Mutagen. След това всичко, което трябва да направим, е да прегледаме списъка и да вземем онези заявки, които имат много заявки и ниско ниво на конкуренция.

Mutagen е платена услуга. Но можете да правите 10 проверки на ден безплатно. Освен това цената на тестването е много ниска. През цялото време, откакто работя с него, не съм похарчил дори 300 рубли.

Между другото, за нивото на конкуренцията. Ако имате млад сайт, тогава е по-добре да изберете заявки с ниво на конкуренция 3-5. И ако рекламирате повече от година, тогава можете да вземете 10-15.

Между другото, по отношение на честотата на заявките. Сега трябва да направим последната стъпка, която ще ви позволи да привлечете много трафик дори за нискочестотни заявки.

Стъпка #5 — Събиране на „опашки“ за избраните ключове

Както е доказано и тествано многократно, вашият сайт ще получава по-голямата част от трафика не от основните ключови думи, а от така наречените „опашки“. Това е, когато човек въвежда странни ключови заявки в лентата за търсене, с честота 1-2 на месец, но има много такива заявки.

За да видите „опашката“, просто отидете на Yandex и въведете ключовата заявка по ваш избор в лентата за търсене. Ето какво приблизително ще видите.

Сега просто трябва да запишете тези допълнителни думи в отделен документ и да ги използвате в статията си. Освен това не е необходимо винаги да ги поставяте до главния ключ. В противен случай търсачките ще видят „прекомерна оптимизация“ и вашите статии ще попаднат в резултатите от търсенето.

Просто ги използвайте на различни места в статията си и тогава ще получите допълнителен трафик и от тях. Също така бих ви препоръчал да се опитате да използвате колкото се може повече словоформи и синоними за основната си ключова заявка.

Например, имаме заявка - „Настройване на контекстна реклама“. Ето как да го преформулирате:

  • Настройка = настройка, създаване, създаване, стартиране, активиране, поставяне...
  • Контекстна реклама = контекст, директен, тийзър, YAN, adwords, kms. директен, adwords...

Никога не знаете как точно хората ще търсят информация. Добавете всички тези допълнителни думи към вашето семантично ядро ​​и ги използвайте, когато пишете текстове.

И така, ние събираме списък от 100 - 150 ключови заявки. Ако създавате семантично ядро ​​за първи път, може да ви отнеме няколко седмици.

Или може би му счупи очите? Може би има възможност да делегирате компилацията на FL на специалисти, които ще го направят по-добре и по-бързо? Да, има такива специалисти, но не винаги е необходимо да използвате техните услуги.

Струва ли си да поръчате SY от специалисти?

Като цяло компилаторите на семантично ядро ​​ще ви дадат само стъпки 1 - 3 от нашата диаграма. Понякога, срещу голяма допълнителна такса, те ще направят стъпки 4-5 - (събиране на опашки и проверка на конкурентоспособността на заявките).

След това те ще ви дадат няколко хиляди ключови заявки, с които ще трябва да работите допълнително.

И въпросът тук е дали ще пишете статиите сами или ще наемете копирайтъри за това. Ако искате да се фокусирате върху качеството, а не върху количеството, тогава трябва да го напишете сами. Но тогава няма да е достатъчно просто да получите списък с ключове. Ще трябва да изберете теми, които разбирате достатъчно добре, за да напишете качествена статия.

И тук възниква въпросът – защо тогава всъщност имаме нужда от специалисти по ФЛ? Съгласете се, анализирането на основния ключ и събирането на точните честоти (стъпки # 1-3) не е никак трудно. Това ще ви отнеме буквално половин час.

Най-трудното нещо е да изберете HF заявки, които имат ниска конкуренция. И сега, както се оказва, имате нужда от HF-NC, на които можете да напишете добра статия. Точно това ще ви отнеме 99% от времето ви за работа върху семантичното ядро. И никой специалист няма да направи това вместо вас. Е, струва ли си да харчите пари за поръчка на такива услуги?

Кога са полезни услугите на FL специалисти?

Друг е въпросът, ако първоначално планирате да привлечете копирайтъри. Тогава не е нужно да разбирате предмета на искането. Вашите копирайтъри също няма да го разберат. Те просто ще вземат няколко статии по тази тема и ще съставят „своя“ текст от тях.

Такива статии ще бъдат празни, мизерни, почти безполезни. Но ще има много от тях. Сами можете да пишете максимум 2-3 качествени статии на седмица. И цяла армия от копирайтъри ще ви предоставят 2-3 скапани текста на ден. В същото време те ще бъдат оптимизирани за заявки, което означава, че ще привлекат малко трафик.

В този случай да, спокойно наемете ФЛ специалисти. Нека същевременно да изготвят и техническа спецификация за копирайтъри. Но разбирате ли, това също ще струва малко пари.

Резюме

Нека отново прегледаме основните идеи в статията, за да подсилим информацията.

  • Семантичното ядро ​​е просто списък с ключови заявки, за които ще пишете статии на сайта за промоция.
  • Необходимо е да оптимизирате текстовете за точни ключови заявки, в противен случай дори вашите статии с най-високо качество никога няма да достигнат ТОП.
  • SY е като план за съдържание за социалните мрежи. Помага ви да избегнете изпадането в „творческа криза“ и винаги да знаете точно за какво ще пишете утре, вдругиден и след месец.
  • За да компилирате семантично ядро, е удобно да използвате безплатната програма Slovoeb, имате нужда само от нея.
  • Ето петте стъпки за съставяне на NL: 1 - Избор на основни ключове; 2 - Разбор на основни ключове; 3 - Събиране на точна честота за заявки; 4 — Проверка на конкурентоспособността на ключовете; 5 – Събиране на „опашки“.
  • Ако искате сами да пишете статии, тогава е по-добре сами да създадете семантично ядро ​​за себе си. Специалистите в подготовката на синоними няма да могат да ви помогнат тук.
  • Ако искате да работите върху количеството и да използвате копирайтъри за писане на статии, тогава е напълно възможно да делегирате и компилирате семантичното ядро. Само да имаше пари за всичко.

Надявам се тази инструкция да ви е била полезна. Запазете го в любимите си, за да не го загубите, и го споделете с приятелите си. Не забравяйте да изтеглите книгата ми. Там ви показвам най-бързия път от нула до първия милион в интернет (извадка от личен опитслед 10 години =)

До скоро!

Ваш Дмитрий Новоселов

здравейте всички Днешната статия е посветена на това как правилно да сглобите семантично ядро ​​(SC). Ако се занимавате със SEO промоция в Google и Yandex, искате да увеличите естествения трафик, да увеличите трафика и продажбите на уебсайта - този материал е за вас.

За да стигнем до дъното на истината, ще проучим темата от „А до Я“:

В заключение, нека разгледаме общите правила за съставяне на SL. Така че да започваме!

Семантично ядро: какво е това и какви са заявките?

Семантичното ядро ​​на сайта (известно още като „семантично ядро“) е набор от думи и фрази, които точно съответстват на структурата и темата на ресурса. Просто казано, това са заявките, чрез които потребителите могат да намерят сайт в Интернет.

Това е правилното семантично ядро, което дава на търсачките и аудиторията пълна картина на информацията, представена на ресурса.

Например, ако една компания продава готови пощенски картички, тогава семантичното ядро ​​трябва да включва следните заявки: „купете пощенска картичка“, „цена на пощенска картичка“, „пощенска картичка по поръчка“ и други подобни. Но не: „как да си направим пощенска картичка“, „направи си сам пощенска картичка“, „домашно приготвени пощенски картички“.

Интересно да знаете: LSI copywriting. Ще замени ли техниката SEO?

Класификация на заявките по честота:

  • Високочестотни запитвания(HF) - най-често „забито“ в лентата за търсене (например „купете пощенска картичка“).
  • Среден диапазон(MF) – по-малко популярни от HF клавишите, но също представляват интерес за широка аудитория („купете цена на пощенска картичка“).
  • Ниска честота(NP) – фрази, които се изискват много рядко („купете художествена пощенска картичка“).

Важно е да се отбележи, че няма ясни граници, разделящи HF от SY и LF, тъй като те варират в зависимост от темата. Например за заявката „оригами“ RF индикаторът е 600 хиляди импресии на месец, а за „козметика“ – 3,5 милиона.

Ако се обърнем към анатомията на ключа, тогава високата честота се състои само от тялото, средните и ниските честоти се допълват от спецификатор и „опашка“.

Когато формирате семантично ядро, трябва да използвате всички видове честоти, но в различни пропорции: минимум HF, максимум LF и средно количество MF.

За да стане по-ясно, нека направим аналогия с дърво. Багажникът е най-важната заявка, на която почива всичко. Дебелите клони, разположени по-близо до ствола, са средночестотни ключове, които също са популярни, но не толкова популярни, колкото HF. Thin branches са нискочестотни думи, които също се използват за търсене на желания продукт/услуга, но рядко.

Разделяне на ключовете по конкурентоспособност:

  • силно конкурентен (HC);
  • средно конкурентно (SC);
  • ниско конкурентен (NC).

Този критерий показва колко уеб ресурси използва тази заявка за промоция. Тук всичко е просто: колкото по-висока е конкурентоспособността на ключа, толкова по-трудно е да пробиете и да останете в топ 10 с него. Нискоконкурентните също не заслужават внимание, тъй като не са много популярни в мрежата. Идеалният вариант е да напредвате по IC заявки, с което реално да заемете първо място в стабилна бизнес област.

Класификация на заявките според нуждите на потребителя:

  • Транзакционен– ключове, свързани с действието (купуване, продажба, качване, изтегляне).
  • Информация– за получаване на каквато и да е информация (какво, как, защо, колко).
  • Навигационен– да ви помогне да намерите информация за конкретен ресурс („купете телефонен контакт“).

Останалите ключови думи, когато е трудно да се разбере намерението на потребителя, се класифицират в групата „Други“ (например само думата „пощенска картичка“ предизвиква много въпроси: „Купете? Направете? Рисувайте?“).

Защо един уебсайт се нуждае от семантично ядро?

Събирането на семантично ядро ​​е трудна работа, която изисква много време, усилия и търпение. Няма да е възможно да се създаде правилен синтаксис, който да работи само за две минути.

Тук възниква напълно разумен въпрос: струва ли си изобщо да харчите усилия за избора на семантично ядро ​​за сайт? Ако искате вашият интернет проект да бъде популярен, постоянно да увеличавате клиентската си база и съответно да увеличавате печалбите на компанията, отговорът е недвусмислен: „ДА“.

Тъй като събирането на семантичното ядро ​​помага:

  • Увеличете видимостта на уеб ресурс. Търсачките Yandex, Google и други ще намерят вашия сайт по избраните от вас ключови думи и ще го предложат на потребители, които се интересуват от тези заявки. В резултат на това се увеличава притокът на потенциални клиенти и се увеличават шансовете за продажба на продукт/услуга.
  • Избягвайте грешките на конкурентите.При създаването на синтаксис задължително се извършва анализ на семантичното ядро ​​на конкурентите, заемащи първа позиция в резултатите от търсенето. Изучавайки водещите сайтове, ще можете да определите какви заявки им помагат да останат на върха, по какви теми пишат текстове и какви идеи са неуспешни. По време на анализа на конкурентите ви може също да излезете с идеи как да развиете бизнеса си.
  • Направете структурата на сайта. Препоръчително е да използвате семантичното ядро ​​като „помощник“ за създаване на структура на уебсайт. Събирайки пълния CN, можете да видите всички заявки, които потребителите въвеждат, когато търсят вашия продукт или услуга. Това ще ви помогне да вземете решение за основните раздели на ресурса. Най-вероятно ще трябва да създадете страници, за които дори не сте помислили първоначално. Важно е да се разбере, че NL предполага само интересите на потребителите. В идеалния случай структурата на сайта съответства на бизнес сферата и съдържа съдържание, което отговаря на нуждите на аудиторията.
  • Избягвайте спама.След като анализирате семантичното ядро ​​на най-добрите конкурентни сайтове, можете да определите оптималната честота на ключовите думи. Тъй като няма универсален индикатор за плътност на заявките за всички страници на ресурса и всичко зависи от темата и типа на страницата, както и от езика и самия ключ.

Как иначе можете да използвате семантичното ядро? За да създадете правилния план за съдържание. Правилно събраните ключове ще предложат теми за текстове и публикации, които представляват интерес за вашата целева аудитория.

Заключение. Без SY е почти НЕВЪЗМОЖНО да се създаде интересен, популярен и печеливш интернет проект.

Материал по темата:

Подготовка за събиране на семантичното ядро ​​за сайта

Преди да създадете семантичното ядро ​​на сайта, трябва да изпълните следните стъпки:

I. Проучете дейността на компанията („мозъчна атака“)

Тук е важно да запишете ВСИЧКИ услуги и стоки, които предлага организацията. Например, за да съберете семантично ядро ​​за онлайн магазин за мебели, можете да използвате следните заявки: диван, фотьойл, легло, коридор, шкаф + реставрация, ремонт. Основното тук е да не пропускате нищо и да не добавяте ненужни неща. Само подходяща информация, т.е. Ако фирмата не продава пуфове или ремонтира мебели, тези заявки не са необходими.

В допълнение към мозъчната атака можете да използвате услугите Google Analyticsи Yandex.Metrika (фиг. 1) или лични акаунти в Google Search Console и Yandex Webmaster (фиг. 2). Те ще ви кажат кои заявки са най-популярни сред вашата целева аудитория. Такава помощ е достъпна само за вече работещи сайтове.

Текстове в помощ:

  • Адвего– работи на същия принцип като Istio.com.

  • Lenartools.Работи просто: заредете страниците, от които трябва да „издърпате“ ключове (максимум 200), щракнете върху „Да тръгваме“ - и ще получите списък с думи, които най-често се използват в ресурсите.

II. За да анализирате семантичното ядро ​​на конкурентен сайт:

  • СЕМРУШ– трябва да добавите адреса на ресурса, да изберете държавата, да щракнете върху „Старт сега“ и да получите анализа. Услугата е платена, но при регистрация се предоставят 10 безплатни проверки. Подходящ и за събиране на ключове за собствен бизнес проект.

  • Searchmetrics– много удобен инструмент, но е платен и на английски, така че не е достъпен за всички.

  • SpyWords– услуга за анализиране на дейността на конкурента: бюджет, трафик от търсене, реклами, заявки. „Намален“ набор от функции се предлага безплатно, а срещу заплащане можете да получите подробна картина на напредъка на компанията, която ви интересува.

  • Serpstat– многофункционална платформа, която предоставя отчет за ключови думи, класиране, конкуренти в резултатите от търсенето на Google и Yandex, обратни връзкии др. Подходящ за избор на FL и анализ на вашия ресурс. Единственият минус е, че пълният набор от услуги е достъпен след заплащане на тарифния план.

  • PR-CYбезплатна програмаза анализ на семантичното ядро, използваемост, мобилна оптимизация, маса на връзките и много други.

друг ефективен начинразширения на семантичното ядро ​​- използвайте синоними. Потребителите могат да търсят един и същ продукт или услуга по различни начини, така че е важно да включите всички алтернативни ключове в TL. Съветите в Google и Yandex ще ви помогнат да намерите синоними.

съвет. Ако сайтът е информационен, първо трябва да изберете заявки, които са основните за този ресурс и за които е планирана промоция. И тогава - сезонно. Например, за уеб проект за модни тенденции в облеклото, ключовите заявки ще бъдат: мода, жени, мъже, деца. И, така да се каже, „сезонни“ - есен, зима, пролет и т.

Как да сглобите семантично ядро: подробни инструкции

След като решите списък със заявки за вашия сайт, можете да започнете да събирате семантичното ядро.

Това може да се направи:

I. БЕЗПЛАТНО използване на:

Wordstat Yandex

Yandex Wordstat е много популярна онлайн услуга, с която можете:

  • събира семантичното ядро ​​на сайта със статистика за месеца;
  • вземете думи, подобни на заявката;
  • филтриране на ключови думи, въведени от мобилни устройства;
  • разберете статистика по град и регион;
  • определят сезонните колебания на ключовете.

Голям недостатък: трябва да „разтоварите“ ключовете ръчно. Но ако инсталирате разширението Yandex Wordstat асистент,работата със семантичното ядро ​​ще се ускори значително (от значение за браузъра Opera).

Използва се лесно: щракнете върху „+“ до желания ключ или щракнете върху „добавяне на всички“. Заявките се прехвърлят автоматично в списъка с разширения. След като съберете CN, трябва да го прехвърлите в редактора на таблици и да го обработите. Важни предимства на програмата: проверка за дубликати, сортиране (азбука, честота, добавяне), възможност за ръчно добавяне на ключове.

Инструкции стъпка по стъпка как да използвате услугата са дадени в статията:Яндекс. Wordstat: как да събираме ключови заявки?

Google Ads

Инструмент за планиране на ключови думи от Google, който ви позволява да изберете безплатно семантично ядро ​​онлайн. Услугата намира ключови думи въз основа на заявките на потребителите на търсачката Google. За да работите, трябва да имате акаунт в Google.

Услугата предлага:

  • намиране на нови ключови думи;
  • вижте броя на заявките и прогнозите.

За да съберете семантичното ядро, трябва да въведете заявка, като изберете местоположение и език. Програмата показва средния брой заявки на месец и нивото на конкуренция. Има също информация за рекламните импресии и офертата за показване на реклама в горната част на страницата.

Ако е необходимо, можете да зададете филтър по конкуренция, средна позиция и други критерии.

Възможно е също така да поискате отчет ( инструкции стъпка по стъпкаПрограмата показва как да го направите).

За да проучите прогнозирането на трафика, просто въведете заявка или набор от ключове в прозореца „Вижте броя на заявките и прогнозите“. Информацията ще помогне да се определи ефективността на стратегическия план за даден бюджет и процент.

„Недостатъците“ на услугата включват следното: няма точна честота (само средно за месеца); не показва криптирани ключове на Yandex и скрива някои от Google. Но той определя конкуренцията и ви позволява да експортирате ключови думи във формат на Excel.

СловоЕБ

Това е безплатна версия на Key Collector, която има много полезни функции:

  • бързо събира семантично ядро ​​от дясната и лявата колона на WordStat;
  • извършва пакетно събиране на съвети за търсене;
  • определя всички видове честота;
  • събира данни за сезонността;
  • ви позволява да извършвате пакетно събиране на думи и честота от Rambler.Adstat;
  • Изчислява KEI (индекс на ключова ефективност).

За да използвате услугата, трябва само да въведете информацията за вашия акаунт в Direct (вход и парола).

Ако искате да научите повече, прочетете статията: Slovoeb (Slovoeb). Основи и инструкции за употреба

Букварикс

Лесна за използване и безплатна програма за събиране на семантичното ядро, чиято база данни включва повече от 2 милиарда заявки.

Отличава се със своята оперативна работа, както и с полезни функции:

  • поддържа голям списък с думи за изключение (до 10 хиляди);
  • ви позволява да създавате и използвате списъци с думи директно при формиране на извадка;
  • предлага съставяне на списъци с думи чрез умножаване на няколко списъка (Combinator);
  • премахва дублиращи се ключови думи;
  • показва честота (но само „в световен мащаб“, без избор на регион);
  • анализира домейни (един или повече, сравнявайки ресурси на SYNAL);
  • експортирани във формат .csv.

Единственият важен недостатък за инсталационна програма– голямо „тегло“ (в архивиран формат ≈ 28 GB, в разопакован формат ≈ 100 GB). Но има алтернатива - избиране на SYS онлайн.

II. ПЛАТЕНО чрез програми:

Базата на Максим Пастухов

Руска услуга, която съдържа база данни с повече от 1,6 милиарда ключови думи с Yandex WordStat и Direct данни, както и английска услуга, съдържаща повече от 600 милиона думи. Работи онлайн и помага не само при създаването на семантично ядро, но и при стартирането на рекламна кампания в Yandex.Direct. Неговият най-важен и важен недостатък може безопасно да се нарече висока цена.

Колектор на ключове

Може би най-популярният и удобен инструмент за събиране на семантичното ядро.

Колектор на ключове:

  • събира ключови думи от дясната и лявата колона на WordStat Yandex;
  • филтрира ненужните заявки с помощта на опцията Stop Words;
  • търси дубликати и идентифицира сезонни ключови думи;
  • филтрира ключове по честота;
  • качени в Excel табличен формат;
  • намира страници, подходящи за заявката;
  • събира статистика от: Google Analytics, AdWords и др.

Можете да оцените как Kay Collector събира безплатно семантичното ядро ​​в демо версията.

Rush Analytics

Услуга, с която можете да събирате и групирате семантичното ядро.

В допълнение, Rush Analytics:

  • търси подсказки в Youtube, Yandex и Google;
  • предлага удобен филтър за стоп думи;
  • проверява индексиране;
  • определя честотата;
  • проверява позициите на сайта за настолни и мобилни устройства;
  • генерира технически спецификации за текстове и др.

Отличен инструмент, но платен: без демо версия и ограничени безплатни проверки.

Мутаген

Програмата събира ключови заявки от първите 30 сайта в търсачкаЯндекс. Показва честотата на месец, конкурентоспособността на всяка заявка за търсене и препоръчва използването на думи с индикатор до 5 (тъй като висококачественото съдържание е достатъчно за ефективно популяризиране на такива ключови думи).

Полезна статия: 8 вида текстове за сайт - пишете правилно

Платена програма за събиране на семантичното ядро, но има безплатен лимит - 10 проверки на ден (достъпни след първото попълване на бюджета, поне с 1 рубла). Отворено само за регистрирани потребители.

Инструмент за ключови думи

Надеждна услуга за създаване на семантично ядро, което:

  • в безплатната версия– събира повече от 750 улики за всяка заявка с помощта на Google, Youtube Bing, Amazon, eBay съвети, App Store, Instagram;
  • в платени– показва честотата на заявките, конкуренцията, разходите в AdWords и динамиката.

Програмата не изисква регистрация.

В допълнение към представените инструменти има много други услуги за събиране на семантичното ядро ​​на сайт с подробни видео прегледи и примери. Спрях се на тези, защото смятам, че са най-ефективни, прости и удобни.

Заключение. Ако е възможно, препоръчително е да закупите лицензи за използване на платени програми, тъй като те имат много по-широка функционалност от безплатни аналози. Но за просто събиране на CN „отворените“ услуги също са доста подходящи.

Групиране на семантичното ядро

Готовото семантично ядро ​​като правило включва много ключови думи (например за заявката „мека мебел“ услугите връщат няколко хиляди думи). Какво да правя след това с такъв огромен брой ключови думи?

Събраните ключове са необходими:

I. Изчистете „боклука“, дубликатите и „манекените“

Заявки с нулева честота или грешки просто се изтриват. За да премахнете ключове с ненужни „опашки“, препоръчвам да използвате Функция на Excel"Сортиране и филтриране". Какво може да се счита за боклук? Например, за комерсиален сайт, думи като „изтегляне“, „безплатно“ и т.н. ще бъдат излишни.

Ние премахваме ключове с нулева честота:

Премахване на ненужни „опашки“:

Отървете се от дубликати:

II. Премахнете силно конкурентни заявки

Ако не искате вашият „път“ към върха да продължи с години, изключете VK ключовете. С такива ключови думи няма да е достатъчно просто да стигнете до първите позиции в резултатите от търсенето, но по-важното и по-трудно е да се опитате да останете там.

Пример за това как да определите VK-ключове чрез инструмента за планиране на ключови думи от Google (можете да използвате филтъра, за да оставите само NK и SK):

III. Извършете разгрупиране на семантичното ядро

Можете да направите това по два начина:

1. ПЛАТЕНО:

  • KeyAssort– клъстерер на семантично ядро, който помага да се създаде структура на сайта и да се намерят лидери в ниши. Поддържа се от търсачките Yandex и Google. Извършва разгрупиране на 10 хиляди заявки само за няколко минути. Можете да оцените предимствата на услугата, като изтеглите демо версията.

  • SEMparserизвършва автоматично групиране на ключове; създаване на структура на сайта; идентифициране на лидери; генериране на технически спецификации за копирайтъри; Анализ на подсветката на Yandex; определяне на геозависимостта и „комерсиалността“ на заявките, както и релевантността на страниците. Освен това услугата проверява доколко текстът съответства на върха според SEO параметрите. Как работи: съберете СИНОПСИС и го запазете във формат .xls или .xlsx. Създавате нов проект в услугата, избирате регион, качвате файл със заявки - и след няколко секунди получавате думи, сортирани в семантични групи.

В допълнение към тези услуги мога да препоръчам Rush Analytics,с когото вече се запознахме по-горе, и Просто-Магия.

Rush Analytics:

Просто магия:

2. БЕЗПЛАТНО:

  • Ръчно- С използвайки Excelи функциите за сортиране и филтриране. За да направите това: задайте филтър, въведете заявка за групата (например „купете“, „цена“), маркирайте списъка с ключове в цвят. След това задайте опцията „Персонализирано сортиране“ (в „Сортиране по цвят“), като отидете на „сортиране в определен диапазон“. Последният щрих е да добавите имена към групите.

Стъпка 1

Стъпка 2

Стъпка 3

Стъпка 4

Пример за негрупирано семантично ядро:

  • SEOQUICK– безплатна онлайн програма за автоматично групиране на семантичното ядро. За да „разпръснете“ ключовете в групи, просто изтеглете файл със заявки или ги добавете ръчно и изчакайте малко. Инструментът работи бързо, като определя честотата и вида на ключа. Позволява ви да изтриете ненужните групи и да експортирате документа във формат Excel.

  • Асистент за ключови думи. Услугата работи онлайн на принципа на Excel таблица, т.е. ще трябва да разпределите ключовите думи ръчно, но отнема много по-малко време от работата в Excel.

Как да клъстерирате семантичното ядро ​​и какви методи да използвате зависи от вас. Вярвам, че начинът, по който се нуждаете, може да се направи само ръчно. Дълго е, но ефективно.

След като съберете и разпределите семантичното ядро ​​в секции, можете да започнете да пишете текстове за страниците.

Прочетете свързана статия с примери: Как правилно да въвеждаме ключови думи в текста?

Общи правила за създаване на FL

За да обобщим, важно е да добавите съвети, които ще ви помогнат да сглобите правилното семантично ядро:

Поръчката трябва да бъде проектирана така, че да отговаря на нуждите на възможно най-много потенциални клиенти.

Семантиката трябва точно да отговаря на темата на уеб проекта, т.е. Трябва да се съсредоточите само върху целеви заявки.

Важно е готовото семантично ядро ​​да включва само няколко високочестотни клавиша, а останалото да е запълнено със средно- и нискочестотни.

Семантичното ядро ​​трябва редовно да се разширява, за да се увеличи естественият трафик.

И най-важното: всичко в сайта (от ключове до структура) трябва да се прави „за хората“!

Заключение. Добре сглобеното семантично ядро ​​дава реален шанс за бързо популяризиране и поддържане на сайт на челни позиции в резултатите от търсенето.

Ако се съмнявате, че можете да сглобите правилния семантичен език, по-добре е да поръчате семантично ядро ​​за сайта от професионалисти. Това ще спести енергия, време и ще донесе повече ползи.

Също така ще бъде интересно да знаете: Как да поставите и ускорите индексирането на статия? 5 тайни на успеха

това е всичко Надявам се, че материалът ще ви бъде полезен в работата ви. Ще бъда благодарен, ако споделите опита си и оставите коментари. Благодаря ви за вниманието! До нови онлайн срещи!

Разработването на ядро ​​с право не се счита за лесна задача, но всеки може да напише просто ядро. За да изпитате магията на хакването на ядрото, просто трябва да следвате някои конвенции и да овладеете асемблерния език. В тази статия ще ви покажем как да направите това.


Здравей свят!

Нека напишем ядро, което ще се зарежда чрез GRUB на x86-съвместими системи. Първото ни ядро ​​ще покаже съобщение на екрана и ще спре там.

Как се зареждат x86 машини

Преди да помислим как да напишем ядро, нека да разгледаме как компютърът се стартира и прехвърля управлението на ядрото. Повечето регистри на процесора x86 имат специфични стойности след зареждане. Регистърът Instruction Pointer (EIP) съдържа адреса на инструкцията, която ще бъде изпълнена от процесора. Неговата твърдо кодирана стойност е 0xFFFFFFF0. Това означава, че x86 процесорът винаги ще започне изпълнение от физически адрес 0xFFFFFFF0. Това са последните 16 байта от 32-битовото адресно пространство. Този адрес се нарича вектор за нулиране.

Картата с памет, съдържаща се в чипсета, посочва, че адресът 0xFFFFFFF0 се отнася до конкретна част от BIOS, а не до RAM. Въпреки това, BIOS се копира в RAM за по-бърз достъп - този процес се нарича "засенчване", създавайки скрито копие. Така че адресът 0xFFFFFFF0 ще съдържа само инструкция за прескачане до мястото в паметта, където BIOS се е копирал.

И така, BIOS започва да се изпълнява. Първо, той търси устройства, от които може да стартира в реда, посочен в настройките. Той проверява носителя за наличието на „магическо число“, което отличава стартиращите дискове от обикновените: ако байтовете 511 и 512 в първия сектор са 0xAA55, тогава дискът е стартиращ.

След като BIOS намери устройството за зареждане, той ще копира съдържанието на първия сектор в RAM, започвайки от адрес 0x7C00, след което ще премести изпълнението на този адрес и ще започне да изпълнява току-що заредения код. Този код се нарича буутлоудър.

Буутлоудърът зарежда ядрото на физически адрес 0x100000. Това е, което използват повечето популярни x86 ядра.

Всички x86-съвместими процесори започват в примитивен 16-битов режим, наречен "реален режим". GRUB зареждащото устройство превключва процесора в 32-битов защитен режим, като задава долния бит на регистъра CR0 на единица. Следователно ядрото започва да се зарежда в 32-битов защитен режим.

Имайте предвид, че GRUB, в случай на Linux ядра, избира подходящия протокол за зареждане и зарежда ядрото в реален режим. Linux ядрата автоматично преминават към защитен режим.

Какво ни трябва

  • x86 съвместим компютър (очевидно)
  • Linux
  • NASM асемблер,
  • ld (GNU Linker),
  • GRUB.

Входна точка на асемблерния език

Бихме искали, разбира се, да напишем всичко на C, но няма да можем напълно да избегнем използването на асемблер. Ще напишем малък файл в x86 асемблер, който ще стане отправна точка за нашето ядро. Всичко, което асемблерният код ще направи, е да извика външна функция, която ще напишем на C, и след това да спрем изпълнението на програмата.

Как можем да направим асемблиращия код начална точка за нашето ядро? Използваме скрипт за свързване, който свързва обектни файлове и създава крайния изпълним файл на ядрото (ще обясня повече по-долу). В този скрипт директно ще посочим, че искаме нашият двоичен файл да се изтегли на адрес 0x100000. Това е адресът, както вече писах, на който буутлоудърът очаква да види входната точка в ядрото.

Ето асемблерния код.

kernel.asm
битове 32 раздел .text глобален старт extern kmain start: cli mov esp, stack_space извикване kmain hlt раздел .bss resb 8192 stack_space:

Първата инструкция от 32 бита не е x86 асемблер, а NASM директива, която му казва да генерира код за процесора, който да работи в 32-битов режим. Това не е необходимо за нашия пример, но е добра практика да го посочите изрично.

Вторият ред започва текстовата секция, известна още като секция с код. Целият ни код ще отиде тук.

global е друга директива на NASM, тя обявява символите в нашия код за глобални. Това ще позволи на линкера да намери началния символ, който служи като наша входна точка.

kmain е функция, която ще бъде дефинирана в нашия файл kernel.c. extern декларира, че функцията е декларирана някъде другаде.

Следва функцията за стартиране, която извиква kmain и спира процесора с инструкцията hlt. Прекъсванията могат да събудят процесора след hlt, така че първо деактивираме прекъсванията с инструкцията cli (изчистване на прекъсванията).

В идеалния случай трябва да заделим известно количество памет за стека и да насочим указателя на стека (esp) към него. GRUB изглежда прави това за нас така или иначе и в този момент указателят на стека вече е зададен. Все пак, за всеки случай, нека отделим малко памет в секцията BSS и да насочим указателя на стека към нейното начало. Използваме инструкцията resb - тя запазва паметта, посочена в байтове. След това остава знак, показващ ръба на запазената част от паметта. Точно преди kmain да бъде извикан, указателят на стека (esp) се насочва към тази област от инструкцията mov.

Ядрото в C

Във файла kernel.asm извикахме функцията kmain(). Така че в C кода изпълнението ще започне от там.

ядрото.c
void kmain(void) ( const char *str = "моето първо ядро"; char *vidptr = (char*)0xb8000; unsigned int i = 0; unsigned int j = 0; while(j< 80 * 25 * 2) { vidptr[j] = " "; vidptr = 0x07; j = j + 2; } j = 0; while(str[j] != "\0") { vidptr[i] = str[j]; vidptr = 0x07; ++j; i = i + 2; } return; }

Всичко, което нашето ядро ​​ще направи, е да изчисти екрана и да отпечата реда моето първо ядро.

Първо създаваме указател vidptr, който сочи към адрес 0xb8000. В защитен режим това е началото на видео паметта. Текстовата екранна памет е просто част от адресното пространство. Раздел от паметта е разпределен за I/O на екрана, който започва от адрес 0xb8000; в него са поставени 25 реда от 80 ASCII символа.

Всеки знак в текстовата памет е представен от 16 бита (2 байта), а не от 8 бита (1 байт), с които сме свикнали. Първият байт е ASCII кодът на знака, а вторият байт е байтът на атрибута. Това е дефиниция на формата на знаците, включително неговия цвят.

За да изведем символа s зелено върху черно, трябва да поставим s в първия байт на видео паметта и стойността 0x02 във втория байт. 0 тук означава черен фон, а 2 означава зелен цвят. Ще използваме светлосив цвят, кодът му е 0x07.

В първия цикъл while програмата запълва всичките 25 реда от 80 знака с празни символи с атрибута 0x07. Това ще изчисти екрана.

Във втория цикъл while низът с нулев край моето първо ядро ​​се записва във видеопаметта и всеки знак получава атрибут-байт от 0x07. Това трябва да изведе низ.

Оформление

Сега трябва да компилираме kernel.asm в обектен файл с помощта на NASM и след това да използваме GCC, за да компилираме kernel.c в друг обектен файл. Нашата задача е да свържем тези обекти в изпълнимо ядро, подходящо за зареждане. За да направим това, ще трябва да напишем скрипт за линкера (ld), който ще предадем като аргумент.

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

Тук първо задаваме формата (OUTPUT_FORMAT) на нашия изпълним файл на 32-битов ELF (Executable and Linkable Format), стандартен двоичен формат за Unix-базирани системи за x86 архитектура.

ENTRY приема един аргумент. Той определя името на символа, който ще служи като входна точка на изпълнимия файл.

SECTIONS е най-важната част за нас. Тук дефинираме оформлението на нашия изпълним файл. Можем да определим как ще бъдат комбинирани различните секции и къде ще бъде поставена всяка от тях.

Във фигурните скоби, които следват израза SECTIONS, точката показва брояча на местоположението. Той автоматично се инициализира на 0x0 в началото на блока SECTIONS, но може да бъде променен чрез присвояване на нова стойност.

Написах по-рано, че кодът на ядрото трябва да започва от адрес 0x100000. Ето защо присвояваме на брояча на позициите стойност 0x100000.

Погледнете line.text: ( *(.text) ) . Звездичката тук указва маска, която може да съответства на всяко име на файл. Съответно, изразът *(.text) означава всички входни .text секции във всички входни файлове.

В резултат на това линкерът ще обедини всички текстови секции на всички обектни файлове в текстовата секция на изпълнимия файл и ще го постави на адреса, посочен в брояча на позициите. Кодовата секция на нашия изпълним файл ще започне на адрес 0x100000.

След като линкерът създаде текстова секция, стойността на брояча на позиции ще бъде 0x100000 плюс размера на текстовата секция. По същия начин секциите с данни и bss ще бъдат обединени и поставени на адреса, посочен от брояча на позиции.

GRUB и мултибоут

Сега всички наши файлове са готови за изграждане на ядрото. Но тъй като ще зареждаме ядрото с помощта на GRUB, остава още една стъпка.

Има стандарт за зареждане на различни x86 ядра с помощта на буутлоудър. Това се нарича "спецификация за много зареждане". GRUB ще зарежда само ядра, които му съответстват.

Съгласно тази спецификация, ядрото може да съдържа заглавка (Multiboot header) в първите 8 килобайта. Тази заглавка трябва да съдържа три полета:

  • магия- съдържа “магическото” число 0x1BADB002, с което се идентифицира заглавката;
  • знамена- това поле не е важно за нас, можете да го оставите нула;
  • контролна сума- контролна сума, трябва да даде нула, ако се добави към полетата за магия и флагове.

Нашият файл kernel.asm сега ще изглежда така.

kernel.asm
bits 32 section .text ;multiboot spec align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;checksum global start extern kmain start: cli mov esp, stack_space call kmain hlt section .bss resb 8192 stack_space:

Инструкцията dd указва 4-байтова двойна дума.

Сглобяване на ядрото

И така, всичко е готово за създаване на обектен файл от kernel.asm и kernel.c и свързването им с помощта на нашия скрипт. Пишем в конзолата:

$ nasm -f elf32 kernel.asm -o kasm.o

Използвайки тази команда, асемблерът ще създаде файл kasm.o в ELF-32 битов формат. Сега е ред на GCC:

$ gcc -m32 -c kernel.c -o kc.o

Параметърът -c показва, че файлът не трябва да бъде свързан след компилиране. Ще го направим сами:

$ ld -m elf_i386 -T link.ld -o ядро ​​kasm.o kc.o

Тази команда ще изпълни линкера с нашия скрипт и ще генерира изпълним файл, наречен ядро.

ПРЕДУПРЕЖДЕНИЕ

Хакването на ядрото се извършва най-добре във виртуална среда. За да стартирате ядрото в QEMU вместо GRUB, използвайте командата qemu-system-i386 -kernel kernel.

Настройване на GRUB и стартиране на ядрото

GRUB изисква името на файла на ядрото да следва ядрото-<версия>. Така че нека преименуваме файла - ще нарека моя kernel-701.

Сега поставяме ядрото в директорията /boot. Това ще изисква привилегии на суперпотребител.

Ще трябва да добавите нещо подобно към конфигурационния файл GRUB grub.cfg:

Заглавие myKernel root (hd0,0) kernel /boot/kernel-701 ro

Не забравяйте да премахнете директивата за скрито меню, ако е включена.

ГРУБ 2

За да стартирате ядрото, което създадохме в GRUB 2, което се доставя по подразбиране в новите дистрибуции, вашата конфигурация трябва да изглежда така:

Меню "ядро 701" (set root="hd0,msdos1" multiboot /boot/kernel-701 ro)

Благодаря на Рубен Лагуана за това допълнение.

Рестартирайте компютъра си и трябва да видите ядрото си в списъка! И когато го изберете, ще видите същия ред.



Това е вашето ядро!

Писане на ядро ​​с поддръжка на клавиатура и екран

Завършихме работата по минимално ядро, което се зарежда чрез GRUB, работи в защитен режим и отпечатва един ред на екрана. Време е да го разширите и да добавите драйвер за клавиатура, който ще чете символи от клавиатурата и ще ги показва на екрана.

Ще комуникираме с I/O устройства чрез I/O портове. По същество те са просто адреси на I/O шината. Има специални инструкции на процесора за операции по четене и запис.

Работа с портове: четене и извеждане

read_port: mov edx, in al, dx ret write_port: mov edx, mov al, out dx, al ret

I/O портовете се осъществяват чрез инструкциите за вход и изход, включени в комплекта x86.

В read_port номерът на порта се предава като аргумент. Когато компилаторът извика функция, той избутва всички аргументи в стека. Аргументът се копира в регистъра edx с помощта на указател на стека. Регистърът dx е долните 16 бита на регистъра edx. Инструкцията in тук чете номера на порта, даден в dx, и поставя резултата в al. Регистърът al е долните 8 бита на регистъра eax. Може би си спомняте от колежа, че стойностите, върнати от функциите, се предават през eax регистъра. Така read_port ни позволява да четем от I/O портове.

Функцията write_port работи по подобен начин. Взимаме два аргумента: номера на порта и данните, които ще бъдат записани. Инструкцията out записва данни в порт.

Прекъсва

Сега, преди да се върнем към писането на драйвера, трябва да разберем как процесорът знае, че едно от устройствата е извършило операция.

Най-простото решение е да анкетирате устройствата - непрекъснато проверявайте състоянието им в кръг. По очевидни причини това е неефективно и непрактично. Така че тук влизат в действие прекъсванията. Прекъсването е сигнал, изпратен до процесора от устройство или програма, който показва, че е настъпило събитие. Използвайки прекъсвания, можем да избегнем необходимостта да анкетираме устройства и ще отговаряме само на събития, които ни интересуват.

Чип, наречен Programmable Interrupt Controller (PIC), отговаря за прекъсванията в x86 архитектурата. Той обработва хардуерни прекъсвания и маршрути и ги превръща в подходящи системни прекъсвания.

Когато потребителят направи нещо с устройството, към PIC чипа се изпраща импулс, наречен Заявка за прекъсване (IRQ). PIC преобразува полученото прекъсване в системно прекъсване и изпраща съобщение до процесора, че е време да спре това, което прави. По-нататъшната обработка на прекъсванията е задача на ядрото.

Без PIC ще трябва да анкетираме всички налични устройства в системата, за да видим дали е настъпило събитие, включващо някое от тях.

Нека да разгледаме как работи това с клавиатура. Клавиатурата виси на портове 0x60 и 0x64. Порт 0x60 изпраща данни (при натискане на бутон), а порт 0x64 изпраща статус. Трябва обаче да знаем кога точно да четем тези портове.

Тук прекъсванията са полезни. Когато бутонът е натиснат, клавиатурата изпраща PIC сигнал през линията за прекъсване IRQ1. PIC съхранява стойността на отместването, записана по време на инициализацията. Той добавя номера на входния ред към тази подложка, за да образува вектор за прекъсване. След това процесорът търси структура от данни, наречена Interrupt Descriptor Table (IDT), за да даде на манипулатора на прекъсванията адреса, съответстващ на неговия номер.

След това кодът на този адрес се изпълнява и обработва прекъсването.

Задайте IDT

struct IDT_entry( unsigned short int offset_lowerbits; unsigned short int селектор; unsigned char zero; unsigned char type_attr; unsigned short int offset_higherbits;); struct IDT_entry IDT; VOID IDT_INIT (VOID) (UNSIGNED LONG KEYboard_ADDRESS; UNSIGNED LONG IDTRESS; UNSIGNED LONG IDT_PTR; KEYboard_ADDRESS = (UNSIGNED LONG) Keyboard_HANDER; .OFSET_LWERBITS = keyboard_ADDRESS & 0XFFF; ; IDT.type_attr = 0x8e; /* INTERRUPT_G ATE */ IDT.offset_higherbits = ( keyboard_address & 0xffff0000; write_port(0xA0, 0x11); write_port(0xA1, 0xff); IDT_ptr (sizeof (struct IDT)) * IDT_SIZE) + ((idt_address & 0xffff)<< 16); idt_ptr = idt_address >> 16;

IDT е масив от IDT_entry структури. По-късно ще обсъдим свързването на прекъсване от клавиатурата към манипулатор, но сега нека да разгледаме как работи PIC.

Съвременните x86 системи имат два PIC чипа, всеки с осем входни линии. Ще ги наречем PIC1 и PIC2. PIC1 получава IRQ0 до IRQ7, а PIC2 получава IRQ8 до IRQ15. PIC1 използва порт 0x20 за команди и 0x21 за данни, а PIC2 използва порт 0xA0 за команди и 0xA1 за данни.

И двата PIC се инициализират с осембитови думи, наречени командни думи за инициализация (ICW).

В защитен режим и двата PIC трябва първо да издадат командата за инициализация ICW1 (0x11). Той казва на PIC да изчака още три инициализиращи думи да пристигнат на порта за данни.

Тези команди ще предадат PIC:

  • вектор на отстъп (ICW2),
  • какви са отношенията master/slave между PIC (ICW3),
  • допълнителна информация за околната среда (ICW4).

Втората команда за инициализация (ICW2) също се изпраща на входа на всеки PIC. Той присвоява отместване, което е стойността, към която добавяме номера на реда, за да получим номера на прекъсването.

PIC позволяват техните щифтове да бъдат каскадно свързани към входовете на другия. Това се прави с помощта на ICW3 и всеки бит представлява състоянието на каскадата за съответния IRQ. Сега няма да използваме каскадно пренасочване и ще го занулим.

ICW4 комплекти допълнителни опциисреда. Трябва само да дефинираме ниския бит, така че PIC да знаят, че работим в режим 80x86.

Та-дам! PIC вече са инициализирани.

Всеки PIC има вътрешен осембитов регистър, наречен регистър на маската за прекъсване (IMR). Съхранява растерно изображение IRQ линии, които отиват към PIC. Ако битът е зададен, PIC игнорира заявката. Това означава, че можем да активираме или деактивираме конкретна IRQ линия, като зададем съответната стойност на 0 или 1.

Четенето от порта за данни връща стойността в IMR регистъра, докато записът променя регистъра. В нашия код, след инициализиране на PIC, ние задаваме всички битове на едно, което деактивира всички IRQ линии. По-късно ще активираме редовете, които съответстват на прекъсвания от клавиатурата. Но първо, нека го изключим!

Ако IRQ линиите работят, нашите PIC могат да приемат сигнали по IRQ и да ги преобразуват в номер на прекъсване, добавяйки отместване. Трябва да попълним IDT по такъв начин, че номерът на прекъсване, идващ от клавиатурата, да съвпада с адреса на функцията за обработка, която ще напишем.

Към какъв номер на прекъсване трябва да свържем манипулатора на клавиатурата в IDT?

Клавиатурата използва IRQ1. Това е входен ред 1 и се обработва от PIC1. Инициализирахме PIC1 с отместване 0x20 (вижте ICW2). За да получите номера на прекъсването, трябва да добавите 1 и 0x20, получавате 0x21. Това означава, че адресът на манипулатора на клавиатурата ще бъде свързан в IDT за прекъсване 0x21.

Задачата се свежда до попълване на IDT за прекъсване 0x21. Ще съпоставим това прекъсване към функцията keyboard_handler, която ще запишем в асемблерния файл.

Всеки запис в IDT се състои от 64 бита. В записа, съответстващ на прекъсването, ние не съхраняваме целия адрес на функцията манипулатор. Вместо това го разделяме на две 16-битови части. Битовете от нисък ред се съхраняват в първите 16 бита на IDT записа, а 16-те бита от висок ред се съхраняват в последните 16 бита на записа. Всичко това е направено за съвместимост с 286 процесора. Както можете да видите, Intel произвежда числа като това редовно и на много, много места!

В записа IDT просто трябва да регистрираме типа, като по този начин показваме, че всичко това се прави, за да се улови прекъсването. Също така трябва да зададем отместването на сегмента на кода на ядрото. GRUB задава GDT вместо нас. Всеки GDT запис е с дължина 8 байта, където дескрипторът на кода на ядрото е вторият сегмент, така че неговото отместване ще бъде 0x08 (подробностите са извън обхвата на тази статия). Портата за прекъсване е представена като 0x8e. Останалите 8 бита в средата са запълнени с нули. По този начин ще попълним IDT записа, който съответства на прекъсването на клавиатурата.

След като приключим с картографирането на IDT, трябва да кажем на процесора къде е IDT. За това има асемблерна инструкция, наречена lidt; Това е указател към дескриптор на структурата, която описва IDT.

Няма затруднения с дескриптора. Той съдържа размера на IDT в байтове и неговия адрес. Използвах масив, за да го направя по-компактен. По същия начин можете да попълните дескриптор с помощта на структура.

В променливата idr_ptr имаме указател, който предаваме на инструкцията lidt във функцията load_idt().

Load_idt: mov edx, lidt sti ret

Освен това функцията load_idt() връща прекъсване при използване на инструкцията sti.

С попълнен и зареден IDT можем да получим достъп до IRQ на клавиатурата, използвайки маската за прекъсване, за която говорихме по-рано.

Void kb_init(void) (write_port(0x21, 0xFD);)

0xFD е 11111101 - активирайте само IRQ1 (клавиатура).

Функция - обработка на прекъсвания от клавиатурата

И така, ние успешно обвързахме прекъсванията на клавиатурата с функцията keyboard_handler, като създадохме IDT запис за прекъсване 0x21. Тази функция ще се извиква всеки път, когато натиснете бутон.

Keyboard_handler: извикайте keyboard_handler_main iretd

Тази функция извиква друга функция, написана на C, и връща управление, използвайки инструкции от клас iret. Можем да напишем целия ни манипулатор тук, но е много по-лесно да се кодира на C, така че нека преминем там. Инструкциите iret/iretd трябва да се използват вместо ret, когато управлението се връща от функцията за обработка на прекъсване към прекъснатата програма. Този клас инструкции повдига флагов регистър, който се избутва в стека, когато се извика прекъсване.

Void keyboard_handler_main(void) ( unsigned char status; char keycode; /* Напишете EOI */ write_port(0x20, 0x20); status = read_port(KEYBOARD_STATUS_PORT); /* По-ниският бит за състояние ще бъде зададен, ако буферът не е празен */ if (статус & 0x01) ( keycode = read_port(KEYBOARD_DATA_PORT); if(keycode< 0) return; vidptr = keyboard_map; vidptr = 0x07; } }

Тук първо даваме EOI (край на прекъсването) сигнал, като го записваме в командния порт на PIC. Само тогава PIC ще позволи допълнителни заявки за прекъсване. Трябва да прочетем два порта: порт за данни 0x60 и порт за команди (известен още като порт за състояние) 0x64.

Първо, четем порт 0x64, за да получим състоянието. Ако долният бит на състоянието е нула, тогава буферът е празен и няма данни за четене. В други случаи можем да прочетем порт за данни 0x60. Той ще ни даде кода на натиснатия клавиш. Всеки код отговаря на един бутон. Използваме прост масив от знаци, дефиниран в keyboard_map.h, за да нанесем кодовете на съответните знаци. След това символът се показва на екрана, като се използва същата техника, която използвахме в първата версия на ядрото.

За да опростя кода, обработвам само малки букви от a до z и числа от 0 до 9. Можете лесно да добавяте специални знаци, Alt, Shift и Caps Lock. Можете да разберете, че даден клавиш е бил натиснат или освободен от изхода на командния порт и да извършите съответното действие. По същия начин можете да свържете всички клавишни комбинации към специални функции като изключване.

Сега можете да изградите ядрото и да го стартирате на реална машина или на емулатор (QEMU) по същия начин, както в първата част.



 


Прочетете:



Гледане на IP телевизия на телевизор Iptv приемник за телевизор как работи

Гледане на IP телевизия на телевизор Iptv приемник за телевизор как работи

Интерактивната телевизия напоследък става все по-популярна и се превръща в добра алтернатива не само на аналоговата, но и на кабелната или...

Как да премахнете номер на карта от Aliexpress Как да откачите карта от Aliexpress

Как да премахнете номер на карта от Aliexpress Как да откачите карта от Aliexpress

Все повече хора правят покупки на уебсайта Aliexpress. Този виртуален магазин е привлекателен, защото можете да плащате за стоки...

Какво може да направи бюджетният служител на Xiaomi

Какво може да направи бюджетният служител на Xiaomi

Реших да напиша различен текст. По-сериозно. Това е уважавана марка Xiaomi. Въпреки факта, че w3bsit3-dns.com е пълен с теми за брака, а самите устройства...

Един сред непознатите: възстановяване на данни от FAT, NTFS и UFS без напускане на Linux Как да възстановите файловата система fat32

Един сред непознатите: възстановяване на данни от FAT, NTFS и UFS без напускане на Linux Как да възстановите файловата система fat32

Файловата система се използва за индексиране и организиране на файлове на диск. Записите във файловата система се намират в ясно дефинирани...

feed-image RSS