رم: یه ردیف جعبهی شمارهدار (RAM)
حافظه رو مثل میلیاردها جعبهی یکبایتی شمارهدار تصور کن، ببین پردازنده چطور با آدرس توی یکیشون مینویسه و ازش میخونه، و چرا با قطع برق همهچیز توی رم پاک میشه.
تصویر کلی
یه ردیف بلند از جعبههای یکبایتی
رم (RAM)، یعنی حافظهی با دسترسی تصادفی، یه ردیف جعبهست. هر جعبه دقیقاً یه بایت نگه میداره، یعنی هشت بیت، پس یه عدد از ۰ تا ۲۵۵. هر جعبه یه شمارهی مخصوص خودش هم داره، آدرس (Address)ـش، که از ۰ شروع میشه و بالا میره. پردازنده هیچوقت نمیگه «عکس رو بده» یا «کلمهی سلام رو بده»؛ همیشه فقط بایتِ یه آدرس مشخص رو میخواد. چون تکتک بایتها آدرس خودشون رو دارن، به رم میگن بایتآدرسپذیر (Byte-addressable).
یه لپتاپ با ۸ گیگابایت رم حدود ۸٫۶ میلیارد تا از این جعبهها داره (۸ × ۱۰۲۴ × ۱۰۲۴ × ۱۰۲۴)، که از ۰ تا حدود ۸٫۶ میلیارد شماره خوردن.
خودت رو امتحان کن
وقتی پردازنده از رم «آدرس ۱۲» رو میخواد، دقیقاً داره به چی اشاره میکنه؟
- دوازدهمین فایل روی دیسک
- فقط یه جعبهی یکبایتی توی رم، همونی که شمارهش ۱۲ـه
- یه برنامهی کامل که از شمارهی ۱۲ شروع میشه
- دوازدهمین رجیستر داخل پردازنده
جواب رو ببین
فقط یه جعبهی یکبایتی توی رم، همونی که شمارهش ۱۲ـه
درسته. یه آدرس دقیقاً یه جعبه رو مشخص میکنه، و هر جعبه یه بایت نگه میداره. فایلها روی دیسکن و رجیسترها داخل پردازنده؛ آدرس مال رمه.
دسترسی تصادفی (Random Access)
یعنی بتونی به هر آدرسی تقریباً توی یه زمان یکسان برسی، چه جعبهی ۵ باشه چه جعبهی ۵ میلیارد. نوار کاست برعکسشه: برای شنیدن آهنگ آخر باید کل آهنگهای قبلی رو رد کنی. توی رم، هر خوندن حدوداً ۱۰۰ نانوثانیه طول میکشه (نانوثانیه یعنی یه میلیاردم ثانیه). برای آدم این آنیه، ولی همونطور که درس بعد نشون میده، برای پردازنده یه انتظار طولانیه.
خوندن آدرس ۳ و بعدش آدرس ۷ میلیارد تقریباً یهاندازه هزینه داره: نه جلو زدنی، نه گشتنی، فقط «اون جعبه رو بده».
یه دیوار پر از صندوقپستی شمارهدار
یه دیوار ادارهی پست رو تصور کن با میلیاردها صندوق کوچیک شمارهدار، که توی هر کدوم فقط یه برگه با یه عدد جا میشه. پردازنده همون کارمند باجهست: میتونه یه برگه بذاره توی صندوق ۱۲ (نوشتن)، یا نگاه کنه توی صندوق ۱۲ چیه (خوندن). هیچوقت کل دیوار رو نمیگرده؛ همیشه مستقیم میره سراغ یه شماره. جایی که این تشبیه میلنگه: صندوقپستی واقعی میتونه خالی باشه، ولی جعبهی رم همیشه یه مقداری توش هست، حتی اگه آشغالِ باقیمونده از قبل باشه.
خودت رو امتحان کن
خوندن آخرین آدرس رمِ یه کامپیوتر خیلی بیشتر از خوندن آدرس ۰ طول میکشه، چون پردازنده باید از همهی جعبههای وسط رد بشه.
جواب رو ببین
نادرست
غلطه. «دسترسی تصادفی» دقیقاً یعنی همین: به هر آدرسی تقریباً توی یه زمان یکسان میشه رسید، حدود ۱۰۰ نانوثانیه، چه جعبهی اول باشه چه آخری. رد شدن از جعبههای وسط در کار نیست.
قدمبهقدم ببین

شونزده تا جعبهی شمارهدار، همه با مقدار ۰ سمت چپ پردازندهست و سمت راست یه حافظهی کوچولو با شونزده جعبه که از ۰ تا ۱۵ شماره خوردن، هر کدوم یه بایت، و فعلاً همه ۰. دو تا خط بهم وصلشون میکنه: یکی آدرس رو میبره، اون یکی مقدار رو. رم واقعی هم دقیقاً همینجوری کار میکنه، فقط با میلیاردها جعبه.

نوشتن: آدرس ۱۲، مقدار ۶۵ برای نوشتن، پردازنده دو تا چیز رو با هم میفرسته: آدرس ۱۲ روی خط آدرس و مقدار ۶۵ روی خط داده. حالا جعبهی ۱۲ مقدار ۶۵ رو داره و بقیهی جعبهها دستنخورده موندن. (۶۵ همون کد حرف A هم هست، از درس ۲.)

خوندن: آدرس ۱۲ مقدار ۶۵ رو پس میده بعداً برای خوندن، پردازنده فقط آدرس رو میفرسته، یعنی ۱۲. حافظه هر چی توی جعبهی ۱۲ هست رو جواب میده و ۶۵ از روی خط داده برمیگرده. خوندن جعبه رو خالی نمیکنه: ۶۵ همونجا میمونه تا وقتی یه چیزی روش نوشته بشه.

قطع برق: همهی جعبهها فراموش میکنن حالا برق قطع میشه. همهی جعبهها خالی میشن، جعبهی ۱۲ و اون ۶۵ هم همینطور. رم فقط تا وقتی روشنه مقدارها رو نگه میداره؛ برای همینه که بعد از قطع برق، سندی که ذخیره نکرده بودی غیبش میزنه.
خودت رو امتحان کن
توی قابهایی که دیدی، پردازنده ۶۵ رو توی آدرس ۱۲ نوشت، بعد آدرس ۱۲ رو خوند. وسطش هیچ اتفاق دیگهای نیفتاد. چی پس گرفت؟
- ۰، چون خوندن همیشه از یه جعبهی خالی شروع میشه
- ۱۲، یعنی خود آدرس
- ۶۵، همون مقداری که اونجا نوشته بود
- هیچی، چون جعبه بعد از نوشته شدن خالی میشه
جواب رو ببین
۶۵، همون مقداری که اونجا نوشته بود
درسته. هر جعبه مقدارش رو نگه میداره تا وقتی یه چیزی روش نوشته بشه (یا برق بره). آدرس ۱۲ رو بخونی، همون ۶۵ی رو میگیری که اونجا گذاشته شده.
بزرگتر از یه بایت
مقدارهای بزرگ چند تا جعبهی کنار هم رو میگیرن
یه بایت فقط تا ۲۵۵ جا داره، پس هر چیز بزرگتری روی چند تا جعبهی پشتسرهم پخش میشه. یه عدد ۶۴ بیتی ۸ بایتِ پشتسرهم میگیره؛ یه کلمهی متنی برای هر حرف یه بایت یا بیشتر. توی برنامه، متغیر (Variable) در واقع یه اسم خودمونی برای یه آدرسه. و وقتی خود آدرس بهعنوان یه مقدار ذخیره بشه، تا یه بخش از برنامه به بخش دیگه بگه یه چیزی کجاست، به اون مقدار میگن اشارهگر (Pointer).
یه لیست امتیاز ممکنه از آدرس ۵۰۰۰ شروع بشه. برنامه عدد ۵۰۰۰ رو یه جایی بهعنوان اشارهگر نگه میداره، یعنی «لیست از اونجا شروع میشه»، و هر امتیاز رو با شمردن از همونجا پیدا میکنه.
خودت رو امتحان کن
باتری لپتاپ مریم وسط تایپ یه گزارش تموم شد که ذخیرهش نکرده بود. آخرین نسخه فقط توی رم بود، پس از دست رفته.
جواب رو ببین
درست
درسته. رم فرّاره: بدون برق مقدارها از بین میرن. فقط چیزی که روی حافظهی ذخیرهسازی (دیسک) ذخیره شده بود میمونه. برای همینه که ذخیرهی خودکار، که هر چند وقت یهبار کارت رو روی دیسک کپی میکنه، اینقدر مهمه.
حافظه و ذخیرهسازی یکی نیستن
رم (حافظه)
جاییه که برنامههای در حال اجرا و فایلهای باز، وقتی داری کار میکنی، توش هستن.
اندازهی معمول: ۸ یا ۱۶ گیگابایت.
با رفتن برق همهچیز رو فراموش میکنه.
اساسدی (ذخیرهسازی)
جاییه که برنامهها، عکسها و خود سیستم، وقتی چیزی اجرا نمیشه، نگه داشته میشن.
اندازهی معمول: ۲۵۶ گیگابایت تا ۱ ترابایت یا بیشتر.
با خاموش شدن هم همهچیز رو نگه میداره.
خودت رو امتحان کن
- لپتاپ رضا ۸ گیگابایت رم داره. با همون ۴۰ تا تب مرورگر همیشگیش، یه تماس تصویری و یه صفحهگسترده، حدود ۱۱ گیگابایت مصرف میکنه و بهشدت کند میشه. رمش رو ۱۶ گیگابایت میکنه و دوباره روون میشه.
- لپتاپ لیلا ۱۶ گیگابایت رم داره و کارش هیچوقت بیشتر از حدود ۶ گیگابایت مصرف نمیکنه. رمش رو ۳۲ گیگابایت میکنه و هیچ فرقی حس نمیکنه.
چی توضیح میده که چرا یه ارتقای مشابه به رضا کمک کرد ولی به لیلا نه؟
- حتماً رم جدید لیلا خرابه
- رم بیشتر فقط وقتی کمک میکنه که وگرنه کم بیاری؛ رضا از حدش رد شده بود، لیلا اصلاً نزدیکش نبود
- ارتقای رم فقط روی لپتاپهای ۸ گیگابایتی جواب میده
- لیلا دیسک سریعتر لازم داشت نه رم بیشتر، چون رم اصلاً روی سرعت اثری نداره
جواب رو ببین
رم بیشتر فقط وقتی کمک میکنه که وگرنه کم بیاری؛ رضا از حدش رد شده بود، لیلا اصلاً نزدیکش نبود
دقیقاً. رضا ۱۱ گیگ لازم داشت و ۸ تا داشت، پس کامپیوترش مدام چیزها رو روی دیسکِ کند میریخت؛ ارتقا جلوی این رو گرفت. لیلا از ۱۶ گیگش ۶ تا رو استفاده میکرد، پس اون ۱۶ تای اضافه فقط خالی میمونه.
مرور درس
- رم یه ردیف بلند از جعبههاست که هر کدوم یه بایت نگه میداره و یه شماره داره: آدرسش، که از ۰ شروع میشه.
- پردازنده فقط دو تا کار باهاش میکنه: نوشتن یه مقدار توی یه آدرس، و خوندن مقدارِ یه آدرس.
- دسترسی تصادفی یعنی هر آدرسی تقریباً یهاندازه زمان میبره، حدود ۱۰۰ نانوثانیه.
- مقدارهای بزرگتر چند جعبهی کنار هم رو میگیرن؛ متغیر اسمِ یه آدرسه و اشارهگر یه آدرسه که بهشکل مقدار ذخیره شده.
- رم فرّاره: بدون برق همهچیز رو فراموش میکنه، پس کار ذخیرهنشده با قطع برق از دست میره.
- رم بیشتر فقط وقتی کمک میکنه که وگرنه کم بیاری، و اندازهی ذخیرهسازی با اندازهی حافظه یکی نیست.