موضوع مقاله: انسجام حافظه نهان بر مبنای دایرکتوری | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # انسجام حافظه نهان بر مبنای دایرکتوری | مقدمه: در مهندسی کامپیوتر، انسجام حافظه نهان بر مبنای دایرکتوری نوعی مکانیسم انسجام حافظه نهان است که در آن از دایرکتوری‌ها به جای استفاده در جاسوسی گذرگاه، در مدیریت حافظه پنهان استفاده می‌شود. | ## بخش 1: انسجام حافظه نهان بر مبنای دایرکتوری | منظور از گذرگاه، مجموعه سیم‌هایی است که داده‌ها و دستورها را با سرعت از میان واحد پردازشگر مرکزی، حافظه و دستگاه‌های جانبی رایانه عبور می‌دهند. از این روش‌ها می‌توان برای بررسی عملکرد کامپیوتر و مقیاس‌پذیری سیستم‌های دایرکتوری استفاده کرد. برای بررسی این که یک خط حافظه نهان توسط هر پردازنده منفرد ذخیره شده‌ است یا خیر، آن بیت مورد استفاده قرار می‌گیرد. قالب برداری تمام‌بیت ساده‌ترین ساختار برای پیاده‌سازی است، اما کمترین مقیاس پذیری را دارد. سرور اس‌جی‌آی اوریجین ۲۰۰۰ ترکیبی از بردارهای تمام‌بیت و بیت‌درشت را بسته به تعداد پردازنده‌ها مورد استفاده قرار می‌دهد. هر ورودی دایرکتوری باید شامل ۱ بیت ذخیره‌شده به‌ازای هر پردازنده و هر خطِ کَش باشد. همچین علاوه بر آن بیت، بیت‌های دیگری برای بررسی وضعیت دایرکتوری در هر ورودی وجود دارد. همچنین برای محاسبه نسبت سربار ذخیره‌سازی داریم: (اندازه بلوک کش × ۸) / (تعداد پردازنده) می‌توان مشاهده کرد که سربار دایرکتوری با استفاده از تعداد پردازنده‌ها به صورت خطی ارزیابی می‌شود. در حالی که برای سیستم‌های سنگین با پردازنده‌های زیاد منجر به هزینهٔ زیادی می‌شود. برای مثال در سیستمی با بلوک‌های ۳۲ بایتی و ۱۰۲۴ پردازنده نسبت سربار ذخیره‌سازی برابر با ۴۰۰٪ می‌شود. این امر باعث صرفه‌جویی در هزینه‌ها می‌شود و همچنین میزان تردد در مجموعه سیم‌هایی که داده‌ها و دستورها را با سرعت از میان واحد پردازشگر مرکزی، حافظه و دستگاه‌های جانبی رایانه عبور می‌دهند، بهبود می‌یابد؛ بنابراین نسبت سربار یکسان است، فقط تعداد پردازنده‌ها با تعداد گروه‌های پردازنده جایگزین می‌شود. هنگامی که یک درخواست گذرگاه برای یک خط حافظه پنهان ارسال می‌شود، دایرکتوری سیگنال را به جای حافظه پنهانی (که آن را شامل می‌شود)، به هر پردازنده در گره ارسال می‌کند و منجر به ایجاد شلوغی بیش از حد لازم در گره‌هایی فاقد آن اطلاعات می‌شود. در این حالت، ورودی دایرکتوری از ۱ بیت برای گروهی از پردازنده‌ها و برای هر خط حافظه پنهان استفاده می‌کند. | ## بخش 2: انسجام حافظه نهان بر مبنای دایرکتوری | مشابه مثال برای قالب برداری تمام‌بیت، اگر ۱ بیت را برای ۸ پردازنده به‌عنوان یک دسته در نظر بگیریم، سربار ذخیره‌سازی ۵۰٪ خواهد بود ۳۲x۸)/۱۲۸). قالب دایرکتوری پراکنده حافظه نهان در یک زمان خاص فقط بخش کمی از بلوک‌ها را در حافظهٔ اصلی ذخیره می‌کند. از این رو بیشتر ورودی‌های دایرکتوری متعلق به بلوک‌هایی است که در حافظهٔ نهان ذخیره نشده‌اند. در قالب دایرکتوری پراکنده، میزان هدر رفت تنها از طریق ذخیره کردن بلوک‌های حافظهٔ نهان در دایرکتوری کاهش می‌یابد. پردازنده‌ای با ۶۴ کیلوبایت حافظهٔ پنهان، بلوک‌های ۳۲ بایتی و ۴ مگابایت حافظهٔ اصلی را در نظر داشته باشید. حداکثر تعداد ورودی‌هایی که دایرکتوری می‌تواند در قالب دایرکتوری پراکنده داشته باشد ۲۰۴۸ است. اگر دایرکتوری یک ورودی را به تمام بلوک‌های حافظه اختصاص دهد، تعداد ورودی‌های دایرکتوری ۱۳۱٬۰۷۲ خواهد شد. در نتیجه فرمت دایرکتوری از لحاظ ذخیره‌سازی به‌صرفه نیست و بهینه‌سازی آن امری بسیار قابل توجه است. قالب درخت دودویی با اعداد متعادل در قالب درخت دودویی با اعداد متعادل، دایرکتوری غیرمتمرکز است و بین حافظه‌های نهانی که حداقل در یک بلوک حافظه مشترک هستند، توزیع می‌شود. حافظه‌های نهان متفاوت که در یک بلوک حافظه اشتراک دارند به شکل یک درخت دودویی مرتب شده‌اند. اولین حافظهٔ نهانی که به یک بلوک حافظه دسترسی پیدا می‌کند، گره ریشه نام می‌گیرد. هر بلوک حافظه دربرگیرندهٔ اطلاعات گره ریشه (HEAD) و شمارشگر بخش‌های مشترک (SC) است. هر ورودی حافظهٔ نهان دارای تعدادی نشانگر به حافظه‌های نهانی بعدی است که از طریق هسته‌های دیگر قابل دسترسی هستند و به نام‌های L-CHD و R-CHD شناخته می‌شوند. | ## بخش 3: انسجام حافظه نهان بر مبنای دایرکتوری | این دایرکتوری شامل یک شرط اساسی می‌شود و آن شرط این است که درخت دودویی باید از لحاظ عددی دارای تعادل باشد؛ یعنی تعداد گره‌های زیردرخت سمت چپ باید مساوی با یا بیشتر از تعداد گره‌های زیردرخت سمت راست باشد. قالب دایرکتوری زنجیره‌ای حافظه قالب دایرکتوری زنجیره‌ای، اشاره‌گر دایرکتوری را روی آخرین حافظهٔ نهانی قرار می‌دهد که به بلوک دسترسی داشته‌است. همچنین هر حافظهٔ نهان نشانگر حافظهٔ نهان قبلی که به بلوک دسترسی داشته‌ است را در بر می‌گیرد. در نتیجه زمانی که پردازنده درخواست افرودن داده را به یک بلوک در حافظه ارسال می‌کند، پردازنده مواردی را باطل می‌کند. در این دایرکتوری وقتی که یک بلوک حافظهٔ نهان با بلوک دیگری جایگزین می‌شود، باید لیست پیوندی را پیمایش کنیم تا دایرکتوری را تغییر دهیم که این مورد باعث افزایش تأخیر می‌شود. به‌ منظور جلوگیری از این امر، فهرست‌های پیوندی دوطرفه در حال حاضر به‌طور گسترده استفاده می‌شوند که در آن هر کپی حافظهٔ نهان دارای اشاره‌گرهایی به حافظهٔ نهان قبلی و بعدی است که به بلوک دسترسی دارد. قالب اشاره‌گر دارای محدودیت قالب اشاره‌گر دارای محدودیت تعدادی اشاره‌گر را برای مسیریابی پردازنده‌هایی که اطلاعات را در حافظهٔ نهان ذخیره می‌کنند، به‌کار می‌گیرد. زمانی که یک پردازندهٔ جدید بلوک را در حافظهٔ نهان ذخیره می‌کند، یک اشاره‌گر آزاد به آن پردازنده اختصاص داده می‌شود. اگر تعداد اشتراک‌گذاران از تعداد اشاره‌گرهای آزاد بیشر باشد، مشکلاتی به‌وجود می‌آید. یکی از این روش‌ها باطل کردن یکی از اشتراک‌گذارها با استفاده از اشاره‌گر آن برای درخواست‌کنندهٔ جدید است. اما در حالت‌هایی که برای یک بلوک تعداد زیادی خواننده وجود دارد، مانند قفل، این روش می‌تواند پرهزینه باشد. روش دیگر این است که یک استخر جداگانه از اشاره‌گرهای آزاد برای تمامی بلوک‌ها در دسترس باشد. | ## جمع‌بندی | این روش معمولاً مؤثر است، زیرا تعداد بلوک‌های مشترک توسط تعداد زیادی پردازنده معمولاً زیاد نیست.