600 likes | 846 Views
فصل 8: حافظه اصلی. مروری بر عناوین مطالب. پیش زمینه مبادله ( Swapping ) اختصاص یکپارچه صفحه بندی ( Paging ) قطعه بندی ( Segmentation ) قطعه بندی به همراه صفحه بندی. پیش زمینه. برای اجرای یک برنامه باید ابتدا آن را به حافظه منتقل کرد و سپس آن را درون یک پردازه قرار داد تا اجرا شود.
E N D
مروری بر عناوین مطالب • پیش زمینه • مبادله (Swapping) • اختصاص یکپارچه • صفحه بندی (Paging) • قطعه بندی (Segmentation) • قطعه بندی به همراه صفحه بندی
پیش زمینه • برای اجرای یک برنامه باید ابتدا آن را به حافظه منتقل کرد و سپس آن را درون یک پردازه قرار داد تا اجرا شود. • صف ورودی: مجموعه ی پردازه های روی دیسک که در انتظار ورود به حافظه برای اجرا هستند. • برنامه های کاربر قبل از اجرا شدن، مراحل متعددی را طی می کنند.
پیش زمینه • نگاشت آدرس دستورالعمل ها و داده ها به آدرس حافظه در سه مرحله امکان پذیر است... • زمان کامپایل: اگر فضای حافظه برنامه از قبل شناخته شده باشد، می توان در زمان کامپایل آدرس ها را مشخص کرد. • در صورتی که آدرس شروع حافظه برنامه تغییر کند، برنامه باید مجددا کامپایل شود. • زمان بارگذاری: در صورتی که در زمان کامپایل آدرس حافظه برنامه مشخص نباشد، باید برای آن کد قابل جابجایی تولید شود. • زمان اجرا: اگر بتوان پردازه را در زمان اجرا از یک قطعه حافظه به قطعه دیگر منتقل کرد می توان اختصاص آدرس حافظه به دستورالعمل ها و داده ها را تا زمان اجرا به تعویق انداخت. • نیاز به حمایت سخت افزاری از نگاشت آدرس دارد، به عنوان مثال ثبات های base و limit.
فضای حافظه منطقی و فیزیکی • یکی از مفاهیم اصلی مدیریت حافظه، فضای آدرس منطقی متناسب با فضای حافظه فیزیکی است. • آدرس منطقیآدرسی است که توسط پردازنده تولید می شود و فضای آدرس مجازی نیز نامیده می شود. • آدرس فیزیکی آدرسی است که توسط واحد حافظه دیده می شود. • آدرس های منطقی و فیزیکی در روش های نگاشت فضای حافظه زمان کامپایل و زمان بارگذاری یکی هستند اما در روش زمان اجرا با یکدیگر متفاوتند.
واحد مدیریت حافظه • واحد مدیریت حافظه (Memory Management Unit, MMU) یک ابزار سخت افزاری است که آدرس های مجازی را به آدرس فیزیکی نگاشت می کند. • در MMU مقدار ثبات جابجایی (relocation reg.) هنگام ارسال آدرس های تولیدشده توسط پردازه کاربر به حافظه به آدرس اضافه می شود. • برنامه کاربر صرفا با آدرس های منطقی کار می کند و اصولا اطلاعی از آدرس های فیزیکی واقعی ندارد.
جابجایی پویا با استفاده از ثبات جابجایی
بارگذاری پویا (Dynamic Loading) • در این روش یک روال تا زمانی که فراخوانی نشده است به درون حافظه اصلی منتقل نمی گردد. • بهبود بهره وری فضای حافظه روالی که فراخوانی نمی شود بارگذاری نیز نمی شود. • مناسب برای مواردی که حجم زیادی از کد برای حمایت از اتفاقات نادر مورد نیاز هستند. • نیاز به حمایت خاصی توسط سیستم عامل ندارد و در فرایند طراحی برنامه مد نظر قرار می گیرد.
اتصال پویا (Dynamic Linking) • در این روش اتصال پیمانه ها به یکدیگر تا زمان اجرا به تعویق می افتد. • از قطعه کد کوچکی به نام stubبرای جای دهی روتین کتابخانه ای مقیم در حافظه مناسب استفاده می شود. • stub خودش را با آدرس روتین عوض می کند و روتین را اجرا می کند. • سیستم عامل باید بررسی کند که روتین در فضای حافظه پردازه قرار دارد یا خیر؟ • این روش بخصوص برای کتابخانه ها بسیار مناسب است.
مبادله (Swapping) • می توان یک پردازه را موقتا از حافظه به یک انباره پشتیبان(Backing Store) منتقل کرد و پس از مدتی برای ادامه اجرا مجددا به حافظه فراخواند. • انباره پشتیبان یک دیسک سریع و به اندازه کافی بزرگ است که می تواند تصاویر حافظه تمام کاربران را در خود جای دهد. • ورود، خروج: شاخص مبادله برای الگوریتم های زمان بندی مبنی بر اولویت استفاده می شود. پردازه با اولویت پایین تر خارج می شود تا پردازه با اولویت بالاتر بتواند بارگذاری و اجرا شود. • انباره باید امکان دسترسی مستقیم به تصاویر حافظه را فراهم آورد. • بیشتر زمان مبادله پردازه صرف انتقال حافظه اختصاص یافته به پردازه ها می شود. • زمان کل مبادله پردازه مستقیما به اندازه فضای حافظه ای که باید جابجا شود بستگی دارد. • نسخه های متفاوتی از مبادله پردازه ها روی سیستم عامل های مختلف وجود دارد. (UNIX, Linux, and Windows)
اختصاص همجوار (Contiguous Allocation) • معمولا حافظه اصلی به دو قسمت تقسیم می شود: • حافظه مقیم مربوط به سیستم عامل که معمولا به همراه بردار وقفه در آدرس پایین حافظه قرار می گیرد. • پردازه های کاربر که معمولا در آدرس بالای حافظه قرار می گیرند. • ثبات جابجایی (relocation reg.) برای محافظت از پردازه ها در قبال یکدیگر و همچنین محافظت از کد سیستم عامل در برابر پردازه ها استفاده می شود. • مقدار ثبات پایه کوچکترین آدرس فضای فیزیکی اختصاص یافته به پردازه است. • ثبات حد (limit reg.) دامنه آدرس های فیزیکی را تعیین می کند. • هر آدرس منطقی باید از ثبات حد کوچکتر باشد.
محافظت از آدرس به صورت سخت افزاری به کمک ثبات های پایه و حد
یک ثبات پایه و یک ثبات حد یک فضای آدرس منطقی را تعریف می کنند.
اختصاص همجوار (ادامه) • اختصاص چندتکه • به بلاک های آزاد حافظه سوراخ(hole) می گویند. سوراخ ها در سراسر حافظه با اندازه های متفاوت پراکنده شده اند. • وقتی یک پردازه وارد می شود، فضای حافظه مورد نیاز آن از یکی از سوراخ های موجود که به اندازه کافی بزرگ است اختصاص می یابد. • سیستم عامل اطلاعات مربوط به 1) قطعه های اختصاص یافته و 2) قطعه های آزاد (سوراخ ها) را نگهداری می کند. OS OS OS OS process 5 process 5 process 5 process 5 process 9 process 9 process 8 process 10 process 2 process 2 process 2 process 2
مساله اختصاص فضای پویا • چطور یک درخواست حافظه با اندازه n را از یک لیست از فضاهای آزاد برآورده کنیم؟ • اولین گزینه (First Fit): اولین فضای آزاد را که به اندازه کافی بزرگ باشد اختصاص می دهد. • بهترین گزینه (Best Fit): کوچکترین فضای آزاد را که به اندازه کافی بزرگ باشد اختصاص می دهد. • باید همه فضاهای آزاد را جستجو کرد، مگر آنکه اطلاعات مربوط به آنها مرتب شده باشد. • کوچکترین فضای آزاد باقی مانده را تولید می کند.
مساله اختصاص فضای پویا (ادامه) • بدترین گزینه (Worst Fit): بزرگترین فضای آزاد را که به اندازه کافی بزرگ باشد اختصاص می دهد. • باز هم باید همه فضاهای آزاد را جستجو کرد، مگر آنکه اطلاعات مربوط به آنها مرتب شده باشد. • بزرگترین فضای آزاد باقی مانده را تولید می کند. • روش های اولین گزینه و بهترین گزینه بر اساس معیارهای سرعت و بهره وری فضای حافظه بهتر از بدترین گزینه هستند.
قطعه قطعه گی (Fragmentation) • قطعه قطعه گی خارجی • مجموع فضای حافظه آزاد برای اجابت درخواست کافی است، اما امکان اختصاص فضای یکپارچه وجود ندارد. • قطعه قطعه گی داخلی • فضای اختصاص یافته ممکن است اندکی از فضای درخواستی بیشتر باشد. این فضای اضافه در حافظه موجود است اما از آن استفاده نمی شود.
قطعه قطعه گی (ادامه) • کاهش قطعه قطعه گی خارجی با فشرده سازی (Compaction) • محتویات حافظه را جابجا کن تا تمام فضای آزاد در یک بلاک حافظه بزرگ قرار گیرد. • فشرده سازی تنها در صورتی امکان پذیر است که جابجایی پویا باشد و در زمان اجرا صورت پذیرد. • مشکل ورودی / خروجی: دستورات خواندن و نوشتن روی حافظه ای که در حال جابجایی است... • وقتی حافظه درگیر ورودی/خروجی است آن را جابجا نکن. • ورودی / خروجی را فقط با حافظه های میانگیر سیستم عامل انجام بده.
صفحه بندی (Paging) • فضای آدرس منطقی اختصاص یافته به یک پردازه ممکن است یکپارچه نباشد. • هر وقت فضای فیزیکی موجود بود به پردازه اختصاص داده می شود. • حافظه فیزیکی به بلاک هایی با اندازه ثابت که قاب (frame) نامیده می شوند تقسیم می شود. • اندازه هر قاب توانی از 2 بین 512 تا 8192 بایت است. • حافظه منطقی به بلاک هایی با همان اندازه که صفحه (page) نامیده می شوند تقسیم می شود.
صفحه بندی (Paging) (ادامه) • مشخصات تمام قاب های آزاد نگه داری می شود. • برای اجرای برنامه ای با اندازه n صفحه باید n قاب آزاد پیدا کرد و سپس برنامه را بارگذاری کرد. • از یک جدول صفحه (page table)برای تبدیل آدرس منطقی به فیزیکی استفاده می شود. • قطعه قطعه گی داخلی
رویه ترجمه آدرس • آدرس تولیدشده توسط پردازنده به دو قسمت شماره صفحه و افست صفحه تقسیم می شود. • شماره صفحه به عنوان اندیسی استفاده می شود که به خانه ای از جدول صفحه اشاره می کند. • جدول صفحه، آدرس شروع هر صفحه در فضای حافظه فیزیکی را دارد. • افست (offset) صفحه با آدرس شروع صفحه ترکیب می شود تا آدرس فیزیکی را که به حافظه اصلی ارسال می شود تشکیل دهد.
پیاده سازی جدول صفحه • جدول صفحه در حافظه اصلی نگهداری می شود. • ثبات مبنای جدول صفحه(PTBR)به جدول صفحه اشاره می کند. • ثبات اندازه جدول صفحه(PTLR)اندازه جدول صفحه را مشخص می کند. • در این مدل دسترسی به هر دستورالعمل یا داده متضمن دو دسترسی به حافظه است: یکی به جدول صفحه و دیگری به آدرس فیزیکی. • مشکل دسترسی دوتایی را می توان با استفاده از یک حافظه نهان سخت افزاری ویژه که قابلیت جستجوی سریع داشته باشد، حل کرد. به این سخت افزار حافظه انجمنی (Associative Memory) و یا حافظه میانگیر ترجمه (TLB )می گویند. • TLB : Translation Look-aside Buffers
حافظه ی انجمنی • حافظه ی انجمنی- جستجوی موازی • ترجمه ی آدرس (p,d) • اگر pدر ثبات انجمنی باشد، شماره ی قاب را از بیرون حافظه بارگذاری کن. • در غیر این صورت شماره ی قاب را از جدول صفحه از حافظه بگیر. Page # Frame #
زمان دستیابی موثر • جستجوی انجمنی = واحد زمان • فرض کنید دوره ی زمانی حافظه 1 میلی ثانیه باشد. • نرخ برخورد: درصد تعداد دفعاتی که شماره ی صفحه در رجیستر های انجمنی وجود دارد. • این نرخ با تعداد رجیستر های انجمنی متناسب است. • نرخ برخورد = • زمان دستیابی موثر(EAT) EAT = (1 + ) + (2 + )(1 – ) = 2 + –
محافظت از حافظه • محافظت از حافظه به وسیله ی یک بیت محافظ انجمنی که همراه هر قاب است، پیاده سازی شده است. • یک بیت اعتبار به هر ورودی در جدول صفحه مرتبط شده است. • معتبر نشان دهنده ی این است که صفحه ی مرتبط در فضای آدرس منطقی پردازه است، پس یک صفحه ی معتبر است. • نا معتبر نشان دهنده ی این است که صفحه در فضای آدرس منطقی پردازه نیست.
صفحات مشترک • کد مشترک • یک کپی از کد مشترک فقط خواندنی در میان پردازه ها (مثل پردازنده های متن، کامپایلرها و ... ) • کد مشترک باید در فضای آدرس منطقی تمام پردازه ها، در مکان یکسان باشد. • کد و داده ی خصوصی • هر پردازه یک کپی مجزا از کد و داده نگه می دارد. • صفحه ی کد و داده ی خصوصی می توانند هر جایی از فضای آدرس منطقی قرار بگیرند.
ساختار جدول صفحه • صفحه بندی سلسله مراتبی • جدول صفحه های در هم سازی • جدول صفحه های معکوس
مفاهیم سیستم عامل دانشکده ی مهندسی برق و کامپیوتر- دانشگاه صنعتی نوشیروانی بابل صفحه بندی سلسله مراتبی • فضای آدرس منطقی را به چندین جدول صفحه تقسیم می کند. • یک روش ساده، جدول صفحه ی دو-سطحی است.
مثال صفحه بندی دو-سطحی • یک آدرس منطقی ( در یک ماشین 32 بیتی با اندازه ی صفحه ی 4K) تقسیم می شود به: • یک شماره ی صفحه شامل 20 بیت • یک افست صفحه شامل 12 بیت • چون صفحه ی جدول صفحه بندی شده است، شماره ی صفحه تقسیم می شود به: • 10 بیت شماره ی صفحه • 10 بیت افست صفحه • پس، یک آدرس منطقی به صورت زیر است: • P1 اندیس صفحه ی جدول بیرونی است و P2 جابجایی داخل صفحه ی جدول صفحه ی بیرونی است. page number page offset p2 pi d 10 12 10
طرح ترجمه ی آدرس • طرح ترجمه ی آدرس برای یک معماری صفحه بندی 32 بیت دو سطحی
جدول صفحه ی در هم سازی • به طور معمول فضای آدرس ها > 32 بیت • شماره ی صفحه ی مجازی داخل یک جدول صفحه در هم سازی (hash) می شوند. این جدول صفحه شامل یک زنجیره از عناصر است که برای یک مکان در هم سازی (hash) شده اند. • شماره ی صفحات مجازی در این زنجیره aبرای پیدا کردن تلاقی مقایسه می شوند. اگر تلاقی وجود داشت، قاب فیزیکی مربوطه مورد استفاده قرار می گیرد.
جدول صفحه ی معکوس • یک ورودی برای هر صفحه ی واقعی حافظه • ورودی شامل آدرس مجازی صفحه ای است که در آن مکان واقعی حافظه ذخیره شده است، همراه با اطلاعات درباره ی پردازه ی مالک آن صفحه • حافظه ی مصرفی برای نگه داری هر صفحه را کم می کند، اما زمان لازم برای جستجوی جدول در زمان یک ارجاع به صفحه را زیاد می کند. • از جدول در هم سازی برای محدود کردن جستجو به یک (ویا تعداد محدودی از) ورودی های جدول صفحه استفاده می شود.
قطعه بندی (Segmentation) • طرحی برای مدیریت حافظه که از دید کاربر در مورد حافظه پیروی می کند. • یک برنامه مجموعه ای از قطعه ها است. یک قطعه یک واحد منطقی است مثل: • برنامه ی اصلی • رویه • تابع • متد • شیء • متغیرهای محلی، متغیرهای کلی • بلوک عمومی • استک • جدول علائم • آرایه ها است.
1 4 2 3 دید منطقی قطعه بندی 1 2 3 4 user space physical memory space
معماری قطعه بندی • آدرس منطقی از دو قسمت تشکیل شده است: • < شماره ی قطعه، افست> • جدول قطعه ها: آدرس های فیزیکی دو بعدی را نگاشت می کند. هر ورودی جدول دارای دو عنصر پایه و حد است. • پایه: شامل آدرس فیزیکی شروع است.(مکانی که قطعه ها در حافظه قرار می گیرند.) • حد: طول قطعه ها را مشخص می کند. • رجیستر پایه ی جدول قطعه (STBR): به مکان جدول قطعه در حافظه اشاره می کند. • رجیستر طول جدول قطعه (STLR) تعداد قطعه هایی که توسط یک برنامه استفاده شده است را مشخص می کند. • شماره ی قطعه ی s معتبر است اگر s < STLR باشد.
معماری قطعه بندی (ادامه) • محافظت: هر ورودی در جدول قطعه همراه است با: • قطعه غیر مجاز است بیت اعتبار=0 • اجازه ی خواندن، نوشتن، اجرا کردن • بیت های محافظت همراه با قطعه ها هستند. • اشتراک کد در سطح قطعه اتفاق می افتد. • چون قطعات از لحاظ طول متفاوتند، تخصیص حافظه تبدیل به مسئله ی تخصیص حافظه ی پویا می شود.