Мултипроцесорски системи/Ослушкујући протоколи

Извор: SI Wiki
< Мултипроцесорски системи
Датум измене: 4. децембар 2022. у 23:51; аутор: KockaAdmiralac (разговор | доприноси) (WIP)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

Ослушкујући (snoopy) протоколи кеш кохеренције се предају у другом блоку наставе на предавањима и делом на вежбама. Овај водич наводи њихове главне карактеристике и објашњава њихове дијаграме функционисања, како би студенти могли да разумеју њихове сличности и разлике и на основу више интуиције а мање бубања дијаграма реше задатак који ће се из ових протокола неизбежно појавити на колоквијуму.

Дијаграми

Дијаграми испод биће изложени на исти начин као на вежбама и предавањима. Најтежи део разумевања ових протокола јесте разумевање дијаграма на којима се заснивају.

Елементи дијаграма јесу:

  • Кружићи: представљају стања у којима се један податак у кешу може наћи. Унутар кружића налази се ознака стања.
  • Пуне стрелице: представљају прелазе између стања као резултат акција тог процесора чији је кеш.
  • Испрекидане стрелице: предствљају прелазе између стања као резултат акција на магистрали које контролер кеш меморије ослушкује. Обојене су црвеном бојом како би било јасније да су ове акције другачије од оних извршених од стране процесора.
  • Ознаке изнад стрелица: описују узроке и последице преласка из једног у друго стање.
    • Могући формати ових ознака су:
      • Узрок/Последица
      • Узрок/Последица(Услов)
      • Узрок/Последица1; Последица2
      • Узрок/Последица1; Последица2(Услов).
    • Узроци могу бити:
      • PrRd: наш процесор је затражио читање датог податка.
      • PrWr: наш процесор је затражио упис у дати податак.
      • BusRd: контролер кеш меморије је приметио да неки други процесор на магистрали покушава да прочита дати податак.
      • BusWr: контролер кеш меморије је приметио да неки други процесор на магистрали покушава да упише у дати податак.
      • BusRdX: контролер кеш меморије је приметио да неки други процесор на магистрали покушава да прочита дати податак са намером да после тога пише у њега. Овај узрок се користи уместо BusWr у свим протоколима осим WTI.
      • BusUpgr: контролер кеш меморије је приметио да неки други процесор на магистрали инвалидира дати податак.
      • Replace: податак је замењен у кеш меморији неким другим податком.
      • PrRdMiss: десио се промашај при читању датог податка од стране процесора (податак није био у кешу претходно). Овај узрок је присутан само на дијаграмима ажурирајућих протокола, јер они немају специјално стање којим представљају да податак није у кешу.
      • PrWrMiss: десио се промашај при писању у дати податак од стране процесора (податак није био у кешу претходно). Овај узрок је присутан само на дијаграмима ажурирајућих протокола, јер они немају специјално стање којим представљају да податак није у кешу.
      • BusUpd: контролер кеш меморије је приметио да неки други процесор на магистрали покушава да свим осталим контролерима каже да ажурирају тај податак код себе. Овај узрок је присутан само на дијаграмима ажурирајућих протокола.
    • Последице могу бити:
      • --: без последице
      • BusRd: изазвано је читање податка из меморије
      • BusWr: изазван је упис податка у меморију
      • BusRdX: изазвано је читање податка из меморије са намером за упис
      • Flush: изазван је упис сачуваног податка у меморију, јер податак у меморији до тог тренутка није био ажуран
      • Transfer: изазван је пренос податка из кеш меморије на магистралу како би неки други контролер кеш меморије могао да га прочита (користи се када је тренутна кеш меморија једини ажуран извор податка)
      • Transfer1: изазван је пренос податка из кеш меморије на магистралу како би неки други контролер кеш меморије могао да га прочита, али са додатном арбитрацијом како би само један контролер послао тај податак на магистралу
      • BusUpgr: изазвано је поништење свих копија датог податка у осталим кеш меморијама
      • Update: изазвано је ажурирање датог податка у тренутној кеш меморији на основу податка са магистрале послатог од неког другог кеш контролера
      • BusUpd: изазвано је ажурирање датог података у свим осталим кеш контролерима на магистрали
    • Уколико Услов није испуњен, тај прелаз се не дешава. У свим дијаграмима испод услови ће бити S (shared бит је постављен на магистрали од барем једног контролера кеш меморије) или ¬S (shared бит није постављен на магистрали).

WTI

Дијаграм стања WTI протокола.

WTI протокол је најједноставнији протокол за кеш кохеренцију, јер има само два стања:

  • V (valid): податак у кеш меморији је важећи
  • I (invalid): податак у кеш меморији није важећи (или није у кеш меморији уопште)

При читању податка, процесор проверава да ли је тај податак валидан у кеш меморији. Уколико јесте, нема потребе за додатним акцијама. Уколико није, чита га из меморије и затим тај податак постаје валидан.

Упис податка одмах издаје команду за упис у меморију (write-through техника) и свој податак у кеш меморији ажурира само уколико је валидан (write-no-allocate техника).

Write-allocate

Дијаграм стања WTI протокола са write-allocate.

MSI

Дијаграм стања MSI протокола.

MESI

Дијаграм стања MESI протокола.

MOESI

Дијаграм стања MOESI протокола.

MESIF

Dragon

Дијаграм стања Dragon протокола.

Firefly

Дијаграм стања Firefly протокола.