¿Qué tipo de operación es una operación atómica? ¿Cómo garantizar que la operación atómica no sea un problema?

Como respuesta específica a su pregunta sobre discos: las escrituras suelen ser atómicas a nivel de bloque ( es decir, una pequeña cantidad de megabytes), ya que el sistema de disco físico tiene capacitores de respaldo capaces de alimentar el cabezal de escritura el tiempo suficiente para finalizar la escritura.

Las “transacciones” más grandes (como crear un archivo o escribir varios bloques que valgan datos, incluyendo potencialmente los metadatos indirectos) se hacen “virtualmente atómicas” porque el sistema operativo expone una interfaz que promete limpiarse por sí misma si se bloquea parcialmente terminado. Hay una variedad de métodos para realizar dicha limpieza, pero probablemente el más popular es el sistema de archivos Journaling; otro que ya no está de moda son las actualizaciones de software.

Una operación atómica es una operación que se garantiza que se completará una vez iniciada, con resultados correctos.

Aquí hay un ejemplo. Imagine que 2 procesos intentan incrementar una ubicación en la memoria que contiene el valor ‘5’ al mismo tiempo. Ambos leen 5, calculan el nuevo valor 6 y el derecho 6 en la memoria. Piense en esta operación como depositar un dólar en la misma cuenta bancaria por dos cajeros al mismo tiempo.
Debido a que incrementar la memoria no es una operación atómica, podemos obtener resultados incorrectos.

Escribir en el disco suele ser atómico porque el sistema operativo lo admite. Por ejemplo, el archivo estará “en el disco” solo después de la finalización de la operación de escritura. Además, no puede abrir el mismo archivo dos veces.

Esto ha sido una simplificación, pero espero que explique la idea.

La operación atómica se realiza completamente o no se realiza en absoluto. Podría ser físicamente atómico o físicamente no atómico, pero hecho atómico con una lógica adicional.
Ejemplo es escribir en un solo registro (supongamos 8 bits) en un solo ciclo de reloj. Es imposible estar medio hecho incluso si el proceso se interrumpe (es decir, solo se copia el nibble bajo, mientras que el mordisco alto aún retiene el valor anterior).
Otro ejemplo es escribir en un par de registros (registro de 16 bits formado por 2 registros de 8 bits) que toman 2 ciclos de reloj. Es posible que el proceso se interrumpa y solo se copie el registro bajo. Podría hacerse atómico de dos maneras.
1. Deshabilite la interrupción antes de escribir.
2. Cree un registro sombra. El valor en el registro oculto solo se copió en el registro real después de que tanto el registro bajo como el registro alto se copiaron correctamente.
Para otro ejemplo lea el artículo sqlite: Atomic Commit In SQLite

Las operaciones atómicas son operaciones que no se pueden dividir, o suceden en conjunto o no suceden en absoluto, en los procesadores tienen la característica adicional de bloquear el bus del procesador para que solo un núcleo en una CPU pueda ejecutar una operación atómica en un momento.

Las operaciones atómicas en el procesador se pueden usar para crear operaciones atómicas más grandes, por ejemplo, si quiero hacer una operación atómica en el disco, crearé un bloqueo sobre un segmento de memoria y disco, copiaré los datos que marcan el lugar como sucios, compruebe si está bien, si los datos no están correctos, falle la transacción (y elimine los datos sucios), si no marca los datos como limpios, y luego suelte los bloqueos

Está pensando en operaciones atómicas a nivel físico, lo que no es correcto para la mayoría de las áreas de programación (la excepción podría ser escribir controladores de dispositivo de disco). Más bien piense en términos de líneas de código [simples] individuales.
La mayoría de las operaciones de E / S de archivos generalmente no son atómicas, ya que pueden fallar en el proceso, por ejemplo, una lectura puede devolver solo una parte del archivo solicitado cuando ocurre una condición excepcional. Si abre un archivo en modo exclusivo, reducirá posibles complicaciones, pero no asegura la atomicidad. Lea la documentación de la biblioteca que está utilizando para obtener más información, por ejemplo, algunas funciones como mover () pueden operar atómicamente.
No sé de una biblioteca de E / S de archivos atómicos, pero el siguiente artículo (escrito sobre .NET) podría ser de interés: Cómo hacer escrituras atómicas en un archivo.