دوستان سلام
تصمیم گرفتم در کنار روند آموزشی 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
Post #94
3.45K