جدول توصیف گر محلی
جدول توصیف گر محلی (LDT) جدول حافظه ایست که در معماری x86 پشتیبانی میشود و حاوی اعضای پشتیبانی حافظهای ذیل میباشد: در یک حافظه خطی شروع میشود، اندازه، انجام پذیری، نوشتاری، قابلیت دسترسی، حضور واقعی در حافظه و غیره. LDT زیرمجموعه جدول توصیف گر جهانی است و همانند آن تا حافظه۸۱۹۱ قابل دسترس در برنامههای تعریف شدهاست.
تاریخچه[ویرایش]
در تکمیلکننده x86 که قابلیت صفحه بندی مشابه اینتل ۸۰۲۸۶ندارند، LDTمجبور است آدرسهای جداگانه در فرایندهای چندگانه ایجاد کند. که عموماً این عملکرد برای هر پروسه است. و حافظه تخصصی را توصیف میکند در حالی که حافظه مشترک و حافظه هسته با GDT توصیف میشود. سیستم اجراکننده LDT رایج وقتی در حال انجام فرایند جدیدی است، انتقال و تعویض میکندکه این کار را با دستگاه ساختاری LLDT انجام میدهد. برخلاف این عملکرد، GDT غالباً انتقال و تعویض داده نمیشود.(اگرچه این اتفاق ممکن است در صورت دستگاه مانیتوری عمودی نظیر VMware رخ دهد.) فقدان تقارن بین این دو جدول با این واقعیت قابل توضیح و شرح است که LDT رایج و امروزی به صورت خودکار بر روی وقایع خاص ارجاع داده میشود. خصوصاً اگر بر اساسTSS چندکاره باشد. این روند برای GDT قابل اعمال نیست. LDT همچنین نمیتواند انواع اجزای حافظه پیشرفته خاصی را ذخیره کند. (مثلاً TSSها). در نهایت، LDT در واقع توسط توصیف گر درونی GDT تعریف میشود. در صورتی که GDT مستقیماً توسط آدرس خطی تعریف میشود. ایجاد حافظه مشترک از طریق GDT برخی اشکالات را در بر دارد. قابل توجه است که چنین حافظهای در هر فرایند و روندی با حقوق برابری قابل رؤیت است. به منظور محدود کردن این رؤیت و تمایز ایجادکردن در اجرای حافظه مشترک (مثلاً حق دسترسی فقط خوانشی برای برخی فرایندها)، شخص میتواند از ورودیهای LDT جداگانه استفاده کند که به مناطق حافظه فیزیکی مشابهی که تنها در مراحل LDT که دسترسی درخواستی به مناطق حافظه مشترک ارائه شده اشاره میکند. ورودیهای LDT و GDT که به مناطق حافظهای متقابل اشاره میکند، نام مستعار خوانده میشود. این اسامی مستعار همچنین عموماً به منظور دسترسی نوشتاری کدهای اجزا ساخته میشوند. که شامل: انتخابکننده قابل اجرا برای نوشتن استفاده میشود. در مورد GDT اسامی مستعار به منظور دسترسی به اجزای سیستم نظیر TSSها ساخته شدهاند. قطعات مورد نظر در توصیف گر خودشان علامت "حضور" دارند که به آنها اجازه میدهد در صورت لزوم از حافظه پاک شوند. برای مثال، قطعات کد یا دادههای اصلاح نشده میتوانند بیرون گذاشته شوند و قطعات داده اصلاح شده میتوانند جایگزین آنها در دیسک شوند. از آنجا که همه قطعات باید به عنوان یک واحد اداره شوند باید اندازه آنها را محدود کنیم تا مطمئن شویم جایگزینی به موقع اتفاق افتاده است. با این حال با کوچک کردن قطعات جایگزینی ساده بیشتر به این معنی است که رجیسترهای قطعه باید بهطور مکرر بارگذاری شوند که این کار خودش زمان عملکرد را تلف میکند.
استفاده جدید[ویرایش]
ریزپردازندههای ۸۰۳۸۶ اینتل صفحهبندی را معرفی میکنند که صفحات حافظه فیزیکی (اینها واحدهای حافظه کوچک هستند) را به صورت جداگانه در آدرسهای مجازی مثل هم تخصیص میدهند. صفحهبندی دیسک بسیار سریعتر و مناسبتر از تعویض قطعه است. بنابراین سیستمعاملهای جدید x86 32 بیتی از LDT بسیار اندک و برای اجرای اولیه کد ۱۶بیتی ارث استفاده میکنند. چون کدهای ۱۶بیتی باید در محیط ۳۲ بیتی با حافظه مشترک اجرا شوند، در این صورت LDT باید در این شرایط نوشته شود که هر پرچم آدرس گذاری شده یک انتخابکننده در LDT داشته باشد. (معمولاً این نتایج در LDTهایی با ورودی ۶۴ کیلو بایتی پر میشود.) این تکنیک برخی مواقع LDT tiling نامیده میشود. اندازه محدود LDT به این معناست که فضای آدرس پرچم مجازی به ۵۱۲ مگابایت محدود میشود. این عمل در OS/2 اتفاق میافتد ولی در ورژن ۴٫۵ این محدودیت درست شد. علاوه بر این موارد باید مطمئن شویم که شیهایی که در محیط ۳۲ بیتی تخصیص داده میشوند نمیتوانند از مرز ۶۴ کیلو بایتی عبور کنند و برخی از فضای آدرسهای بیهوده را ایجاد میکند. اگر کد ۳۲ بیتی نباید از اشیای حافظه قراردادی به کد ۱۶ بیتی عبور نکنند لازم نیست محدودیت مصنوعی برای اندازه فضای آدرس ۳۲ بیتی قرار داد. به عنوان مثال احتمالاً تقلید از OS/21.X در ویندوز NT انجام شدهاست.