Жадының үйлесімділігі – көппроцессорлы жүйелердегі маңызды мәселе. Бірнеше процессор ортақ жадтан бір уақытта қатынасуы мүмкін, бұл деректерді кештей кезде проблема тудырады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Жадтың үйлесімділігі – екі немесе одан көп процессорлар немесе ядролар жадтың ортақ бөлігін пайдаланатын компьютерлік жүйелердің құрылымына әсер ететін мәселе. Бір процессорлық жүйеде (бір ғана ядро болғанда) барлық жұмысты бір өңдеу элементі атқарады, демек, берілген жад орнынан оқуға немесе жазуға болатын да бір өңдеу элементі ғана болады. Сәйкесінше, мән өзгерген кезде, тиісті жад орнының барлық келесі оқу операциялары жаңартылған мәнді көреді, тіпті ол кэште сақталған болса да. Керісінше, көппроцессорлық (немесе көпядролық) жүйелерде бір уақытта жұмыс істейтін екі немесе одан көп өңдеу элементтері болады, сондықтан олардың бір мезгілде бір жад орнына қол жеткізуі мүмкін. Егер олардың ешқайсысы осы орндағы деректерді өзгертпесе, олар оны кез келген уақытта бөлісе алады және қалағандай кэшке сақтай алады. Бірақ біреу орналасқан жерді жаңартқаннан кейін, қалғандары, мысалы, жергілікті кэште сақталған ескірген көшірмемен жұмыс істеуі мүмкін. Осыдан келіп, ортақ мәндерге енгізілген өзгерістер туралы барлық өңдеу элементтерін хабардар ету үшін белгілі бір схема қажет; мұндай схема жадтың үйлесімділік протоколы деп аталады, және егер мұндай протокол қолданылса, жүйеде үйлесімді жад бар деп есептеледі. Жадтың үйлесімділігінің нақты сипаты мен мағынасы үйлесімділік протоколы іске асыратын консистенттік модельмен анықталады. Дұрыс параллель бағдарламалар жазу үшін бағдарламашылар өз жүйелерінде қолданылатын нақты консистенттік модельді білуі керек. Аппараттық құралда іске асырылғанда, үйлесімділік протоколы, мысалы, каталогқа негізделген немесе бақылауға негізделген (сондай-ақ, тыңдау деп те аталады) болуы мүмкін. Нақты протоколдарға MSI протоколы және оның туындылары MESI, MOSI және MOESI кіреді.
Memory coherence is an issue that affects the design of computer systems in which two or more processors or cores share a common area of memory. In a uniprocessor system (where there exists only one core), there is only one processing element doing all the work and therefore only one processing element that can read or write from/to a given memory location. As a result, when a value is changed, all subsequent read operations of the corresponding memory location will see the updated value, even if it is cached. Conversely, in multiprocessor (or multicore) systems, there are two or more processing elements working at the same time, and so it is possible that they simultaneously access the same memory location. Provided none of them changes the data in this location, they can share it indefinitely and cache it as they please. But as soon as one updates the location, the others might work on an out of date copy that, e. g., resides in their local cache. Consequently, some scheme is required to notify all the processing elements of changes to shared values; such a scheme is known as a memory coherence protocol, and if such a protocol is employed the system is said to have a coherent memory. The exact nature and meaning of the memory coherency is determined by the consistency model that the coherence protocol implements. In order to write correct concurrent programs, programmers must be aware of the exact consistency model that is employed by their systems. When implemented in hardware, the coherency protocol can, for example, be directory based or snooping based (also called sniffing). Specific protocols include the MSI protocol and its derivatives MESI, MOSI and MOESI.