آموزش همگام سازی در برنامه نویسی هسته لینوکس

Synchronization in Linux Kernel Programming

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: برنامه نویسی کرنل لینوکس - مفاهیم همگام سازی و همگام سازی همزمان در لینوکس کرنل پیش نیازها:باید قادر به نوشتن/فهم Hello World لینوکس ماژول کرنل باید قادر به نوشتن/درک ماژول های هسته لینوکس برای فایل سیستم فایل proc باشد.

به‌روزرسانی: 15 سپتامبر: بخش RCU اضافه شد

آنچه در این دوره خواهید آموخت

  • مفاهیم مختلف مرتبط با همزمانی مانند: preemption، سوئیچ زمینه، ورود مجدد، بخش بحرانی، شرایط مسابقه

  • تکنیک های مختلف همگام سازی

    • متغیرهای هر CPU

    • متغیرهای اتمی

    • Spinlocks

    • سمافورها

    • Mutexes

    • قفل‌های نوشتن را بخوانید

    • قفل های توالی

    • خواندن به‌روزرسانی کپی (RCU)


API/Macros/Structures:

  • spinlock_t، DEFINE_SPINLOCK، spin_lock، spin_unlock، spin_trylock، spin_lock_irqsave، spin_unlock_irqrestore،spin_lock_irq، spin_unlock_irq

  • atomic_t، atomic64_t، ATOMIC_INIT، atomic_inc، atomic_dec، atomic_set، atomic_read، atomic_add، atomic_sub،

    atomic_dec_and_test, atomic_inc_and_test, atomic_sub_and_test, atomic_add_negative,atomic_add_return, atomic_sub_return, atomic_inc_return, atomic_dec_return,atomic_fetch_add, atomic_fetch_sub, atomic_cmpxchg, atomic_xchg,set_bit, clear_bit, change_bit, test_and_set_bit, test_and_clear_bit, test_and_change_bit,

  • NR_CPUS,num_online_cpus,smp_processor_id,get_cpu,put_cpu,DEFINE_PER_CPU,get_cpu_var, put_cpu_var, per_cpu, for_each_online_cpu, alloc_percpu, free_percpu,

  • rcu_read_lock، rcu_read_unlock، synchronize_rcu، call_rcu، rcu_assign_pointer، rcu_dereference

  • seqlock_t، seqcount_t، DEFINE_SEQLOCK، seqlock_init، write_seqlock، write_sequnlock

  • struct rw_semaphore، DECLARE_RWSEM، init_rwsem، down_read، up_read، down_write، up_write، down_read_trylock، down_write_trylock، downgrade_write

  • struct rwlock_t، DEFINE_RWLOCK، rwlock_init، read_lock، read_unlock، write_lock، write_unlock

  • struct mutex، DEFINE_MUTEX، mutex_init، mutex_lock، mutex_unlock، mutex_trylock، mutex_lock_interruptible، mutex_unlock_interruptible، mutex_is_locked

  • ساختار سمافور، sema_init، DEFINE_SEMAPHORE، پایین، بالا، down_interruptible، down_trylock، down_timeout، down_killable


دستورات استفاده شده در دوره

  • nproc

  • ps -eaF

  • ps aux


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

همزمانی Concurrency

  • مسئله Problem

  • مقدمه ای بر همزمانی Introduction to concurrency

  • پیشینه چند پردازش Background of Multiprocessing

  • Preemption و سوئیچ زمینه در کرنل لینوکس Preemption and context switch in Linux Kernel

  • Preemption در فضای کاربر و هسته Preemption in user and kernel space

  • چه زمانی ممکن است پیش‌پرداخت هسته اتفاق بیفتد When can kernel preemption happen

  • نمونه ای از Preemption هسته Example of kernel preemption

  • ورود مجدد Reentrancy

  • همگام سازی شرایط مسابقه و مناطق بحرانی Synchronization Race Condition and critical regions

  • علل همزمانی Causes of concurrency

  • راه حل برای همزمانی Solution for concurrency

  • حداکثر تعداد پردازنده ها را در Kernel بیابید Find out maximum number of processors in Kernel

  • دریابید که کدام پردازنده در حال اجرای مسیر کنترل هسته است Find out which processor is running kernel control path

  • ماژول هسته لینوکس مثالی از شناسه پردازنده هسته Thread Linux Kernel Module Example of processor id of Kernel Thread

  • ماژول هسته لینوکس مثالی از شناسه پردازنده در سیستم تک پردازنده Linux Kernel Module Example of processor id on uniprocessor system

متغیرهای هر CPU Per CPU Variables

  • معرفی Introduction

  • نمونه ای از متغیرهای هر CPU Example of Per CPU variables

  • رابط جدید متغیرهای هر CPU New Interface of Per CPU Variables

  • نمونه ای از رابط جدید متغیرهای هر CPU Example of new interface of Per CPU Variables

  • نمونه ای از هر cpu Example of per cpu

  • نمونه ای از for_each_online_cpu Example of for_each_online_cpu

  • تخصیص داده به ازای هر cpu در زمان اجرا Allocating per cpu data at runtime

  • مشکل با متغیرهای هر CPU Problems with Per CPU Variables

اپراتورهای اتمی Atomic Operators

  • مشکل Read Modify Write Problem Read Modify Write

  • مقدمه ای بر اپراتورهای اتمی Introduction to Atomic Operators

  • نمونه ای از اپراتورهای اتمی Example of Atomic Operators

  • کاربردهای رایج عملیات اتمی Common uses of Atomic Operations

  • عملیات اتمی و آزمایش Atomic Operation and test

  • جمع اتمی تفریق و برگرداندن Atomic add subtract and return

  • عملیات اتمی بیشتر More Atomic Operations

  • عملیات اتمی 64 بیتی 64-bit Atomic Operations

  • عملیات بیتی اتمی Atomic bitwise operations

  • عملیات بیتی اتمی با مقدار بازگشتی Atomic bitwise operations with return value

  • عملیات بیتی غیر اتمی Non Atomic bitwise operations

قفل چرخشی Spin Locks

  • معرفی Introduction

  • Spinlock API Spinlock API's

  • راه اندازی اسپینلاک Initializing spinlock

  • Spinlock مثالی از دو رشته هسته Spinlock Example of two kernel threads

  • چه اتفاقی می‌افتد اگر قفلی را که قبلاً توسط CPU نگه داشته شده است به دست بیاورم What happens if i acquire a lock which is already held by CPU

  • اجرای busyloop با استفاده از spinlock در درایورهای char Implement busyloop using spinlock in char drivers

  • spin_trylock spin_trylock

  • آیا می توانم از spinlock استفاده کنم اگر منبع بین فرآیند و زمینه وقفه مشترک باشد؟ Can i use spinlock if resource is shared between process and interrupt context

  • آیا پیش‌پرداخت هسته زمانی که قفل چرخشی به دست می‌آید غیرفعال است؟ Is kernel preemption disabled when spinlock is acquired

  • نکات مهمی که هنگام استفاده از اسپینلاک باید در نظر بگیرید Important points to consider while using spinlock

  • مثال فراخوانی msleep در بخش بحرانی Example of calling msleep in critical section

  • Will Spinlock در سیستم تک پردازنده وجود دارد Will spinlock exists on uniprocessor system

  • اجرای اسپینلاک Implementation of spinlock

سمافور Semaphore

  • معرفی Introduction

  • اجرای سمافور Implementation of semaphore

  • انواع سمافور Types of semaphores

  • آیا می توانم از سمافورهای شمارش در بخش بحرانی استفاده کنم؟ Can I use counting semaphores in critical section

  • Semaphore API Semaphore API

  • نمونه ماژول هسته لینوکس با استفاده از API سمافور Linux Kernel Module Example using semaphore API

  • مثال ماژول هسته لینوکس با استفاده از پایین و بالا Linux Kernel Module Example using down and up

  • مثال ماژول هسته لینوکس که دو بار خاموش می شود Linux Kernel Module Example calling down twice

  • ماژول هسته لینوکس نمونه ای از مصرف کننده تولید کننده Linux Kernel Module Example of producer consumer

  • down_interruptible down_interruptible

  • down_trylock down_trylock

  • down_timeout down_timeout

  • پایین_کشنده down_killable

  • نکات مهم هنگام استفاده از سمافور Important points while using semaphore

  • اسپینلاک در مقابل سمافور` spinlock vs semaphore`

موتکس Mutex

  • معرفی Introduction

  • Mutex در مقابل سمافور Mutex vs semaphore

  • پیاده سازی Mutex در کرنل لینوکس Mutex Implementation in Linux Kernel

  • Mutex API Mutex API

  • نمونه ماژول هسته لینوکس با استفاده از مقداردهی اولیه پویا mutex API Linux Kernel Module Example using mutex API dynamic initialization

  • نمونه ماژول هسته لینوکس با استفاده از مقداردهی اولیه استاتیک API mutex Linux Kernel Module Example using mutex API static initialization

  • نمونه ماژول هسته لینوکس که خواب فراخوانی را در بخش بحرانی نشان می دهد Linux Kernel Module Example demonstrating calling sleep in critical section

  • mutex_trylock mutex_trylock

  • چه اتفاقی می‌افتد وقتی رشته‌های دیگر mutex را باز کند What happens when other thread calls unlock mutex

  • در حال امتحان قفل‌های mutex بازگشتی Trying recursive mutex locks

  • mutex_is_locked mutex_is_locked

  • بین سمافور و موتکس کدام را انتخاب می کنید Which one do you choose between semaphore and mutex

  • بین spinlock و mutex کدام را انتخاب می کنید Which one do you choose between spinlock and mutex

قفل نوشتن را بخوانید Read Write Locks

  • بیان مسأله Problem Statement

  • راه حل Solution

  • مقدمه ای بر ReadWrite Spinlock Introduction to ReadWrite Spinlock

  • مثال ماژول هسته لینوکس با استفاده از RW Spinlock API Linux Kernel Module Example using RW Spinlock API

  • وقتی یکی پس از دیگری قفل خواندن و نوشتن قفل را صدا می زنیم چه اتفاقی می افتد What happens when we call read lock and write lock one after another

  • قفل خواندن بازگشتی Recursive read locks

  • وقتی نویسنده منتظر است و خواننده از راه می رسد چه اتفاقی می افتد What happens when writer is waiting and reader arrives

  • مثال ماژول هسته لینوکس با استفاده از RWLOCKS با 3 رشته هسته Linux Kernel Module Example using RWLOCKS with 3 kernel threads

  • مثال ماژول هسته لینوکس با استفاده از RWLOCKS با 4 رشته هسته Linux Kernel Module Example using RWLOCKS with 4 kernel threads

Semaphores RWLocks Semaphores RWLocks

  • مقدمه ای بر ReadWrite Semaphores Introduction to ReadWrite Semaphores

  • ReadWrite Semaphore API ReadWrite Semaphore API

  • down_read_trylock و down_write_trylock down_read_trylock and down_write_trylock

  • downgrade_write downgrade_write

  • قفل نوشتن بازگشتی Recursive write locks

  • مثال ماژول هسته لینوکس با استفاده از موضوعات متعدد Linux Kernel Module Example using multiple threads

قفل های متوالی Sequential Locks

  • مسئله Problem

  • راه حل Solution

  • قفل های دنباله ای Sequence Locks

  • Sequence Locks چگونه کار می کند How Sequence Locks works

  • عملیات را در قفل ترتیبی بنویسید Write operation in sequence lock

  • خواندن عملیات در قفل ترتیبی Read operation in sequence lock

  • مثال ماژول هسته لینوکس با استفاده از قفل ترتیبی Linux Kernel Module Example using sequence lock

  • آیا Preemption هسته با استفاده از قفل دنباله غیرفعال است Is Kernel Preemption Disabled using sequence lock

  • محدودیت قفل های توالی Limitation of sequence locks

  • Sequence Locks در هسته لینوکس Sequence Locks in Linux kernel

  • توالی در وقفه قفل می شود Sequence locks in interrupts

قفل های RCU RCU Locks

  • معرفی Introduction

  • لینکدلیست مثال نحوه حذف قفل گره رایگان Linkedlist example of how to delete node lock free

  • طراحی RCU RCU Design

  • چرا باید از rcu_assign_pointer استفاده کنم Why should i use rcu_assign_pointer

  • خواندن عملیات در RCU Read operation in RCU

  • چرا باید از rcu_dereference استفاده کنم Why should i use rcu_dereference

  • ماژول هسته لینوکس مثال 1 از موضوعات خواندن و نوشتن Linux Kernel Module example 1 of read and write threads

  • ماژول هسته لینوکس مثال 2 از موضوعات خواندن و نوشتن Linux Kernel Module example 2 of read and write threads

  • چه زمانی باید حافظه را آزاد کنیم When should we free memory

  • synchronize_rcu synchronize_rcu

  • call_rcu call_rcu

  • آیا می‌توان بخش‌های حساس جانبی خواندن rcu را تودرتو کرد Can rcu read side critical sections be nested

  • synchronize_rcu چگونه در داخل کار می کند How does synchronize_rcu works internally

  • اصطلاحات RCU RCU Terminology

  • انواع RCU برای لیست های پیوندی RCU variants for Linked Lists

  • نمونه ماژول هسته لینوکس از لیست های مرتبط با rcu Linux Kernel Module example of rcu linked lists

  • مزایای RCU Advantages of RCU

  • پرسش و پاسخ Question and Answer

دانلودها Downloads

  • یادداشت Notes

نمایش نظرات

آموزش همگام سازی در برنامه نویسی هسته لینوکس
جزییات دوره
4.5 hours
120
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
913
4.4 از 5
دارد
دارد
دارد
Linux Trainer
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Linux Trainer Linux Trainer

مربی در آموزش آخر هفته لینوکس