Operacja atomowa
Operacja atomowa – operacja, która na określonym poziomie abstrakcji jest niepodzielna.
Większość instrukcji mikroprocesora z punktu widzenia systemu operacyjnego jest operacjami atomowymi – gdy procesor rozpocznie wykonywanie instrukcji nie można jej przerwać ani w żaden sposób wpłynąć na jej realizację, choć w istocie na poziomie sprzętowym instrukcje są wykonywane w przynajmniej kilku krokach.
Przykładem instrukcji nieatomowej jest zwiększenie wartości zapisanej we wskazanym miejscu pamięci operacyjnej. Instrukcja ta wymaga wczytania liczby z pamięci do rejestru procesora, wykonania działania przez jednostkę arytmetyczną i zapisania nowej wartości do pamięci. W zależności od architektury magistrali komunikacyjnej w systemie komputerowym oraz sposobu działania procesora, cykl odczytu i cykl zapisu w trakcie instrukcji mogą być wykonane w trybie wyłącznego dostępu procesora do magistrali albo nie. W przypadku procesorów wielordzeniowych lub systemów wieloprocesorowych, jeśli nie użyto trybu dostępu wyłącznego, zachodzi możliwość wykonania innej operacji (odczytu lub zapisu) przez inny rdzeń lub procesor na tym samym obszarze pamięci pomiędzy odczytem i zapisem w trakcie instrukcji odczyt-modyfikacja-zapis. Wówczas programy wykonywane przez oba zaangażowane procesory lub rdzenie uzyskują niespójną informację o zawartości pamięci.
W wielu zastosowaniach istotne jest zagwarantowanie niepodzielności operacji:
- w przetwarzaniu równoległym zmiana obiektów współdzielonych przez różne procesy musi być atomowa, z punktu widzenia procesu niepodzielna (patrz: sekcja krytyczna, fetch-and-add, compare-and-swap);
- w systemach baz danych wszystkie zmiany w obrębie transakcji muszą zostać w całości albo zatwierdzone albo odrzucone, inni użytkownicy bazy danych nie mogą otrzymać danych niekompletnych;
- podobnie w niektórych systemach plików zmiany muszą zostać w całości zatwierdzone albo odrzucone, aby w przypadku awarii (np. zaniku zasilania) system plików pozostał spójny.