کتاب Linux Kernel Programming یکی از جدیدترین کتابهای برنامهنویسی در سطح هستهی لینوکس است که به تازگی منتشر شده است. این کتاب در 13 فصل مختلف، برنامهنویسی هسته لینوکس نسخه 5 را به شما آموزش میدهد. بدیهی است برای مطالعهی این کتاب نیاز به آشنایی کلی با لینوکس و دستورات آن نیز دارید. کتاب Linux Kernel Programming علاوه بر آموزش برنامهنویسی هسته لینوکس به شما اصطلاحات و فرآیندهایی که در هسته لینوکس اتفاق میافتد را نیز توضیح میدهد. مطالعهی این کتاب برای برنامهنویسان مبتدی تا پیشرفته در محیط لینوکس پیشنهاد میشود.
مروری بر کتاب Linux Kernel Programming:
فصل 1، Kernel Workspace Setup
فصل اول از کتاب Linux Kernel Programming، شما را در زمینه تنظیم یک فضای کاری کامل توسعه هسته لینوکس راهنمایی میکند (معمولاً در یک سیستم مهمان کاملاً مجازی). شما میآموزید که چگونه همه بستههای نرمافزاری مورد نیاز را از جمله جعبه ابزار GNU Toolchain را روی سیستم مجازی نصب کنید. همچنین میتوانید در مورد چندین پروژه منبع باز دیگر که در طول این کتاب شما برای تبدیل شدن به یک توسعهدهنده حرفهای هسته / درایور مفید هستند، اطلاعات کسب کنید.
پس از اتمام این فصل، شما آماده ساختن هسته لینوکس و همچنین شروع به نوشتن و آزمایش کد هسته (از طریق چارچوب ماژول هسته قابل بارگذاری) خواهید بود. از نظر ما، برای شما بسیار مهم است که در واقع از این کتاب به صورت عملی، بررسی و آزمایش کد استفاده کنید. بهترین راه برای یادگیری چیزی این است که کاری را به صورت تجربی انجام دهید – به حرفهای دیگران گوش ندهید، خودتان تلاش کنید و به تجربهی خود بیفزایید.
فصل 2، ساخت هسته 5.x لینوکس از منبع – قسمت 1
فصل دوم از کتاب Linux Kernel Programming، اولین قسمت از توضیح نحوه ساخت هسته مدرن لینوکس از ابتدا با کد منبع است. در این قسمت، اطلاعات لازم در زمینهی – نامگذاری نسخه، تفاوت درختان منبع، طرح منبع هسته – روی درخت منبع هسته به شما داده میشود.
در مرحله بعدی، با جزئیات نشان داده میشود که چگونه دقیقاً یک درخت منبع هسته لینوکس خالص را روی VM بارگیری کنید. سپس باید کمی در مورد نحوه چیدمان کد منبع هسته، و در واقع “نمای 10،000 فوت” از پایه کد هسته، یاد بگیریم. سپس کار واقعی استخراج و پیکربندی هسته لینوکس دنبال میشود. ایجاد و استفاده از ورودی منوی سفارشی برای پیکربندی هسته نیز نشان داده شده است.
فصل 3، ساخت هسته لینوکس 5.x از منبع – قسمت 2
فصل سوم از کتاب Linux Kernel Programming، قسمت دوم در مورد ساخت هسته از کد منبع است. این بخش، ادامهی بخش اول در فصل 2 خواهد بود، در حال حاضر در حال ساخت هسته، نصب ماژولهای هسته، درک دقیق initramfs (initrd) و نحوه تولید آن و همچنین تنظیم بوت لودر (برای x86) هستید.
همچنین، به عنوان یک افزودنی با ارزش، این فصل سپس نحوه کامپایل هسته برای یک هدف معمولی تعبیه شده ARM (استفاده از Raspberry Pi محبوب به عنوان یک دستگاه هدف) را توضیح میدهد. چندین نکته و ترفند در مورد ساخت هسته و حتی امنیت هسته (hardening) نیز ذکر شده است.
بیشتر بخوانید: Raspberry Pi چیست؟
فصل 4، نوشتن ماژول هسته اول – LKMs قسمت 1
فصل چهارم از کتاب Linux Kernel Programming، اولین بخش از دو قسمتی است که جنبه اساسی توسعه هسته لینوکس را پوشش میدهد – چارچوب LKM، و چگونگی درک و استفاده توسط “کاربر ماژول” توسط شما – ماژول هسته یا برنامهنویس درایور دستگاه.
این فصل شامل اصول معماری هسته لینوکس و سپس، با جزئیات کامل، هر مرحله شامل نوشتن یک ماژول هسته ساده “سلام ، جهان”، تدوین، درج، بررسی و حذف آن از فضای هسته است. ما همچنین ورود به سیستم هسته را از طریق قابلیت رابط کاربری برنامه (API) چاپ در همه جا (Ubiquitous Printk) با جزئیات پوشش میدهیم.
بیشتر بخوانید: Ubiquitous Printk چیست؟
فصل 5، نوشتن ماژول هسته اول – LKMs قسمت 2
فصل 5 از کتاب Linux Kernel Programming، دومین بخشی است که چارچوب LKM را پوشش میدهد. در اینجا، ما با یک چیز مهم شروع میکنیم – یادگیری نحوه استفاده از “بهتر” Makefile، که به شما کمک میکند کد قویتری تولید کنید (داشتن چندین بررسی کد، تصحیح، اهداف تجزیه و تحلیل ایستا و غیره).
سپس مراحل تعریف کامپایل موفقیتآمیز یک ماژول هسته برای یک معماری جایگزین، نحوه تقلید از کد “مانند کتابخانه” در هسته (از طریق رویکردهای “پیوند دهنده” و “پشتهسازی ماژول”) را به تفصیل نشان میدهیم، عبور پارامترها به ماژول هستهی شما. مباحث اضافی شامل بارگیری خودکار ماژولها هنگام راهاندازی، دستورالعملهای مهم امنیتی و برخی اطلاعات در مورد اسناد هسته و نحوه دسترسی به آن است. چندین ماژول هسته به عنوان مثال یادگیری را جالبتر میکند.
بیشتر بخوانید: چارچوب LKM چیست؟
فصل 6، ملزومات داخلی هسته – فرآیندها و رشتهها
فصل ششم از کتاب Linux Kernel Programming، به برخی از مباحث اساسی داخلی هسته میپردازد. ما با آنچه به معنای اجرا در متن فرآیند و قطع وقایع و پوشش حداقل اما مورد نیاز طرح فضای مجازی آدرس کاربر (VAS) است، شروع میکنیم. این زمینه را برای شما فراهم میکند.
سپس با تمرکز بر سازماندهی ساختارهای فرآیند / موضوع و پشتههای مربوطه – حالت کاربر و هسته – با عمق بیشتری در مورد معماری هسته لینوکس آشنا خواهید شد. سپس ما در مورد ساختار وظیفه هسته (ساختار داده “ریشهای”)، نحوه دستیابی عملی اطلاعات از آن و حتی تکرار در لیستهای مختلف (کار) به شما بیشتر نشان میدهیم. چندین ماژول هسته باعث روشن شدن موضوع میشود.
فصل 7، بخش داخلی مدیریت حافظه – ملزومات
فصل 7 از کتاب Linux Kernel Programming، یک فصل کلیدی است که به بررسی جزئیات داخلی زیر سیستم مدیریت حافظه Linux برای نشان داده میزان جزئیات مورد نیاز برای نویسنده ماژول معمولی یا توسعهدهنده درایور میپردازد، بنابراین این پوشش لزوماً ماهیت نظری بیشتری دارد؛ با این وجود، دانش به دست آمده در اینجا برای شما، توسعهدهنده هسته، بسیار مهم است، هم برای درک عمیق و استفاده از API های حافظه هسته مناسب و هم برای انجام اشکالزدایی با درک و فهم در سطح هسته.
ما تقسیم VM (و نحوه کار آن در معماریهای مختلف واقعی) را تحت پوشش قرار میدهیم، از بینش کاربر VAS (با ابزار procmap که عنوان چشم باز ما خواهد بود) و همچنین بخش هسته (یا VAS هسته) اطلاعات عمیقی کسب میکنیم. سپس به طور خلاصه در مورد تکنیک امنیتی تصادفیبندی طرح حافظه (ASLR [K]) میپردازیم و این فصل را با بحث در مورد سازماندهی حافظه فیزیکی در لینوکس پایان میدهیم.
بیشتر بخوانید: ابزار procmap چیست؟
فصل 8، تخصیص حافظه هسته برای نویسندگان ماژول قسمت 1
فصل 8 از کتاب Linux Kernel Programming، با استفاده از API های تخصیص حافظه هسته (و همینطور، تخصیص مکان)، ما را درگیر میکند. ابتدا با دو “لایه” تخصیص در لینوکس آشنا خواهید شد – تخصیصدهنده Slab، لایهای بالاتر از “موتور” تخصیص حافظه هسته و تخصیصدهنده صفحه (یا BSA). ما به طور خلاصه در مورد موارد زیربناهای الگوریتم تخصیصدهنده صفحه و ساختار داده “Freelist” اطلاعات کسب خواهیم کرد. این اطلاعات هنگام تصمیمگیری برای استفاده از لایه با ارزش است.
بعد از آن، ما مستقیماً به کار عملی یادگیری در مورد استفاده از این APIهای اصلی میپردازیم. ایدههای پشت تخصیصدهنده Slab (یا حافظه پنهان) و APIهای تخصیصدهنده هسته اصلی – kzalloc / kfree – پوشش داده شدهاند. نکته مهم، محدودیتهای اندازه، نکات منفی و هشدارها هنگام استفاده از این APIهای معمولی نیز با جزئیات پوشش داده میشوند. همچنین، خصوصاً برای نویسندگان درایور، مفید است که API های اختصاصی حافظه را با مدیریت منابع هسته (روالهای devm _ * ()) پوشش میدهیم.
فصل 9، تخصیص حافظه هسته برای نویسندگان ماژول، قسمت 2
فصل 9 از کتاب Linux Kernel Programming، با روشی منطقی، از فصل قبل فراتر میرود. در اینجا، شما نحوه ایجاد حافظه پنهان Slab سفارشی (مفید برای تخصیصهای با فرکانس بالا (de) برای مثال برای یک درایور سفارشی)، همراه با برخی از راهنماییها در مورد اشکالزدایی تخصیص حافظه در لایه Slab، را یاد خواهید گرفت.
در مرحله بعد، شما API (و دوستان) vmalloc را درک کرده و از آن استفاده خواهید کرد. ذکر این نکته بسیار مهم است که، با پوشاندن بسیاری از APIها برای تخصیص حافظه هسته، اکنون میآموزید که چگونه با توجه به وضعیت دنیای واقعی که در آن قرار دارید، یک API مناسب انتخاب و انتخاب کنید. این فصل با پوشش مهم هسته خارج شده است چارچوب “قاتل” از حافظه (OOM). درک آن همچنین از طریق تکنیک صفحهبندی تقاضا به درک عمیقتری از نحوه واقعاً تخصیص حافظه فضای کاربر منجر خواهد شد.
فصل 10، برنامهریز CPU – قسمت 1
فصل دهم از کتاب Linux Kernel Programming، قسمت اول از دو فصل ترکیبی است که شامل مطالب مفید از تئوری و عمل در مورد زمانبندی CPU در سیستم عامل Linux است که پوشش داده شده است. حداقل تئوری لازم در مورد موضوع به عنوان KSE و خط مشیهای برنامهریزی هسته برای موضوعاتی است که در ابتدا پوشش داده شده است.
در مرحله بعدی، جزئیات داخلی هسته کافی در مورد زمانبندی پردازنده مورد استفاده قرار میگیرد تا بتوانید نحوه برنامهریزی در سیستم عامل لینوکس مدرن را درک کنید. در طول این فصل، شما میآموزید که چگونه “تجسم” برنامهریزی PU با ابزارهای قدرتمند مانند perf صورت گرفته است. ویژگیهای برنامهریزی رشته (سیاست و اولویت زمان واقعی) نیز مورد بررسی قرار گرفته است.
فصل 11، برنامهریز پردازنده – قسمت 2
فصل 11 از کتاب Linux Kernel Programming، قسمت دوم در مورد زمانبندی پردازنده است این موضوع را به صورت عمیقتری پوشش میدهد. در اینجا، ما ابزارهای تجسم (visualize) بیشتری را برای برنامهریزی CPU (استفاده از نرمافزار قدرتمند مانند LTTng و ابزار trace-cmd) مورد استفاده قرار میدهیم.
بعد از آن، پوشش وابستگی پردازنده یا CPU affinity mask و نحوه پرس و جو / تنظیم آن، کنترل سیاست برنامهریزی و اولویت بر اساس هر موضوع – یک ویژگی قدرتمند! – در آنها عمیق شده و مروری بر معنی و اهمیت گروههای کنترل (cgroups)، همراه با یک مثال جالب در مورد تخصیص پهنای باند CPU از طریق cgroups v2 پوشش داده خواهد شد. آیا میتوانید لینوکس را به عنوان RTOS اجرا کنید؟ قظعاً چنین است! سپس جزئیات انجام این کار نشان داده میشود. ما این فصل از کتاب Linux Kernel Programming، را با بحث در مورد (زمانبندی) تأخیرها و نحوه اندازهگیری آنها جمعبندی میکنیم.
بیشتر بخوانید: RTOS چیست؟
فصل 12، هماهنگسازی هسته – قسمت 1
فصل 12 از کتاب Linux Kernel Programming، ابتدا مفاهیم کلیدی مربوط به بخشهای مهم مثل اتمی بودن، که شاید از نظر مفهومی برای شما دشوار باشد، اطلاعاتی را به دست خواهید آورد و از همه مهمتر، دلیل همه درک این مفاهیم پوشش داده خواهد شد. سپس هنگام کار در هسته لینوکس، نگرانیهای مربوط به همزمانی را پوشش میدهیم.
این موضوع ما را به طور طبیعی به سمت رهنمودهای مهم قفلگذاری، معنای بنبست، و رویکردهای اصلی جلوگیری از بنبست سوق میدهد. سپس دو مورد از محبوبترین فنآوریهای قفل هسته – قفل mutex و spinlock – به همراه چندین مثال کد (درایور) به صورت عمیق مورد بحث قرار میگیرند.
بیشتر بخوانید: قفل mutex و spinlock چیست؟ و چه تفاوتی با هم دارند؟
فصل 13، همگامسازی هسته – قسمت 2
فصل 13 از کتاب Linux Kernel Programming، مطالب بیشتری در مورد هماهنگی هسته را توضیح خواهد داد. در این فصل، شما در مورد بهینهسازیهای قفل کلیدی – با استفاده از اپراتورهای بازپرداخت اتمی سبک (و جدیدترین آنها) برای کار ایمن بر روی اعداد صحیح، اپراتورهای بیت RMW برای انجام ایمن عملیات بیت و استفاده از اسپینلاک خواننده-نویسنده نسبت به حالت عادی، اطلاعاتی کسب خواهید کرد. خطرات ذاتی، مانند حافظه پنهان “اشتراک نادرست” نیز مورد بحث قرار گرفته است.
سپس مروری بر تکنیکهای برنامهنویسی بدون قفل (با تأکید بر متغیرهای هر پردازنده و کاربرد آنها، به همراه مثال) ارائه میشود. سپس یک موضوع مهم – تکنیکهای رفع اشکال قفل، از جمله استفاده از اعتبار سنج قفل “Lockdep” قدرتمند هسته، پوشش داده میشود. این فصل با نگاهی کوتاه به موانع حافظه (به همراه یک مثال) جمعبندی میشود.
پیشنهاد میشود قبل از مطالعهی کتاب Linux Kernel Programming، کتاب Linux+ Study Guide را برای آشنایی بیشتر با لینوکس مطالعه کنید.
سرفصلهای کتاب Linux Kernel Programming:
- Section 1: The Basics
- Kernel Workspace Setup
- Building the 5.x Linux Kernel from Source – Part 1
- Building the 5.x Linux Kernel from Source – Part 2
- Writing Your First Kernel Module – LKMs Part 1
- Writing Your First Kernel Module – LKMs Part 2
- Section 2: Understanding and Working with the Kernel
- Kernel Internals Essentials – Processes and Threads
- Memory Management Internals – Essentials
- Kernel Memory Allocation for Module Authors – Part 1
- Kernel Memory Allocation for Module Authors – Part 2
- The CPU Scheduler – Part 1
- The CPU Scheduler – Part 2
- Section 3: Delving Deeper
- Kernel Synchronization – Part 1
- Kernel Synchronization – Part 2
فایل کتاب Linux Kernel Programming را میتوانید پس از پرداخت دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.