Кешпамет

Кеширане е термин, използван в компютърните науки. Идеята на кеша (произнася се "кеш" /ˈkæʃ/ KASH ) е много проста: Много често получаването на резултат от дадено изчисление отнема много време, така че съхраняването на резултата обикновено е добра идея. Използват се два вида носители за съхранение: Единият обикновено е доста голям, но достъпът до него е "бавен"; другият може да бъде достъпен много по-бързо, но обикновено е малък. Най-основната идея зад кеширането е да се използва носителят, който е бърз за достъп, за да има копия на данните. Няма разлика между копието и оригинала. Достъпът до оригиналните данни може да отнеме много време или да е скъп (например: резултатите от трудна задача, чието решаване отнема много време). По тази причина е много "по-евтино" просто да се използва копието на данните от кеша. Казано по друг начин, кешът е временна област за съхранение, в която има копия на данни, които се използват често. Когато копие на данните се намира в този кеш, по-бързо е да се използва това копие, отколкото да се изтеглят или преизчислят оригиналните данни. Така средното време, необходимо за достъп до данните, става по-кратко. Поставянето на нова стойност в кеша често означава, че трябва да се замени по-стара стойност. Съществуват различни идеи (обикновено наричани "стратегии") за това как да се избере стойността, която да се замени.

Буферът е много подобен на кеша. Той се различава по това, че клиентът, който получава достъп до данните в буфера, знае, че има буфер; буферът се управлява от приложението. При кеша клиентът, който получава достъп до данните, не трябва да знае, че има кеш.

Типичните компютърни приложения имат достъп до данни по много сходни начини. Да предположим, че данните са структурирани в "блокове", до които може да се получи индивидуален достъп. Когато дадено приложение осъществява достъп до блок, много вероятно е да осъществи достъп (или препратка) и до блок, който е "близък" до оригиналния блок. Това е известно като локалност на референцията. Съществуват различни видове такава "локалност". Локалността на препратките е една от причините, поради които кешовете работят добре в много области на изчислителната техника.

За да работят добре, кешовете са малки в сравнение с цялото количество данни. Колкото по-голям е кешът, толкова по-дълго време отнема търсенето на даден запис. Изграждането на по-големи кешове е и по-скъпо.

Как работи кешът

Кеш паметта е блок от паметта, в който се съхраняват данни, които вероятно ще се използват отново. Процесорът и твърдият диск често използват кеш, както и уеб браузърите и уеб сървърите.

Кешът се състои от много записи, наречени пул. Всеки запис съдържа данни (бит данни), които са копие на данни на друго място. Кешовете обикновено използват така нареченото резервно хранилище. Достъпът до резервните хранилища е бавен или скъп в сравнение с достъпа до кеша. Дисковият кеш например използва твърдия диск като резервно хранилище. Към всеки запис е прикрепена и малка информация, наречена таг. Този етикет се използва за намиране на мястото, където се съхраняват оригиналните данни.

Кешове за четене

Клиент (процесор, уеб браузър, операционна система), който иска да получи достъп до част от данните, за които смята, че се намират в резервното хранилище, първо проверява дали данните могат да бъдат намерени в кеша. Ако данните могат да бъдат намерени в кеша, клиентът може да ги използва и не е необходимо да използва основната памет. Това е известно като попадение в кеша. Така например програмата за уеб браузър може да провери локалния си кеш на диска, за да види дали има локално копие на съдържанието на уеб страница на определен URL адрес. В този пример URL адресът е тагът, а съдържанието на уебстраницата е данните.

Друга ситуация, която може да възникне, е данните с етикета да не могат да бъдат открити в кеша. Това е известно като пропускане на кеша. Данните трябва да се изтеглят от резервното хранилище. Обикновено тя се копира в кеша, така че следващия път вече не е необходимо да бъде извличана от опорното хранилище.

Кешът има ограничен размер. За да се освободи място за некеширания преди това запис, може да се наложи друг кеширан запис да бъде изтрит от кеша. Използват се специални правила, за да се намери записът, който е най-добре да бъде изтрит. Тези правила обикновено се наричат евристични. Евристиките, използвани за намиране на записа, се наричат политика на заместване. Едно много просто правило, което се използва, се нарича Най-малко използвано (или LRU). При него просто се взема записът, който е бил използван най-дълго преди това. Други евристики са изброени в алгоритъма на кеша..

Кешове за писане

Кешовете могат да се използват и за записване на данни; предимството на това е, че клиентът може да продължи работата си, след като записът е записан в кеша; не е необходимо да чака, докато записът бъде записан в резервното хранилище.

Въпреки това записът трябва да бъде записан в архивното хранилище в определен момент от време. Моментът, в който това се случва, се контролира от политиката за запис.

В кеша за запис всеки запис се записва незабавно в резервното хранилище, както и се съхранява в кеша.

Другият вариант е да записвате само в кеша и да записвате в резервното хранилище по-късно. Това е познато като кеш за обратно записване (или задно записване). Кешът маркира записите, които все още не са записани в опорното хранилище; марката, която се използва, често се нарича dirty flag (мръсен флаг). Преди записите да бъдат изтрити от кеша, те се записват в резервното хранилище. Това е известно като мързеливо записване. При пропуск в кеша за обратно записване (който изисква даден блок да бъде заменен с друг) често ще са необходими два достъпа до паметта: един за получаване на необходимата информация и друг за записване на заменените данни от кеша в хранилището.

Политиката за кеширане може също така да указва, че определена информация трябва да бъде записана в кеша. Възможно е клиентът да е направил много промени на данните в кеша. След като приключи, той може изрично да каже на кеша да запише обратно данните.

Разпределението без запис е политика на кеширане, при която се кешират само четения. По този начин се избягва необходимостта от кеширане с обратен запис или със запис чрез кеширане. Записванията се извършват в резервното хранилище през цялото време.

Клиентът не е приложението, което променя данните в резервното хранилище. Ако данните се променят в резервното хранилище, копието в кеша ще бъде неактуално или застояло. Алтернативно, когато клиентът актуализира данните в кеша, копията на тези данни в други кешове ще станат остарели. Съществуват специални комуникационни протоколи, които позволяват на кеш мениджърите да разговарят помежду си, за да запазят актуалността на данните. Те са известни като протоколи за кохерентност.

Схема на кеш паметта на процесораZoom
Схема на кеш паметта на процесора

Избиране на записа за замяна

Кешът е малък и през повечето време ще бъде пълен или почти пълен. Така че, когато се добави нова стойност, трябва да се премахне старата. Съществуват различни начини, по които може да се направи тази селекция:

  • Първи влязъл, първи излязъл: Просто заменете записа, който е бил добавен в кеша преди най-дълго време
  • Най-малко използван: Тази идея е подобна на FIFO по-горе, но когато даден запис се използва, се актуализира неговият времеви печат/възраст.
  • Най-рядко използвани: Отново, подобно на случая с FIFO, вместо да се използва времеви печат, се използва брояч, който се увеличава всеки път, когато се използва даден запис.
  • Изберете запис на случаен принцип

История

Думата "кеш" е използвана за първи път в областта на компютрите през 1967 г., когато е подготвена научна статия за публикуване в IBM Systems Journal. Статията е за ново подобрение на паметта в Модел 85. Модел 85 е компютър от продуктовата линия IBM System/360. Редакторът на списанието искаше по-добра дума за високоскоростния буфер, използван в статията. Той не получил предложение и предложил cache, от френското cacher, което означава "скривам". Статията е публикувана в началото на 1968 г., а авторите са отличени от IBM. Тяхната работа беше широко приветствана и подобрена. Скоро кешът се превърна в стандартна употреба в компютърната литература.

Къде се използват кешове

Процесорни кешове

Малките памети в чипа на процесора или в близост до него могат да бъдат направени по-бързи от много по-голямата основна памет. Повечето процесори от 80-те години на миналия век насам използват един или повече кеша. Съвременните процесори с общо предназначение в персоналните компютри могат да имат до половин дузина. Всеки кеш може да бъде специализиран за различна част от задачата за изпълнение на програми.

Дискови кешове

Процесорните кешове обикновено се управляват изцяло от хардуер, а други кешове се управляват от различни видове софтуер. Операционната система обикновено управлява кеш на страници в основната памет. Потребителите извън компютърните науки обикновено наричат този кеш виртуална памет. Той се управлява от ядрото на операционната система.

Съвременните твърди дискове разполагат с дискови буфери. Понякога те се наричат "дискови буфери", но това е погрешно. Основната функция на тези буфери е да подреждат записите на диска и да управляват четенията. Повторните попадения в кеша са рядкост, тъй като буферът е много малък в сравнение с размера на твърдия диск.

Местните твърди дискове са бързи в сравнение с други устройства за съхранение, като например отдалечени сървъри, местни лентови устройства или оптични игрални автомати. Използването на локални твърди дискове като кешове е основната концепция на йерархичното управление на съхранението.

Уеб кешове

Уеб браузърите и уеб прокси сървърите използват кешове, за да съхраняват предишни отговори от уеб сървъри, например уеб страници. Уеб кешовете намаляват количеството информация, която трябва да се предава по мрежата. Информацията, която преди това е била съхранявана в кеша, често може да бъде използвана повторно. По този начин се намалява широчината на честотната лента и изискванията за обработка на уеб сървъра и се подобрява бързината на реакция на потребителите на уеб.

Съвременните уеб браузъри използват вграден уеб кеш, но някои доставчици на интернет услуги или организации използват и кеширащ прокси сървър. Това е уеб кеш, който се споделя от всички потребители на тази мрежа.

Търсачките също така често предоставят индексираните от тях уеб страници в своя кеш. Например Google предоставя връзка "Кеширано" до всеки резултат от търсенето. Това е полезно, когато уеб страниците са временно недостъпни от уеб сървъра.

Кеширане при ненадеждни мрежи

Записването през мрежата е често срещано в ненадеждни мрежи (като Ethernet LAN). В такъв случай протоколът, който се използва, за да се гарантира, че данните в кеша за запис имат смисъл, когато се използват няколко кеша за запис, е много сложен.

Например кешовете на уеб страници и кешовете на мрежови файлови системи от страна на клиента (като тези в NFS или SMB) обикновено са само за четене или за запис, за да се запази прост и надежден мрежовият протокол.

Разликата между буфер и кеш

Буферът и кешът не се изключват взаимно; те често се използват и заедно. Причината, поради която се използват, обаче е различна. Буферът е място в паметта, което традиционно се използва, тъй като инструкциите на процесора не могат да адресират директно данни, съхранявани в периферни устройства. Компютърната памет се използва като междинно хранилище.

Освен това подобен буфер може да бъде осъществим, когато се сглобява или разглобява голям блок от данни (както се изисква от устройство за съхранение) или когато данните могат да бъдат доставени в ред, различен от този, в който са създадени. Също така цял буфер от данни обикновено се прехвърля последователно (например на твърд диск), така че самото буфериране понякога увеличава производителността на прехвърлянето. Тези предимства са налице, дори ако буферираните данни се записват в буфера веднъж и се четат от него веднъж.

Кешът също така увеличава производителността на трансфера. Част от увеличението се дължи на възможността множество малки трансфери да се обединят в един голям блок. Но основното увеличение на производителността се получава, защото има голяма вероятност една и съща информация да бъде прочетена от кеша няколко пъти или че записаните данни скоро ще бъдат прочетени. Единствената цел на кеша е да намали достъпа до основната по-бавна памет. Кешът също така обикновено е абстрактен слой, който е проектиран да бъде невидим от гледна точка на съседните слоеве. По този начин приложенията или клиентите може да не знаят, че има кеш.

Въпроси и отговори

В: Какво представлява кеширането?


О: Кеширането е термин, използван в компютърните науки, който се отнася до практиката на съхраняване на копия на данни, които се използват често, за да се получи по-бърз достъп до тях, отколкото да се извличат или преизчисляват оригиналните данни.

В: Как работи кеширането?


О: Кеширането работи чрез използване на два вида носители за съхранение - един, който обикновено е доста голям, но достъпът до него е бавен, и друг, който може да бъде достъпен много по-бързо, но обикновено е по-малък. Идеята на кеширането е да се използва бързият носител за съхранение на копия на данни, така че достъпът до оригиналните данни да отнема по-малко време или да е по-евтин.

Въпрос: Какво представлява буферът?


О: Буферът е подобен на кеша по това, че съхранява копия на данни за по-бърз достъп, но при буфера клиентът, който получава достъп до данните, знае, че има буфер и той се управлява от приложението, докато при кеша клиентите не трябва да знаят, че има кеш.

В: Какво означава локалност на референцията?


О: Локалността на референцията означава, че когато дадено приложение получава достъп до определени блокове от структурирани данни, то вероятно ще получи достъп и до други блокове, близки до първоначално достъпните. Това спомага за добрата работа на кеша, тъй като той обикновено е малък в сравнение с всички налични данни.

Въпрос: Защо по-големите кешове изискват повече време за търсене на записи?


О: По-големите кешове отнемат повече време, защото съдържат повече съхранена информация и следователно изискват повече време за търсене. Те са и по-скъпи, тъй като изискват повече ресурси за съхранение.

В: Как локалността може да помогне за по-добрата работа на кешовете?


О: Локалността спомага за по-добрата работа на кешовете, защото когато приложенията имат достъп до определени блокове структурирани данни, те вероятно ще се нуждаят и от други близки блокове, които могат да бъдат бързо извлечени от кеша, вместо да се налага да ги извличат от друго място или да ги преизчисляват отново.

AlegsaOnline.com - 2020 / 2023 - License CC3