پرش به محتوای اصلی
رزرو مشاوره تلفنی تک جلسه‌ای با استاد رضوی
رزرو مشاوره تلفنی
کنکور کامپیوتر
0
اشتراک
 

مدیریت حافظه در برنامه نویسی ⚡️ سه سطح مهم در مدیریت حافظه

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

به فرآیند کنترل کردن و تخصیص دادن حافظه اصلی یا RAM به برنامه‌های در حال اجرا در یک کامپیوتر به‌اصطلاح مدیریت حافظه یا Memory Management می‌گویند. سرعت حافظه رم یا Random Access Memory که به آن حافظه اصلی (Main Memory) نیز می‌گویند، بسیار بیشتر از حافظه ثانویه (مانند HDD یا SSD) است اما میزان حجم حافظه آن بسیار کمتر از حافظه ثانویه است بنابراین باید مطمئن شویم تا بلاک‌های حافظه اصلی به‌خوبی مدیریت شده و منابع آن به‌درستی به سیستم عامل و نرم‌افزارها و بقیه Processهای در حال اجرا تخصیص داده می‌شود.

تصویر رم کامپیوتر

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

سه سطح مهم در مدیریت حافظه

به‌طور کلی مدیریت حافظه در 3 سطح صورت می‌پذیرد: 1- در سطح سخت افزار (Hardware) 2- در سطح سیستم عامل (Operating System) و 3- در سطح برنامه یا نرم‌افزار. مدیریت حافظه در هر سطح، مکمل یکدیگر می‌باشند و با همکاری یکدیگر به ایجاد یک محیط بهینه و کارآمد کمک می‌کنند. در این قسمت به‌طور مختصر به موارد مربوط به هر سطح می‌پردازیم.

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

مدیریت حافظه در سطح سخت‌افزار

مدیریت حافظه در سطح سخت‌افزار، مربوط به اجزای فیزیکی ذخیره داده‌ها یعنی حافظه RAM و حافظه کش پردازنده مرکزی یا همان CPU Memory Caches می‌شود. از مهم‌ترین قسمت‌های این سطح می‌توان به بخش MMU (Memory Management Mnit) اشاره کرد که مسئول کنترل کردن حافظه پردازشگرها و عملگرهای کشینگ است. مهم‌ترین کاری که واحد MMU انجام می‌دهد ترجمه آدرس منطقی یا Logical Address پردازنده‌های در حال اجرا به آدرس فیزیکی یا Physical Address در سخت‌افزارهای حافظه است. معمولا MMUها داخل پردازنده‌ها تعبیه می‌شوند، البته در بعضی از موارد به‌صورت یک مدار جداگانه نیز توسعه داده می‌شوند.

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

تقریبا می‌توان گفت سخت‌ترین بخش مدیریت حافظه بر عهده سیستم عامل است. مدیریت حافظه در سطح سیستم عامل شامل تخصیص میزان خاصی از بلاک حافظه به پردازنده‌هایی که از CPU درخواست منابع کرده‌اند می‌شود. برای صحت عملکرد و تطبیق این تخصیص منابع، سیستم عامل باید به‌طور پیوسته و دائم فرآیندها یا Processها را بین حافظه اصلی و دستگاه‌های حافظه ثانویه مانند Hard Disk و SSD جابجا کند و وضعیت هر قسمت حافظه را دائما بررسی کند؛ همچنین سیستم عامل باید تعیین کند که چه مقدار از منابع حافظه، چه موقع و به کدام فرآیند باید تخصیص داده شود. تکنیکی وجود دارد با نام Swapping (سواپنیگ) که در آن سیستم عامل به‌طور موقت منابع تخصیص داده شده را از حافظه اصلی به حافظه ثانویه منتقل می‌کند؛ این امر تا زمانی که منابع اصلی مجددا در دسترس باشد ادامه دارد. در صورت موجود شدن منابع، مجددا منابع از حافظه ثانویه به داخل حافظه اصلی منتقل می‌شود.

فرآیند Swapping (سواپنیگ) در سیستم عامل

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

مدیریت حافظه در سطح برنامه یا نرم‌افزار

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

  • تخصیص دادن (Allocation): وقتی برنامه برای یک آبجکت یا یک ساختمان داده درخواست منابع می‌کند، مقداری از منابع حافظه به آن آبجکت تخصیص داده می‌شود و تا زمان آزادسازی در اختیار آن آبجکت یا ساختمان داده خواهد بود. فرآیند تخصیص و آزادسازی می‌تواند به‌صورت دستی و یا به‌صورت خودکار صورت بپذیرد. اگر به‌صورت دستی باشد، خود توسعه‌دهنده می‌بایست با کدنویسی کار این تخصیص را انجام دهد، در صورت اتوماتیک بودن، Memory Manager این فرآیند را به‌صورت خودکار انجام می‌دهد. بخش Memory Manager یا مدیر حافظه در اینجا می‌تواند در خود زبان برنامه نویسی تعبیه شده باشد و یا به‌صورت مجزا در قالب یک ماژول یا کتابخانه به برنامه اضافه شود.
  • بازیافت (Recycling): وقتی برنامه برای یک آبجکت و یا یک ساختمان داده دیگر نیازی به حافظه نداشته باشد، آن بخش از حافظه باید آزادسازی یا به اصطلاح Release شود. این فرآیند نیز می‌تواند به‌صورت دستی توسط برنامه‌نویس و یا به‌صورت خودکار انجام شود. به این فرآیند به‌اصطلاح Garbage Collection یا جمع‌آوری زباله می‌گویند.

مدیریت حافظه در زبان های برنامه نویسی

امروزه در اکثر زبان‌های برنامه نویسی، فرآیند Garbage Collection به‌صورت خودکار انجام می‌شود اما در زبان‌های سطح پایین مانند زبان برنامه نویسی C و سی پلاس پلاس این فرآیند به‌صورت دستی صورت می‌پذیرد. علت عمده این امر افزایش سرعت و پرفورمنس است. تعبیه کردن Garbage Collection باعث کاهش سرعت می‌شود بنابراین زبان‌های سطح پایین از اضافه کردن آن خودداری می‌کنند.

زبان‌های برنامه نویسی دارای Garbage Collection

  • زبان Java: زبان برنامه نویسی جاوا که یک زبان شی گرا (Object-Oriented) است، عملیات زباله روبی را به‌صورت خودکار انجام می‌دهد. ماشین مجازی جاوا یا Java Virtual Machine (JVM) فرآیند تخصیص و آزادسازی حافظه را به‌عهده دارد.
  • زبان C#: زبان سی‌شارپ یک زبان محبوب‌شی گرای دیگر است که فرآیند Garbage Collection در آن به‌صورت خودکار توسط .NET CLR یا Common Language Runtime انجام می‌شود.
  • زبان Python: زبان برنامه نویسی پایتون از دیگر زبان‌های محبوب و چندمنظوره است که فرآیند زباله‌روبی در آن به صورت اتوماتیک انجام می‌شود.
  • زبان Javascript: زبان برنامه نویسی جاوا اسکریپت که به‌طور عمده برای برنامه نویسی وب مورد استفاده قرار می‌گیرد، دارای الگوریتم‌هایی برای پیاده‌سازی Garbage Collection است؛ همچنین مدیریت منابع در این زبان به‌صورت بسیار کارآمد صورت می‌پذیرد.
  • زبان‌های دیگری هم وجود دارند که به‌صورت خودکار عملیات Garbage Collection را انجام می‌دهند، مانند زبان Ruby، زبان Lisp، زبان PHP و...

زبان‌های برنامه نویسی بدون Garbage Collection

  • زبان C: یک زبان سطح پایین و Procedural است که به کارآمدی، سرعت بالا و کنترل بر روی منابع سیستمی معروف است، برنامه‌نویسان این زبان باید به‌صورت دستی به تخصیص و آزادسازی منابع حافظه‌ای بپردازند؛ به‌عنوان مثال توابعی مانند malloc() و free() برای این کار استفاده می‌شوند.
  • زبان C++: زبان C++ که نسخه شی‌گرا و تعمیم‌یافته از زبان C است، مانند C مدیریت منابع در آن به‌صورت دستی از طریق توابع new و delete انجام می‌شود. البته زبان سی پلاس پلاس ویژگی‌های دیگری مانند Smart Pointers و کلاس‌های مدیریت منابع نیز در اختیار برنامه‌نویسان قرار می‌دهد.
  • زبان Rust: زبان Rust که اخیرا مورد توجه برنامه‌نویسان قرار گرفته است از دیگر زبان‌های مدرن برنامه نویسی سیستمی است که برای افزایش پرفورمنس و Memory Safety، از اضافه کردن Garbage Collection خودکار اجتناب کرده است.
  • زبان Go: زبان برنامه نویسی گو یا گولنگ که توسط گوگل توسعه داده شده است نیز دارای زباله روب خودکار نمی‌باشد.

مدیریت حافظه در سطح کاربر

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

جمع‌بندی

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

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

به‌طور خلاصه به فرآیند کنترل کردن و تخصیص دادن حافظه اصلی (RAM) به برنامه‌های در حال اجرا در یک کامپیوتر به اصطلاح مدیریت حافظه یا Memory Management می‌گویند.

آیا مدیریت حافظه در زبان‌های برنامه نویسی به‌طور خودکار انجام می‌شود؟

بعضی از زبان‌های برنامه نویسی مانند زبان جاوا، زبان سی شارپ و زبان پایتون، بعضی از فرآیند مدیریت حافظه مانند Garbage Collection را به‌طور خودکار انجام می‌دهند؛ در حالی که در زبان‌های سطح پایین‌تر مانند زبان C/C++ و زبان Go اینکار به‌صورت دستی صورت می‌پذیرد.

مدیریت حافظه در برنامه نویسی چقدر اهمیت دارد؟

یکی از مباحث بسیار مهم در هنگام کدنویسی، مبحث مدیریت حافظه است. برنامه‌نویس باید از منابع به‌طور کارآمد و صحیح استفاده کند و اطمینان حاصل کند که برنامه نوشته شده دارای هیچ نشتی حافظه یا Memory Leaks نباشد.

این مطلب چقدر به کارت آمد؟511111111115.00 از ۵ 4 رأی
اشتراک

پرسش و پاسخ داوطلبان کنکور ارشد کامپیوتر

سوال شما توسط استاد رضوی پاسخ داده می‌شود و از طریق پیامک به شما اطلاع رسانی می‌شود
×
kb
هیچ نظری ارسال شده در اینجا وجود ندارد
تلگرام اینستاگرام تماس با پشتیبانی: 09378555200 تماس با پشتیبانی: 09378555200
خدمات ما
پشتیبانی کنکور کامپیوتر

سؤالی داری؟ از ۸ صبح تا ۱۰ شب پاسخ‌گوییم.

تماس با پشتیبانی۰۹۳۷۸۵۵۵۲۰۰ پشتیبانی در تلگرامپاسخ‌گویی پیامی
شبکه‌های اجتماعی
کانال تلگرام اینستاگرام آپارات یوتیوب
اشتراک‌گذاری این مطلب

مدیریت حافظه در برنامه نویسی ⚡️ سه سطح مهم در مدیریت حافظه

تلگرام واتس‌اپ ایکس
https://www.konkurcomputer.ir/مدیریت-حافظه-در-برنامه-نویسی.html
خدمات کنکور کامپیوتر
هر چیزی که برای قبولی لازم داری، یک‌جاخدمات ما

از مشاوره‌ی شخصی با استاد رضوی تا فیلم‌های دروس، پلتفرم‌ها و ابزارهای رایگان

مشاوره‌ی شخصی با استاد رضوی
تماس با پشتیبانی