به فرآیند کنترل کردن و تخصیص دادن حافظه اصلی یا RAMرم کامپیوتر چیست؟ رم کجاست؟ معرفی انواع رم (RAM) کامپیوتراین مقاله عالی به معرفی رم کامپیوتر پرداخته، همچنین بررسی کرده رم کامپیوتر (RAM : Random Access Memory) کجاست و انواع رم کامپیوتر را معرفی کرده است به برنامههای در حال اجرا در یک کامپیوترکامپیوتر چیست؟ ⚡️ کامپیوتر چیست به زبان سادهاین مقاله عالی توضیح داده که کامپیوتر چیست و چه کاربردی دارد و همه چیز درباره کامپیوتر از جمله فواید کامپیوتر و تعریف کامپیوتر و اجزای آن را بیان کرده است بهاصطلاح مدیریت حافظه یا Memory Management میگویند. سرعت حافظه رم یا Random Access Memory که به آن حافظه اصلی (Main Memory) نیز میگویند، بسیار بیشتر از حافظه ثانویه (مانند HDD یا SSD) است اما میزان حجم حافظه آن بسیار کمتر از حافظه ثانویه است بنابراین باید مطمئن شویم تا بلاکهای حافظه اصلی بهخوبی مدیریت شده و منابع آن بهدرستی به سیستم عاملسیستم عامل چیست به زبان ساده، چرا باید از OS استفاده کنیم؟این مقاله عالی به معرفی سیستم عامل (Operating System|OS) به زبان ساده پرداخته، همچنین بررسی کرده که چرا باید از سیستم عامل استفاده کنیم و نرمافزارها و بقیه Processهای در حال اجرا تخصیص داده میشود.
مدیریت کردن حافظه در حوزههای مختلفی مورد استفاده قرار میگیرد و در پلتفرمها و زبان های برنامه نویسیزبان های برنامه نویسی چیست؟این مقاله عالی توضیح داده که زبان های برنامه نویسی چیست؟ و انواع زبان های برنامه نویسی و بهترین زبان برنامه نویسی برای شروع و پردرآمدترین آنها را معرفی کرده مختلف نیز رویکردهای متفاوتی دارد، بهعنوان مثال در حوزه نوشتن کامپایلر (Compiler)کامپایلر چیست و چگونه کار میکند و چرا از آن استفاده میشود؟کامپایلر (Compiler) یک برنامهی خاص برای ترجمه سورس کدهای (Source Code) یک زبان برنامه نویسی، به زبان ماشین یا بایت کد و یا یک زبان برنامه نویسی دیگر است و یا تولید سیستم عامل ممکن است یک رویکرد خاصی پیش رو داشته باشیم و در ساخت نرمافزار یک رویکرد دیگر؛ همچنین تولید نرمافزار برای سیستم عامل ویندوز و یا ساخت بازی برای سیستم عامل اندرويدسیستم عامل اندرويد چیست؟ هر آنچه باید درمورد Android بدانیداندروید چیست و چه ویژگی هایی دارد؟ این مقاله عالی به معرفی سیستم عامل اندروید (Android)، تاریخچه و توسعه اندروید، ویژگی های ورژن های مختلف اندروید پرداخته است، موارد مختلفی را دربرمیگیرد اما هدف تمامی این موارد یک چیز مشترک است و آن تخصیص درست حافظه و جلوگیری از کمبود حافظه و کند شدن و یا از کار افتادن سیستم است.
سه سطح مهم در مدیریت حافظه
بهطور کلی مدیریت حافظه در 3 سطح صورت میپذیرد: 1- در سطح سخت افزارسخت افزار چیست - بررسی اجزای اصلی سخت افزار کامپیوتردر این صفحه بررسی شده که سخت افزار چیست و سخت افزار کامپیوتر به زبان ساده معرفی شده است، همچنین به بررسی اجزای اصلی سخت افزار کامپیوتر پرداخته شده است (Hardware) 2- در سطح سیستم عامل (Operating System) و 3- در سطح برنامه یا نرمافزار. مدیریت حافظه در هر سطح، مکمل یکدیگر میباشند و با همکاری یکدیگر به ایجاد یک محیط بهینه و کارآمد کمک میکنند. در این قسمت بهطور مختصر به موارد مربوط به هر سطح میپردازیم.
مدیریت حافظه در سطح سختافزار
مدیریت حافظه در سطح سختافزار، مربوط به اجزای فیزیکی ذخیره دادهها یعنی حافظه RAM و حافظه کش پردازنده مرکزی یا همان CPU Memory Caches میشود. از مهمترین قسمتهای این سطح میتوان به بخش MMU (Memory Management Mnit) اشاره کرد که مسئول کنترل کردن حافظه پردازشگرها و عملگرهای کشینگ است. مهمترین کاری که واحد MMU انجام میدهد ترجمه آدرس منطقی یا Logical Address پردازندههای در حال اجرا به آدرس فیزیکی یا Physical Address در سختافزارهای حافظه است. معمولا MMUها داخل پردازندهپردازنده (CPU) چیست؟ بررسی انواع، وظایف و کاربردهاسی پی یو قلب کامپیوتر و کامپیوتر قلب دنیای کنونی است، بنابراین در این صفحه به معرفی و بررسی سیپییو یا همان پردازنده مرکزی (CPU) پرداخته شده، و بطور کامل توضیح دادهایم که CPU از چه بخش هایی تشکیل شده و هر بخش چه وظایف و مشخصاتی دارد.ها تعبیه میشوند، البته در بعضی از موارد بهصورت یک مدار جداگانه نیز توسعه داده میشوند.
مدیریت حافظه در سطح سیستم عامل
تقریبا میتوان گفت سختترین بخش مدیریت حافظه بر عهده سیستم عامل است. مدیریت حافظه در سطح سیستم عامل شامل تخصیص میزان خاصی از بلاک حافظه به پردازندههایی که از CPU درخواست منابع کردهاند میشود. برای صحت عملکرد و تطبیق این تخصیص منابع، سیستم عامل باید بهطور پیوسته و دائم فرآیندها یا Processها را بین حافظه اصلی و دستگاههای حافظه ثانویه مانند Hard Disk و SSD جابجا کند و وضعیت هر قسمت حافظه را دائما بررسی کند؛ همچنین سیستم عامل باید تعیین کند که چه مقدار از منابع حافظه، چه موقع و به کدام فرآیند باید تخصیص داده شود. تکنیکی وجود دارد با نام Swapping (سواپنیگ) که در آن سیستم عامل بهطور موقت منابع تخصیص داده شده را از حافظه اصلی به حافظه ثانویه منتقل میکند؛ این امر تا زمانی که منابع اصلی مجددا در دسترس باشد ادامه دارد. در صورت موجود شدن منابع، مجددا منابع از حافظه ثانویه به داخل حافظه اصلی منتقل میشود.
از دیگر مسئولیتهای سیستم عامل در بخش مدیریت حافظه میتوان به وظیفه مدیریت کردن پردازندهها اشاره کرد، زمانی که هیچ حافظه فیزیکی آزادی باقی نمانده است. اگر این اتفاق افتاد، سیستم عامل از حافظه مجازی یا Virtual Memory استفاده میکند. حافظه مجازی در واقع از دستگاههای حافظه ثانویه ایجاد میشود. زمانی که تقاضا برای حافظه از سقف حافظه اصلی موجود در کامپیوتر فراتر رفت، سیستم عامل با ایجاد یک حافظه مجازی بهصورت خودکار به تخصیص منابع درخواستی میپردازد. البته باید خاطر نشان کرد که Virtual Memory بهطور جدی بر روی پرفورمنس و سرعت برنامههای کامپیوتری تاثیر میگذارد، زیرا حافظههای ثانویه یا جانبی سرعت بسیار کمتری نسبت به حافظه اصلی یا RAM دارند.
مدیریت حافظه در سطح برنامه یا نرمافزار
مدیریت حافظه در این سطح در طول فرآیند توسعه نرمافزار پیادهسازی میشود و برعهده خود نرمافزار میباشد یعنی سیستم عامل و واحد MMU دیگر نقشی در مدیریت حافظه ندارد. با مدیریت کردن حافظه در این سطح میتوان از اینکه شیهای داخل برنامه و ساختمان دادهآموزش ساختمان داده و الگوریتمهر ساختمان داده یک نوع فرمت ذخیرهسازی و مدیریت دادهها در کامپیوتر است، که امکان دسترسی و اصلاح کارآمد آن دادهها را برای یکسری از الگوریتمها و کاربردها فراهم میکند، در این صفحه به بررسی و آموزش ساختمان داده و الگوریتم پرداخته شده استها از میزان حافظه مناسبی برخوردارند اطمینان حاصل کرد. دو وظیفه مهم در این بخش وجود دارد:
- تخصیص دادن (Allocation): وقتی برنامه برای یک آبجکت یا یک ساختمان داده درخواست منابع میکند، مقداری از منابع حافظه به آن آبجکت تخصیص داده میشود و تا زمان آزادسازی در اختیار آن آبجکت یا ساختمان داده خواهد بود. فرآیند تخصیص و آزادسازی میتواند بهصورت دستی و یا بهصورت خودکار صورت بپذیرد. اگر بهصورت دستی باشد، خود توسعهدهنده میبایست با کدنویسیکدنویسی چیست؟ – کد نویسی یعنی چهاین مقاله عالی به بررسی این پرداخته که کد نویسی چیست و مفهوم کد نویسی را بررسی کرده، همچنین تفاوت کدنویسی و برنامه نویسی و کاربرد های کدنویسی را بررسی کرده کار این تخصیص را انجام دهد، در صورت اتوماتیک بودن، Memory Manager این فرآیند را بهصورت خودکار انجام میدهد. بخش Memory Manager یا مدیر حافظه در اینجا میتواند در خود زبان برنامه نویسی تعبیه شده باشد و یا بهصورت مجزا در قالب یک ماژول یا کتابخانه به برنامه اضافه شود.
- بازیافت (Recycling): وقتی برنامه برای یک آبجکت و یا یک ساختمان داده دیگر نیازی به حافظه نداشته باشد، آن بخش از حافظه باید آزادسازی یا به اصطلاح Release شود. این فرآیند نیز میتواند بهصورت دستی توسط برنامهنویس و یا بهصورت خودکار انجام شود. به این فرآیند بهاصطلاح Garbage CollectionGarbage Collection(GC) چیست و چگونه کار میکند؟این مقاله عالی بررسی کرده که Garbage Collection(GC) چیست و چگونه کار میکند؟ و مزایای Garbage Collection و انواع روش های Garbage Collection را معرفی کرده یا جمعآوری زباله میگویند.
مدیریت حافظه در زبان های برنامه نویسی
امروزه در اکثر زبانهای برنامه نویسی، فرآیند Garbage Collection بهصورت خودکار انجام میشود اما در زبانهای سطح پایین مانند زبان برنامه نویسی Cزبان برنامه نویسی C – مزایا و کاربرد زبان C – فرق C و ++Cاین مقاله عالی ابتدا توضیح میدهد که زبان برنامه نویسی c چیست، سپس به بررسی مزایا و معایب زبان C ، کاربردهای زبان سی ، و تفاوت بین C و ++C میپردازد و سی پلاس پلاسبرنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده این فرآیند بهصورت دستی صورت میپذیرد. علت عمده این امر افزایش سرعت و پرفورمنس است. تعبیه کردن Garbage Collection باعث کاهش سرعت میشود بنابراین زبانهای سطح پایین از اضافه کردن آن خودداری میکنند.
زبانهای برنامه نویسی دارای Garbage Collection
- زبان Java: زبان برنامه نویسی جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است که یک زبان شی گرا (Object-Oriented)برنامه نویسی شی گرا چیست؟ شی گرایی چیست؟این صفحه عالی به معرفی برنامه نویسی شی گرا پرداخته و توضیح داده شی گرایی یا همان object oriented یا OPP چیست؟ همچنین مزایای برنامه نویسی شی گرا را بیان کرده است، عملیات زباله روبی را بهصورت خودکار انجام میدهد. ماشین مجازی جاوا یا Java Virtual Machine (JVM) فرآیند تخصیص و آزادسازی حافظه را بهعهده دارد.
- زبان C#: زبان سیشارپ یک زبان محبوبشی گرای دیگر است که فرآیند Garbage Collection در آن بهصورت خودکار توسط .NET CLR یا Common Language Runtime انجام میشود.
- زبان Python: زبان برنامه نویسی پایتونزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون (Python) چیست؟ این مقاله عالی به بررسی دلایل محبوبیت پایتون، موارد استفاده از پایتون و نحوه شروع به برنامه نویسی پایتون پرداخته از دیگر زبانهای محبوب و چندمنظوره است که فرآیند زبالهروبی در آن به صورت اتوماتیک انجام میشود.
- زبان Javascript: زبان برنامه نویسی جاوا اسکریپتجاوا اسکریپت چیست؟ معرفی زبان برنامه نویسی java scriptزبان برنامه نویسی جاوا اسکریپت چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای 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 نباشد.