OS Internals
3.45K subscribers
6 photos
29 videos
12 files
84 links
مقاله و فیلم آموزش مدیریت و برنامه‌نویسی سیستم‌های عامل، شبکه و امنیت اطلاعات.

مقالات من در ویرگول:
https://virgool.io/@akazemi

ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55

ارتباط با مدیر کانال از طریق:
@akazemi67
Download Telegram
همراهان عزیز سلام
از آخرین پست من مدت زمان زیادی می‌گذره و متاسفانه مدت مدیدی به دلیل مشغله‌های مختلف نتونستم پستی منتشر کنم. چندماهی هست که داشتم روی آماده‌سازی و انتشار ویدئو در زمینه‌ی Windows Internals با رویکرد برنامه نویسی کار می‌کردم و خوشبختانه بخش اول ویدئوها که در مورد نخ‌ها توی WinAPI و کرنل ویندوز هست امروز منتشر شد. ویدئوهای منتشر شده سه مبحث رو پوشش میده:
۱. نوشتن برنامه چندنخی به کمک WinAPI
۲. استفاده از Thread Poolهایی که پروسه‌های ویندوزی دارند
۳. رفتن به دل کرنل ویندوز و ایجاد نخ در دل کرنل

اگر LinkedIn دارید لطفا اونجا من رو دنبال کنید و اگر هم ندارید می‌تونید به لیست پخش دوره از لینک زیر دسترسی پیدا کنید:
#windows #internals #system #kernel #programming #threads

https://www.aparat.com/playlist/1599634
ایجاد thread در یک پروسه‌ی دیگر. چرا؟ و چگونه؟

توی ویندوز یک API وجود داره به اسم CreateRemoteThread که این امکان رو بهمون میده که بجای اینکه در پروسه‌ی خودمون نخ ایجاد کنیم، بیاییم و یک پروسه‌ی دیگه رو انتخاب کنیم و در دل اون یک نخ ایجاد کرده و کدی رو اجرا کنیم. در این بخش از دوره‌ی Windows Internals دو ویدئو آماده کرده‌ام که ابتدا به معرفی این API و کاربردهاش پرداخته و سپس در ویدئوی دوم سراغ برنامه نویسی و بررسی روند کار با ابزارهای SysInternals میریم.

در ویدئوی اول ابتدا استفاده از این روش برای دیباگ برنامه‌ها، کسب اطلاعات از رویدادهای داخلی یک پروسه و انجام Code Injection معرفی شده و سپس به بررسی مراحلی که برای انجام DLL Injection لازم هستند می‌پردازیم. برای مشاهده‌ی این ویدئو از لینک زیر استفاده کنید:
https://www.aparat.com/v/jK7N9

در ویدئوی دوم و بخش عملی، ابتدا از طریق Code Injection و به کمک وقفه‌ی شماره ۳ در یک پروسه Break Point ایجاد کرده و سپس یک فایل DLL ساده نوشته و با قرار دادن تابع LoadLibraryA در بدنه‌ی Remote Thread باعث بارگذاری آن در پروسه‌های ویندوزی و اجرای کد، درون آن‌ها می‌شویم. در انتها نیز به کمک Process Monitor اجرای API و تزریق کد در پروسه را بررسی می‌کنیم. برای مشاهده‌ی این ویدئو از لینک زیر استفاده کنید:
https://www.aparat.com/v/nsvCc

#windows #internals #threads #dll #injection
👍1
ویندوز چطور تصمیم می‌گیره چه نخی بر روی چه هسته‌ای از پردازنده اجرا بشه؟ چه پارامترهایی تاثیر دارند؟ اولویت نخ‌ها چطور تعیین میشه؟ آیا اولویت ثابته یا تغییر می‌کنه؟ سوالاتی از این دست در مورد Scheduler ویندوز موضوع ویدئوهای این بخش از دوره‌ی Windows Internals هستند.

در ویدئوی اول این بخش، ابتدا مروری بر مفهوم Scheduling یا زمانبندی نخ‌ها در ویندوز انجام داده و سپس موارد مهمی که در آن تاثیر دارند شرح داده می‌شوند. کار را با اولویت‌ نخ‌ها در ویندوز شروع کرده و به معرفی مدل اولویت‌گذاری نخ‌ها و اینکه اولویت چگونه مشخص شده و در چه بازه‌ای است می‌پردازیم. سپس به بررسی وضعیت نخ‌ها در ویندوز و اینکه وضعیت نخ تحت چه شرایطی تغییر می‌کند می‌پردازیم. در ادامه سراغ شرایطی می‌رویم که در آن‌ها اولویت نخ‌ها به صورت خودکار توسط سیستم‌عامل تغییر می‌کند تا نخ‌ها دچار گرسنگی نشده و بتوانند وظیفه‌ی خود را به انجام برسانند. در پایان نیز دو مفهوم Affinity, CPU Sets شرح داده می‌شوند که باعث اعمال محدودیت بر روی هسته‌های CPUای می‌شوند که نخ می‌تواند بر روی ‌آن‌ها اجرا شود. برای دیدن این ویدئو به لینک زیر مراجعه کنید:
https://www.aparat.com/v/TsVwe

در ویدئوی بعدی که دموی مفاهیم ذکر شده در ویدئوی اول است، به کمک ابزارهای مختلف، مفاهیم مرتبط با زمان‌بندی نخ‌های ویندوز نمایش داده شده و تاثیر تغییر اولویت و اعمال محدودیت بر روی اجرای نخ‌ها بررسی می‌شوند. ابتدا با تغییر Priority Class و Thread Priority مقدار تنظیم شده برای اولویت به کمک Process Explorer نمایش داده شده و سپس از ابزار CPU-Stress کمک گرفته می‌شود که بتوانیم تمامی پارامترهای شرح داده شده را تغییر دهیم. در این حین، به کمک API-Monitor توابعی که پشت صحنه اجرا می‌شوند را مشاهده کرده و تاثیر کار انجام گرفته را در Process Explorer می‌بینیم. در ادامه به سراغ ابزار Performance Monitor رفته و شیوه‌ی تغییر اولویت نخ‌ها در شرایط مختلف و همچنین تغییر وضعیت آن‌ها را به کمک نمودار مشاهده می‌کنیم. در انتها برای بررسی دقیق تاثیر اعمال کردن CPU Sets و اطمینان از درست اجرا شدن آن، فعالیت پروسه‌ها را با Windows Performance Recorder ثبت کرده و در Performance Analyzer مشاهده می‌کنیم. برای مشاهده‌ی این ویدئو به لینک زیر مراجعه کنید:
https://www.aparat.com/v/iQ8kp

لطفا با لایک، کامنت و اشتراک‌گذاری در رسیدن این ویدئوها به دست افراد علاقه‌مند سهیم باشید. اگر هم انتقاد یا پیشنهادی داشتید حتما کامنت گذاشته یا به صورت مستقیم پیام بدید.

#windows #internals #threads #scheduling
👍13
دوستان سلام
تصمیم گرفتم در کنار روند آموزشی Internals Sessions که داریم بخش‌هایی از کلاس‌هایم رو هم در قالب ویدئوهای کوتاه منتشر کنم و یکسری از مفاهیم سیستم‌عامل رو شرح دهم.

در اولین قدم با ذکر یک مثال ساده، به بررسی تاثیر متغیرهای TLS (Thread Local Storage) در برنامه‌های چند نخی می‌پردازیم.

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

به عنوان مثال در برنامه‌نویسی C متغیر errno در فضای TLS نگه‌داری می‌شود که خطای رخ داده در threadهای مختلف فقط در همان thread بوده و مشکلی ایجاد نشود. در API ویندوز هم تابعی به اسم GetLastError وجود دارد که کار مشابهی می‌کند ولی این تابع مقدار یک متغیر موجود در TEB (Thread Environment Block) را باز می‌گرداند که در فضای TLS‌ نیست ولی آن هم Per Thread بوده و مفهوم مشابهی دارد.

در این ویدئو به بررسی شیوه‌ی تعریف متغیرهای TLS در ویندوز و تست آن می‌پردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/1SHLyoicm-s
لینک ویدئو در آپارات:
https://aparat.com/v/YTCgV


#ShortWinInternals #windows #internals #cpp #programming #threads #TLS
18👍6👏1
مروری بر پروسه‌های کرنلی لینوکس

در لینوکس برخی از پروسه‌ها بخش user space‌ نداشته و کامل در دل کرنل اجرا می‌شوند. این پروسه‌ها در اجرای کارهای مختلف به سیستم‌عامل کمک کرده و به صورت background کارهایی که نیاز است انجام شوند که لینوکس بتواند سرویس‌دهی موارد مختلف را انجام دهد مدیریت می‌کنند. در این پست و ویدئو برخی از این پروسه‌ها معرفی شده و کاربردهای مختلف آن‌ها شرح داده می‌شود.

اولین پروسه (نخ) کرنلی لینوکس kthreadd است که وظیفه‌ی ایجاد یک interface برای ایجاد و مدیریت پروسه‌های کرنلی در لینوکس را داشته و همیشه با PID‌ برابر ۲ اجرا می‌شود. در کد این نخ یک حلقه‌ی بی‌نهایت وجود دارد که از لیستی به اسم kthread_create_list اطلاعات پروسه‌ی کرنلی که قرار است ایجاد شود را برداشته و آنرا ایجاد می‌کند. تمامی پروسه‌های کرنلی لینوکس از اینجا به بعد فرزندان kthreadd خواهند بود.

پروسه‌ی بعدی که معرفی می‌کنیم migration است. از پروسه‌ی کرنلی migration به تعداد coreهای cpu خواهیم داشت و وظیفه‌ی آن مدیریت پروسه‌هایی است که بر روی یک core اجرا می‌شوند و در صورت زیاد بودن بار بر روی یک core یک پروسه را از روی run_queue یک core بر داشته و بر روی run_queue یک core دیگر قرار می‌دهد.

پروسه‌ی دیگری که در ویدئو در مورد آن صحبت شده است kcompactd است که وظیفه‌ی آن جلوگیری از ایجاد fragmentation‌ در حافظه و کمک به کنارهم قرار گرفتن pageهای مرتبط در حافظه است.

یک پروسه‌ی جالب دیگر oom_reaper است که در صورتیکه سیستم‌عامل با کمبود حافظه مواجه شود دست به کار شده و با kill کردن یک پروسه فضای لازم را برای کار مابقی پروسه‌ها فراهم می‌کند.

در ویدئو در مورد پروسه‌های بیشتری صحبت شده است که می‌توانید با مشاهده‌ی آن از این پروسه‌ها اطلاع پیدا کنید.

لینک ویدئو در یوتیوب:
https://youtu.be/PsZ5GZhzvqE
لینک ویدئو در آپارات:
https://aparat.com/v/obt29c7

پ.ن ۱:‌ برای اطلاع از جزئیات پروسه‌های ابتدایی لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/133

پ.ن ۲: برای اطلاع از جزئیات پروسه و نخ در لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/124

#ShortLinuxInternals #linux #internals #programming #kernel #memory #threads #processes #kernel_threads
👍163👏3