P. ¿Qué impide que un programa de ensamblaje bloquee el sistema operativo?
A. nada.
Sin embargo, muchos programadores muy inteligentes se han esforzado mucho a lo largo de los años para hacerlo cada vez más difícil. Desafortunadamente, para cada programador inteligente, hay muchos, muchos otros que entre ellos son más creativos, más ambiciosos y, a veces, más afortunados que los inteligentes. Cada vez que un programador inteligente dice que nadie debería, haría o podría hacer algo, alguien por ahí encontrará la manera de hacerlo. Microsoft Windows (como ejemplo) ha existido durante casi 35 años y todavía tenemos BSoD (pantallas azules de la muerte), que son solo instrucciones que bloquearon el sistema operativo.
Comencemos con un poco de terminología. Todo lo que se ejecuta en una computadora lo hace en código máquina. El bit que lee las pulsaciones de teclas o el movimiento del puntero del mouse, el bit que cambia el color de un píxel en la pantalla o lee un byte de un archivo y el bit que calcula si su bala golpeó al tipo malo o al bit que decide si su solicitud de tarjeta de crédito será aceptada, todas se ejecutarán como una secuencia de instrucciones de código de máquina. Algunos trabajos son tan comunes y se realizan con tanta frecuencia que tiene sentido reunir las instrucciones necesarias para hacerlos y hacer que todos usen ese ensamblaje. El conjunto de estos trabajos que permiten o ayudan a otros a usar la computadora tienden a llamarse sistema operativo, pero no hay nada inherentemente diferente entre ellos y cualquier otro programa. Todos son solo secuencias de instrucciones de código de máquina.
Lo que hace que los sistemas operativos sean más complicados (y, por lo tanto, propensos a fallar) es que tienen que dar cuenta de cosas en las que normalmente no tiene que pensar. Tome los trabajos más simples como ejemplo. Quiero escribir un mensaje al final de un archivo. En un lenguaje de alto nivel escribirías algo como:
with open("myFile.txt", "w+") as f:
# do some really clever things
f.write("Goodbye cruel world!")
Vamos a ignorar todos los detalles sobre cómo se accede y cambia los estados físicos o cómo se interpretan como bits y bytes o cómo esos bytes se transfieren hacia y desde la memoria y la CPU, y confíe en que todo eso es manejado por los programas que proporciona el sistema operativo entre bastidores. Solo pensemos en cómo se agrega al final de un archivo. 1) Averigüe dónde está el final del archivo, 2) escriba algo en esa posición. ¿Qué podría salir mal? En realidad, bastante. Piensa en qué más está sucediendo en la computadora mientras haces cosas inteligentes. Si cualquier otra cosa realizada por otra persona (incluido el propio sistema operativo) cambia el archivo en el que está trabajando de alguna manera, entonces este trabajo realmente simple de repente se vuelve mucho más complicado. El archivo es más largo, el archivo es más corto. El archivo ya no está allí. El disco está lleno,