P: Co powstrzymuje program asemblera przed awarią systemu operacyjnego?
A. Nic.
Jednak wielu bardzo sprytnych programistów przez lata bardzo się starało, aby było to coraz trudniejsze. Niestety, dla każdego sprytnego programisty jest wielu, wielu innych, którzy między nimi są bardziej kreatywni, ambitni, a czasem po prostu więcej szczęścia niż sprytni. Za każdym razem, gdy sprytny programista mówi, że nikt nie powinien, nie chciałby lub nie mógłby czegoś zrobić, ktoś znajdzie sposób, aby to zrobić. Microsoft Windows (jako przykład) istnieje od prawie 35 lat, a my wciąż mamy BSoD (Blue Screens of Death), które są tylko instrukcjami, które spowodowały awarię systemu operacyjnego.
Zacznijmy od małej terminologii. Wszystko, co działa na komputerze, robi to w kodzie maszynowym. Bit odczytujący naciśnięcia klawiszy lub ruch wskaźnika myszy, bit zmieniający kolor piksela na ekranie lub odczytujący bajt z pliku oraz bit, który oblicza, czy kula trafiła w złego faceta, czy bit decydujący jeśli wniosek o kartę kredytową zostanie zaakceptowany, wszystkie są wykonywane jako sekwencja instrukcji kodu maszynowego. Niektóre zadania są tak powszechne i wykonywane tak często, że sensowne jest zebranie instrukcji wymaganych do ich wykonania i umożliwienie wszystkim korzystania z tego zestawu. Pęczek tych zadań, które pozwalają lub pomagają innym w korzystaniu z komputera, zwykle nazywa się systemem operacyjnym, ale nic nie różni się między nimi a innymi programami. Wszystkie są tylko sekwencjami instrukcji kodu maszynowego.
Co sprawia, że systemy operacyjne są bardziej skomplikowane (a zatem podatne na awarie), to fakt, że muszą one uwzględniać rzeczy, o których zwykle nie trzeba myśleć. Weź przykład najprostszej pracy. Chcę napisać wiadomość na końcu pliku. W języku wysokiego poziomu napisałbyś coś takiego:
with open("myFile.txt", "w+") as f:
# do some really clever things
f.write("Goodbye cruel world!")
Zignorujmy wszystkie szczegóły dotyczące dostępu do stanów fizycznych i ich zmiany lub ich interpretacji jako bitów i bajtów lub sposobu przesyłania tych bajtów do iz pamięci i procesora, i ufaj, że wszystko obsługiwane przez programy dostarczane przez system operacyjny za kulisami. Zastanówmy się, jak dołączyć na końcu pliku. 1) Dowiedz się, gdzie jest koniec pliku, 2) napisz coś w tej pozycji. Co może pójść nie tak? Właściwie całkiem sporo. Zastanów się, co jeszcze dzieje się na komputerze, gdy robisz sprytne rzeczy. Jeśli cokolwiek innego zrobione przez kogoś innego (w tym sam system operacyjny) w jakikolwiek sposób zmieni plik, nad którym pracujesz, to ta naprawdę prosta praca nagle staje się o wiele bardziej skomplikowana. Plik jest dłuższy, plik jest krótszy. Pliku już nie ma. Dysk jest pełny,