Кіріспе

Кэштік үйлесімділік протоколы MSI протоколының кеңейтілуі ретінде Меншік күйін қамтиды. MOSI протоколы негізгі MSI кэштік үйлесімділік протоколының кеңейтілуі болып табылады. Ол Меншік күйін қосады, бұл күй ағымдағы процессордың осы блокқа ие екенін және басқа процессорлардың осы блок бойынша сұрауларын өтеуге дайын екенін көрсетеді.

Процессорлық операциялар

Процессор транзакцияларын қарастыра отырып, егер блок жарамсыз (I) күйде болса, онда кэш блогы жадтан ешқашан алынбаған немесе жарамсыз деп белгіленген. Процессор оқыған кезде (PrRd) күйі жарамсыз (I) күйінен ортақ (S) күйіне өтеді, соның нәтижесінде шина арқылы оқылу (BusRd) жүзеге асырылады. Сонымен қатар, егер процессордан жазу сұранысы (PrWr) келіп түссе, блок күйі өзгертілген (M) күйіне ауысады және тыңшы жазу сұранысы (BusRdX) жасалады. Блок иеленген (O) күйде болғаннан кейін, процессор оқуы (PrRd) ешқандай тыңшы сигналды тудырмайды және блок сол күйде қалады. Ал процессордан (PrWr) жазу сұранысы блоктың күйін иеленгеннен (O) өзгертілгенге (M) ауыстырады, сонымен бірге тыңшы жазу сұранысын (BusUpgr) тудырады. Блок өзгертілген (M) күйде болғанда, процессор оқуы (PrRd) немесе процессор жазуы (PrWr) сұранысы тыңшы сигналды тудырмайды, себебі блок ең соңғы және дұрыс мәннің тек осы кэште сақталғанын көрсетеді. Сондықтан ол күйін өзгертпейді және өзгертілген (M) күйінде қалады. Блок ортақ (S) күйде болғанда және процессор оқу (PrRd) сұранысы келіп түссе, кэш блогының мәні басқа процессорларда да, негізгі жадта да бірдей болғандықтан, процессор оқуынан (PrRd) кейін шиналық сигнал жасалмайды. Блок ортақ (S) күйде процессордан жазу (PrWr) сұранысы түскен кезде шина жазу сұранысы (BusUpgr) жасалады, себебі кэш блогы енді басқа кэштерде жарамсыз болып табылады және блок күйі ортақ (S) күйінен өзгертілген (M) күйіне ауысады.

Автобустармен жасалатын операциялар

Шекті күй машинасының тыңдалған автобус транзакцияларына қатысты мінез-құлқы ескерілсе, егер кэш блогы жарамсыз (I) күйде болса, тыңдалған автобус сұранысы осы блокқа ешқандай әсер етпейді. Сондықтан, процессордан келген автобус оқу сұранысы (BusRd) немесе блокқа ие болған немесе болмаған процессордан келген автобус жазу сұранысы (BusRdX немесе BusUpgr) болса да, блок сол жарамсыз (I) күйде қалады және қосымша әрекеттер жасалмайды. Кэш блогы ортақ (S) күйде болғанда және тыңдалған автобус оқу (BusRd) транзакциясы орын алғанда, блок сол күйде қалады және қосымша транзакциялар жасалмайды, себебі барлық кэш блоктарының мәні, негізгі жад мәнімен қоса, бірдей болады және тек оқу операциясы жүзеге асырылады, жазу емес. Егер жазу сұранысы (BusRdX немесе BusUpgr) келіп түссе, блок күйі ортақ (S) күйден жарамсыз (I) күйіне өтеді, себебі блок мәні басқа кэш блоктарының бірінде өзгертілген және барлық басқа көшірмелер енді жарамсыз болуы керек. Кэш блогы өзгертілген (M) күйде болғанда және автобус оқу (BusRd) сұранысы келіп түссе, блок өзгертілген деректерді (Flush) тазартады және күйін иеленуші (O) күйіне ауыстырады, осылайша осы нақты кэш блогының жалғыз иесі болады. Сонымен қатар, егер блок өзгертілген (M) күйде болса, басқа процессордан автобус жазу сұранысы (BusUpgr) келе қоймайды, себебі оның кэш блогы жоқ. Егер блокқа ие емес басқа процессордан жазу сұранысы (BusRdX) келіп түссе, блок күйін жарамсыз (I) күйіне өзгертеді, себебі басқа процессор блокқа жазады және осылайша осы блокқа меншік құқығына ие болады. Кэш блогы өзгертілген күйде болғанда, басқа процессордан BusUpgr сұранысы келуі мүмкін емес, себебі олардың ешқайсысында блок жоқ. Өзгертілген (M) күйінің анықтамасы бойынша, тек сол процессор ғана блокқа ие, ал қалғандары жарамсыз, сондықтан BusUpgr сұранысын бастай алмайды. Иеленуші (O) күйде болғанда және оқып алу сұранысы (BusRd) келіп түссе, блок сол күйде қалады, ал басқа процессор оқып алу үшін деректерді (Flush) тазартады. Snooped жазу сұранысы (BusRdX) кезінде блок күйін жарамсыз (I) күйіне өзгертеді, сонымен бірге басқа процессор оған жазып жатқан деректерді (Flush) тазартады, осылайша ол блокқа меншік құқығын жоғалтады. Басқа процессор сол блокқа қол жеткізуге тырысқанда, оған қол жеткізу үшін жадқа барудың орнына, процессор оны басқа кэштен алады, ол блокқа иеленуші (O) күйде. BusUpgr сұранысы иеленуші (O) күйін жарамсыз (I) күйіне өзгертеді. MOSI протоколында өзгертілген (M) күйінен басқа қосымша күйдің (иеленуші) болуы ерекшелік. MSI протоколында, өзгертілген (M) күйдегі блокты оқудан қайтпау сұранысы келіп түссе, ол блоктің мәртебесін ортақ (S) күйіне өзгерте отырып, негізгі жадыға қайта жазады. Бірақ MOSI протоколында, қосымша күй (иесі) болғандықтан, басқа процессор оқу операциясын сұрағанда, блок өзгертілгеннен иеленуші (O) күйіне ауысады және кэштің кір блогын сақтайды, осылайша басты жадыға дереу жазу қажеттілігін жояды. Бұл кейінге қалдыру автобустық трафикті және негізгі жадының транзакциялардың белгілі бір ретімен жазылуын үнемдей алады. Мысалы, егер кэш 1-процессор үшін M күйде болса, онда 2-процессор одан оқиды, содан кейін 1-процессор оған қайта жазады. MSI протоколында 1-процессордың MS күйіне өтуі оқудан бір жадқа жазуға, содан кейін SM күйіне өтуі BusUpgr сұранысына әкеледі. MOSI протоколында MO күйіне өту трафикті тудырмайды, ал OM күйіне өту бұрынғыдай бір BusUpgr сұранысын тудырады. Сондықтан MOSI бастапқы жадына жазуды және оған байланысты автобустық трафикті MSI орындайтын.

MESI протоколымен салыстыру

MESI (сондай-ақ Иллинойс деп те аталады) және MOSI протоколдары – әр түрлі мүмкіндіктерді жақсарту мақсатында MSI протоколының кеңейтілген нұсқалары. MOSI деректерді қайта жазуды азайтуға бағытталса, MESI басқа процессордан оқу және жазу сұранысынан кейін қажетті автобус транзакцияларының санын азайтуға тырысады. MESI протоколындағы «эксклюзивті» (E) күй кэш блогының жарамды, таза (негізгі жадтағы мәнмен сәйкес) және тек бір кэште сақталғанын көрсетеді, ал MOSI протоколындағы «меншікті» (O) күй кэш блогының жарамды, мүмкін кір, жазуға болатын және бірнеше кэште (барлық кэштерде мән бірдей) болуы мүмкін екенін білдіреді.