Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach.
Cache jest elementem właściwie wszystkich systemów - współczesny procesor ma 2 albo 3 poziomy pamięci cache oddzielającej go od pamięci RAM. Dostęp do dysku jest buforowany w pamięci RAM, a dokumenty HTTP są buforowane przez pośredniki HTTP oraz przez przeglądarkę.
Systemy te są tak wydajne dzięki lokalności odwołań - jeśli nastąpiło odwołanie do pewnych danych, jest duża szansa, że w najbliższej przyszłości będą one potrzebne ponownie. Niektóre systemy cache próbują przewidywać, które dane będą potrzebne i pobierają je wyprzedzając żądania. Np. cache procesora pobiera dane w pakietach po kilkadziesiąt czy też więcej bajtów, cache dysku zaś nawet do kolejnych kilkuset kilobajtów czytanego właśnie pliku.
Niektóre systemy pamięci cache umożliwiają informowanie systemu na temat charakteru danych by umożliwiać bardziej efektywne buforowanie. Służy temu np. wywołanie systemowe madvise.
Projektując cache rozpatruje się pewne typowe warunki, w jakich będzie on wykorzystywany. Program korzystający z cache ma więcej informacji na temat użycia pamięci w najbliższym czasie, i wydajność systemu można polepszyć jeśli zrezygnuje się z pełnej automatyzacji a pozwoli na dawanie cache'owi sugestii co do właściwego zachowania w danej sytuacji. W ten sposób działa m.in. wywołanie systemowe madvise, specjalne instrukcje asemblera na niektórych procesorach, nagłówki kontroli cache'owania w HTTP; wiele DBMS pozwala też na przekazywanie kontrolerowi pamięci sugestii.
Zadanie cache można wyrazić w następujący sposób: mamy duży zbiór obiektów w powolnej pamięci, i niewielką ilość szybkiej pamięci, w której na pewno nie pomieszczą się wszystkie obiekty. Ciągle napływają żądania dostępu do obiektów, a cache musi je wszystkie spełnić w jak najmniejszym stopniu korzystając z pamięci powolnej.
Żeby zmaksymalizować średnią temperaturę cache chcielibyśmy operować na poziomie jak najmniejszych jednostek, np. kilku bajtów. Byłoby to jednak bardzo niepraktyczne, więc używa się większych jednostek - np. w DBMS kilkudziesięciokilobajtowych stron. Strona taka może zawierać wiele obiektów. W miarę możliwości powinno się tak projektować strony, aby obiekty na jednej stronie miały podobną i skorelowaną temperaturę.
Jeśli na każdej stronie znajdowałyby się zarówno obiekty gorące jak i chłodne, niemożliwe byłoby uzyskanie wysokiej temperatury cache. Jeśli natomiast niektóre strony będą znacznie cieplejsze od innych, cache może zawierać te pierwsze i osiągnąć wyższą temperaturę. Na przykład w typowym drzewie indeksowym obiekty są relatywnie chłodne, natomiast wskaźniki są znacznie gorętsze. Tak więc trzymanie danych tylko na liściach pozwala na znacznie lepszą separację niż gdyby trzymać je na każdym węźle.
W miarę możliwości powinno się trzymać na stronie obiekty o skorelowanej temperaturze, np. strony pamięci wirtualnej procesora zawierają leżące po kolei bajty, które ze względu na lokalność przestrzenną mają prawdopodobnie skorelowane temperatury. Z tego też powodu używa się osobnych linii cache dla danych i dla kodu.
ProgramowanieSprzęt komputerowy
Cache | Cache | Cache | Cache | Caché | Mémoire cache | 캐시 | Cache | Cache | זיכרון מטמון | Kešavimas | Gyorsítótár | Cache | Cache | キャッシュ (コンピュータシステム) | Cache | Кеш-память | Rýchla vyrovnávacia pamäť | Välimuisti | Cache | แคช | 高速缓存