OS Internals

Description
مقاله و فیلم آموزش مدیریت و برنامه‌نویسی سیستم‌های عامل، شبکه و امنیت اطلاعات.

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

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

ارتباط با مدیر کانال از طریق:
@akazemi67
We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 7 months, 1 week ago

[ We are not the first, we try to be the best ]

Last updated 9 months, 3 weeks ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 5 months, 2 weeks ago

5 months, 2 weeks ago
مقدمه‌ای بر eBPF و کاربردهای آن

مقدمه‌ای بر eBPF و کاربردهای آن

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

برای کسب اطلاعات از اتفاقات مختلفی که در سیستم‌عامل رخ می‌دهند و اعمال تغییرات در بخش‌های مختلف آن ابزارهای مختلفی توسعه داده شده‌اند که امکان کسب اطلاعات و یا اعمال تغییرات در نقاط مشخصی از کرنل را فراهم می‌کنند. قبلا در پستی یکی از این ابزارها به اسم ftrace را معرفی کرده‌ام و در این پست و ویدئو قصد معرفی ابزار دیگری به اسم eBPF را دارم که قابلیت‌هایی بسیار زیادی فراهم کرده و انعطاف پذیری بالایی در کسب اطلاعات و اعمال تغییرات در کرنل لینوکس را دارد.

در واقع می‌توان گفت که eBPF یک زبان تعامل با کرنل لینوکس است که به کمک آن می‌توان اطلاعاتی از کارکرد کرنل بدست آورده و یا در آن تغییراتی اعمال نمود. کد نوشته شده برای eBPF‌ پس از کامپایل به یک bytecode برای کرنل ارسال شده و اگر مشکلی نداشته باشد در کرنل اجرا می‌شود.

برای نمونه‌ای از کاربردهای eBPF‌ می‌توان به استفاده‌ی اندروید برای کسب اطلاعات از میزان استفاده از شبکه، استفاده‌ی Netflix ‌برای کسب اطلاعات آماری از شبکه در مقیاس بزرگ، استفاده‌ی گوگل برای پردازش بسته‌های شبکه و performance monitoring و یا استفاده‌ی Cloudflare‌ برای امنیت شبکه اشاره کرد.

در این ویدئو ابتدا eBPF‌ معرفی شده و سپس به کمک bpftrace استفاده از آن تست می‌شود.

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

#ShortLinuxInternals #linux #internals #programming #kernel #bpf #ebpf #tracing #bpftrace

6 months, 1 week ago
نمایش شیوه‌ی ایجاد پروسه‌های اولیه‌ی لینوکس …

نمایش شیوه‌ی ایجاد پروسه‌های اولیه‌ی لینوکس و طرز کار آن‌ها از روی کد کرنل

پروسه‌ها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه‌ با PID‌ یک شروع میشه که در توزیع‌های جدید لینوکس systemd است ولی در نسخه‌های قدیمی‌تر init, upstart و چیزهای دیگری می‌توانست باشد. البته یک مورد جدید و جذاب دیگه unikernel می‌باشد که در آن برنامه‌های مختلف می‌توانند به عنوان PID 1 اجرا شده و در ایجاد containerهایی با وابستگی کم کاربرد دارد.

ایجاد این پروسه در تابع start_kernel از کد کرنل که در فایل init/main.c تعریف شده است انجام می‌شود. پروسه با PID 1‌ در لینوکس یک پروسه‌ی کامل می‌باشد که هم user space داشته و هم kernel space و پروسه‌هایی که این دو را داشته باشند در ساختار درختی زیر مجموعه‌ی این پروسه می‌باشند.

پروسه‌ی دومی که در تابع start_kernel ایجاد می‌شود دارای PID 2 می‌باشد و در ساختار درختی موازی این پروسه بوده و زیر مجموعه‌ی آن نمی‌باشد. اسم این پروسه kthreadd می‌باشد و بر خلاف پروسه‌ی PID 1 دارای user space نبوده و فقط kernel space دارد. این پروسه وظیفه‌ی مدیریت kernel threadها را در لینوکس دارد که برای مدیریت کارهای مختلف سیستمی و انجام وظایف مختلف مربوط به کرنل و درایورها استفاده می‌شوند.

با شروع به کار این دو پروسه سیستم‌عامل به صورت کامل بالا آمده و مابقی پروسه‌ها می‌توانند تحت آن‌ها شروع به کار کرده و سرویس‌دهی را انجام دهند. البته یک پروسه‌ی دیگر نیز با PID 0 در لینوکس وجود دارد که در خروجی ps نمی‌توانید آنرا مشاهده کنید ولی با استفاده از ابزارهایی مثل ftrace, ebpf امکان کسب اطلاعات از آن وجود دارد.

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

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

#ShortLinuxInternals #linux #internals #programming #processes #kernel #systemd #initd #kernelthreads

7 months, 2 weeks ago
شیوه‌ی زمان‌بندی اجرای پروسه و نخ …

شیوه‌ی زمان‌بندی اجرای پروسه و نخ در لینوکس

قبل از توضیح این بخش لازمه مجدد اشاره کنم که thread/process در کرنل لینوکس با task_struct‌ پیاده‌سازی شده‌اند و در این پست بجای تکرار «اجرای پروسه و نخ» در لینوکس از عبارت اجرای وظیفه یا task استفاده می‌کنیم. با این مقدمه برسیم به اصل موضوع این پست:

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

لینوکس برای مشخص کردن اولویت اجرای taskها بر روی پردازنده و مدت زمانی که می‌توانند از پردازنده استفاده کنند الگوریتم‌های مختلفی دارد که به آن‌ها class یا policy زمان‌بندی می‌گوید. در هر کلاس نیز به کمک یک عدد، اولویت اجرای taskها را مشخص می‌کند. به عنوان مثال زمان‌بند پیش‌فرض لینوکس که در کلاس Normal قرار دارد با عنوان Completely Fair Scheduler شناخته می‌شود که در پیاده‌سازی آن از Red-Black Tree که یک درخت جستجوی دودویی Balance می‌باشد کمک گرفته شده است.

یک کلاس دیگری که در لینوکس وجود دارد کلاس RealTime می‌باشد. البته منظور از RealTime در این مورد این است که وظایف تحت یک Time Frame مشخص اجرا می‌شوند. در این کلاس امکان استفاده از روش‌های Round-Robin یا FIFO وجود دارد.

تنظیم کردن اولویت وظایف در کلاس نرمال توسط مقدار nice مشخص می‌شود که عددی در بازه‌ی منفی ۲۰ تا مثبت ۱۹ می‌باشد. در کرنل لینوکس مقدار نهایی اولویت برای الگوریتم‌های مختلف می‌تواند عددی بین صفر تا ۱۳۹ باشد و موارد مختلفی مثل Boost کردن اولویت برای پاسخ‌دهی سریع‌تر برنامه‌های گرافیکی یا وظایفی که وابستگی خاصی به آن‌ها وجود دارد نیز در اولویت نهایی تاثیر دارند. برای داشتن مقدار تنظیم شده برای اولویت و مقداری که کرنل تصمیم می‌گیرد اولویت وظیفه در زمان جاری باشد فیلد‌های متفاوتی در task_struct وجود دارند.

به عنوان نکته‌ی پایانی باید اشاره کنم که تنظیم کردن اولویت وظایف به کمک syscall ای به اسم setpriority انجام می‌شود که دستور renice نیز از آن استفاده می‌کند. به کمک دستور chrt نیز می‌توان تنظیمات مربوط به کلاس RealTime را تغییر داد.

شرح کامل موارد ذکر شده، نمایش دمو از شیوه‌ی استفاده از آن‌ها و نمایش کد کرنل مربوط به setpriotity مواردی هستند که در این ویدئو به آن‌ها می‌پردازیم. برای مشاهده‌ی ویدئو از لینک‌های زیر استفاده کنید:

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

پ.ن: اگر شیوه‌ی پیاده‌سازی پروسه/نخ در لینوکس و کاربرد task_struct برای شما شفاف نیست به پست زیر مراجعه کنید:
https://t.me/OxAA55/124

#ShortLinuxInternals #linux #internals #programming #processes #sheduling #tasks #task_struct #nice #priority

8 months, 2 weeks ago
مروری بر روش‌های IPC در لینوکس …

مروری بر روش‌های IPC در لینوکس و تست SharedMemory

بحث IPC یا Inter-Process Communication به روش‌هایی گفته می‌شود که از طریق آن دو پروسه می‌توانند با یکدیگر اطلاعاتی رد و بدل کرده یا یک رخ‌داد را به اطلاع هم برسانند. برای انجام اینکار متدهای متنوعی در لینوکس وجود دارد که قبلا نیز در مورد Signal پستی منتشر کرده بودم و جزئیات آنرا نمایش داده بودم.

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

برای استفاده از حافظه‌ی مشترک در لینوکس، با استفاده از shm_open درخواست ایجاد فضای مشترک را داده و پس از دریافت یک File Descriptor به کمک mmap حافظه‌ی مورد نیاز را از کرنل لینوکس دریافت می‌کنیم.

نکته‌ای که باید به آن توجه کنیم این است که نوشتن چند پروسه به صورت همزمان درفضای مشترک، می‌تواند ناسازگاری داده ایجاد کند که با استفاده از Semaphore یا روش‌های دیگر Synchronization بر اساس نیاز، باید بین پروسه‌ها هماهنگی ایجاد نمود.

در این ویدئو، پس از مرور کوتاهی بر روش‌های مختلف IPC به بررسی عمیق‌تر روش Shared Memory پرداخته و یک کد ساده برای تست آن می‌زنیم.

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

#ShortLinuxInternals #linux #internals #programming #processes #ipc #sharedmemory

8 months, 2 weeks ago
***?*** **تخفیف ۷۰درصدی دوره‌ی Windows Internals …

? تخفیف ۷۰درصدی دوره‌ی Windows Internals and Memory Analysis برای ۲۰ نفر
? چند نفری بهم پیام داده بودند و سراغ تخفیف دوره‌ی Internal رو گرفته بودند. با صحبتی که با تیم خوب مکتب‌خونه داشتم قرار شد که یک تخفیف ۷۰درصدی برای ۲۰ نفر داشته باشیم.

می‌تونید دوره رو از طریق لینک زیر مشاهده و ثبت‌نام کنید:
yun.ir/rx6jy2

? برای دریافت ۷۰ درصد تخفیف، در زمان خرید کد z03y2Lzs را وارد کنید.#WindowsInternals#Course#Training#Maktabkhooneh

8 months, 3 weeks ago

#Course #DWORD

?ویدیو معرفی دوره برنامه نویسی تهاجمی مختص به تیم های قرمز

?بررسی کامل دوره، سرفصل ها و موضوعاتی که در هر فصل بیان خواهند شد.

آخرین بروزرسانی سرفصل ها : 18 September 2024

?شهریه دوره ۱۵,۰۰۰,۰۰۰ تومان است که با ۲۰٪ تخفیف به ۱۰ نفر اول ارائه می‌شود.
?همچنین، امکان پرداخت به صورت اقساط نیز فراهم است.

?نحوه شرکت در دوره :
به دلیل ظرفیت محدود کلاس، اولویت ثبت‌نام با دانشجویانی است که آزمون تعیین سطح را گذرانده باشند. چنانچه پیش‌نیازهای لازم برای شرکت در دوره را ندارید، همچنان می‌توانید در دوره شرکت کنید، اما ابتدا باید این پیش‌نیازها را بگذرانید. جهت دریافت اطلاعات بیشتر به آیدی @YMahmoudnia پیغام بدین.

*? کانال بایت امن *| گروه بایت امن_

We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 7 months, 1 week ago

[ We are not the first, we try to be the best ]

Last updated 9 months, 3 weeks ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 5 months, 2 weeks ago