rumah - Perangkat lunak
Inti semantik - bagaimana cara menyusunnya dengan benar? Mari kita menulis kernel! Kami membuat kernel kerja paling sederhana dari sistem operasi Kernel semantik halaman.

Mari kita menulis kernel sederhana yang dapat di-boot menggunakan bootloader GRUB pada sistem x86. Kernel ini akan menampilkan pesan di layar dan menunggu.

Bagaimana cara sistem x86 melakukan booting?

Sebelum kita mulai menulis kernel, mari kita pahami bagaimana sistem melakukan booting dan mentransfer kendali ke kernel.

Kebanyakan register prosesor sudah berisi nilai-nilai tertentu saat startup. Register yang menunjuk ke alamat instruksi (Instruction Pointer, EIP) menyimpan alamat memori dimana instruksi yang dieksekusi oleh prosesor berada. EIP defaultnya adalah 0xFFFFFFFF0. Dengan demikian, prosesor x86 di tingkat perangkat keras mulai bekerja di alamat 0xFFFFFFF0. Faktanya, ini adalah 16 byte terakhir dari 32-bit ruang alamat. Alamat ini disebut vektor reset.

Sekarang peta memori chipset memastikan bahwa 0xFFFFFFF0 milik bagian tertentu dari BIOS, bukan RAM. Pada saat ini, BIOS menyalin dirinya ke RAM untuk mendapatkan lebih banyak akses cepat. Alamat 0xFFFFFFFF0 hanya akan berisi instruksi untuk melompat ke alamat di memori tempat salinan BIOS disimpan.

Beginilah cara kode BIOS mulai dijalankan. BIOS pertama-tama mencari perangkat yang dapat melakukan booting, dalam urutan yang telah ditentukan sebelumnya. Angka ajaib dicari untuk menentukan apakah perangkat dapat di-boot (byte ke-511 dan ke-512 dari sektor pertama harus sama dengan 0xAA55).

Ketika BIOS menemukan perangkat boot, ia menyalin konten sektor pertama perangkat ke dalam RAM, dimulai dari alamat fisik 0x7c00; lalu pergi ke alamat dan mengeksekusi kode yang diunduh. Kode ini disebut pemuat boot.

Bootloader memuat kernel di alamat fisik 0x100000. Alamat ini digunakan sebagai alamat awal di semua kernel besar pada sistem x86.

Semua prosesor x86 dimulai dalam mode 16-bit sederhana yang disebut modus nyata. Bootloader GRUB mengalihkan mode ke 32-bit mode terlindungi, menyetel bit rendah register CR0 ke 1 . Dengan demikian, kernel dimuat dalam mode terproteksi 32-bit.

Perhatikan bahwa dalam kasus kernel Linux, GRUB melihat protokol boot Linux dan memuat kernel ke dalamnya modus nyata. Kernel secara otomatis beralih ke mode terproteksi.

Apa yang kita butuhkan?

  • komputer x86;
  • Linux;
  • ld (Penghubung GNU);

Mengatur titik masuk di assembler

Tidak peduli seberapa besar Anda ingin membatasi diri pada C saja, Anda harus menulis sesuatu dalam assembler. Kami akan menulis file kecil di atasnya yang akan berfungsi sebagai titik awal untuk kernel kami. Yang dilakukan hanyalah memanggil fungsi eksternal yang ditulis dalam C dan menghentikan aliran program.

Bagaimana kita bisa memastikan bahwa kode ini adalah titik awalnya?

Kami akan menggunakan skrip tautan yang menghubungkan file objek untuk membuat file akhir yang dapat dieksekusi. Dalam skrip ini kami akan secara eksplisit menunjukkan bahwa kami ingin memuat data di alamat 0x100000.

Berikut kode assemblernya:

;;kernel.asm bits 32 ;nasm directive - bagian 32 bit .text global start extern kmain ;kmain didefinisikan dalam file c start: cli ;block interupsi mov esp, stack_space ;set stack pointer call kmain hlt ;hentikan bagian CPU .bss resb 8192 ;8KB untuk tumpukan stack_space:

Instruksi pertama, bit 32, bukan instruksi perakitan x86. Ini adalah arahan ke assembler NASM yang menentukan pembuatan kode untuk prosesor yang beroperasi dalam mode 32-bit. Dalam kasus kami hal ini tidak perlu, tetapi secara umum berguna.

Bagian dengan kode dimulai pada baris kedua.

global adalah arahan NASM lain yang membuat simbol Kode sumber global. Dengan cara ini linker mengetahui di mana simbol awal berada - titik masuk kita.

kmain adalah fungsi yang akan didefinisikan dalam file kernel.c. extern berarti fungsi tersebut dideklarasikan di tempat lain.

Kemudian muncul fungsi start, yang memanggil fungsi kmain dan menghentikan prosesor dengan instruksi hlt. Inilah sebabnya kami menonaktifkan interupsi terlebih dahulu menggunakan instruksi cli.

Idealnya, kita perlu mengalokasikan sejumlah memori dan mengarahkannya dengan penunjuk tumpukan (esp). Namun, sepertinya GRUB telah melakukan hal ini untuk kita. Namun, Anda tetap akan mengalokasikan sejumlah ruang di bagian BSS dan memindahkan penunjuk tumpukan ke awal. Kami menggunakan instruksi resb, yang mencadangkan jumlah byte yang ditentukan. Segera sebelum memanggil kmain, penunjuk tumpukan (esp) diatur ke lokasi yang benar dengan instruksi mov.

Kernel di C

Di kernel.asm kami melakukan panggilan ke fungsi kmain(). Jadi, kode “C” kita harus mulai dieksekusi dengan kmain() :

/* * kernel.c */ void kmain(void) ( const char *str = "kernel pertama saya"; char *vidptr = (char*)0xb8000; //video mem dimulai di sini. unsigned int i = 0; unsigned int j = 0; /* loop ini menghapus layar * ada 25 baris masing-masing 80 kolom;< 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; }

Yang dilakukan kernel kita hanyalah membersihkan layar dan menampilkan baris “kernel pertama saya”.

Pertama kita membuat pointer vidptr yang menunjuk ke alamat 0xb8000. Dalam mode terproteksi, "memori video" dimulai dari alamat ini. Untuk menampilkan teks di layar, kami memesan 25 baris yang terdiri dari 80 karakter ASCII, mulai dari 0xb8000.

Setiap karakter ditampilkan bukan dalam 8 bit biasa, tetapi dalam 16 bit. Byte pertama menyimpan karakter itu sendiri, dan byte kedua menyimpan atribut-byte . Ini menggambarkan format karakter, seperti warnanya.

Untuk menampilkan karakter hijau s dengan latar belakang hitam, kami menulis karakter ini di byte pertama dan nilai 0x02 di byte kedua. 0 berarti latar belakang hitam, 2 berarti warna teks hijau.

Berikut adalah bagan warnanya:

0 - Hitam, 1 - Biru, 2 - Hijau, 3 - Cyan, 4 - Merah, 5 - Magenta, 6 - Coklat, 7 - Abu-abu Muda, 8 - Abu-abu Tua, 9 - Biru Muda, 10/a - Hijau Muda, 11/b - Cyan Muda, 12/c - Merah Muda, 13/h - Magenta Muda, 14/e - Coklat Muda, 15/f - Putih.

Di kernel kami, kami akan menggunakan teks abu-abu terang dengan latar belakang hitam, sehingga atribut byte kami akan memiliki nilai 0x07.

Pada loop pertama, program mencetak simbol kosong di seluruh zona 80x25. Ini akan menghapus layar. Pada siklus berikutnya, karakter dari string yang diakhiri dengan null "kernel pertama saya" dengan byte atribut yang sama dengan 0x07 ditulis ke "memori video". Ini akan mencetak string ke layar.

Bagian penghubung

Kita perlu merakit kernel.asm menjadi file objek menggunakan NASM; kemudian gunakan GCC untuk mengkompilasi kernel.c ke dalam file objek lain. Mereka kemudian harus dilampirkan ke kernel boot yang dapat dieksekusi.

Untuk melakukan ini, kita akan menggunakan skrip pengikatan yang diteruskan ke ld sebagai argumen.

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

Pertama kita akan bertanya format output sebagai 32-bit Executable dan Linkable Format (ELF). ELF adalah format file biner standar untuk sistem Unix x86. PINTU MASUK mengambil satu argumen yang menentukan nama simbol yang merupakan titik masuk. BAGIAN- ini adalah bagian terpenting. Ini mendefinisikan markup file yang dapat dieksekusi. Kami menentukan bagaimana bagian-bagian yang berbeda harus dihubungkan dan di mana menempatkannya.

Dalam tanda kurung setelah BAGIAN, titik (.) menampilkan penghitung posisi, yang defaultnya adalah 0x0. Itu bisa diubah, itulah yang kami lakukan.

Mari kita lihat baris berikut: .text: ( *(.text) ) . Tanda bintang (*) adalah karakter spesial, cocok dengan nama file apa pun. Ekspresi *(.text) berarti semua bagian .text dari semua file input.

Dengan demikian, linker menggabungkan semua bagian kode dari file objek ke dalam satu bagian dari file yang dapat dieksekusi di alamat di penghitung posisi (0x100000). Setelah ini, nilai penghitungnya akan sama dengan 0x100000 + ukuran bagian yang dihasilkan.

Hal yang sama terjadi pada bagian lain.

Grub dan Multiboot

Sekarang semua file siap untuk membuat kernel. Tapi masih ada satu langkah lagi.

Ada standar untuk memuat inti x86 menggunakan bootloader yang disebut Spesifikasi multiboot. GRUB hanya akan mem-boot kernel kita jika memenuhi spesifikasi ini.

Mengikutinya, kernel harus berisi header dalam 8 kilobyte pertama. Selain itu, header ini harus berisi 3 bidang, yaitu 4 byte:

  • gaib bidang: berisi angka ajaib 0x1BADB002 untuk mengidentifikasi intinya.
  • bidang bendera: kita tidak memerlukannya, mari kita atur ke nol.
  • bidang checksum: jika Anda menambahkannya dengan dua yang sebelumnya, Anda akan mendapatkan nol.

Kernel.asm kita akan terlihat seperti ini:

;;kernel.asm ;nasm directive - 32 bit bit 32 bagian .text ;spesifikasi multiboot align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;checksum. m+f+c harus nol global start extern kmain ;kmain didefinisikan dalam file c start: cli ;block interupsi mov esp, stack_space ;set stack pointer call kmain hlt ;halt the CPU section .bss resb 8192 ;8KB for stack tumpukan_ruang:

Membangun inti

Sekarang kita akan membuat file objek dari kernel.asm dan kernel.c dan menghubungkannya menggunakan skrip kita.

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

Baris ini akan menjalankan assembler untuk membuat file objek kasm.o dalam format ELF-32.

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

Opsi “-c” memastikan bahwa tidak ada tautan tersembunyi yang terjadi setelah kompilasi.

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

Ini akan menjalankan linker dengan skrip kita dan membuat file executable bernama inti.

Menyiapkan grub dan memulai kernel

GRUB memerlukan nama kernel untuk memenuhi pola kernel- . Jadi ganti nama kernelnya. Saya menamai milik saya kernel-701.

Sekarang letakkan di direktori / boot. Untuk melakukan ini, Anda memerlukan hak pengguna super.

Dalam file konfigurasi GRUB grub.cfg, tambahkan yang berikut ini:

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

Jangan lupa untuk menghapus direktif menu tersembunyi jika ada.

Restart komputer Anda dan Anda akan melihat daftar kernel termasuk milik Anda. Pilih dan Anda akan melihat:

Ini adalah inti Anda! Mari tambahkan sistem input/output.

P.S.

  • Untuk trik kernel apa pun, lebih baik menggunakan mesin virtual.
  • Untuk menjalankan kernel grub2 konfigurasinya akan terlihat seperti ini: menuentry "kernel 7001" ( set root="hd0,msdos1" multiboot /boot/kernel-7001 ro )
  • jika Anda ingin menggunakan emulator qemu, gunakan: qemu-system-i386 -kernel kernel

Inti semantik adalah nama menakutkan yang dibuat oleh SEO untuk menunjukkan hal yang agak sederhana. Kita hanya perlu memilih pertanyaan kunci yang akan kita gunakan untuk mempromosikan situs kita.

Dan pada artikel kali ini saya akan menunjukkan cara menyusun inti semantik dengan benar agar situs Anda cepat mencapai TOP, dan tidak stagnan selama berbulan-bulan. Ada juga “rahasia” di sini.

Dan sebelum kita melanjutkan menyusun SY, mari kita cari tahu apa itu SY dan apa yang pada akhirnya harus kita capai.

Apa inti semantik dalam kata-kata sederhana

Anehnya, inti semantiknya biasa saja berkas Excel, yang mencantumkan kueri utama yang artikelnya akan Anda (atau copywriter Anda) tulis untuk situs tersebut.

Misalnya, seperti inilah inti semantik saya:

Saya telah menandai dengan warna hijau pertanyaan-pertanyaan kunci yang artikelnya telah saya tulis. Kuning - artikel yang saya rencanakan untuk ditulis dalam waktu dekat. Dan sel yang tidak berwarna berarti permintaan ini akan datang nanti.

Untuk setiap permintaan kunci, saya telah menentukan frekuensi, daya saing, dan menghasilkan judul yang “menarik”. Anda harus mendapatkan kira-kira file yang sama. Sekarang CN saya terdiri dari 150 kata kunci. Artinya, saya diberikan “materi” setidaknya 5 bulan sebelumnya (walaupun saya menulis satu artikel sehari).

Di bawah ini kita akan berbicara tentang apa yang harus Anda persiapkan jika Anda tiba-tiba memutuskan untuk memesan kumpulan inti semantik dari spesialis. Di sini saya akan mengatakan secara singkat - mereka akan memberi Anda daftar yang sama, tetapi hanya untuk ribuan "kunci". Namun di SY yang penting bukanlah kuantitas, melainkan kualitas. Dan kami akan fokus pada hal ini.

Mengapa kita membutuhkan inti semantik?

Tapi sungguh, mengapa kita membutuhkan siksaan ini? Lagi pula, Anda bisa saja menulis artikel berkualitas dan menarik audiens, bukan? Ya, Anda bisa menulis, tetapi Anda tidak akan bisa menarik orang.

Kesalahan utama 90% blogger hanyalah menulis artikel berkualitas tinggi. Saya tidak bercanda, mereka memiliki materi yang sangat menarik dan bermanfaat. Tapi mesin pencari tidak mengetahuinya. Mereka bukan paranormal, tapi hanya robot. Oleh karena itu, mereka tidak memberi peringkat artikel Anda di TOP.

Ada poin halus lainnya dalam judulnya. Misalnya, Anda memiliki artikel berkualitas tinggi dengan topik “Cara menjalankan bisnis dengan benar di facebook.” Di sana Anda menjelaskan segala sesuatu tentang Facebook dengan sangat detail dan profesional. Termasuk bagaimana cara mempromosikan komunitas di sana. Artikel Anda memiliki kualitas terbaik, bermanfaat dan menarik di Internet tentang topik ini. Tidak ada seorang pun yang berbaring di sampingmu. Tapi itu tetap tidak akan membantu Anda.

Mengapa artikel berkualitas tinggi turun dari TOP

Bayangkan situs Anda dikunjungi bukan oleh robot, tetapi oleh inspektur langsung (penilai) dari Yandex. Dia menyadari bahwa Anda memiliki artikel paling keren. Dan tangan menempatkan Anda di posisi pertama dalam hasil pencarian untuk permintaan “Mempromosikan komunitas di Facebook.”

Tahukah Anda apa yang akan terjadi selanjutnya? Lagipula kamu akan segera terbang keluar dari sana. Karena tidak ada yang akan mengklik artikel Anda, bahkan pada awalnya. Orang-orang memasukkan kueri “Mempromosikan komunitas di Facebook”, dan judul utama Anda adalah “Cara menjalankan bisnis dengan benar di facebook.” Asli, segar, lucu, tapi... bukan berdasarkan permintaan. Orang ingin melihat apa yang sebenarnya mereka cari, bukan kreativitas Anda.

Dengan demikian, artikel Anda akan mengosongkan tempatnya di hasil pencarian TOP. Dan penilai yang masih hidup, pengagum setia karya Anda, dapat memohon kepada pihak berwenang sebanyak yang dia suka untuk meninggalkan Anda setidaknya di TOP 10. Tapi itu tidak akan membantu. Semua tempat pertama akan ditempati oleh barang-barang kosong, seperti sekam biji bunga matahari, yang disalin satu sama lain oleh anak-anak sekolah kemarin.

Namun artikel ini akan memiliki judul “relevan” yang benar - “Mempromosikan komunitas di Facebook dari awal” ( langkah demi langkah, dalam 5 langkah, dari A sampai Z, gratis dll.) Apakah itu menyinggung? Tetap saja. Ya, berperang melawan ketidakadilan. Mari ciptakan inti semantik yang kompeten sehingga artikel Anda mendapat tempat pertama yang layak.

Alasan lain untuk mulai menulis SINOPSIS sekarang juga

Ada satu hal lagi yang entah kenapa tidak terlalu dipikirkan orang. Anda perlu sering menulis artikel - setidaknya setiap minggu, dan sebaiknya 2-3 kali seminggu - untuk mendapatkan keuntungan lebih banyak lalu lintas dan lebih cepat.

Semua orang mengetahui hal ini, tetapi hampir tidak ada yang melakukannya. Dan semua itu karena mereka mengalami “stagnasi kreatif”, “mereka tidak bisa memaksakan diri”, “mereka hanya malas”. Namun nyatanya, keseluruhan masalahnya terletak pada tidak adanya inti semantik tertentu.

Saya memasukkan salah satu kunci dasar saya, “smm,” ke dalam kolom pencarian, dan Yandex segera memberi saya selusin petunjuk tentang apa lagi yang mungkin menarik bagi orang-orang yang tertarik dengan “smm.” Yang harus saya lakukan hanyalah menyalin kunci-kunci ini ke dalam buku catatan. Kemudian saya akan memeriksa masing-masingnya dengan cara yang sama, dan mengumpulkan petunjuknya juga.

Setelah tahap pertama pengumpulan kata kunci, Anda akan mendapatkan dokumen teks yang berisi 10-30 kunci dasar yang luas, yang akan kita kerjakan lebih lanjut.

Langkah #2 — Mengurai kunci dasar di SlovoEB

Tentu saja, jika Anda menulis artikel untuk permintaan “webinar” atau “smm”, maka keajaiban tidak akan terjadi. Anda tidak akan pernah bisa mencapai TOP untuk permintaan seluas itu. Kita perlu memecah kunci dasar menjadi banyak pertanyaan kecil tentang topik ini. Dan kami akan melakukan ini menggunakan program khusus.

Saya menggunakan KeyCollector, tetapi berbayar. Anda dapat menggunakan analog gratis - program SlovoEB. Anda dapat mengunduhnya dari situs resminya.

Hal tersulit dalam bekerja dengan program ini adalah pengaturannya dengan benar. Saya tunjukkan cara mengatur dan menggunakan Sloboeb dengan benar. Namun di artikel itu saya fokus pada pemilihan kunci untuk Yandex Direct.

Dan di sini mari kita lihat langkah demi langkah fitur penggunaan program ini untuk membuat inti semantik untuk SEO.

Pertama, kami membuat proyek baru dan memberi nama dengan kunci luas yang ingin Anda uraikan.

Saya biasanya memberi proyek itu nama yang sama dengan kunci dasar saya untuk menghindari kebingungan di kemudian hari. Dan ya, saya akan memperingatkan Anda agar tidak melakukan satu kesalahan lagi. Jangan mencoba mengurai semua kunci dasar sekaligus. Maka akan sangat sulit bagi Anda untuk memfilter kueri kunci “kosong” dari butiran emas. Mari kita parsing kunci satu per satu.

Setelah membuat proyek, kami menjalankan operasi dasar. Artinya, kami sebenarnya mengurai kunci melalui Yandex Wordstat. Untuk melakukan ini, klik tombol “Worstat” di antarmuka program, masukkan kunci dasar Anda, dan klik “Mulai koleksi”.

Sebagai contoh, mari kita parsing kunci dasar untuk blog saya “iklan kontekstual”.

Setelah ini, prosesnya akan dimulai, dan setelah beberapa waktu program akan memberi kita hasilnya - hingga 2000 pertanyaan kunci yang berisi "iklan kontekstual".

Selain itu, di samping setiap permintaan akan ada frekuensi "kotor" - berapa kali kunci ini (+ bentuk kata dan ekornya) dicari per bulan melalui Yandex. Namun saya tidak menyarankan menarik kesimpulan apa pun dari angka-angka ini.

Langkah #3 - Mengumpulkan frekuensi yang tepat untuk tombol-tombol tersebut

Frekuensi kotor tidak akan menunjukkan apa pun kepada kita. Jika Anda fokus pada hal itu, maka jangan kaget ketika kunci Anda untuk 1000 permintaan tidak menghasilkan satu klik pun per bulan.

Kita perlu mengidentifikasi frekuensi murni. Dan untuk melakukan ini, pertama-tama kita pilih semua kunci yang ditemukan dengan tanda centang, lalu klik tombol "Yandex Direct" dan mulai prosesnya lagi. Sekarang Slovoeb akan mencari frekuensi permintaan yang tepat per bulan untuk setiap kunci.

Sekarang kami memiliki gambaran objektif - berapa kali kueri dimasukkan oleh pengguna Internet selama sebulan terakhir. Saya sekarang mengusulkan untuk mengelompokkan semua pertanyaan kunci berdasarkan frekuensi untuk membuatnya lebih mudah untuk dikerjakan.

Untuk melakukan ini, klik ikon “filter” di kolom “Frekuensi”. ", dan tentukan - filter kunci dengan nilai "kurang dari atau sama dengan 10".

Sekarang program hanya akan menampilkan permintaan yang frekuensinya kurang dari atau sama dengan nilai “10”. Anda dapat menghapus kueri ini atau menyalinnya ke grup kueri utama lainnya untuk digunakan di masa mendatang. Kurang dari 10 sangat sedikit. Menulis artikel untuk permintaan ini hanya membuang-buang waktu.

Sekarang kita perlu memilih pertanyaan-pertanyaan kunci yang akan memberi kita lalu lintas yang lebih atau kurang baik. Dan untuk ini kita perlu mengetahui parameter lain - tingkat daya saing permintaan.

Langkah #4 — Memeriksa daya saing permintaan

Semua “kunci” di dunia ini terbagi menjadi 3 jenis: frekuensi tinggi (HF), frekuensi menengah (MF), frekuensi rendah (LF). Mereka juga bisa sangat kompetitif (HC), cukup kompetitif (SC) dan rendah kompetitif (LC).

Biasanya, permintaan HF juga merupakan VC. Artinya, jika suatu query sering dicari di Internet, maka banyak sekali situs yang ingin mempromosikannya. Namun hal ini tidak selalu terjadi; ada pengecualian yang menyenangkan.

Seni menyusun inti semantik justru terletak pada menemukan kueri yang memiliki frekuensi tinggi dan tingkat persaingan rendah. Sangat sulit untuk menentukan tingkat persaingan secara manual.

Anda dapat fokus pada indikator seperti jumlah halaman utama di TOP 10, panjang dan kualitas teks. tingkat kepercayaan dan keunggulan situs di hasil pencarian TOP berdasarkan permintaan. Semua ini akan memberi Anda gambaran tentang betapa ketatnya persaingan untuk mendapatkan peringkat untuk kueri khusus ini.

Tapi saya sarankan Anda menggunakannya Layanan mutagen. Ini memperhitungkan semua parameter yang saya sebutkan di atas, ditambah selusin parameter lainnya yang mungkin belum pernah Anda atau saya dengar. Setelah analisis, layanan memberikan nilai pasti - tingkat persaingan yang dimiliki permintaan ini.

Di sini saya memeriksa kueri “menyiapkan iklan kontekstual di google adwords”. Mutagen menunjukkan kepada kita bahwa kunci ini memiliki daya saing "lebih dari 25" - ini adalah nilai maksimum yang ditunjukkannya. Dan kueri ini hanya memiliki 11 tampilan per bulan. Jadi itu jelas tidak cocok untuk kita.

Kami dapat menyalin semua kunci yang kami temukan di Slovoeb dan melakukan pemeriksaan massal di Mutagen. Setelah itu, kita tinggal melihat daftarnya dan mengambil permintaan yang permintaannya banyak dan tingkat persaingannya rendah.

Mutagen adalah layanan berbayar. Tapi Anda bisa melakukan 10 pemeriksaan per hari secara gratis. Selain itu, biaya pengujiannya sangat rendah. Selama saya bekerja dengannya, saya belum menghabiskan 300 rubel pun.

Berbicara tentang tingkat persaingan. Jika Anda memiliki situs muda, lebih baik memilih kueri dengan tingkat persaingan 3-5. Dan jika Anda sudah berpromosi lebih dari setahun, maka Anda bisa mengambil 10-15.

Berbicara tentang frekuensi permintaan. Sekarang kita perlu mengambil langkah terakhir, yang memungkinkan Anda menarik banyak lalu lintas bahkan untuk kueri berfrekuensi rendah.

Langkah #5 — Mengumpulkan “ekor” untuk kunci yang dipilih

Seperti yang telah dibuktikan dan diuji berkali-kali, situs Anda akan menerima sebagian besar lalu lintas bukan dari kata kunci utama, tetapi dari apa yang disebut “ekor”. Ini adalah saat seseorang memasukkan kueri kunci aneh ke dalam bilah pencarian, dengan frekuensi 1-2 per bulan, tetapi ada banyak kueri seperti itu.

Untuk melihat "ekor", cukup buka Yandex dan masukkan kueri kunci pilihan Anda ke dalam bilah pencarian. Berikut kira-kira apa yang akan Anda lihat.

Sekarang Anda hanya perlu menuliskan kata-kata tambahan ini di dokumen terpisah dan menggunakannya dalam artikel Anda. Selain itu, tidak perlu selalu menempatkannya di sebelah kunci utama. Jika tidak, mesin pencari akan melihat “optimasi berlebihan” dan artikel Anda akan masuk dalam hasil pencarian.

Cukup gunakan mereka di tempat berbeda di artikel Anda, dan Anda juga akan menerima lalu lintas tambahan dari mereka. Saya juga menyarankan Anda mencoba menggunakan sebanyak mungkin bentuk kata dan sinonim untuk kueri kunci utama Anda.

Misalnya, kami memiliki permintaan - “Menyiapkan iklan kontekstual”. Berikut cara memformulasikannya kembali:

  • Setup = mengatur, membuat, membuat, menjalankan, meluncurkan, mengaktifkan, menempatkan...
  • Periklanan kontekstual = konteks, langsung, penggoda, YAN, adwords, kms. langsung, adwords...

Anda tidak pernah tahu persis bagaimana orang akan mencari informasi. Tambahkan semua kata tambahan ini ke inti semantik Anda dan gunakan saat menulis teks.

Jadi, kami mengumpulkan daftar 100 - 150 pertanyaan kunci. Jika Anda membuat inti semantik untuk pertama kalinya, mungkin diperlukan waktu beberapa minggu.

Atau mungkin mematahkan matanya? Mungkin ada peluang untuk mendelegasikan kompilasi FL kepada spesialis yang akan melakukannya dengan lebih baik dan lebih cepat? Ya, memang ada spesialis seperti itu, tetapi Anda tidak selalu perlu menggunakan layanan mereka.

Apakah layak memesan SY dari spesialis?

Secara umum, kompiler inti semantik hanya akan memberi Anda langkah 1 - 3 dari diagram kami. Terkadang, dengan biaya tambahan yang besar, mereka akan melakukan langkah 4-5 - (mengumpulkan ekor dan memeriksa daya saing permintaan).

Setelah itu, mereka akan memberi Anda beberapa ribu pertanyaan kunci yang perlu Anda kerjakan lebih lanjut.

Dan pertanyaannya di sini adalah apakah Anda akan menulis artikel sendiri, atau menyewa copywriter untuk ini. Jika Anda ingin fokus pada kualitas daripada kuantitas, Anda perlu menulisnya sendiri. Namun tidak cukup jika Anda hanya mendapatkan daftar kunci saja. Anda harus memilih topik yang Anda pahami dengan cukup baik untuk menulis artikel yang berkualitas.

Dan di sini muncul pertanyaan - mengapa kita sebenarnya membutuhkan spesialis di FL? Setuju, menguraikan kunci dasar dan mengumpulkan frekuensi yang tepat (langkah #1-3) sama sekali tidak sulit. Ini benar-benar akan memakan waktu setengah jam.

Yang paling sulit adalah memilih permintaan HF yang persaingannya rendah. Dan sekarang, ternyata, Anda memerlukan HF-NC, yang bisa digunakan untuk menulis artikel bagus. Inilah yang akan menghabiskan 99% waktu Anda mengerjakan inti semantik. Dan tidak ada spesialis yang akan melakukan ini untuk Anda. Nah, apakah layak mengeluarkan uang untuk memesan layanan seperti itu?

Kapan layanan spesialis FL berguna?

Hal lain adalah jika Anda awalnya berencana untuk menarik copywriter. Maka Anda tidak perlu memahami subjek permintaan tersebut. Copywriter Anda juga tidak akan memahaminya. Mereka hanya akan mengambil beberapa artikel tentang topik ini dan menyusun teks "mereka" dari artikel tersebut.

Artikel-artikel seperti itu akan menjadi kosong, menyedihkan, hampir tidak berguna. Tapi jumlahnya akan banyak. Jika Anda sendiri, Anda dapat menulis maksimal 2-3 artikel berkualitas per minggu. Dan sepasukan copywriter akan memberi Anda 2-3 teks jelek setiap hari. Pada saat yang sama, mereka akan dioptimalkan untuk permintaan, yang berarti mereka akan menarik sejumlah lalu lintas.

Dalam hal ini, ya, dengan tenang pekerjakan spesialis FL. Biarkan mereka juga menyusun spesifikasi teknis untuk copywriter pada saat yang bersamaan. Tapi tahukah Anda, ini juga membutuhkan sejumlah uang.

Ringkasan

Mari kita bahas kembali gagasan utama dalam artikel untuk memperkuat informasi.

  • Inti semantik hanyalah daftar pertanyaan kunci yang akan Anda tulis artikelnya di situs untuk promosi.
  • Penting untuk mengoptimalkan teks untuk kueri kunci yang tepat, jika tidak, artikel Anda dengan kualitas terbaik pun tidak akan pernah mencapai TOP.
  • SY seperti rencana konten jaringan sosial. Ini membantu Anda menghindari “krisis kreatif” dan selalu tahu persis apa yang akan Anda tulis besok, lusa, dan dalam sebulan.
  • Untuk mengkompilasi inti semantik, akan lebih mudah menggunakan program gratis Slovoeb, Anda hanya memerlukannya.
  • Berikut lima langkah kompilasi NL: 1 - Pemilihan kunci dasar; 2 - Mengurai kunci dasar; 3 - Pengumpulan frekuensi permintaan yang tepat; 4 — Memeriksa daya saing kunci; 5 – Kumpulan “ekor”.
  • Jika Anda ingin menulis artikel sendiri, lebih baik buat sendiri inti semantiknya, untuk diri Anda sendiri. Spesialis dalam persiapan sinonim tidak akan dapat membantu Anda di sini.
  • Jika Anda ingin mengerjakan kuantitas dan menggunakan copywriter untuk menulis artikel, maka sangat mungkin untuk mendelegasikan dan menyusun inti semantik. Andai saja uangnya cukup untuk semuanya.

Saya harap instruksi ini bermanfaat bagi Anda. Simpan ke favorit Anda agar tidak hilang, dan bagikan dengan teman-teman Anda. Jangan lupa download buku saya. Di sana saya tunjukkan cara tercepat dari nol hingga satu juta pertama di Internet (sari dari pengalaman pribadi dalam 10 tahun =)

Sampai jumpa lagi!

Hormat saya Dmitry Novoselov

Halo semua! Artikel hari ini dikhususkan untuk cara merakit inti semantik (SC) dengan benar. Jika Anda terlibat dalam promosi SEO di Google dan Yandex, ingin meningkatkan lalu lintas alami, meningkatkan lalu lintas situs web dan penjualan - materi ini cocok untuk Anda.

Untuk mengetahui kebenarannya, kita akan mempelajari topik dari “A sampai Z”:

Sebagai kesimpulan, mari kita lihat aturan umum penyusunan SL. Jadi mari kita mulai!

Inti semantik: apa itu dan apa pertanyaannya?

Inti semantik sebuah situs (juga dikenal sebagai “inti semantik”) adalah sekumpulan kata dan frasa yang benar-benar sesuai dengan struktur dan tema sumber daya. Sederhananya, ini adalah pertanyaan yang digunakan pengguna untuk menemukan situs di Internet.

Ini adalah inti semantik yang benar yang memberikan gambaran lengkap kepada mesin pencari dan audiens tentang informasi yang disajikan pada sumber daya.

Misalnya, jika sebuah perusahaan menjual kartu pos yang sudah jadi, maka inti semantiknya harus mencakup pertanyaan berikut: “beli kartu pos”, “harga kartu pos”, “kartu pos khusus”, dan sejenisnya. Tapi bukan: “cara membuat kartu pos”, “kartu pos do-it-yourself”, “kartu pos buatan sendiri”.

Menarik untuk diketahui: copywriting LSI. Akankah teknik ini menggantikan SEO?

Klasifikasi permintaan berdasarkan frekuensi:

  • Kueri frekuensi tinggi(HF) - yang paling sering "dipalu" ke dalam bilah pencarian (misalnya, "beli kartu pos").
  • Kelas menengah(MF) – kurang populer dibandingkan kunci HF, tetapi juga menarik bagi khalayak luas (“harga beli kartu pos”).
  • Frekuensi rendah(NP) – frasa yang sangat jarang diminta (“beli kartu pos seni”).

Penting untuk dicatat bahwa tidak ada batasan yang jelas yang memisahkan HF dari SY dan LF, karena keduanya berbeda-beda tergantung topiknya. Misalnya, untuk kueri “origami”, indikator RF adalah 600 ribu tayangan per bulan, dan untuk “kosmetik” – 3,5 juta.

Jika kita beralih ke anatomi kunci, maka frekuensi tinggi hanya terdiri dari badan, frekuensi menengah dan rendah dilengkapi dengan specifier dan “ekor”.

Saat membentuk inti semantik, Anda perlu menggunakan semua jenis frekuensi, tetapi dalam proporsi berbeda: HF minimum, LF maksimum, dan jumlah MF rata-rata.

Agar lebih jelas, mari kita analogikan dengan pohon. Bagasi adalah permintaan paling penting yang menjadi sandaran segalanya. Cabang tebal yang terletak lebih dekat ke batang adalah tombol frekuensi menengah, yang juga populer, namun tidak sepopuler HF. Cabang tipis adalah kata berfrekuensi rendah yang juga digunakan untuk mencari produk/jasa yang diinginkan, tetapi jarang.

Pemisahan kunci berdasarkan daya saing:

  • sangat kompetitif (HC);
  • rata-rata kompetitif (SC);
  • daya saing rendah (NC).

Kriteria ini menunjukkan berapa banyak sumber daya web yang digunakan permintaan ini untuk promosi. Semuanya sederhana di sini: semakin tinggi daya saing kuncinya, semakin sulit untuk menembus dan tetap berada di 10 besar dengan kunci tersebut. Yang memiliki daya saing rendah juga tidak perlu diperhatikan, karena tidak terlalu populer di jaringan. Pilihan yang ideal adalah maju sesuai permintaan IC, yang dengannya Anda secara realistis dapat menempati posisi pertama dalam area bisnis yang stabil.

Klasifikasi permintaan menurut kebutuhan pengguna:

  • Transaksional– kunci yang terkait dengan tindakan (beli, jual, unggah, unduh).
  • Informasi– untuk memperoleh informasi (apa, bagaimana, mengapa, berapa).
  • Navigasi– membantu Anda menemukan informasi tentang sumber daya tertentu (“beli soket telepon”).

Kata kunci yang tersisa, ketika sulit untuk memahami maksud pengguna, diklasifikasikan ke dalam kelompok “Lainnya” (misalnya, kata “kartu pos” saja yang menimbulkan banyak pertanyaan: “Beli? Buat? Gambar?”).

Mengapa sebuah website membutuhkan inti semantik?

Mengumpulkan inti semantik adalah pekerjaan melelahkan yang membutuhkan banyak waktu, tenaga, dan kesabaran. Tidak mungkin membuat sintaks yang benar yang akan berfungsi hanya dalam dua menit.

Pertanyaan yang cukup masuk akal muncul di sini: apakah layak untuk mengeluarkan upaya dalam memilih inti semantik untuk sebuah situs? Jika Anda ingin proyek Internet Anda menjadi populer, terus meningkatkan basis pelanggan Anda dan, karenanya, meningkatkan keuntungan perusahaan, jawabannya tegas: “YA.”

Karena mengumpulkan inti semantik membantu:

  • Meningkatkan visibilitas sumber daya web. Mesin pencari Yandex, Google, dan lainnya akan menemukan situs Anda menggunakan kata kunci yang Anda pilih dan menawarkannya kepada pengguna yang tertarik dengan pertanyaan ini. Akibatnya, masuknya pelanggan potensial meningkat, dan peluang penjualan produk/jasa meningkat.
  • Hindari kesalahan pesaing. Saat membuat sintaks, analisis inti semantik pesaing yang menempati posisi pertama dalam hasil pencarian harus dilakukan. Dengan mempelajari situs-situs terkemuka, Anda akan dapat menentukan pertanyaan apa yang membantu mereka tetap menjadi yang teratas, topik apa yang mereka tulis, dan ide apa yang tidak berhasil. Selama analisis pesaing, Anda mungkin juga mendapatkan ide tentang cara mengembangkan bisnis Anda.
  • Buatlah struktur situs. Disarankan untuk menggunakan inti semantik sebagai “asisten” untuk membuat struktur situs web. Dengan mengumpulkan CN lengkap, Anda dapat melihat semua pertanyaan yang dimasukkan pengguna saat mencari produk atau layanan Anda. Ini akan membantu Anda menentukan bagian utama sumber daya. Kemungkinan besar, Anda perlu membuat halaman yang awalnya tidak Anda pikirkan. Penting untuk dipahami bahwa NL hanya menyarankan kepentingan pengguna. Idealnya, struktur situs sesuai dengan area bisnis dan berisi konten yang memenuhi kebutuhan audiens.
  • Hindari spam. Setelah menganalisis inti semantik situs pesaing utama, Anda dapat menentukan frekuensi kata kunci yang optimal. Karena tidak ada indikator universal kepadatan kueri untuk semua halaman sumber daya, dan semuanya bergantung pada topik dan jenis halaman, serta bahasa dan kunci itu sendiri.

Bagaimana lagi Anda bisa menggunakan inti semantik? Untuk membuat rencana konten yang tepat. Kunci yang dikumpulkan dengan benar akan menyarankan topik untuk teks dan postingan yang menarik bagi audiens target Anda.

Kesimpulan. Hampir MUNGKIN membuat proyek Internet yang menarik, populer dan menguntungkan tanpa SY.

Materi tentang topik:

Bersiap untuk mengumpulkan inti semantik untuk situs tersebut

Sebelum membuat inti semantik situs, Anda perlu melakukan langkah-langkah berikut:

I. Mempelajari aktivitas perusahaan (“brainstorming”)

Di sini penting untuk menuliskan SEMUA layanan dan barang yang ditawarkan organisasi. Misalnya, untuk mengumpulkan inti semantik untuk toko furnitur online, Anda dapat menggunakan kueri berikut: sofa, kursi berlengan, tempat tidur, lorong, lemari + restorasi, perbaikan. Hal utama di sini adalah jangan sampai melewatkan apa pun dan tidak menambahkan hal-hal yang tidak perlu. Hanya informasi yang relevan, mis. Jika perusahaan tidak menjual pouf atau memperbaiki furnitur, permintaan ini tidak diperlukan.

Selain brainstorming, Anda dapat menggunakan layanan ini Google Analitik dan Yandex.Metrika (Gbr. 1) atau akun pribadi di Google Search Console dan Yandex Webmaster (Gbr. 2). Mereka akan memberi tahu Anda pertanyaan mana yang paling populer di kalangan audiens target Anda. Bantuan tersebut hanya tersedia untuk lokasi yang sudah beroperasi.

Teks untuk membantu:

  • Advego– bekerja dengan prinsip yang sama seperti Istio.com.

  • Alat SEO Sederhanalayanan gratis untuk analisis SEO situs, termasuk inti semantik.

  • alat Lenar. Cara kerjanya sederhana: muat halaman yang Anda perlukan untuk "menarik" tombol (maks 200), klik "Ayo pergi" - dan Anda mendapatkan daftar kata yang paling sering digunakan pada sumber daya.

II. Untuk menganalisis inti semantik situs pesaing:

  • SEMRUSH– Anda perlu menambahkan alamat sumber daya, pilih negara, klik “Mulai Sekarang” dan dapatkan analisisnya. Layanan ini berbayar, tetapi 10 cek gratis diberikan saat pendaftaran. Juga cocok untuk mengumpulkan kunci untuk proyek bisnis Anda sendiri.

  • Metrik penelusuran– alat yang sangat nyaman, tetapi berbayar dan dalam bahasa Inggris, sehingga tidak tersedia untuk semua orang.

  • kata-kata mata-mata– layanan untuk menganalisis aktivitas pesaing: anggaran, lalu lintas pencarian, iklan, permintaan. Serangkaian fungsi yang “dikurangi” tersedia secara gratis, dan dengan biaya tertentu Anda bisa mendapatkan gambaran rinci tentang kemajuan perusahaan yang Anda minati.

  • status serp– platform multifungsi yang menyediakan laporan kata kunci, peringkat, pesaing di hasil pencarian Google dan Yandex, tautan balik dll. Cocok untuk memilih FL dan menganalisis sumber daya Anda. Satu-satunya negatif adalah bahwa berbagai layanan tersedia setelah membayar paket tarif.

  • PR-CYprogram gratis untuk menganalisis inti semantik, kegunaan, pengoptimalan seluler, massa tautan, dan banyak lagi.

Lain metode yang efektif perpanjangan inti semantik - gunakan sinonim. Pengguna dapat mencari produk atau layanan yang sama dengan cara yang berbeda, jadi penting untuk menyertakan semua kunci alternatif di TL. Petunjuk di Google dan Yandex akan membantu Anda menemukan sinonim.

Nasihat. Jika situs tersebut bersifat informasi, Anda harus terlebih dahulu memilih kueri yang utama untuk sumber daya ini dan promosi yang direncanakan. Dan kemudian - musiman. Misalnya, untuk proyek web tentang tren fesyen dalam pakaian, pertanyaan utamanya adalah: fesyen, wanita, pria, anak-anak. Dan, bisa dikatakan, "musiman" - musim gugur, musim dingin, musim semi, dll.

Cara merakit inti semantik: instruksi terperinci

Setelah memutuskan daftar kueri untuk situs Anda, Anda dapat mulai mengumpulkan inti semantik.

Itu bisa dilakukan:

I. GRATIS menggunakan:

Wordstat Yandex

Yandex Wordstat adalah layanan online yang sangat populer yang dapat Anda gunakan:

  • kumpulkan inti semantik situs dengan statistik untuk bulan tersebut;
  • dapatkan kata-kata yang mirip dengan kueri;
  • menyaring kata kunci yang dimasukkan dari perangkat seluler;
  • mengetahui statistik berdasarkan kota dan wilayah;
  • menentukan fluktuasi musiman kunci.

Kelemahan besar: Anda harus “membongkar” kunci secara manual. Namun jika Anda memasang ekstensi Asisten Wordstat Yandex, bekerja dengan inti semantik akan mempercepat secara signifikan (relevan untuk browser Opera).

Cara penggunaannya mudah: klik “+” di sebelah kunci yang diinginkan atau klik “tambahkan semua”. Permintaan secara otomatis ditransfer ke daftar ekstensi. Setelah mengumpulkan CN, Anda perlu mentransfernya ke editor tabel dan memprosesnya. Keuntungan penting dari program ini: memeriksa duplikat, mengurutkan (abjad, frekuensi, penambahan), kemampuan untuk menambahkan kunci secara manual.

Petunjuk langkah demi langkah tentang cara menggunakan layanan ini diberikan dalam artikel: Yandex. Wordstat: bagaimana cara mengumpulkan pertanyaan kunci?

Iklan Google

Perencana kata kunci dari Google, yang memungkinkan Anda memilih inti semantik online secara gratis. Layanan ini menemukan kata kunci berdasarkan permintaan pengguna mesin pencari Google. Untuk bekerja, Anda harus memiliki akun Google.

Layanan ini menawarkan:

  • temukan kata kunci baru;
  • melihat jumlah permintaan dan perkiraan.

Untuk mengumpulkan inti semantik, Anda perlu memasukkan kueri, memilih lokasi dan bahasa. Program ini menunjukkan rata-rata jumlah permintaan per bulan dan tingkat persaingan. Terdapat juga informasi tentang tayangan iklan dan tawaran untuk menampilkan iklan di bagian atas halaman.

Jika perlu, Anda dapat mengatur filter berdasarkan kompetisi, posisi rata-rata, dan kriteria lainnya.

Dimungkinkan juga untuk meminta laporan ( petunjuk langkah demi langkah Program ini menunjukkan cara melakukannya).

Untuk mempelajari perkiraan lalu lintas, cukup masukkan kueri atau serangkaian kunci di jendela “Lihat jumlah kueri dan perkiraan”. Informasi tersebut akan membantu menentukan efektivitas rencana strategis untuk anggaran dan tarif tertentu.

“Kekurangan” layanan ini antara lain sebagai berikut: tidak ada frekuensi pasti (hanya rata-rata untuk bulan tersebut); tidak menampilkan kunci Yandex terenkripsi dan menyembunyikan beberapa dari Google. Tapi itu menentukan persaingan dan memungkinkan Anda mengekspor kata kunci dalam format Excel.

SlowoEB

Ini adalah versi gratis dari Key Collector, yang memiliki banyak fitur berguna:

  • dengan cepat mengumpulkan inti semantik dari kolom kanan dan kiri WordStat;
  • melakukan pengumpulan tip pencarian secara batch;
  • menentukan semua jenis frekuensi;
  • mengumpulkan data musiman;
  • memungkinkan Anda melakukan kumpulan kata dan frekuensi dari Rambler.Adstat;
  • Menghitung KEI (Indeks Efektivitas Kunci).

Untuk menggunakan layanan ini, cukup masukkan informasi akun Anda di Direct (login dan kata sandi).

Jika Anda ingin tahu lebih banyak, baca artikel: Slovoeb (Slovoeb). Dasar-dasar dan petunjuk penggunaan

Bukvarik

Program yang mudah digunakan dan gratis untuk mengumpulkan inti semantik, yang databasenya mencakup lebih dari 2 miliar kueri.

Ini dibedakan berdasarkan operasi operasionalnya, serta fitur-fitur yang berguna:

  • mendukung daftar besar kata pengecualian (hingga 10 ribu);
  • memungkinkan Anda membuat dan menggunakan daftar kata secara langsung saat membentuk sampel;
  • menawarkan untuk menyusun daftar kata dengan mengalikan beberapa daftar (Combinator);
  • menghapus kata kunci duplikat;
  • menunjukkan frekuensi (tetapi hanya “seluruh dunia”, tanpa memilih wilayah);
  • menganalisis domain (satu atau lebih, membandingkan sumber daya SYNAL);
  • diekspor dalam format .csv.

Satu-satunya kelemahan penting untuk program instalasi– “berat” besar (dalam format yang diarsipkan ≈ 28 GB, dalam format yang belum dibongkar ≈ 100 GB). Tapi ada alternatif - memilih SYS online.

II. DIBAYAR menggunakan program:

Basis Maxim Pastukhov

Layanan Rusia yang berisi database lebih dari 1,6 miliar kata kunci dengan data Yandex WordStat dan Direct, serta layanan bahasa Inggris yang berisi lebih dari 600 juta kata. Ia bekerja online dan membantu tidak hanya dalam menciptakan inti semantik, tetapi juga dalam meluncurkan kampanye iklan di Yandex.Direct. Kerugiannya yang paling penting dan penting adalah biayanya yang tinggi.

Kolektor Kunci

Mungkin alat paling populer dan nyaman untuk mengumpulkan inti semantik.

Kolektor Kunci:

  • mengumpulkan kata kunci dari kolom kanan dan kiri WordStat Yandex;
  • memfilter permintaan yang tidak perlu menggunakan opsi Stop Words;
  • mencari duplikat dan mengidentifikasi kata kunci musiman;
  • memfilter kunci berdasarkan frekuensi;
  • diunggah dalam format tabel Excel;
  • menemukan halaman yang relevan dengan permintaan;
  • mengumpulkan statistik dari: Google Analytics, AdWords, dll.

Anda dapat mengevaluasi bagaimana Kay Collector mengumpulkan inti semantik secara gratis di versi demo.

Analisis Terburu-buru

Sebuah layanan yang dengannya Anda dapat mengumpulkan dan mengelompokkan inti semantik.

Selain itu, Analisis Terburu-buru:

  • mencari petunjuk di Youtube, Yandex dan Google;
  • menawarkan filter kata berhenti yang nyaman;
  • memeriksa pengindeksan;
  • menentukan frekuensi;
  • memeriksa posisi situs untuk desktop dan seluler;
  • menghasilkan spesifikasi teknis untuk teks, dll.

Alat luar biasa, tetapi berbayar: tidak ada versi demo dan pemeriksaan gratis terbatas.

Mutagen

Program ini mengumpulkan pertanyaan kunci dari 30 situs pertama di mesin pencari Yandex. Menunjukkan frekuensi per bulan, daya saing setiap permintaan pencarian dan merekomendasikan penggunaan kata-kata dengan indikator hingga 5 (karena konten berkualitas tinggi cukup untuk mempromosikan kata kunci tersebut secara efektif).

Artikel yang berguna: 8 jenis teks untuk situs web - tulis dengan benar

Program berbayar untuk mengumpulkan inti semantik, tetapi ada batas gratis - 10 cek per hari (tersedia setelah pengisian anggaran pertama, setidaknya sebesar 1 rubel). Terbuka hanya untuk pengguna terdaftar.

Alat Kata Kunci

Layanan andal untuk membuat inti semantik yang:

  • dalam versi gratis– mengumpulkan lebih dari 750 kunci untuk setiap permintaan menggunakan Google, Youtube Bing, Amazon, tips eBay, Toko aplikasi, Instagram;
  • di berbayar– menunjukkan frekuensi permintaan, persaingan, biaya di AdWords, dan dinamika.

Program ini tidak memerlukan registrasi.

Selain alat yang disajikan, masih banyak layanan lain untuk mengumpulkan inti semantik sebuah situs dengan ulasan video detail dan contoh. Saya memilih ini karena menurut saya ini yang paling efektif, sederhana, dan nyaman.

Kesimpulan. Jika memungkinkan, disarankan untuk membeli lisensi untuk menggunakan program berbayar, karena fungsinya jauh lebih luas daripada analog gratis. Namun untuk pengumpulan CN sederhana, layanan “terbuka” juga cukup cocok.

Pengelompokan inti semantik

Inti semantik yang sudah jadi, biasanya, mencakup banyak kata kunci (misalnya, untuk permintaan “furnitur berlapis”, layanan mengembalikan beberapa ribu kata). Apa yang harus dilakukan selanjutnya dengan jumlah kata kunci yang begitu banyak?

Kunci yang dikumpulkan diperlukan:

I. Membersihkan “sampah”, duplikat dan “boneka”

Permintaan dengan frekuensi nol atau kesalahan akan dihapus begitu saja. Untuk menghilangkan kunci dengan “ekor” yang tidak perlu, saya sarankan menggunakan Fungsi Unggul"Menyortir dan Memfilter". Apa yang bisa dianggap sampah? Misalnya, untuk situs komersial, kata-kata seperti "unduh", "gratis", dll. tidak akan berguna. Duplikat juga dapat dihapus secara otomatis di Excel menggunakan opsi "hapus duplikat" (lihat contoh di bawah).

Kami menghapus kunci dengan frekuensi nol:

Menghapus “ekor” yang tidak perlu:

Menyingkirkan duplikat:

II. Hapus kueri yang sangat kompetitif

Jika Anda tidak ingin "jalur" menuju puncak bertahan selama bertahun-tahun, kecualikan kunci VK. Dengan kata kunci seperti itu, tidak cukup hanya sekedar menempati posisi pertama hasil pencarian, namun yang lebih penting dan sulit adalah berusaha bertahan di sana.

Contoh cara menentukan kunci VK melalui perencana kata kunci dari Google (Anda hanya dapat meninggalkan NK dan SK melalui filter):

AKU AKU AKU. Lakukan ungrouping inti semantik

Anda dapat melakukannya dengan dua cara:

1. DIBAYAR:

  • Assort Kunci– pengelompokan inti semantik yang membantu membuat struktur situs dan menemukan pemimpin ceruk. Didukung oleh mesin pencari Yandex dan Google. Melakukan ungrouping 10 ribu permintaan hanya dalam beberapa menit. Anda dapat mengevaluasi manfaat layanan ini dengan mengunduh versi demo.

  • pengurai SEM melakukan pengelompokan kunci secara otomatis; membuat struktur situs; identifikasi pemimpin; pembuatan spesifikasi teknis untuk copywriter; Penguraian lampu latar Yandex; menentukan geodependensi dan “komersilitas” kueri, serta relevansi halaman. Selain itu, layanan memeriksa seberapa cocok teks dengan bagian atas menurut parameter SEO. Cara kerjanya: kumpulkan SINOPSIS dan simpan dalam format .xls atau .xlsx. Anda membuat proyek baru di layanan, memilih wilayah, mengunggah file dengan kueri - dan setelah beberapa detik Anda menerima kata-kata yang diurutkan ke dalam kelompok semantik.

Selain layanan tersebut, saya juga dapat merekomendasikan Analisis Terburu-buru, yang telah kita temui di atas, dan Hanya Ajaib.

Analisis Terburu-buru:

Hanya Ajaib:

2. GRATIS:

  • Secara manual- Dengan menggunakan Excel dan fungsi Sortir dan Filter. Untuk melakukan ini: atur filter, masukkan kueri untuk grup (misalnya, "beli", "harga"), sorot daftar kunci berdasarkan warna. Selanjutnya, atur opsi “Penyortiran khusus” (dalam “Penyortiran berdasarkan warna”) dengan masuk ke “urutkan dalam rentang yang ditentukan.” Sentuhan terakhir adalah menambahkan nama ke grup.

Langkah 1

Langkah 2

Langkah 3

Langkah 4

Contoh inti semantik yang tidak dikelompokkan:

  • SEOCEPAT– program online gratis untuk pengelompokan inti semantik secara otomatis. Untuk “menyebarkan” kunci ke dalam grup, cukup unduh file dengan permintaan atau tambahkan secara manual dan tunggu sebentar. Alat ini bekerja dengan cepat, menentukan frekuensi dan jenis kunci. Memungkinkan Anda menghapus grup yang tidak perlu dan mengekspor dokumen dalam format Excel.

  • Asisten Kata Kunci. Layanan ini bekerja online berdasarkan prinsip tabel Excel, mis. Anda harus mendistribusikan kata kunci secara manual, tetapi waktu yang dibutuhkan jauh lebih sedikit dibandingkan bekerja di Excel.

Cara mengelompokkan inti semantik dan metode apa yang digunakan terserah Anda. Saya yakin cara yang Anda perlukan hanya dapat dilakukan secara manual. Itu panjang, tapi efektif.

Setelah mengumpulkan dan mendistribusikan inti semantik menjadi beberapa bagian, Anda dapat mulai menulis teks untuk halaman-halaman tersebut.

Baca artikel terkait dengan contoh: Bagaimana cara memasukkan kata kunci ke dalam teks dengan benar?

Aturan umum untuk membuat FL

Untuk meringkas, penting untuk menambahkan tip yang akan membantu Anda menyusun inti semantik yang benar:

Pernyataan pemasaran harus dirancang sedemikian rupa sehingga memenuhi kebutuhan sebanyak mungkin klien potensial.

Semantiknya harus benar-benar sesuai dengan tema proyek web, mis. Anda harus fokus hanya pada kueri yang ditargetkan.

Penting bahwa inti semantik yang telah selesai hanya mencakup beberapa kunci frekuensi tinggi, sisanya diisi dengan kunci frekuensi menengah dan rendah.

Inti semantik harus diperluas secara berkala untuk meningkatkan lalu lintas alami.

Dan yang paling penting: segala sesuatu di situs (dari kunci hingga struktur) harus dilakukan “untuk orang-orang”!

Kesimpulan. Inti semantik yang disusun dengan baik memberikan peluang nyata untuk dengan cepat mempromosikan dan mempertahankan situs di posisi teratas dalam hasil pencarian.

Jika Anda ragu dapat menyusun bahasa semantik yang benar, lebih baik memesan inti semantik untuk situs dari para profesional. Hal ini akan menghemat tenaga, waktu dan mendatangkan manfaat lebih.

Menarik juga untuk mengetahui: Bagaimana cara menempatkan dan mempercepat pengindeksan artikel? 5 rahasia sukses

Itu saja. Semoga materinya bermanfaat bagi Anda dalam pekerjaan Anda. Saya akan berterima kasih jika Anda membagikan pengalaman Anda dan meninggalkan komentar. Terima kasih atas perhatian Anda! Sampai pertemuan online baru!

Mengembangkan kernel dianggap bukan tugas yang mudah, tetapi siapa pun dapat menulis kernel sederhana. Untuk merasakan keajaiban peretasan kernel, Anda hanya perlu mengikuti beberapa konvensi dan menguasai bahasa assembler. Pada artikel ini kami akan menunjukkan cara melakukannya.


Halo Dunia!

Mari kita menulis kernel yang akan melakukan booting melalui GRUB pada sistem yang kompatibel dengan x86. Kernel pertama kita akan menampilkan pesan di layar dan berhenti di situ.

Bagaimana mesin x86 melakukan booting

Sebelum memikirkan cara menulis kernel, mari kita lihat bagaimana komputer melakukan booting dan mentransfer kendali ke kernel. Kebanyakan register prosesor x86 memiliki nilai tertentu setelah boot. Register penunjuk instruksi (EIP) berisi alamat instruksi yang akan dieksekusi oleh prosesor. Nilai hardcode-nya adalah 0xFFFFFFF0. Artinya, prosesor x86 akan selalu memulai eksekusi dari alamat fisik 0xFFFFFFF0. Ini adalah 16 byte terakhir dari ruang alamat 32-bit. Alamat ini disebut vektor reset.

Kartu memori yang terdapat dalam chipset menyatakan bahwa alamat 0xFFFFFFF0 mengacu pada bagian tertentu dari BIOS, dan bukan untuk RAM. Namun, BIOS menyalin dirinya sendiri ke dalam RAM untuk akses yang lebih cepat - proses ini disebut “membayangi”, membuat salinan bayangan. Jadi alamat 0xFFFFFFFF0 hanya akan berisi instruksi untuk melompat ke lokasi di memori tempat BIOS menyalin dirinya sendiri.

Jadi, BIOS mulai dijalankan. Pertama, ia mencari perangkat yang dapat melakukan booting dalam urutan yang ditentukan dalam pengaturan. Ia memeriksa media untuk mencari "angka ajaib" yang membedakan disk yang dapat di-boot dari disk biasa: jika byte 511 dan 512 di sektor pertama adalah 0xAA55, maka disk tersebut dapat di-boot.

Setelah BIOS menemukan perangkat boot, ia akan menyalin konten sektor pertama ke dalam RAM, dimulai dari alamat 0x7C00, dan kemudian memindahkan eksekusi ke alamat tersebut dan mulai mengeksekusi kode yang baru saja dimuat. Kode ini disebut bootloader.

Bootloader memuat kernel pada alamat fisik 0x100000. Inilah yang digunakan oleh kernel x86 paling populer.

Semua prosesor yang kompatibel dengan x86 dimulai dalam mode 16-bit primitif yang disebut "mode nyata". Bootloader GRUB mengalihkan prosesor ke mode terproteksi 32-bit dengan menyetel bit bawah register CR0 ke satu. Oleh karena itu, kernel mulai memuat dalam mode terproteksi 32-bit.

Perhatikan bahwa GRUB, dalam kasus kernel Linux, memilih protokol boot yang sesuai dan memuat kernel dalam mode nyata. Kernel Linux secara otomatis beralih ke mode terproteksi.

Apa yang kita butuhkan

  • komputer yang kompatibel dengan x86 (tentu saja)
  • Linux
  • perakit NASM,
  • ld (Penghubung GNU),
  • GRUB.

Titik masuk bahasa rakitan

Tentu saja kita ingin menulis semuanya dalam C, tapi kita tidak bisa sepenuhnya menghindari penggunaan assembler. Kami akan menulis file kecil di assembler x86 yang akan menjadi titik awal untuk kernel kami. Yang dilakukan kode assembly hanyalah memanggil fungsi eksternal yang akan kita tulis dalam C, dan kemudian menghentikan eksekusi program.

Bagaimana kita bisa menjadikan kode assembly sebagai titik awal untuk kernel kita? Kami menggunakan skrip tautan yang menghubungkan file objek dan membuat file akhir kernel yang dapat dieksekusi (saya akan menjelaskan lebih lanjut di bawah). Dalam skrip ini, kami akan secara langsung menunjukkan bahwa kami ingin biner kami diunduh di alamat 0x100000. Ini adalah alamat, seperti yang sudah saya tulis, di mana bootloader mengharapkan untuk melihat titik masuk ke dalam kernel.

Berikut adalah kode assemblernya.

kernel.asm
bit 32 bagian .text global start extern kmain start: cli mov esp, stack_space call kmain hlt section .bss resb 8192 stack_space:

Instruksi bit 32 pertama bukanlah assembler x86, tetapi arahan NASM yang memerintahkannya untuk menghasilkan kode agar prosesor dapat berjalan dalam mode 32-bit. Hal ini tidak diperlukan dalam contoh kita, namun praktik yang baik adalah menunjukkannya secara eksplisit.

Baris kedua memulai bagian teks, juga dikenal sebagai bagian kode. Semua kode kita akan ditempatkan di sini.

global adalah arahan NASM lainnya, yang menyatakan simbol dalam kode kita bersifat global. Ini akan memungkinkan linker menemukan simbol awal, yang berfungsi sebagai titik masuk kita.

kmain adalah fungsi yang akan didefinisikan dalam file kernel.c kita. extern mendeklarasikan bahwa fungsi tersebut dideklarasikan di tempat lain.

Berikutnya adalah fungsi start, yang memanggil kmain dan menghentikan prosesor dengan instruksi hlt. Interupsi dapat membangunkan prosesor setelahnya hlt , jadi kami menonaktifkan interupsi terlebih dahulu dengan instruksi cli (hapus interupsi).

Idealnya, kita harus mengalokasikan sejumlah memori untuk tumpukan dan mengarahkan penunjuk tumpukan (esp) ke sana. GRUB sepertinya tetap melakukan ini untuk kita, dan pada titik ini penunjuk tumpukan sudah disetel. Namun, untuk berjaga-jaga, mari kita alokasikan sebagian memori di bagian BSS dan arahkan penunjuk tumpukan ke awal. Kami menggunakan instruksi resb - ini mencadangkan memori yang ditentukan dalam byte. Sebuah tanda kemudian dibiarkan menunjukkan tepi bagian memori yang dicadangkan. Tepat sebelum kmain dipanggil, penunjuk tumpukan (esp) diarahkan ke area ini dengan instruksi mov.

Kernel di C

Di file kernel.asm kami memanggil fungsi kmain(). Jadi dalam kode C, eksekusi akan dimulai dari sana.

kernel.c
void kmain(void) ( const char *str = "kernel pertama saya"; 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; }

Yang dilakukan kernel kami hanyalah membersihkan layar dan mencetak baris kernel pertama saya.

Pertama, kita membuat pointer vidptr yang menunjuk ke alamat 0xb8000. Dalam mode terproteksi, ini adalah awal dari memori video. Memori layar teks hanyalah bagian dari ruang alamat. Bagian memori dialokasikan untuk layar I/O, yang dimulai pada alamat 0xb8000; 25 baris 80 karakter ASCII ditempatkan di dalamnya.

Setiap karakter dalam memori teks diwakili oleh 16 bit (2 byte), bukan 8 bit (1 byte) yang biasa kita gunakan. Byte pertama adalah kode ASCII dari karakter tersebut, dan byte kedua adalah byte atribut. Ini adalah definisi format karakter, termasuk warnanya.

Untuk menampilkan karakter s hijau di atas hitam, kita perlu memasukkan s pada byte pertama memori video dan nilai 0x02 pada byte kedua. 0 disini berarti background hitam dan 2 berarti warna hijau. Kita akan menggunakan warna abu-abu muda, kodenya 0x07.

Pada perulangan while pertama, program mengisi 25 baris yang terdiri dari 80 karakter dengan karakter kosong dengan atribut 0x07. Ini akan menghapus layar.

Pada loop while kedua, string yang diakhiri dengan null, kernel pertama saya ditulis ke memori video dan setiap karakter menerima byte atribut 0x07. Ini akan menghasilkan sebuah string.

Tata Letak

Sekarang kita harus mengkompilasi kernel.asm ke dalam file objek menggunakan NASM, dan kemudian menggunakan GCC untuk mengkompilasi kernel.c ke dalam file objek lain. Tugas kita adalah menghubungkan objek-objek ini ke dalam kernel yang dapat dieksekusi yang cocok untuk dimuat. Untuk melakukan ini, kita perlu menulis skrip untuk linker (ld), yang akan kita sampaikan sebagai argumen.

tautan.ld
OUTPUT_FORMAT(elf32-i386) ENTRY(mulai) BAGIAN ( . = 0x100000; .text: ( *(.text) ) .data: ( *(.data) ) .bss: ( *(.bss) ) )

Di sini pertama-tama kita mengatur format (OUTPUT_FORMAT) file yang dapat dieksekusi ke ELF (Executable and Linkable Format) 32-bit, format biner standar untuk sistem berbasis Unix untuk arsitektur x86.

ENTRI mengambil satu argumen. Ini menentukan nama simbol yang akan berfungsi sebagai titik masuk file yang dapat dieksekusi.

BAGIAN adalah bagian terpenting bagi kami. Di sini kita menentukan tata letak file yang dapat dieksekusi. Kita dapat menentukan bagaimana berbagai bagian akan digabungkan dan di mana setiap bagian akan ditempatkan.

Dalam kurung kurawal yang mengikuti ekspresi SECTIONS, titik menunjukkan penghitung lokasi. Ini secara otomatis diinisialisasi ke 0x0 di awal blok SECTIONS, tetapi dapat diubah dengan memberikan nilai baru.

Saya menulis sebelumnya bahwa kode kernel harus dimulai pada alamat 0x100000. Inilah sebabnya kami menetapkan penghitung posisi dengan nilai 0x100000.

Lihatlah baris.teks: ( *(.teks) ) . Tanda bintang di sini menentukan topeng yang cocok dengan nama file apa pun. Oleh karena itu, ekspresi *(.text) berarti semua bagian input .text di semua file input.

Akibatnya, linker akan menggabungkan semua bagian teks dari semua file objek ke dalam bagian teks dari file yang dapat dieksekusi dan menempatkannya di alamat yang ditentukan dalam penghitung posisi. Bagian kode dari executable kami akan dimulai pada alamat 0x100000.

Setelah linker menghasilkan bagian teks, nilai penghitung posisi akan menjadi 0x100000 ditambah ukuran bagian teks. Demikian pula bagian data dan bss akan digabungkan dan ditempatkan pada alamat yang ditentukan oleh penghitung posisi.

GRUB dan multiboot

Sekarang semua file kita siap untuk membangun kernel. Namun karena kita akan mem-boot kernel menggunakan GRUB, tinggal satu langkah lagi.

Ada standar untuk memuat kernel x86 yang berbeda menggunakan bootloader. Ini disebut "spesifikasi multiboot". GRUB hanya akan memuat kernel yang cocok.

Menurut spesifikasi ini, kernel mungkin berisi header (Multiboot header) dalam 8 kilobyte pertama. Header ini harus berisi tiga bidang:

  • sihir- berisi nomor "ajaib" 0x1BADB002, yang digunakan untuk mengidentifikasi header;
  • bendera- bidang ini tidak penting bagi kami, Anda dapat membiarkannya nol;
  • checksum- checksum, harus memberikan nol jika ditambahkan ke bidang ajaib dan bendera.

File kernel.asm kita sekarang akan terlihat seperti ini.

kernel.asm
bit 32 bagian .teks ;spesifikasi multiboot selaras 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;checksum global start extern kmain start: cli mov esp, stack_space panggil kmain hlt section .bss resb 8192 stack_space:

Instruksi dd menentukan kata ganda 4-byte.

Merakit kernel

Jadi, semuanya sudah siap untuk membuat file objek dari kernel.asm dan kernel.c dan menghubungkannya menggunakan skrip kita. Kami menulis di konsol:

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

Dengan menggunakan perintah ini, assembler akan membuat file kasm.o dalam format ELF-32 bit. Sekarang giliran GCC:

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

Parameter -c menunjukkan bahwa file tidak perlu ditautkan setelah kompilasi. Kami akan melakukannya sendiri:

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

Perintah ini akan menjalankan linker dengan skrip kita dan menghasilkan kernel yang dapat dieksekusi.

PERINGATAN

Peretasan kernel paling baik dilakukan di lingkungan virtual. Untuk menjalankan kernel di QEMU dan bukan di GRUB, gunakan perintah qemu-system-i386 -kernel kernel .

Menyiapkan GRUB dan memulai kernel

GRUB mengharuskan nama file kernel mengikuti nama kernel-<версия>. Jadi mari kita ganti nama filenya - saya akan menamai file saya kernel-701.

Sekarang kita letakkan kernel di direktori /boot. Ini akan memerlukan hak pengguna super.

Anda perlu menambahkan sesuatu seperti ini ke file konfigurasi GRUB grub.cfg:

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

Jangan lupa untuk menghapus direktif menu tersembunyi jika disertakan.

GRUB 2

Untuk menjalankan kernel yang kami buat di GRUB 2, yang disediakan secara default di distribusi baru, konfigurasi Anda akan terlihat seperti ini:

Masuk menu "kernel 701" ( set root="hd0,msdos1" multiboot /boot/kernel-701 ro )

Terima kasih kepada Ruben Laguana atas tambahan ini.

Nyalakan ulang komputer Anda dan Anda akan melihat kernel Anda di daftar! Dan ketika Anda memilihnya, Anda akan melihat baris yang sama.



Ini adalah inti Anda!

Menulis kernel dengan dukungan keyboard dan layar

Kami telah menyelesaikan pekerjaan pada kernel minimal yang melakukan booting melalui GRUB, berjalan dalam mode terproteksi, dan mencetak satu baris ke layar. Saatnya untuk mengembangkannya dan menambahkan driver keyboard yang akan membaca karakter dari keyboard dan menampilkannya di layar.

Kami akan berkomunikasi dengan perangkat I/O melalui port I/O. Pada dasarnya, ini hanyalah alamat pada bus I/O. Ada instruksi prosesor khusus untuk operasi membaca dan menulis.

Bekerja dengan port: membaca dan mengeluarkan

read_port: mov edx, masuk al, dx ret write_port: mov edx, mov al, keluar dx, al ret

Port I/O diakses menggunakan instruksi masuk dan keluar yang disertakan dalam set x86.

Di read_port, nomor port diteruskan sebagai argumen. Saat kompiler memanggil suatu fungsi, ia akan memasukkan semua argumen ke dalam tumpukan. Argumen disalin ke register edx menggunakan penunjuk tumpukan. Register dx adalah 16 bit terbawah dari register edx. Instruksi in di sini membaca nomor port yang diberikan dx dan memasukkan hasilnya al . Register al adalah 8 bit terbawah dari register eax. Anda mungkin ingat dari perguruan tinggi bahwa nilai yang dikembalikan oleh fungsi dilewatkan melalui register eax. Jadi read_port memungkinkan kita membaca dari port I/O.

Fungsi write_port bekerja dengan cara yang sama. Kami mengambil dua argumen: nomor port dan data yang akan ditulis. Instruksi out menulis data ke port.

Interupsi

Sekarang, sebelum kita kembali menulis driver, kita perlu memahami bagaimana prosesor mengetahui bahwa salah satu perangkat telah melakukan suatu operasi.

Solusi paling sederhana adalah dengan melakukan polling pada perangkat - terus memeriksa statusnya dalam lingkaran. Hal ini, tentu saja, tidak efektif dan tidak praktis. Jadi di sinilah interupsi berperan. Interupsi adalah sinyal yang dikirim ke prosesor oleh perangkat atau program yang menunjukkan bahwa suatu peristiwa telah terjadi. Dengan menggunakan interupsi, kita dapat menghindari kebutuhan untuk melakukan polling pada perangkat dan hanya akan merespons peristiwa yang kita minati.

Sebuah chip yang disebut Programmable Interrupt Controller (PIC) bertanggung jawab atas interupsi dalam arsitektur x86. Ini menangani interupsi dan rute perangkat keras dan mengubahnya menjadi interupsi sistem yang sesuai.

Ketika pengguna melakukan sesuatu dengan perangkatnya, pulsa yang disebut Interrupt Request (IRQ) dikirim ke chip PIC. PIC menerjemahkan interupsi yang diterima menjadi interupsi sistem dan mengirimkan pesan ke prosesor bahwa sudah waktunya menghentikan pekerjaannya. Penanganan interupsi selanjutnya adalah tugas kernel.

Tanpa PIC, kita harus melakukan polling pada semua perangkat yang ada dalam sistem untuk melihat apakah terjadi peristiwa yang melibatkan salah satu perangkat tersebut.

Mari kita lihat cara kerjanya dengan keyboard. Keyboard hang pada port 0x60 dan 0x64. Port 0x60 mengirimkan data (saat tombol ditekan), dan port 0x64 mengirimkan status. Namun, kita perlu mengetahui kapan tepatnya membaca port tersebut.

Interupsi berguna di sini. Saat tombol ditekan, keyboard mengirimkan sinyal PIC melalui jalur interupsi IRQ1. PIC menyimpan nilai offset yang disimpan selama inisialisasi. Ia menambahkan nomor baris masukan ke padding ini untuk membentuk vektor interupsi. Prosesor kemudian mencari struktur data yang disebut Interrupt Descriptor Table (IDT) untuk memberikan alamat yang sesuai dengan nomornya kepada pengendali interupsi.

Kode pada alamat tersebut kemudian dieksekusi dan menangani interupsi.

Tetapkan IDT

struct IDT_entry( unsigned short int offset_lowerbits; unsigned short int selector; 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_GATE */ IDT .offset_address & 0xffff0000 >> 16; tulis_port(0xA0, 0x11); tulis_port(0xA1, 0xff); ((alamat_idt & 0xffff)<< 16); idt_ptr = idt_address >> 16 ; load_idt(idt_ptr); )

IDT adalah array struktur IDT_entry. Kita akan membahas pengikatan interupsi keyboard ke handler nanti, tapi sekarang mari kita lihat cara kerja PIC.

Sistem x86 modern memiliki dua chip PIC, masing-masing dengan delapan jalur masukan. Kami akan menyebutnya PIC1 dan PIC2. PIC1 menerima IRQ0 hingga IRQ7, dan PIC2 menerima IRQ8 hingga IRQ15. PIC1 menggunakan port 0x20 untuk perintah dan 0x21 untuk data, dan PIC2 menggunakan port 0xA0 untuk perintah dan 0xA1 untuk data.

Kedua PIC diinisialisasi dengan kata delapan bit yang disebut kata perintah Inisialisasi (ICW).

Dalam mode terproteksi, kedua PIC harus terlebih dahulu mengeluarkan perintah inisialisasi ICW1 (0x11). Ini memberitahu PIC untuk menunggu tiga kata inisialisasi lagi tiba di port data.

Perintah berikut akan meneruskan PIC:

  • vektor indentasi (ICW2),
  • apa hubungan master/slave antara PIC (ICW3),
  • informasi tambahan tentang lingkungan hidup (ICW4).

Perintah inisialisasi kedua (ICW2) juga dikirim ke input setiap PIC. Ini menetapkan offset , yang merupakan nilai yang kita tambahkan nomor baris untuk mendapatkan nomor interupsi.

PIC memungkinkan pin mereka mengalir ke input satu sama lain. Hal ini dilakukan dengan menggunakan ICW3 dan setiap bit mewakili status kaskade untuk IRQ yang sesuai. Sekarang kita tidak akan menggunakan pengalihan berjenjang dan akan menyetelnya ke nol.

set ICW4 Opsi tambahan lingkungan. Kita hanya perlu mendefinisikan bit rendah sehingga PIC mengetahui bahwa kita sedang berjalan dalam mode 80x86.

Ta-dam! PIC sekarang diinisialisasi.

Setiap PIC memiliki register delapan bit internal yang disebut Interrupt Mask Register (IMR). Itu menyimpan bitmap Jalur IRQ yang menuju ke PIC. Jika bit diset, PIC mengabaikan permintaan tersebut. Artinya kita dapat mengaktifkan atau menonaktifkan jalur IRQ tertentu dengan mengatur nilai yang sesuai ke 0 atau 1.

Membaca dari port data mengembalikan nilai dalam register IMR, sedangkan menulis mengubah register. Dalam kode kami, setelah menginisialisasi PIC, kami mengatur semua bit menjadi satu, yang menonaktifkan semua jalur IRQ. Nanti kita akan mengaktifkan baris-baris yang sesuai dengan interupsi keyboard. Tapi pertama-tama, matikan saja!

Jika jalur IRQ berfungsi, PIC kami dapat menerima sinyal pada IRQ dan mengubahnya menjadi nomor interupsi, menambahkan offset. Kita perlu mengisi IDT sedemikian rupa sehingga nomor interupsi yang keluar dari keyboard sesuai dengan alamat fungsi handler yang akan kita tulis.

Nomor interupsi apa yang kita perlukan untuk mengikat pengendali keyboard di IDT?

Keyboardnya menggunakan IRQ1. Ini adalah jalur masukan 1 dan diproses oleh PIC1. Kami menginisialisasi PIC1 dengan offset 0x20 (lihat ICW2). Untuk mendapatkan nomor interupsi, Anda perlu menambahkan 1 dan 0x20, Anda mendapatkan 0x21. Artinya alamat pengendali keyboard akan diikat ke IDT untuk interupsi 0x21.

Tugasnya adalah mengisi IDT untuk interupsi 0x21. Kami akan memetakan interupsi ini ke fungsi keyboard_handler, yang akan kami tulis di file perakitan.

Setiap entri dalam IDT terdiri dari 64 bit. Dalam entri yang sesuai dengan interupsi, kami tidak menyimpan seluruh alamat fungsi pengendali. Sebagai gantinya, kami membaginya menjadi dua bagian 16-bit. Bit tingkat rendah disimpan dalam 16 bit pertama entri IDT, dan 16 bit tingkat tinggi disimpan dalam 16 bit terakhir entri. Semua ini dilakukan untuk kompatibilitas dengan 286 prosesor. Seperti yang Anda lihat, Intel menghasilkan angka seperti ini secara rutin dan di banyak tempat!

Di entri IDT, kita hanya perlu mendaftarkan tipenya, sehingga menunjukkan bahwa semua ini dilakukan untuk menangkap interupsi. Kita juga perlu mengatur offset segmen kode kernel. GRUB menetapkan GDT untuk kita. Setiap entri GDT panjangnya 8 byte, dengan deskriptor kode kernel adalah segmen kedua, sehingga offsetnya adalah 0x08 (detailnya berada di luar cakupan artikel ini). Gerbang interupsi direpresentasikan sebagai 0x8e. Sisanya 8 bit di tengah diisi dengan angka nol. Dengan cara ini kita akan mengisi entri IDT yang sesuai dengan interupsi keyboard.

Setelah kita selesai dengan pemetaan IDT, kita perlu memberi tahu prosesor di mana IDT berada. Ada instruksi perakitan yang disebut lidt untuk ini; dibutuhkan satu operan. Ini adalah penunjuk ke deskriptor struktur yang mendeskripsikan IDT.

Tidak ada kesulitan dengan deskriptornya. Ini berisi ukuran IDT dalam byte dan alamatnya. Saya menggunakan array untuk membuatnya lebih kompak. Dengan cara yang sama, Anda dapat mengisi deskriptor menggunakan struktur.

Dalam variabel idr_ptr kita memiliki pointer yang kita teruskan ke instruksi lidt di fungsi load_idt().

Load_idt: mov edx, tutup lagi

Selain itu, fungsi load_idt() mengembalikan interupsi saat menggunakan instruksi sti.

Dengan IDT terisi dan dimuat, kita dapat mengakses IRQ keyboard menggunakan masker interupsi yang kita bicarakan sebelumnya.

Batal kb_init(batal) ( write_port(0x21, 0xFD); )

0xFD adalah 11111101 - aktifkan hanya IRQ1 (keyboard).

Fungsi - pengendali interupsi keyboard

Jadi, kami telah berhasil mengikat interupsi keyboard ke fungsi keyboard_handler dengan membuat entri IDT untuk interupsi 0x21. Fungsi ini akan dipanggil setiap kali Anda menekan tombol.

Keyboard_handler: panggil keyboard_handler_main iretd

Fungsi ini memanggil fungsi lain yang ditulis dalam C dan mengembalikan kontrol menggunakan instruksi kelas iret. Kita bisa menulis keseluruhan handler kita di sini, tapi akan lebih mudah untuk membuat kode dalam C, jadi mari kita beralih ke sana. Instruksi iret/iretd harus digunakan sebagai pengganti ret ketika kontrol kembali dari fungsi penanganan interupsi ke program yang diinterupsi. Kelas instruksi ini memunculkan register flag, yang didorong ke tumpukan ketika interupsi dipanggil.

Void keyboard_handler_main(void) ( unsigned char status; char keycode; /* Tulis EOI */ write_port(0x20, 0x20); status = read_port(KEYBOARD_STATUS_PORT); /* Bit status yang lebih rendah akan disetel jika buffer tidak kosong */ if (status & 0x01) ( kode kunci = read_port(KEYBOARD_DATA_PORT); if(kode kunci< 0) return; vidptr = keyboard_map; vidptr = 0x07; } }

Disini pertama-tama kita memberikan sinyal EOI (End Of Interrupt) dengan menuliskannya ke port perintah PIC. Hanya dengan demikian PIC akan mengizinkan permintaan interupsi lebih lanjut. Kita perlu membaca dua port: port data 0x60 dan port perintah (alias port status) 0x64.

Pertama-tama, kita membaca port 0x64 untuk mendapatkan statusnya. Jika bit terbawah statusnya nol, maka buffer kosong dan tidak ada data untuk dibaca. Dalam kasus lain kita dapat membaca port data 0x60. Ini akan memberi kita kode dari tombol yang ditekan. Setiap kode berhubungan dengan satu tombol. Kami menggunakan array karakter sederhana yang ditentukan di keyboard_map.h untuk memetakan kode ke karakter yang sesuai. Simbol tersebut kemudian ditampilkan di layar menggunakan teknik yang sama yang kita gunakan pada kernel versi pertama.

Untuk menyederhanakan kodenya, saya hanya memproses huruf kecil dari a hingga z dan angka dari 0 hingga 9. Anda dapat dengan mudah menambahkan karakter khusus, Alt, Shift, dan Caps Lock. Anda dapat mengetahui bahwa suatu tombol telah ditekan atau dilepaskan dari output port perintah dan melakukan tindakan yang sesuai. Dengan cara yang sama, Anda dapat mengikat pintasan keyboard apa pun ke fungsi khusus seperti mematikan.

Sekarang Anda dapat membangun kernel dan menjalankannya di mesin nyata atau di emulator (QEMU) dengan cara yang sama seperti pada bagian pertama.



 


Membaca:



Apa itu SSD dan bagaimana cara menginstalnya?

Apa itu SSD dan bagaimana cara menginstalnya?

Performa dan masa pakai SSD terutama bergantung pada memori flash NAND dan firmware pengontrol. Mereka adalah komponen utama...

Cara memberi aksen pada huruf di Word

Cara memberi aksen pada huruf di Word

Saat bekerja di Word, suatu hari Anda harus menghadapi kebutuhan untuk menambahkan tanda aksen. Anda tentu saja dapat menyorot vokal yang diberi tekanan dalam huruf tebal...

Bagaimana cara mengkonversi gambar ke format PNG?

Bagaimana cara mengkonversi gambar ke format PNG?

Format gambar JPG memiliki rasio kompresi lebih tinggi daripada PNG, sehingga gambar dengan ekstensi ini memiliki bobot lebih sedikit. Untuk mengurangi...

Masalah teknis dan solusinya v

Masalah teknis dan solusinya v

Bagus sekali, saya harap ini membantu. Orang bodoh memang sudah ada sejak zaman OCO... Para sarjana pengetahuan yang baik berhubungan dekat dengan alam semesta....

gambar umpan RSS