Load-link/store-conditionalEn informàtica, load-linked/store-conditional (LL/SC), de vegades conegut com load-reserved/store-conditional (LR/SC), són un parell d'instruccions utilitzades en multithreading per aconseguir la sincronització. Load-link retorna el valor actual d'una ubicació de memòria, mentre que un emmagatzematge condicional posterior a la mateixa ubicació de memòria emmagatzemarà un valor nou només si no s'han produït actualitzacions a aquesta ubicació des de l'enllaç de càrrega. En conjunt, això implementa una operació de lectura, modificació i escriptura sense bloqueig, atòmica.[1] "Load-linked" també es coneix com a load-link, load-reserved, i load-locked.[2] LL/SC era originalment proposada per Jensen, Hagensen i Broughton per al multiprocessador S-1 AAP al Lawrence Livermore National Laboratory.[3] Comparació de LL/SC i comparació i intercanviSi s'ha produït alguna actualització, es garanteix que el condicional de la botiga fallarà, fins i tot si el valor llegit per l'enllaç de càrrega s'ha restaurat. Com a tal, un parell LL/SC és més fort que una lectura seguida d'una comparació i intercanvi (CAS), que no detectarà actualitzacions si s'ha restaurat el valor antic (vegeu el problema ABA). Les implementacions reals de LL/SC no sempre tenen èxit encara que no hi hagi actualitzacions simultànias a la ubicació de memòria en qüestió. Qualsevol esdeveniment excepcional entre les dues operacions, com ara un canvi de context, un altre enllaç de càrrega, o fins i tot (en moltes plataformes) una altra operació de càrrega o emmagatzematge, farà que el condicional de botiga falli de manera espúrea. Les implementacions més antigues fallaran si hi ha actualitzacions emeses pel bus de memòria. Això s'anomena LL/SC feble pels investigadors, ja que trenca molts algorismes teòrics de LL/SC.[4] La debilitat és relativa, i algunes implementacions febles es poden utilitzar per a alguns algorismes.[5] ImplementacionsLes instruccions LL/SC són compatibles amb:
Algunes CPUs requereixen que l'adreça a la qual s'accedeix exclusivament estigui configurada en mode d'escriptura. Normalment, les CPU fan un seguiment de l'adreça enllaçada a la càrrega en una línia de memòria cau o una altra granularitat, de manera que qualsevol modificació a qualsevol part de la línia de memòria cau (ja sigui mitjançant un magatzem condicional d'un altre nucli o simplement per una botiga normal) és suficient per provocar la botiga. - condicionat al fracàs.
LL/SC té dos avantatges respecte a CAS quan es dissenya una arquitectura d'emmagatzematge de càrrega: les lectures i les escriptures són instruccions separades, tal com requereix la filosofia de disseny (i l'arquitectura de pipeline); i ambdues instruccions es poden realitzar utilitzant només dos registres (adreça i valor), encaixant de manera natural en ISA de 2 operands. CAS, en canvi, requereix tres registres (adreça, valor antic, valor nou) i una dependència entre el valor llegit i el valor escrit. x86, al ser una arquitectura CISC, no té aquesta restricció; encara que els xips moderns poden traduir una instrucció CAS en microoperacions LL/SC separades internament. Referències
|
Portal di Ensiklopedia Dunia