فرض کنیم که شما هر روز به رستوران می روید. هر روز راس ساعت ۵ بعد از ظهر سفارش غذا می دهید. هر روز ۴ نوع غذا را به ترتیب خاص سفارش می دهید. راس ساعت ۵ همبرگر سفارش می دهید، گارسون سفارش شما رو بررسی می کند، به آشپزخونه میرود، بعد از ۱ دقیقه همبرگر را برای شما می آورد، شما همبرگر را خورده و سفارش سوسیس می دهید. مجددأ سفارش توسط گارسون به آشپزخانه منتقل شده و بعد از یک دقیقه غذا آماده می شود. به همین ترتیب شما سه غذای دیگه را سفارش داده و برای هر غذا ۱ دقیقه معطل میشوید. خوب شما هروز همین غذاها را سفارش داده و برای آماده شدن هر غذا ۱ دقیقه معطل می شوید. گارسون با خودش فکر می کند که برای اینکه هم خودش کمتر کار کند و هم شما کمتر معطل شوید، ۱ میز دیگر آماده از غذاهای شما را تهیه کند و بلافاصله بعد از سفارش شما غذا را روی میزتان قرار دهد. در اینجا گارسون “باس”، آشپزخانه “رم”، و میز آماده “کش” در نظر گرفته می شوند. بعد از چند روز شما همبرگر را میخورید، طبق عادت گارسون برای شما سوسیس می آورد، اما شما میگویید که امروز پیتزا می خواهم! اینجا گارسون مجددا مجبور میشود که ۱ دقیقه شما را در انتظار نگه دارد تا پیتزا را برایتان بیاورد. در اینجا گارسون میز دومی را تهیه می کند که بر اساس انتخاب های دوم شما چیده شده است. بدین ترتیب شما اگر غذایی را سفارش دهید که در میز اول نباشد، اما در میز دوم باشد بلافاصله غذا را میل می کنید و معطل نمی شوید. میز دوم در اینجا کش سطح دو یا “Cache L2″ است. اصطلاحی که امروزه در رابطه با فول کش یا هالف کش گفته میشود همین کش سطح ۲ است. اصول کار پردازنده بدین صورت که پیش بینی دستورات بعدی را کرده و جواب دستورات را در حافظه ی نهان یا همون کش قرار میدهد. جالب است که بدانید پردازنده ۹۰% دستورات بعدی را درست حدس میزند و اگر حدس پردازنده غلط از کار در بیاد مجبور است که به حافظه ی رم مراجعه نماید که همین مراجعه باعث تاخیر زیادی در کار پردازنده میشود. نکته قابل گفتن این است که این حافظه بسیار گران قیمت است و به صرفه نیست که برای بالا بردن سرعت کامپیوتر حافظه کش تهیه کنید (مجبورید پردازنده را هم عوض کنید!).
کتابداری را در نظر بگیرید که در یک کتابخانه مسئول تحویل کتاب به متقاضیان است. فرض کنید در سیستم فوق (درخواست و تحویل کتاب) از مفهوم Cache استفاده نمی گردد. اولین متقاصی کتابی را درخواست می نماید(فرض شده است که متقاضی خود نمی تواند مستقیما” کتاب مورد نظر را از قفسه مربوطه،بردارد)، کتابدار، کتاب مورد نظر را از قفسه مربوطه پیدا و در ادامه آن را تحویل متقاضی می نماید. متقاضی پس از ساعاتی مراجعه و کتاب را تحویل می دهد. کتابدار، کتاب تحویلی را مجددا” در قفسه مربوطه قرار می دهد. پس از لحظاتی یک متقاضی دیگر مراجعه و همان کتاب قبلی را درخواست می نماید، کتابدار مجددا” می بایست به بخش مربوطه در کتابخانه مراجعه و پس از بازیابی کتاب، آن را در اختیار متقاضی دوم قرار دهد.همانگونه که ملاحظه می گردد، کتابدار مکلف است برای تحویل هر کتاب (ولو کتاب هائی که فرکانس استفاده از آنان توسط متقاضیان زیاد باشد) به بخش مربوطه مراجعه و پس از یافتن کتاب آن را در اختیار متقاضیان قرار دهد. آیا روشی وجود دارد که با استناد به آن بتوان عملکرد و کارآئی کتابدار را بهبود بخشید ؟
در پاسخ به سوال فوق می توان با ایجاد یک سیستم Cache برای کتابدار، کارآئی آن را افزایش داد. فرض کنید بخشی را با ظرفیت حداکثر ده کتاب در مجاورت (نزدیکی) کتابدار آماده نمائیم. کتاب هائی که توسط متقاضیان برگردانده می شود، در بخش فوق ذخیره خواهند شد. مثال فوق را با در نظر گرفتن سیستم Cache ایجاد شده برای کتابدار مجددا” دنبال می نمائیم. در ابتدای فعالیت روزانه، بخش Cache خالی بوده و هنوز در آن کتابی قرار نگرفته است. اولین متفقاصی مراجعه و کتابی را درخواست می نماید. کتابدار می بایست به بخش مربوطه مراجعه و کتاب را از قفسه مربوطه براشته و در اختیار متقاضی قرار دهد. متقاضی پس از تحویل کتاب، چند ساعت بعد مراجعه و کتاب را تجویل کتابدار خواهد داد. کتابدار، کتاب تحویلی را در بخش پیش بینی شده (ترفندستان) برای Cache قرار می دهد. لحظاتی بعد متقاضی دیگر مراجعه و درخواست همان کتاب را می نماید.کتابدار در ابتدا بخش مربوط به Cache را جستجو و در صورت یافتن کتاب، آن را به متقاضی تحویل خواهد داد. در این حالت ضرورتی به مراجعه کتابدار به بخش و قفسه های مربوطه نخواهد بود. در روش فوق زمان تحویل کتاب به متقاضی بهبود چشمگیری پیدا خواهد کرد. در صورتیکه کتاب درخواستی توسط متقاضی در بخش Cache کتابخانه نباشد، چه اتفاقی خواهد افتاد؟ در ابتدا مدت زمانی صرف خواهد شد که کتابدار به این اطمینان برسد که کتاب درخواستی در بخش Cache موجود نمی باشد (جستجو) یکی از چالش های اصلی در رابطه با طراحی Cache به حداقل رساندن زمان جستجو در Cache است.سخت افزارهای جدید، زمان فوق را به صفر نزدیک کرده اند. پس از حصول اطمینان از عدم وجود کتاب در بخش Cache، کتابدار می بایست با مراجعه به بخش مربوطه آن را انتخاب و در ادامه در اختیار متقاضی قرار دهد.
با توجه به دو مثال فوق، چندین نکته مهم در رابطه با Cache استنباط می گردد:
– تکنولوژی Cache، استفاده از حافظه های سریع ولی کوچک، بمنظور افزایش سرعت یک حافظه کند ولی با حجم بالا است
– زمانیکه از Cache استفاده می گردد، در ابتدا می بایست محتویات آن بمنظور یافتن اطلاعات مورد نظر بررسی گردد. فرآیند فوق را Cache hit می گویند. در صورتیکه اطلاعات مورد نظر در Cache موجود نباشند (Cache miss)، کامپیوتر می بایست در انتظار تامین داده های خود از حافظه اصلی سیستم باشد (حافظه ای کند ولی با حجم بالا)
– اندازه Cache محدود بوده وسعی می گردد که ظرفیت فوق حتی المقدور زیاد باشد، ولی بهرحال اندازه آن نسبت به رسانه های ذخیره سازی دیگر بسیار کم است.
– این امکان وجود خواهد داشت که از چندین لایه Cache استفاده گردد.