Wat is verkeerd delen?
Foutief delen is een situatie die kan optreden in een computerprogramma wanneer twee toepassingen die tegelijkertijd worden uitgevoerd, proberen toegang te krijgen tot informatie in hetzelfde logische geheugengebied dat elk programma of proces in zijn eigen cache heeft opgeslagen. De gegevens in de cache van elke toepassing worden gekopieerd van een gemeenschappelijke bron, dus als u de ene cache wijzigt, moet de andere opnieuw worden geladen vanuit de bron. Het valse aspect van het delen ontstaat wanneer de wijzigingen die door een programma in de cachelijn zijn aangebracht, feitelijk geen invloed hebben op de gegevens die het tweede programma gebruikt, in welk geval het dwingen van de cache om opnieuw te worden geladen een verspilling van systeembronnen is en een negatieve invloed kan hebben op de uitvoering van het programma. Het probleem van foutief delen is moeilijk te detecteren, omdat het geen direct resultaat is van code in de toepassingen, hoewel er effectieve manieren zijn om foutief delen te voorkomen, zoals het verplaatsen van gegevens in een lijn in de cache naar een afzonderlijke regel .
Een van de belangrijkste redenen waarom foutief delen kan optreden, is de manier waarop een besturingssysteem of hardware omgaat met lezen en schrijven van gegevens. Wanneer informatie van een harde schijf of een andere bron wordt gelezen of geschreven door een programma, wordt deze meestal in een tijdelijke cache geladen, zodat deze snel toegankelijk is. De hoeveelheid informatie die in de cache van de bronlocatie wordt genoemd, wordt een cacheregel genoemd en is een logisch geheugenblok dat normaal tussen 2 bytes en 256 bytes lang kan zijn. Onder sommige besturingssystemen of systeemarchitecturen kunnen programma's tegelijkertijd worden uitgevoerd, zoals bij parallelle verwerking. Dit betekent dat het mogelijk is dat twee afzonderlijke programma's proberen toegang te krijgen tot informatie op dezelfde cacheregel, dus elk programma heeft een eigen kopie van de brongegevens, waardoor wijzigingen in de ene cache mogelijk niet worden weerspiegeld in de andere cache, waardoor de gegevens die het bevat.
Er zijn een aantal mechanismen die worden gebruikt om de situatie aan te pakken wanneer twee programma's proberen toegang te krijgen tot dezelfde cacheregel, maar het resultaat is meestal dat een programma gedwongen wordt zijn cache opnieuw te laden met de bijgewerkte informatie die het andere programma heeft gewijzigd. Dit soort incidenten staat bekend als vals delen wanneer de gegevens in de cache-regel waartoe elk programma toegang heeft niet aan elkaar gerelateerd zijn, dus het dwingen van één programma om de cache opnieuw te laden is een verspilling van verwerkingskracht en andere bronnen. Dit is meestal een probleem voor een programma dat de informatie in de cache nooit zal wijzigen, dus er bestaat geen risico dat de toepassing wijzigingen overschrijft die het andere proces heeft aangebracht.
Er zijn twee gangbare manieren om de effecten van verkeerd delen te voorkomen of te verminderen. De eerste is om lege informatie voor of na de gegevens in het geheugen toe te voegen, waardoor deze in wezen in een afzonderlijke cacheregel wordt gedwongen waartoe geen ander programma toegang heeft. De tweede methode is om de lees- en schrijffrequentie te beperken tot de cache-regel zodat deze zo min mogelijk wordt herladen. Meer complexe oplossingen omvatten beheer op cachegeheugen of zelfs wijzigingen in de manier waarop een besturingssysteem omgaat met delen.