کنکور کامپیوتر
0
ورود | ثبت نام
نظرات
اشتراک
بالا
علاقه‌مندی

اشتراک
 

مدیریت حافظه در سیستم عامل

این صفحه عالی به آموزش نحوه مدیریت حافظه (Memory Management) در سیستم عامل پرداخته و تکنیک‌هایی که در مدیریت حافظه سیستم عامل استفاده میشود را بیان کرده

مدیریت حافظه (Memory Management) یکی از وظایف اصلی سیستم عاملسیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟سیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟این مقاله عالی به معرفی سیستم عامل (Operating System|OS) به زبان ساده پرداخته، همچنین بررسی کرده که چرا باید از سیستم عامل استفاده کنیم است که در آن، حافظه‌ اصلی (Primary) مدیریت می‌شود؛ به این صورت که فرآیندها یا Processها بین حافظه‌ اصلی و حافظه‌ دیسک جابجا می‌شوند. در فرآیند مدیریت حافظه، تمامی قسمت‌های حافظه (Memory Location) زیر نظر سیستم عامل است، صرف‌نظر از این که آن بخش از حافظهحافظه در کامپیوتر، همه چیز در مورد حافظه در معماری کامپیوترحافظه در کامپیوتر، همه چیز در مورد حافظه در معماری کامپیوتردر این مقاله به بررسی کامل حافظه در کامپیوتر، انواع حافظه در کامپیوتر، کش، روش‌های آدرس دهی کش، نگاشت آدرس و موارد دیگر می‌پردازیم به فرآیندی تخصیص داده شده باشد یا خیر؛ همچنین تصمیم‌گیری درباره‌ی این که چه میزان حافظه در چه زمانی باید به یک فرآیند تخصیص‌داده شود نیز بر عهده‌ی این قسمت است. این عمل دائماً در حال انجام است و حافظه‌ای که به یک فرآیند تخصیص‌داده می‌شود و یا از آن پس‌گرفته می‌شود همیشه در حال به‌روزرسانی است. با ما همراه باشید تا در ادامه‌ی مقاله به مفاهیم اصلی و پایه‌ مدیریت حافظه در سیستم عامل بپردازیم.

فضای آدرس فرآیند

فضای آدرس فرآیند یا Process Address Space در واقع مجموعه‌ای از آدرس‌های منطقی است که فرآیندها در کدهای خود به آن ارجاع می‌دهند؛ به عنوان مثال وقتی از یک سیستم آدرس 32 بیتی استفاده می‌کنیم، آدرس ما می‌تواند 2 به نمای 31 حالت مختلف داشته باشد. همان‌طور که گفته شد، آدرس‌هایی که ارجاع داده شده، فیزیکی نیستند، بلکه منطقی هستند. وظیفه‌ی نگاشت یا مپ‌کردن یک آدرس منطقی به آدرس فیزیکی در زمان تخصیص حافظه به یک برنامه، بر عهده‌ی سیستم عامل است. به طور کلی قبل و بعد از تخصیص حافظه، 3 نوع آدرس داریم که در لیست زیر آنها را مشاهده می‌کنید:

آدرس‌های فیزیکی و مجازی در زمان کامپایل و بارگذاری یکسان هستند، اما در زمان اجرا با یکدیگر تفاوت دارند. در این جا 2 اصطلاح کاربردی وجود دارد؛ به تمامی آدرس‌های منطقی که توسط برنامه به آن ارجاع داده شده، Logical Address Space و به تمامی آدرس‌های فیزیکی مربوط به این آدرس‌های منطقی، Physical Address Space گفته می‌شود.

واحد مدیریت حافظه

نگاشت آدرس مجازی به آدرس فیزیکی توسط واحد مدیریت حافظه یا Memory Management Unit که به اختصار به آن MMU می‌گویند و در واقع یک سخت افزارسخت افزار چیست - بررسی اجزای اصلی سخت افزار کامپیوترسخت افزار چیست - بررسی اجزای اصلی سخت افزار کامپیوتردر این صفحه بررسی شده که سخت افزار چیست و سخت افزار کامپیوتر به زبان ساده معرفی شده است، همچنین به بررسی اجزای اصلی سخت افزار کامپیوتر پرداخته شده است است انجام می‌شود. MMU از مکانیزم‌های زیر برای تبدیل آدرس مجازی به آدرس فیزیکی استفاده می‌کند:

بارگذاری ایستا در مقابل پویا

به طور کلی 2 روش بارگذاری وجود دارد، بارگذاری ایستا و بارگذاری پویا. انتخاب بین بارگذاری ایستا و پویا در زمان توسعه‌ی برنامه مشخص می‌شود. در بارگذاری پویا، تمامی بخش‌های برنامه به طور کامل در زمان کامپایل، کامپایل می‌شوند و هیچ‌گونه لینک خارجی به برنامه یا ماژول‌های خارجی در کار نخواهد بود، بدین صورت تمامی وابستگی‌ها (Dependency) به صورت یکپارچه درون خود برنامه قرار می‌گیرند؛ اما در بارگذاری پویا قضیه کمی متفاوت است، ممکن است وسط اجرای برنامه بخواهیم به یک ماژول خارجی دسترسی پیدا کنیم، در این صورت دیگر امکان ایجاد یکپارچه‌سازی برنامه وجود ندارد و باید در زمان استفاده از ماژول خارجی، بارگذاری انجام شود؛ بنابراین در بارگذاری پویا، تنها برنامه‌ مورد نظر، کامپایل شده و دسترسی به ماژول‌های خارجی، تنها به صورت ارجاع باقی می‌مانند و تمامی مراحل باقی مانده در زمان اجرا انجام می‌شوند. لازم است بدانید در زمان بارگذاری به صورت ایستا، تمامی برنامه و داده‌های مربوطه داخل حافظه بارگذاری می‌شوند؛ اما در بارگذاری پویا، کتابخانه‌ها و ماژول‌های پویا داخل دیسک قرار می‌گیرند و در زمان نیاز برنامه به آنها، داخل حافظه بارگذاری می‌شوند.

لینک‌کردن ایستا در مقابل پویا

همان‌طور که پیش‌تر گفته شد، در بارگذاری به صورت ایستا، لینک کننده یا Liner، تمامی ماژول‌های خارجی را با برنامه ادغام کرده و به صورت یکپارچه در می‌آورد تا هیچ وابستگی در حین اجرای برنامه وجود نداشته باشد. زمانی که از لینک کردن پویا استفاده می‌شود، نیازی به لینک کردن ماژول‌ها و کتابخانه‌ها با برنامه را نداریم؛ در عوض تنها ایجاد ارجاعی به آنها در زمان کامپایل کافی است. Dynamic Link Libraries یا DLL در ویندوز و Shared Objects در یونیکس از جمله مثال‌هایی برای کتابخانه‌های پویا هستند.

مبادله یا Swapping

مبادله یا سواپینگ یک مکانیزمی است که در آن، فرآیندها به صورت موقت از حافظه‌ اصلی به داخل حافظه‌ ثانویه (دیسک) Swap یا مبادله می‌شوند. به وسیله‌ی این کار، میزان حافظه افزایش پیدا می‌کند و در دسترس بقیه‌ی فرآیندها قرار می‌گیرد. در زمان‌های دیگر، مجدداً فرآیندها از حافظه‌ ثانویه به داخل حافظه‌ اصلی Swap می‌شوند. به طور کلی، سواپ کردن بر روی پرفورمنس سیستم تاثیر می‌گذارد و باعث کند شدن می‌شود؛ اما برای این که بتوانیم چندین فرآیند را به صورت موازی (Parallel) پردازش کنیم، چاره‌ای جز این کار نداریم.

تکنیک Swapping برای جابجایی فرایند ها از حافظه ی اصلی به حافظه ی ثانویه و برعکس

زمان کلی (Total Time) سپری شده توسط تکنیک Swapping شامل زمان انتقال از حافظه‌ اصلی به حافظه‌ ثانویه به علاوه‌ی زمان کپی کردن فرآیند از داخل حافظه‌ ثانویه به داخل حافظه‌ اصلی و همچنین زمان به دست گرفتن حافظه‌ اصلی می‌باشد. فرض کنید حجم فرآیند کاربر 3072 کیلوبایت است و سرعت یک هارد دیسک در زمان سواپ کردن 1 مگابایت در ثانیه است. در نتیجه زمان کلی فرآیند سواپ 1536 کیلوبایت از فرآیند به صورت زیر محاسبه می‌شود:

3072KB / 1536KB Per Second = 2 Seconds or 2000 Milliseconds

تخصیص حافظه

حافظه‌ اصلی معمولاً از دو قسمت تشکیل شده است:

مکانیزم تخصیص حافظه توسط سیستم عامل به صورت زیر است:

قطعه قطعه شدن (Fragmentation)

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

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

حافظه، قبل و بعد از اعمال تکنیک فشرده سازی

صفحه‌بندی (Paging)

یک کامپیوترکامپیوتر چیست؟ ⚡️ کامپیوتر چیست به زبان سادهکامپیوتر چیست؟ ⚡️ کامپیوتر چیست به زبان سادهاین مقاله عالی توضیح داده که کامپیوتر چیست و چه کاربردی دارد و همه چیز درباره کامپیوتر از جمله فواید کامپیوتر و تعریف کامپیوتر و اجزای آن را بیان کرده است می‌تواند میزان حافظه‌ای، بیشتر از آن چیزی که به صورت فیزیکی در سیستم است را آدرس‌دهی کند؛ به این حافظه‌ اضافی، به اصطلاح حافظه مجازی یا Virtual Memory می‌گویند. این قسمت از حافظه در واقع بخشی است که هدف آن شبیه‌سازی RAMرم کامپیوتر چیست؟ رم کجاست؟ معرفی انواع رم (RAM) کامپیوتررم کامپیوتر چیست؟ رم کجاست؟ معرفی انواع رم (RAM) کامپیوتراین مقاله عالی به معرفی رم کامپیوتر پرداخته، همچنین بررسی کرده رم کامپیوتر (RAM : Random Access Memory) کجاست و انواع رم کامپیوتر را معرفی کرده است است. تکنیک صفحه‌بندی یکی از تکنیک‌های مهمی است که برای پیاده‌سازی حافظه‌ مجازی مورد استفاده قرار می‌گیرد. در واقع صفحه‌بندی یا همان Paging یکی از تکنیک‌ های مدیریت حافظه است که در آن فضای آدرس به بلاک‌هایی با اندازه‌های یکسان شکسته می‌شود که به آنها صفحه یا Page می‌گویند. اندازه این صفحات معمولاً مضربی از 2 و بین 512 بایت و 8192 بایت است. اندازه‌ی کلی فرآیند براساس تعداد صفحات آن محاسبه می‌شود. به طور مشابه، حافظه‌ اصلی نیز به بلاک‌های کوچک‌تر و با اندازه‌ی یکسان تقسیم می‌شود. به هر تکه از این بخش‌های حافظه (فیزیکی) یک فریم (Frame) می‌گویند. برای جلوگیری از External Fragmentation، سایز فریم‌ها نیز به اندازه‌ی سایز صفحات انتخاب می‌شوند.

صفحه بندی، از تکنیک های مهم مدیریت حافظه توسط سیستم عامل

ترجمه آدرس (Address Translation)

آدرس‌های صفحه با نام آدرس‌های منطقی (Logical Address) شناخته می‌شوند و مقدار آنها با شماره‌ی صفحه و افست نمایش داده می‌شود:

Logical Address = Page Number + Page Offset

آدرس‌های فریم با نام آدرس‌های فیزیکی (Physical Address) شناخته می‌شود و مقدار آنها با شماره‌ی فریم و افست نمایش داده می‌شود:

Physical Address = Frame Number + Page Offset

در اینجا یک ساختمان دادهآموزش ساختمان داده و الگوریتمآموزش ساختمان داده و الگوریتمهر ساختمان داده یک نوع فرمت ذخیره‌سازی و مدیریت داده‌ها در کامپیوتر است، که امکان دسترسی و اصلاح کارآمد آن داده‌ها را برای یکسری از الگوریتم‌ها و کاربردها فراهم می‌کند، در این صفحه به بررسی و آموزش ساختمان داده و الگوریتم پرداخته شده استای وجود دارد به نام جدول نگاشت صفحات یا Page Map Table که از آن برای یافتن و بررسی‌کردن ارتباط بین یک صفحه‌ی فرآیند و فریم مربوط به حافظه‌ فیزیکی آن استفاده می‌شود. وقتی سیستم یک فریم را به هر صفحه‌ی دلخواهی تخصیص داد، آدرس منطقی آن را به آدرس فیزیکی ترجمه می‌کند و یک مدخل (Entry) درون جدول صفحات می‌سازد که برای اجرای برنامه، مورد استفاده قرار می‌گیرد.

ذخیره ی آدرس مجازی و آدرس فیزیکی مربوط به آن در جدول نگاشت صفحات

زمانی که یک فرآیند بخواهد اجرا شود، صفحات مربوط به آن، داخل فریم‌های در دسترس حافظه بارگذاری می‌شوند. فرض کنید برنامه‌ی شما 8 کیلوبایت باشد، اما حافظه‌ شما تنها توانایی تخصیص 5 کیلوبایت به شما را در زمان مورد نظر دارد، در اینجا مفهوم صفحه‌بندی وسط می‌آید. وقتی میزان حافظه‌ رم (RAM) کامپیوتری تمام شده باشد، سیستم عامل صفحاتی که بیکار مانده‌اند را وارد حافظه‌ ثانویه می‌کند تا فضای رم خالی شود و بقیه‌ی فرآیند‌ها بتوانند از حافظه‌ رم استفاده کنند؛ سپس مجدداً در زمان‌های دیگر آنها را به حافظه‌ اصلی باز می‌گرداند.

مزایا و معایب صفحه‌بندی

در لیست زیر، مزایا و معایب تکنیک صفحه‌بندی به طور خلاصه آورده شده است:

قطعه‌بندی (Segmentation)

قطعه‌بندی یا سگمنتیشن یکی از تکنیک‌های مدیریت حافظه است که در آن هر کار (Job) به قطعات کوچک‌تری با سایزهای متفاوت تقسیم می‌شود. در واقع، یک قطعه برای هر ماژول ایجاد می‌شود که شامل تکه‌هایی برای اجرای توابع مرتبط است. در اینجا هر قطعه یا سگمنت دارای آدرس منطقی متفاوتی است. وقتی یک فرآیند اجرا می‌شود، قطعات مختلف مربوط به یک فرآیند که غیرپیوسته و جدا از هم هستند، داخل حافظه و به صورت بلاک‌هایی به هم پیوسته بارگذاری می‌شوند. سیستم مدیریت حافظه‌ قطعه‌بندی، بسیار شبیه به سیستم صفحه‌بندی کار می‌کند؛ با این تفاوت که قطعات یا سگمنت‌ها در اینجا می‌توانند اندازه‌ی متفاوتی داشته باشند و دیگر همانند صفحه‌ها، اندازه‌های یکسان و ثابتی ندارند. یک سگمنت از برنامه، شامل تابع اصلی برنامه، توابع کمکی، ساختمان داده‌ها و... می‌باشد. وظیفه‌ی مدیریت کردن جدول نگاشت سگمنت‌ها برای تمامی فرآیندها و نگهداری لیست بلاک‌های خالی حافظه همه و همه بر عهده‌ی سیستم عامل است. از دیگر وظایف سیستم عامل در قطعه‌بندی می‌توان به نگهداری شماره سگمنت‌ها، اندازه‌ی آنها و مکان مربوط به آن در حافظه‌ اصلی اشاره کرد. به ازای هر سگمنت، آدرس شروع و اندازه‌ی سگمنت، درون جدول ذخیره می‌شود.

جدول نگاشت مربوط به تکنیک قطعه بندی (Segmentation)

جمع‌بندی

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

مدیریت حافظه در سیستم عامل چیست؟

به طور خلاصه، مدیریت حافظه (Memory Management) یکی از عملکردهای اصلی سیستم عامل است که در آن حافظه‌ اصلی (Primary) مدیریت می‌شود؛ به این صورت که فرآیندها (Processes) بین حافظه‌ اصلی و حافظه‌ دیسک جابجا می‌شوند.

چه تکنیک‌هایی در مدیریت حافظه استفاده می‌شود؟

تکنیک‌های بسیاری برای مدیریت حافظه وجود دارد که از مهم‌ترین آنها، می‌توان به صفحه‌بندی (Paging)، قطعه‌بندی (Segmentation) و فشرده‌سازی (Compaction) اشاره کرد.

تفاوت قطعه قطعه شدن داخلی و خارجی چیست؟

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

امتیازدهی5 1 1 1 1 1 1 1 1 1 15.00 امتیاز (2 رای)
اشتراک
بارگذاری نظرات
تلگرام اینستاگرام