نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

سیستم عامل یونیکس مانند: نوشتن هسته به زبان C. پیکربندی دستی هسته لینوکس

نحوه نوشتن ایجاد کنید هسته معناییسایت به درستی


عصر بخیر، دوستان خواننده عزیز! امروز در این مقاله می‌خواهم موضوع تدوین درست هسته معنایی یک وب‌سایت و وبلاگ را مطرح کنم. پس از همه، یک هسته معنایی درست ترکیب شده یک تضمین است ارتقاء موفقمنبع در موتورهای جستجو. این یک واقعیت است که هسته معنایی بر ماهیت ارتقاء تأثیر می گذارد.

قبل از اینکه به موضوع تدوین هسته معنایی بپردازیم، می خواهم روشن کنم که هسته معنایی چیست؟

بنابراین، هسته معنایی سایت - این لیستی از کلمات کلیدی است که موضوع اصلی منبع را مشخص می کند. متخصصان سئو آن را طوری تنظیم می کنند که همان سایت در موتورهای جستجو ظاهر شود موقعیت های برتر نتایج جستجوبرای پرس و جوهای کلیدی مختلفی که گردآوری شده و در لیست هسته معنایی گنجانده شده است. و بنابراین، به این معنی است که ترکیب صحیح هسته معنایی کلید است ارتقای موثرسایت در موتورهای جستجو برای جستجوهای مختلف اما از نظر موضوعی مشابه است.

گردآوری هسته معنایی یک وب سایت و یک وبلاگ اساساً متفاوت است. به طور کلی، هسته معنایی فقط برای یک وبلاگ استفاده می شود زیرا احتمالاً نام دیگری برای آن هنوز اختراع نشده است.

بنابراین، بیایید به تفاوت های هسته یک وبلاگ و یک وب سایت نگاه کنیم و در مورد روش تدوین آنها تصمیم گیری کنیم. هسته معنایی یک وبلاگ فهرستی از کلمات کلیدی نیست که موضوع وبلاگ را مشخص می کند. این لیستی از کلمات کلیدی است که برای آنها تبلیغ برنامه ریزی شده است. آیا تفاوت را احساس می کنید؟ اگر نه، این را چند بار دیگر بخوانید تا متوجه شوید.

چگونه یک هسته معنایی ایجاد کنیم

اکنون به جزئیات بیشتری می پردازیم. در صورتی که هسته معنایی سایت کامپایل شده و در ساختار سایت گنجانده شود. هسته معنایی یک وبلاگ، گردآوری کلمات کلیدی در یک برنامه دفترچه یادداشت یا به طور کلی در دفترچه یادداشت است، که با استفاده از آن، وبلاگ نویس تصمیم گرفت به موقعیت های برتر موتورهای جستجو حرکت کند. یعنی می توان هسته یک وبلاگ را طرحی برای ارتقا در موتورهای جستجو توصیف کرد و نه بیشتر. ساده است، احتمالاً سئوکاران عمداً مغز خود را با تمام این اصطلاحات اشتباه می گیرند تا یک مبتدی در ساخت وب سایت و وبلاگ نویسی از همه اینها فرار کند. به هر حال…

و به این ترتیب هسته معنایی سایت تقریباً به صورت زیر تشکیل شده است! به عنوان مثال، شما باید یک وب سایت مخصوص فروش کفش در اینترنت را در بالای نتایج جستجو تبلیغ کنید. مناسب ترین ها برای این سایت محاسبه شده است. کلید واژه ها. به عنوان مثال، با استفاده از سرویس - Wordstat Yandex. و بنابراین ما درخواست را وارد سرویس می کنیم و چیزی شبیه به این دریافت می کنیم.

فروش کفش به احتمال زیاد در عنوان خود سایت قرار خواهد گرفت. و بقیه در هسته معنایی کامپایل شده سایت ثبت خواهد شد.

به عنوان مثال، اگر سایتی اقدام به فروش کفش بچه گانه می کند، کلمه «فروش کفش بچه گانه» باید در هسته آن درج شود و اگر سایت (فروشگاه اینترنتی) در فروش عمده کفش تخصص نداشته باشد، گنجاندن آن بی معنی است. کلمه کلیدی "فروش عمده کفش" در هسته . این یک تبلیغ بیهوده است پرس و جو جستجو. در حقیقت، تدوین یک هسته معنایی برای یک وب سایت یک کار بسیار پیچیده است که به دانش و مهارت زیادی نیاز دارد.

چگونه یک هسته معنایی یک وبلاگ ایجاد کنیم

یک چیز دیگر وبلاگ است! او نیازی به تشکیل هسته اینقدر قاطعانه ندارد. کافی است کلمات کلیدی که موضوع وبلاگ را مشخص می کند ایجاد کنید و برای آنها مقالات بهینه سازی شده بنویسید.

لازم نیست که یک وبلاگ صفحات اصلی را تبلیغ کند، زیرا وبلاگ نیز همین موارد را دارد دفتر خاطرات الکترونیکیشما می توانید هزاران صفحه ایجاد کنید و هر صفحه را تحت چندین صفحه تبلیغ کنید پرس و جوهای کلیدی. برای یادگیری نحوه درست نوشتن کلمات کلیدی، مقاله انتخاب کلمات کلیدی را مطالعه کنید. هنگامی که لیستی از کلمات کلیدی را تهیه کردید، شروع به نوشتن مقالات بهینه برای آنها کنید. همین انتخاب کلمات کلیدی و نوشتن مقالات بهینه شده، گردآوری یک هسته معنایی است.

و با این حال، یک افزونه برای وبلاگ های وردپرس وجود دارد همه در یک بسته سئوکه باید شامل لیستی از کلمات کلیدی مشخص کننده موضوع وبلاگ شما باشد. این افزونه برای ارتقاء موتور جستجووبلاگ شما پس حتما آن را نصب کرده و این افزونه را در پنل مدیریت پیکربندی کنید.

من در تصویر به شما نشان خواهم داد که کجا باید لیست کلمات کلیدی هسته وبلاگ را وارد کنید. در اینجا منوی اصلی افزونه است، در اینجا باید کلمات کلیدی را که قصد دارید در موتورهای جستجو تبلیغ کنید را وارد کنید.

بنابراین، برای نوشتن صحیح همه این بخش ها، باید الگوریتم خاصی را دنبال کنید.

در عنوان صفحه اصلی، نام وبلاگ خود را بنویسید و 1 تا 2 کلمه کلیدی که می خواهید برای آنها در بالاترین رتبه قرار بگیرید.

در توضیحات شما همچنین باید چندین جمله بسازید که در آنها 2-3 کلمه کلیدی را نیز مشخص می کنید که می خواهید به آنها برسید.

و همچنین در ستون "کلمات کلیدی" باید از 10 تا 15 کلمه کلیدی را انتخاب کنید که برای آنها نیز می خواهید به موقعیت های بالای نتایج جستجو برسید.

من می خواهم توجه داشته باشم که در این ستون شما تبلیغ صفحه اصلی را پیکربندی می کنید. اگر کلمات کلیدی مناسبی را انتخاب کنید، پس صفحه نخستبا استفاده از کلمات کلیدی مشخص شده در موتورهای جستجو تبلیغ می شود.

اما پس از نصب افزونه، فیلد مشابهی به پست ها اضافه می شود که در آن می توانید کلمات کلیدی مختلفی را برای هر صفحه جداگانه پیکربندی و وارد کنید.

فکر می کنم امروز به شما گفتم چگونه هسته معنایی وبلاگ و وب سایت خود را ایجاد کنید.

ایجاد یک هسته معنایی برای وبلاگ به معنای برنامه ریزی برای ارتقاء است کلمات خاص. نگران نباشید، کلمات کلیدی ایجاد کنید و مقالات مرتبط را در وبلاگ خود بنویسید. این مرحله اول است بهینه سازی داخلیوبلاگ شما

خوب من با شما خداحافظی نمی کنم دوستان عزیز! دوباره شما را در مقالات جدید می بینیم!

در ادامه بیشتر و بیشتر در مورد بهینه سازی داخلی خواهم نوشت، زیرا بسیار مهم است. 80 درصد تبلیغات موفق به بهینه سازی وبلاگ داخلی و 20 درصد به بهینه سازی وبلاگ بستگی دارد عوامل خارجی. عجله نکنید تا به بورس بدید و لینک وبلاگ خود را بخرید. بهتر است روی تنظیمات داخلی وبلاگ خود تمرکز کنید. برای اینکه مقالات مفیدی در مورد بهینه سازی داخلی را از دست ندهید، فراموش نکنید

گلچینی از بهترین ها حقایق جالب، تماشا کنید و استراحت کنید!

وقتی شروع به خواندن کتابچه راهنمای ارتقای وب سایت می کنید، همه چیز همیشه با ایجاد یک هسته معنایی شروع می شود. برای مبتدیان، این مرحله اول سخت ترین است. علاوه بر این که بلافاصله مشخص نیست که این هسته معنایی چیست، همچنین مشخص نیست که هدف آن چیست و چگونه می توان آن را به درستی ایجاد کرد.

در این مقاله در مورد نحوه درست ایجاد هسته معنایی یک وب سایت صحبت خواهیم کرد. همچنین در مورد چیستی و چرایی ساخت آن خواهید آموخت. در واقع، هیچ چیز پیچیده یا دشواری در مفهوم هسته معنایی وجود ندارد. بیایید آن را بفهمیم.

هیچ کس هنوز به این سؤال پاسخ نداده است که هسته معنایی با چنین چیزی چیست به زبان سادهاکنون چگونه این کار را انجام خواهیم داد بنابراین، هسته معنایی یک سایت فهرستی از عبارات کلیدی است که توسط آن ها تبلیغ می شود. همه! تمام معنای مفهوم در یک جمله کوتاه و واضح است. و نیازی به درهم ریختن چیزی با اصطلاحات هوشمندانه نیست.

اگر عمیق‌تر به این واژه نگاه کنیم، معناشناسی علمی است که به محتوای معنایی واحدهای واژگانی می‌پردازد. به عبارت ساده، معناشناسی مطالعه معنای چیزی است. که در معنایی سئوهسته معنای کل سایت، هر بخش از آن یا یک مقاله را روشن می کند. این برای موتور جستجو، بازدیدکننده و همه توسعه دهندگانی که با سایت کار خواهند کرد روشن می شود.

هسته معنایی، بدون اغراق، پایه و اساس همه تبلیغات است.

چگونه از هسته معنایی استفاده کنیم و چرا به آن نیاز داریم

کارکردهای هسته معنایی شامل جنبه های زیر در ارتقاء وب سایت است:

  • بیشترین وظیفه اصلیهسته معنایی درک ساختار سایت و محتوای آن است. با نگاه کردن به آن، می توانید تصور کنید که سایت دارای چه بخش هایی است و در هر بخش چه مقالاتی وجود دارد. و بنابراین، تمام کاستی ها و ناراحتی های سازه بلافاصله قابل مشاهده است و می توان آنها را در مراحل اولیه برطرف کرد.
  • معناشناسی بردار محتوا را تعریف می کند. به لطف درک بهتر ساختار سایت، می توانید مرتبط ترین و موثرترین عبارات کلیدی را انتخاب کنید.
  • هسته معنایی برنامه محتوایی سایت برای سالهای آینده است. هر بار که نیاز به نوشتن مقاله دارید، می توانید به آنجا نگاه کنید و ببینید چه محتوایی برنامه ریزی شده است و در کدام بخش از سایت باید باشد.
  • اگر برنامه ریزی شده باشد ارتقاء پرداخت شدهسایت، به عنوان مثال، از طریق تبلیغات متنی، سپس به لطف هسته معنایی می توانید هزینه تبلیغات را محاسبه کنید.

چگونه یک هسته معنایی بسازیم

ابتدا باید تصمیم بگیرید که عبارات کلیدی هسته را از کجا دریافت کنید. بهترین منبع برای مبتدیان سرویس Yandex WordPStat است که نشان می دهد چند بار در ماه یک پرس و جو خاص در جستجوی Yandex وارد شده است. WordStat انواع مختلفی دارد ویژگی های مفیدبرای مثال، می‌توانید درخواست‌ها را بر اساس منطقه یا دستگاه فیلتر کنید، درخواست‌های مشابه را مشاهده کنید و موارد دیگر. و مهمترین چیز این است که کاملا رایگان است. در این مورد بیشتر بخوانید.

می توانید از انواع مختلف استفاده کنید برنامه های پولی، اما WordStat به دلیل سادگی برای مبتدیان مناسب تر است. علاوه بر این، نه تنها برای Runet، جایی که Yandex غالب است، مناسب است. اگر سایتی را در CIS تبلیغ می کنید، می توانید با خیال راحت از آن استفاده کنید و آمار در گوگل تقریباً یکسان خواهد بود.

جوهر اصلی ایجاد یک هسته معنایی مجموعه ای از عبارات کلیدی است که به هر نحوی با موضوع سایت مطابقت دارد. آنها باید به نحوی رسمی و نظام مند شوند. برای این، جداول به بهترین وجه مناسب هستند، به عنوان مثال اکسل، جداول در Google Docیا مشابه

و برای بهره وری بیشتر، ستون های اضافی را می توان به جدول هسته معنایی اضافه کرد:

  • طبیعتاً باید ستونی با خود عبارت کلیدی وجود داشته باشد.
  • البته ستونی با نام قسمت سایت که از این عبارت استفاده خواهد شد.
  • می توانید ستونی با متا تگ های عنوان و توضیحات اضافه کنید و بلافاصله با استفاده از موارد مشخص شده، عنوان و توضیحاتی برای مقاله بنویسید. عبارت کلیدی. اولاً، فوراً مشخص خواهد شد که در مورد چه چیزی باید مقاله بنویسید، و ثانیاً، دیگر لازم نیست مغز خود را جمع کنید و به آن برسید.
  • برای درک بهتر طرح محتوا، می توانید ستونی برای نشان دادن تعداد کاراکترهای یک مقاله برای یک عبارت کلیدی ایجاد کنید.
  • وقتی صحبت از ارتقاء می شود تبلیغات متنی، برای هر درخواست باید هزینه تبلیغات را اضافه کنید.
  • هر چیزی که نیاز دارید را می توان با خیال راحت در جدول هسته معنایی نوشت. هیچ قالبی برای این کار وجود ندارد، بنابراین می توانید هر کاری را که می خواهید در آنجا و به راحتی انجام دهید.

اشتباهات رایج هنگام ایجاد یک هسته معنایی

اکنون می دانید که چگونه به درستی هسته معنایی یک وب سایت را ایجاد کنید. بیایید در نهایت به اشتباهات رایج بهینه سازان مبتدی نگاه کنیم.

  • اگر هسته برای تقسیم سایت به بخش ها فراهم می کند، پس اشتباه رایجایجاد سطوح عمیق تودرتو است. سطح دوم توصیه می شود و نه بیشتر. یعنی می‌توانید یک عنوان، یک زیرمجموعه بسازید و تمام؛ تقسیم بیشتر به عنوان‌های کوچک‌تر دیگر امکان‌پذیر نیست.
  • مبتدیان می توانند نادیده بگیرند پرس و جوهای فرکانس پایین، زیرا معتقدند استفاده از آنها نامناسب است، به هر حال ترافیک زیادی به همراه نخواهد داشت. اما در واقع برعکس است. سایت جدید به پرس و جوهایی با فرکانس پایین و غیر رقابتی نیاز دارد.
  • شما نمی توانید کاملاً به سرویسی که عبارات کلیدی با آن به دست می آید اعتماد کنید. و این دقیقا همان کاری است که تازه واردان انجام می دهند. ماشین ها می توانند اشتباه کنند و چیز اشتباهی را برای شما انتخاب کنند.
  • نیازی به ایجاد مقاله به خاطر عبارت کلیدی نیست. اگر عبارات «فوری خانه بفروش» و «سریع خانه بفروش» را پیدا کردید، دیگر فایده ای ندارد که دو مقاله جداگانه برای آنها تهیه کنید.

یونیکس مانند سیستم عاملبرای تجزیه و همچنین برای نوشتن کرنل خود که پیامی را نمایش می دهد جالب است. خب بنویسیم؟

سیستم عامل یونیکس مانند و بوت کردن دستگاه x86

سیستم عامل یونیکس مانند چیست؟ این یک سیستم عامل الهام گرفته از یونیکس است. اما قبل از اینکه شروع به نوشتن کرنل برای آن کنیم، بیایید ببینیم که چگونه ماشین بوت می شود و کنترل را به هسته منتقل می کند.

اکثر رجیسترهای پردازنده x86 پس از روشن شدن، مقادیر مشخصی دارند. ثبت اشاره گر دستورالعمل (EIP) حاوی آدرس حافظه دستوری است که توسط پردازنده اجرا شده است. EIP به مقدار 0xFFFFFFF0 کدگذاری شده است. بنابراین، پردازنده دستورالعمل های واضحی در آدرس فیزیکی 0xFFFFFFFF0 دارد که اساساً 16 بایت آخر فضای آدرس 32 بیتی است. این آدرس بردار بازنشانی نامیده می شود.

نقشه حافظه چیپست اکنون تضمین می کند که 0xFFFFFFFF0 به نگاشت شده است بخش معینبایوس نه رم در همین حال، BIOS برای اطلاعات بیشتر خود را در RAM کپی می کند دسترسی سریع. به این می گویند سایه زدن. آدرس 0xFFFFFFFF0 فقط حاوی یک دستورالعمل پرش به آدرسی در حافظه است که BIOS خودش را کپی کرده است.

بنابراین، کد BIOS اجرای خود را آغاز می کند. ابتدا بایوس جستجو می کند دستگاه بوتبا توجه به ترتیب دستگاه بوت پیکربندی شده. برای تعیین اینکه آیا دستگاه قابل بوت است یا نه به دنبال یک عدد جادویی خاص می گردد (بایت های 511 و 512 بخش اول 0xAA55 هستند).

هنگامی که BIOS دستگاه بوت را شناسایی کرد، محتویات بخش اول دستگاه را کپی می کند. رم، از آدرس فیزیکی 0x7c00 شروع می شود. سپس به آدرس می رود و کدی را که به تازگی بارگذاری شده است اجرا می کند. این کد بوت لودر سیستم نامیده می شود.

سپس بوت لودر هسته را در آدرس فیزیکی 0x100000 بارگذاری می کند. آدرس 0x100000 به عنوان آدرس شروع برای تمام هسته های بزرگ در ماشین های x86 استفاده می شود.

تمام پردازنده های x86 در یک حالت ساده 16 بیتی به نام شروع می شوند آدرس های واقعی. بوت لودر GRUBبا تنظیم کمترین بیت ثبت کننده CR0 روی 1، به حالت محافظت شده 32 بیتی تغییر می کند.

لطفا توجه داشته باشید که اگر پیدا شد هسته های لینوکس GRUB پروتکل بوت را دریافت می کند و هسته لینوکس را در آن بارگذاری می کند حالت واقعی. و هسته لینوکس به حالت محافظت شده تغییر خواهد کرد.

چه چیزی نیاز داریم؟

  • کامپیوتر x86 (البته)
  • مونتاژ کننده NASM
  • ld (پیوند گنو)
  • منبع

خوب، خوب است که ایده ای از نحوه عملکرد یک سیستم عامل یونیکس مانند داشته باشیم. کد منبع را می توان در مخزن Github یافت.

نقطه ورود و راه اندازی هسته

ابتدا اجازه دهید یک فایل کوچک در اسمبلر x86 بنویسیم که نقطه شروع راه اندازی کرنل خواهد بود. این فایل تماس خواهد گرفت عملکرد خارجیدر C و سپس جریان برنامه را متوقف کنید.

چگونه می توانید اطمینان حاصل کنید که این کد به عنوان نقطه شروع برای هسته عمل می کند؟

ما از یک اسکریپت پیوند دهنده استفاده خواهیم کرد که فایل های شی را برای ایجاد نهایی پیوند می دهد فایل اجراییهسته ها در این اسکریپت ما به صراحت به آن اشاره خواهیم کرد فایل باینریباید در آدرس 0x100000 بارگیری شود. این آدرس جایی است که هسته باید باشد.

این هم کد اسمبلی:

;;bits kernel.asm 32 ;nasm directive - 32 bit section .text global start extern kmain ;kmain در شروع فایل C تعریف شده است: cli ;وقفه مسدود کردن mov esp, stack_space ;تنظیم نشانگر پشته تماس kmain hlt ;توقف پردازنده بخش .bss resb 8192 ؛ 8 کیلوبایت در هر پشته stack_space:

دستورالعمل 32 بیت اول یک دستورالعمل اسمبلی x86 نیست. این دستورالعملی برای اسمبلر NASM است که مشخص می کند باید کد تولید کند تا روی پردازنده ای که در حالت 32 بیتی کار می کند اجرا شود. این لزوماً در مثال ما الزامی نیست، با این حال تمرین خوب- چنین مواردی را به صراحت نشان دهید.

خط دوم با بخش متن شروع می شود. این جایی است که ما تمام کدهای خود را قرار می دهیم.

جهانی - یکی دیگر از دستورالعمل های NASM، که برای تنظیم نمادها استفاده می شود کد منبعبه عنوان جهانی

kmain یک تابع بومی است که در فایل kernel.c ما تعریف می شود. extern اعلام می کند که تابع در جای دیگری تعریف شده است.

تابع start تابع kmain را فراخوانی می کند و CPU را با استفاده از دستور hlt متوقف می کند. وقفه ها می توانند CPU را از اجرای دستور 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؛ //حافظه ویدیویی از اینجا شروع می شود بدون علامت int i = 0؛ بدون علامت int j = 0؛ /* این حلقه صفحه را پاک می کند */ در حالی که(j< 80 * 25 * 2) { /* пустой символ */ vidptr[j] = " "; /* байт атрибутов */ vidptr = 0x07; j = j + 2; } j = 0; /* в этом цикле строка записывается в видео память */ while(str[j] != "\0") { /* ascii отображение */ vidptr[i] = str[j]; vidptr = 0x07; ++j; i = i + 2; } return; }

*kernel.c

باطل kmain (باطل)

const char * str = "اولین هسته من" ;

بدون علامت int i = 0 ;

int بدون علامت j = 0 ;

/* این حلقه صفحه را پاک می کند */

در حالی که (j< 80 * 25 * 2 ) {

/* کاراکتر خالی */

vidptr[j] = " ";

/* بایت ویژگی */

vidptr[j+1] = 0x07;

j = j + 2 ;

j = 0 ;

/* در این حلقه رشته در حافظه ویدئویی نوشته می شود */

while (str [ j ] != "\0" ) (

/* نمایش ascii */

vidptr[i] = str[j];

vidptr[i+1] = 0x07;

i = i + 2 ;

برگشت ؛

هسته ما صفحه را پاک می کند و خط "اولین هسته من" را روی آن نمایش می دهد.

برای شروع، یک اشاره گر vidptr ایجاد می کنیم که به آدرس 0xb8000 اشاره می کند. این آدرس شروع حافظه ویدیویی در حالت محافظت شده است. حافظه متن صفحه فقط یک تکه حافظه در فضای آدرس ما است. ورودی/خروجی صفحه روی کارت حافظه از 0xb8000 شروع می شود و از 25 خط 80 پشتیبانی می کند. شخصیت های asciiهر یک.

هر عنصر کاراکتر در این حافظه متنی با 16 بیت (2 بایت) به جای 8 بیت (1 بایت) که ما به آن عادت کرده ایم نشان داده می شود. بایت اول باید مانند ASCII یک نمایش کاراکتر داشته باشد. بایت دوم بایت ویژگی است. قالب بندی یک کاراکتر، از جمله ویژگی های مختلف مانند رنگ را توصیف می کند.

برای چاپ یک کاراکتر با سبزدر پس‌زمینه سیاه، کاراکتر 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 - سفید.

0 - مشکی، 1 - آبی، 2 - سبز، 3 - فیروزه‌ای، 4 - قرمز، 5 - سرخابی، 6 - قهوه‌ای، 7 - خاکستری روشن، 8 - خاکستری تیره، 9 - آبی روشن، 10/a - سبز روشن، 11/b - فیروزه ای روشن، 12/c - قرمز روشن، 13/d - سرخابی روشن، 14/e - قهوه ای روشن، 15/f -سفید.

در هسته خود از کاراکترهای خاکستری روشن در پس زمینه سیاه استفاده خواهیم کرد. بنابراین بایت ویژگی ما باید مقدار 0x07 را داشته باشد.

در ابتدا حلقه whileبرنامه یک کاراکتر خالی با ویژگی 0x07 در تمام 80 ستون 25 ردیفی می نویسد. با این کار صفحه نمایش پاک می شود.

در حلقه while دوم، کاراکترهای خط "نخستین کرنل من" در یک قطعه حافظه ویدئویی نوشته می شود. برای هر کاراکتر، بایت ویژگی حاوی مقدار 0x07 است.

به این ترتیب رشته روی صفحه نمایش داده می شود.

بخش اتصال

ما kernel.asm و NASM را در یک فایل شی کامپایل می کنیم و سپس از GCC برای کامپایل kernel.c در فایل شی دیگری استفاده می کنیم. اکنون وظیفه ما این است که این اشیاء را با هسته بوت اجرایی مرتبط کنیم.

برای انجام این کار، ما از یک اسکریپت پیوند دهنده صریح استفاده می کنیم که می تواند به عنوان یک آرگومان به ld (پیوند دهنده ما) ارسال شود.

/* * link.ld */ OUTPUT_FORMAT(elf32-i386) ENTRY(شروع) SECTIONS (. = 0x100000؛ .text: ( *(.text) ) .data: ( *(.data)) .bss: ( *( .bss) ))

*link.ld

OUTPUT_FORMAT (elf32 - i386)

ورود (شروع)

بخش ها

0x100000 ;

متن: (*(.text))

داده ها: (*(.data))

Bss: (*(. bss))

ابتدا فرمت اجرایی خروجی را به صورت 32 بیتی (ELF) تنظیم می کنیم. ELF فرمت استانداردفایل باینری برای سیستم های یونیکس ماننددر معماری x86

ENTRY یک آرگومان می گیرد. نام نماد را مشخص می کند که باید نقطه ورود فایل اجرایی ما باشد.

SECTIONS مهمترین قسمتی است که در آن چیدمان فایل اجرایی را تعریف می کنیم. این مشخص می کند که چگونه بخش های مختلف باید ترکیب شوند و در کجا قرار می گیرند.

که در آکولادبه دنبال عبارت SECTIONS، نماد نقطه (.) نشان دهنده مکان شمارنده است.

شمارنده مکان همیشه در ابتدای بلوک SECTIONS به 0x0 مقداردهی اولیه می شود. می توان آن را با اختصاص یک مقدار جدید به آن تغییر داد.

همانطور که قبلا ذکر شد، کد هسته باید از آدرس 0x100000 شروع شود. بنابراین شمارنده مکان را روی 0x100000 قرار می دهیم.

نگاه کنید خط بعدی .text: (*(.text))

ستاره (*) یک کاراکتر خاص است که با هر نام فایل مطابقت دارد. یعنی عبارت *(.text) به معنای تمام بخش های input.text از همه فایل های ورودی است.

بنابراین، پیوند دهنده تمام بخش های متنی فایل های شی را در بخش متنی فایل اجرایی در آدرس ذخیره شده در شمارنده مکان ترکیب می کند. بخش کد فایل اجرایی از 0x100000 شروع می شود.

پس از اینکه پیوند دهنده بخش خروجی متن را قرار داد، شمارنده مکان روی 0x1000000 + اندازه بخش خروجی متن تنظیم می شود.

به همین ترتیب، بخش های داده و bss با هم ترکیب شده و روی مقادیر شمارنده موقعیت قرار می گیرند.

Grub و Multiboot

اکنون تمامی فایل های مورد نیاز برای ساخت کرنل آماده هستند. اما از آنجایی که قصد داریم کرنل را بوت کنیم با استفاده از GRUB، ما به یک چیز دیگر نیاز داریم.

استانداردی برای بوت کردن کرنل های مختلف x86 با استفاده از یک بوت لودر به نام مشخصات Multiboot وجود دارد.

GRUB تنها زمانی هسته را بوت می کند که دارای مشخصات Multiboot باشد.

بر اساس آن، هسته باید دارای یک هدر در 8 کیلوبایت اول خود باشد.

علاوه بر این، این هدر باید شامل 3 فیلد اضافی باشد:

  • فیلد عدد جادویی: حاوی عدد جادویی 0x1BADB002 برای شناسایی هدر است.
  • فیلد flags: اکنون به آن نیاز نداریم، فقط مقدار آن را صفر کنید.
  • فیلد checksum: وقتی داده می شود، باید صفر را برای مجموع دو فیلد اول برگرداند.

بنابراین، kernel.asm به شکل زیر خواهد بود:

;;kernel.asm ;دستورالعمل nasm - 32 بیت بیت 32 بخش .متن ;تراز مشخصات چند بوت 4 dd 0x1BADB002 ; اعداد جادویی dd 0x00 ;پرچم dd - (0x1BADB002 + 0x00) ; چک جمع. mch+f+ks باید برابر با صفر شروع جهانی kmain خارجی باشد ؛kmain در شروع فایل خارجی تعریف شده است: cli ;وقفه مسدود کردن mov esp, stack_space ; stack pointer call kmain hlt ;processor stop section .bss resb 8192 ;8KB on stack stack_space:

; ; هسته asm

; دستورالعمل nasm - 32 بیت

بیت 32

بخش. متن

; مشخصات مولتی بوت

تراز کردن 4

dd 0x1BADB002 ; اعداد جادویی

dd 0x00 ; پرچم ها

dd - (0x1BADB002 + 0x00) ; چک جمع mch+ f+ x باید برابر با صفر باشد

شروع جهانی

خارجی kmain ; kmain در یک فایل خارجی تعریف شده است

شروع:

cli ; مسدود کردن وقفه

mov esp، stack_space; نشانگر پشته

با kmain تماس بگیرید

hlt ; متوقف کردن پردازنده

بهترین مقالات در این زمینه