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

Developing a Multithreaded Kernel From Scratch!

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: با یک پوسته تعاملی یک سیستم عامل و هسته چند وظیفه ای بسازید! چگونه از ابتدا یک هسته بسازیم چگونه یک هسته چند وظیفه ای ایجاد کنیم چگونه با برنامه های مخرب یا مشکل ساز در سیستم عامل خود مدیریت کنیم. خاتمه دادن به آنها در صورت بدرفتاری نحوه عملکرد حافظه در رایانه ها تفاوت بین سرزمین هسته، زمین کاربر و حلقه های حفاظتی که الگوهای طراحی کرنل مدرن را تشکیل می دهند که توسط خود هسته لینوکس استفاده می شود شما همه چیز را در مورد حافظه مجازی و نحوه نگاشت آدرس های مجازی به آدرس های فیزیکی خواهید آموخت. یاد می گیرید که چگونه کرنل را درک کند فرآیندها و وظایف شما یاد خواهید گرفت که چگونه فایل های ELF را بارگذاری کنید. نحوه اشکال زدایی کد ماشین جدا شده را خواهید آموخت. پیش نیازها: شما باید زبان برنامه نویسی C را بدانید عاقلانه است که دانش اولیه در زبان اسمبلی داشته باشید شما باید یک سیستم عامل لینوکس، رایگان برای نصب از اینترنت داشته باشید (ما در این دوره از اوبونتو استفاده می کنیم)

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

توسعه حالت واقعی

حالت واقعی یک حالت قدیمی در تمام پردازنده‌های اینتل است که باعث می‌شود پردازنده در حالت قدیمی شروع به کار کند، مانند پردازنده‌های قدیمی 8086 اینتل عمل می‌کند.

در بخش "توسعه حالت واقعی" دوره، با یادگیری در مورد فرآیند بوت و نحوه عملکرد حافظه شروع می کنیم، سپس به ایجاد بوت لودر خودمان می رویم که روی ماشین واقعی خود آزمایش می کنیم! این بوت لودر یک خروجی ساده "Hello World!" به صفحه پیام دهید و ما این بوت لودر را به زبان کاملا اسمبلی می نویسیم.

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

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

توسعه حالت محافظت شده

در این بخش یک هسته 32 بیتی چند وظیفه ای ایجاد می کنیم که دارای سیستم فایل FAT16 است. هسته ما از مکانیسم‌های حفاظتی و امنیتی داخلی اینتل استفاده می‌کند که به ما اجازه می‌دهد به پردازنده دستور دهیم هسته خود را محافظت کند و از آسیب دیدن برنامه‌های کاربر به آن جلوگیری کند.

این بخش بسیار عمیق است، همه چیز در مورد صفحه بندی و حافظه مجازی به شما آموزش داده می شود. ما از دستورالعمل‌های هوشمندانه در پردازنده‌های اینتل استفاده می‌کنیم تا به همه فرآیندها اجازه دهیم آدرس‌های حافظه یکسانی را به اشتراک بگذارند، این به عنوان مجازی‌سازی حافظه شناخته می‌شود. ما آدرس‌های حافظه را نقشه‌برداری می‌کنیم تا به آدرس‌های حافظه فیزیکی مختلف اشاره کنیم تا این توهم ایجاد کنیم که هر فرآیندی که در حال اجرا است در یک آدرس بارگذاری می‌شود. این یک تکنیک بسیار متداول در توسعه هسته است و همچنین نحوه عملکرد فایل‌های swap است (فایل‌هایی که برای جبران کمبود RAM قابل استفاده استفاده می‌شوند).

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

در مورد طراحی سیستم فایل FAT16 و نحوه تجزیه سیستم فایل FAT16 به خوشه ها و اینکه آنها می توانند به یکدیگر زنجیره ای بزنند به شما آموزش داده شده است. سپس درایور سیستم فایل FAT16 خودمان را پیاده سازی می کنیم که اجازه می دهد فایل ها متولد شوند!

ما عملکردها را برای وظایف و فرآیندها پیاده سازی می کنیم و درایورهای صفحه کلید خود را می نویسیم.

در این دوره همچنین می‌توانید نحوه عملکرد مدیریت حافظه را بیاموزید، ما توابع «malloc» و «free» را پیاده‌سازی می‌کنیم که پشته‌های خودمان را ایجاد می‌کنیم که برای پیگیری حافظه‌های مورد استفاده طراحی شده است. مدیریت حافظه در هر سیستم عامل و هسته ضروری است.

فراموش نکنیم که ما حتی یک بارکننده فایل ELF ایجاد می کنیم، همه برنامه های سیستم عامل خود را در فایل های ELF کامپایل می کنیم و اجازه بارگذاری برنامه های باینری یا برنامه های ELF را می دهیم. فایل‌های ELF حاوی اطلاعات زیادی هستند که برنامه ما را توصیف می‌کنند، مثلاً جایی که برنامه ما باید در حافظه بارگذاری شود و بخش‌های مختلف برنامه.

در پایان این دوره، شما یک هسته چندوظیفه ای 32 بیتی کاملاً کارآمد خواهید داشت که می تواند چندین فرآیند و وظایف را به طور همزمان اجرا کند. شما یک پوسته کار خواهید داشت که ما نیز می توانیم از آن استفاده کنیم.

جایزه زبان اسمبلی

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


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


سرفصل ها و درس ها

معرفی Introduction

  • معرفی Introduction

راه اندازی و توضیح مختصری درباره توسعه هسته Setup And A Brief Explanation Of Kernel Development

  • حافظه چیست؟ What Is Memory?

  • فرآیند بوت The Boot Process

  • نصب آنچه برای توسعه حالت واقعی نیاز داریم Installing What We Need For Real Mode Development

توسعه حالت واقعی Real Mode Development

  • سلام جهانی بوتلودر Hello World Bootloader

  • درک حالت واقعی Understanding Real Mode

  • مدل حافظه تقسیم بندی Segmentation Memory Model

  • بهبود بوت لودر ما Improving Our Bootloader

  • در حال آماده سازی بوت لودر ما برای بوت شدن روی سخت افزار واقعی Preparing our bootloader to be booted on real hardware

  • نوشتن بوت لودر ما روی یک USB Writing our bootloader to a USB stick

  • راه اندازی بوت لودر Booting the bootloader

  • جدول وکتور وقفه توضیح داده شد The Interrupt Vector Table Explained

  • پیاده سازی وقفه های خودمان در حالت واقعی Implementing our own interrupts in real mode

  • دسترسی به دیسک و نحوه کار آن Disk Access And How It Works

  • خواندن از روی هارد دیسک Reading from the hard disk

توسعه حالت محافظت شده Protected Mode Development

  • حالت محافظت شده چیست؟ What is Protected Mode?

  • جابجایی به حالت محافظت شده Switching To Protected Mode

  • بازسازی پروژه ما Restructuring Our Project

  • فعال کردن خط A20 Enabling the A20 line

  • ایجاد یک کامپایلر متقابل برای اینکه بتوانیم در C کدنویسی کنیم Creating a Cross Compiler So We Can Code In C

  • بارگیری هسته 32 بیتی خود در حافظه و کار با نمادهای اشکال زدایی Loading our 32 bit kernel into memory and working with debugging symbols

  • پاک کردن فایل های شی ما Cleaning our object files

  • رسیدگی به مسائل هم ترازی Dealing With Alignment Issues

  • کد C در حالت محافظت شده C Code In Protected Mode

  • حالت متن توضیح داده شد Text Mode Explained

  • Writing To The Screen, Hello World Tutorial Writing To The Screen, Hello World Tutorial

  • جدول توصیفگر وقفه توضیح داده شده است Interrupt Descriptor Table Explained

  • پیاده سازی جدول توصیفگر وقفه Implementing The Interrupt Descriptor Table

  • پیاده سازی توابع ورودی و خروجی Implementing In and Out Functions

  • کنترل کننده وقفه قابل برنامه ریزی توضیح داده شده است Programmable Interrupt Controller Explained

  • پیاده سازی کنترل کننده وقفه قابل برنامه ریزی Programmable Interrupt Controller Implementation

  • درک تخصیص هیپ و حافظه Understanding The Heap And Memory Allocation

  • پیاده سازی Heap ما Implementing Our Heap

  • ایجاد تابع enable interrupts Creating the enable interrupts function

  • درک صفحه بندی Understanding Paging

  • پیاده سازی صفحه بندی Implementing Paging

  • تغییر جدول صفحه Modifying the page table

  • آماده شدن برای خواندن از روی هارد دیسک Preparing To Read From The Hard Disk

  • خواندن از روی دیسک به زبان C با کنترلر ATA Reading from the disk in C with the ATA controller

  • بهبود درایور دیسک ما Improving Our Disk Driver

  • فایل سیستم چیست؟ What is a filesystem?

  • ایجاد یک تجزیه کننده مسیر Creating a path parser

  • ایجاد یک جریان دیسک Creating a disk stream

  • جدول تخصیص فایل توضیح داده شد File Allocation Table Explained

  • شروع به ایجاد سیستم فایل FAT ما Starting To Create our FAT File system

  • آشنایی با لایه VFS (سیستم فایل مجازی). Understanding the VFS(Virtual File System) Layer

  • پیاده سازی عملکرد اصلی سیستم فایل مجازی ما Implementing our virtual filesystem core functionality

  • پیاده سازی عملکرد اصلی درایور سیستم فایل FAT16 implementing FAT16 filesystem driver core functionality

  • پیاده سازی ساختارهای FAT16 Implementing FAT16 Structures

  • پیاده سازی تابع Resolver FAT16 Implementing The FAT16 Resolver Function

  • پیاده سازی عملکرد VFS fopen Implementing the VFS fopen function

  • پیاده سازی تابع FAT16 fopen Implementing FAT16 fopen function

  • پیاده سازی تابع fread VFS Implementing the VFS fread function

  • پیاده سازی عملکرد FAT16 fread Implementing FAT16 fread functionality

  • پیاده سازی قابلیت VFS fseek Implementing the VFS fseek functionality

  • پیاده سازی عملکرد FAT16 fseek Implementing the FAT16 fseek functionality

  • پیاده سازی قابلیت fstat VFS Implementing the fstat VFS functionality

  • پیاده سازی تابع FAT16 fstat Implementing the FAT16 fstat function

  • پیاده سازی عملکرد VFS fclose Implementing the VFS fclose functionality

  • پیاده سازی عملکرد FAT16 fclose Implementing the FAT16 fclose functionality

  • پیاده سازی یک کرنل پانیک Implementing a kernel panic

  • درک کاربری زمین Understanding User Land

  • در حال تغییر بخش هسته و توصیفگرهای داده به منظور نوشتن در C Changing our kernel segment and data descriptors to be written in C

  • پیاده سازی TSS (بخش سوئیچ وظیفه) Implementing The TSS(Task Switch Segment)

  • پیاده سازی Task Foundations Implementing Task Foundations

  • مبانی فرآیند پیاده سازی قسمت 1 Implementing Process Foundations Part 1

  • مبانی فرآیند پیاده سازی قسمت 2 Implementing Process Foundations Part 2

  • بسته بندی GDT Packing the GDT

  • پیاده سازی عملکرد زمین کاربری Implementing User Land Functionality

  • ایجاد اولین برنامه پردازش کاربر ما Creating our first user process application

  • اجرای فرآیند و رها شدن در امتیازات زمین کاربر Executing the process and dropping into user land privileges

  • تغییر عملکرد صفحه بندی Changing the paging functionality

  • صحبت کردن با هسته از userland Talking with the kernel from userland

  • ایجاد وقفه 0x80 برای ارتباط فرآیند کاربر با هسته Creating the interrupt 0x80 for user process to kernel communication

  • ایجاد قابلیت ایجاد و اجرای دستورات هسته Creating the ability to create and execute kernel commands

  • ایجاد اولین دستور هسته ما Creating our first kernel command

  • فراخوانی دستور هسته ما Calling our kernel command

  • کپی کردن رشته ها از فرآیند وظایف Copying strings from the tasks process

  • خواندن پشته کار Reading the task's stack

  • ایجاد دستور print در هسته Creating the print command in the kernel

  • درک دسترسی به صفحه کلید در حالت محافظت شده Understanding keyboard access in protected mode

  • ایجاد لایه صفحه کلید مجازی Creating the virtual keyboard layer

  • ساخت درایور صفحه کلید پورت PS2 قسمت 1 Creating the PS2 port keyboard driver part 1

  • بهبود طراحی جدول توصیفگر وقفه ما Improving our interrupt descriptor table design

  • ایجاد یک روش تمیزتر برای ایجاد کنترل کننده های وقفه در توصیفگر وقفه Creating a cleaner way to create interrupt handlers in the interrupt descriptor

  • تغییر روند فعلی Changing The Current Process

  • ساخت درایور صفحه کلید پورت PS2 قسمت 2 Creating the PS2 port keyboard driver part 2

  • گرفتن کلید از بافر صفحه کلید در زمین کاربر Getting a key from the keyboard buffer in user land

  • ایجاد یک دستور putchar که یک کاراکتر را در ترمینال می نویسد Creating a putchar command that writes one character to the terminal

  • پیاده سازی بک اسپیس در ترمینال Implementing backspace in the terminal

  • در حال تجدید نظر در خواننده جریان ما Revising our stream reader

  • فایل های Elf توضیح داده شد Elf Files Explained

  • پیاده سازی Elf Loader - قسمت 1 Implementing The Elf Loader - Part 1

  • پیاده سازی Elf Loader - قسمت 2 Implementing The Elf Loader - Part 2

  • پیاده سازی Elf Loader - قسمت 3 Implementing The Elf Loader - Part 3

  • پیاده سازی Elf Loader - قسمت 4 Implementing The Elf Loader - Part 4

  • پیاده سازی Elf Loader - قسمت 5 Implementing The Elf Loader - Part 5

  • پیاده سازی Elf Loader - قسمت 6 Implementing The Elf Loader - Part 6

  • نوشتن برنامه های کاربر به زبان C Writing User Programs In C

  • پیاده سازی چاپ سیستم در stdlib Implementing system print in stdlib

  • پیاده سازی سیستم get key در stdlib Implementing system get key in stdlib

  • پیاده سازی Malloc در ما stdlib Implementing Malloc In Our stdlib

  • پیاده سازی رایگان در stdlib ما Implementing Free In Our stdlib

  • تغییر نحوه نقشه برداری از صفحات مجازی برای فرآیند Changing the way we map virtual pages for the process

  • پیاده سازی تابع itoa Implementing itoa function

  • پیاده سازی تابع putchar Implementing the putchar function

  • پیاده سازی تابع printf Implementing the printf function

  • پیاده سازی توانایی خواندن خطوط Implementing the ability to read lines

  • ایجاد یک پوسته Creating a shell

  • بارگیری برنامه های دیگر از پوسته ما Loading other programs from our shell

  • ایجاد چند توابع مهم stdlib Creating some important stdlib functions

  • Memory Mapping malloc در stdlib Memory Mapping malloc in stdlib

  • برداشتن نقشه حافظه رایگان در stdlib Memory Unmapping free In stdlib

  • آرگومان های فرآیند - قسمت 1 Process arguments - Part 1

  • آرگومان های فرآیند - قسمت 2 Process Arguments - Part 2

  • آرگومان های فرآیند - قسمت 3 Process Arguments - Part 3

  • پیاده سازی یک فرمان "سیستم". Implementing A 'System' Command

  • اجرای خاتمه برنامه Implementing program termination

  • مدیریت خرابی برنامه Handling program crashes

  • ایجاد دستور خروج Creating an exit command

  • کنترل کلاهک قفل، حروف بزرگ و کوچک Handling caps lock, upper case and lower case letters

  • اجرای چند کار به طور همزمان چند کاره Running multiple tasks at the same time multi-tasking

اختیاری Optional

  • README README

  • در حال تغییر تابع fat16_new_fat_item_for_directory_item Changing our fat16_new_fat_item_for_directory_item function

  • تغییر تابع fat16_open ما Changing our fat16_open function

  • در حال تغییر تابع fat16_get_root_directory ما Changing our fat16_get_root_directory function

  • در حال تغییر تابع process_load_binary ما Changing our process_load_binary function

  • بهبود عملکرد fat16_to_proper_string ما Improvements to our fat16_to_proper_string function

  • در حال تغییر عملکرد restore_general_purpose_registers Changing our restore_general_purpose_registers function

جمع آوری زبان اسمبلی Assembly Language Catchup

  • مونتاژ کاچاپ! Assembly Catchup!

  • زبان اسمبلی چیست؟ What is assembly language?

  • نصب شبیه ساز Installing the emulator

  • سلام جهان در مجمع Hello World In Assembly

  • ترانزیستورها و گیت های منطقی درک پردازنده Transistors And Logic Gates Understanding The Processor

  • در 8086 ثبت می شود Registers in the 8086

  • مدل حافظه تقسیم بندی توضیح داده شد Segmentation Memory Model Explained

  • پشته، زیربرنامه ها و پایان توضیح داده شده است The Stack, Subroutines And Endiness Explained

نتیجه Conclusion

  • سخنرانی پاداش Bonus Lecture

نمایش نظرات

آموزش توسعه یک هسته چند رشته ای از ابتدا!
جزییات دوره
28 hours
138
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
8,946
4.5 از 5
ندارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Daniel McCarthy Daniel McCarthy

همیشه چیزهای بیشتری برای یادگیری وجود دارد