У чым розніца паміж кэшам заяў і кэшам дадзеных? Растлумачце простым прыкладам.
адказ 1:
Гэта вельмі проста.
Пасля таго, як была зроблена расшыфроўка, былі зроблены ўсе пераклады, затым была праведзена любая іншая апрацоўка інструкцый
CPU атрымлівае бітныя радкі.
Кожная пэўная радок змяшчае інфармацыю ад,
- Якія аперацыі неабходна правесці і якія дадзеныя неабходна правесці?
Дапусцім, вы хочаце дадаць два ліку x і y. Вы напісалі інструкцыю як x + = y.
Пасля ўсіх пераўтварэнняў высокага да нізкага ўзроўню мы атрымліваем радок як xxxxyyyyzzzzzzzz (дзе x, y, z - бінарныя біты).
Гэты радок утрымлівае х, код для аперацыі, якую трэба выканаць. У нас таксама ёсць y і z, яны - значэнні, якія трэба дадаць.
Такім чынам мы атрымліваем кіраўніцтва і неабходныя значэнні.
Абодва атрыманы з мм. Як вы ведаеце, мы заўсёды імкнемся скараціць час пошуку, няхай гэта будзе мм альбо hdd. Такім чынам, мы падтрымліваем кэш.
У кэшы захоўваюцца рэчы, якія могуць спатрэбіцца зноў.
Паколькі нам таксама прыйшлося расшыфроўваць інструкцыі па эксплуатацыі, мы захоўваем іх дэшыфраваныя версіі ў кэшы, каб мы маглі іх хутка шукаць у будучыні.
У нас ёсць асобны кэш інструкцый і дадзеных, каб пазбегнуць магчымых блытаніны паміж імі, пра якія ёсць.
Дапусцім, вы цыкла.
{
для (i = 0; i <500; i ++)
cout <
}}
Як бачыце, пятля i iтэрыруе. Такім чынам, мае сэнс кэшаваць інструкцыю i ++, каб атрымаць доступ да яе хутчэй і тым самым выконваць хутчэй.
Такім чынам, гэтая інструкцыя, якая змяшчае дзве часткі, захоўваецца ў асобным кэшы. Частка, якая ўтрымлівае інструкцыю аперацыі ітэрацыі, захоўваецца ў кэшы інструкцый. Пераменная i захоўваецца ў кэшы дадзеных.
адказ 2:
Праграма, якая працуе на працэсары, павінна атрымаць паслядоўнасць інструкцый (альбо код / праграма) з памяці. У той жа час, код / каманда можа спатрэбіцца для доступу да дадзеных з розных месцаў.
Напрыклад, выкажам здагадку, што праграма чытае месцазнаходжанне і запісвае яго ў іншае месца (праграма капіявання, як паказана ніжэй).
Загрузіце reg0, memA
Захаваць reg0, memB
Ёсць дзве каманды (загрузіць, захаваць), якія неабходна атрымаць з сховішчаў каманд, і змест memA неабходна спачатку прачытаць, а потым запісаць у memB
Кэш аператара папярэдне выгружае і захоўвае ўсе выказванні (у гэтым выпадку загружае, захоўвае) у кэшы выканаўчых дадзеных, у той час як кэш дадзеных папярэдне выбірае месцы, да якіх звяртаецца (напрыклад, memA).
Перавага асобнага кэша, а не аднаго кэша, заключаецца ў тым, што атрыманне і расшыфроўка інструкцый могуць быць выкананы асобна ад выканання загрузкі / захавання.