#systemyoperacyjne #linux #oesowo Rezydentny monitor

W poprzednim wpisie wspominałem że podstawową i najstarszą funkcją systemu operacyjnego jest kolejkowanie zadań. Pierwsze poważne komputery używały "interfejsu białkowego" do kolejkowania zadań, czyli jakiś człowiek ładował karty i taśmy do komputera i uruchamiał. Miał też za zadanie nadzorować pracę programu i przerywać jego działanie jeśli wykonanie programu zajmowało zbyt długo.

Przywykliśmy do tego, że na komputerach programy cały czas działają. Czekają na nas, a nie my na nie. Wtedy komputerów używano do obliczeń naukowych i finansowych. Naukowiec chcąc wyliczyć trajektorię lotu rakiety czy zanalizować dane statystyczne musiał odstać swoje w kolejce.

I to zostało wkrótce zautomatyzowane. Tak narodził się bardzo prymitywny system operacyjny, wtedy jeszcze znany jako "program monitora", niemający nic wspólnego z urządzeniem wyświetlającym.

Monitor startował jako pierwszy z jakiejś pamięci nieulotnej. Miał nawet w sobie kawałki kodu które dziś nazwalibyśmy sterownikami. Był w stanie uruchomić konsole robocze, uruchomić napęd taśmy, w końcu uruchomić program. Mógł też obsługiwać wyjątki i błędy, a także ustawić sobie "minutnik" i wyrzucić program który się ociąga ponad przeznaczony mu czas na wywołanie. Po zakończeniu jednego programu ładował kolejny aż do wyczerpania się "wsadu" (batch), czyli np wszystkich programów z taśmy.

Nadal programy wykonują się pojedynczo, nadal jeden po drugim, natomiast coś je już ogarnia, potrafi wysterować sprzęt i radzić sobie z problemami stwarzanymi przez same programy.

Na dołączonym obrazku program monitora z Atari, z powodu nagłówka zwany "self testem". Po zwolnieniu resetu w atarynce uruchamiał się z wewnętrznego ROMu monitor, najpierw próbował czytać kasetę ROM (kartridż) a potem magnetofon. Jak coś poszło nie tak, wyświetlał "self test" jako reakcję na wyjątek systemowy. Miał wbudowany interpreter języka basic i jeśli nie było katridża, kasety i wyjątku systemowego to wyświetlał "READY" czekając na komendy. Crash programu też wracał do monitora, przez co "self test" stał się znienawidzony przez użytkowników, zupełnie niezasłużenie.

Jeszcze ciekawiej wyglądało to na maszynach od Pana Trzmiela, czyli Commodore 64. Tam pamięć ROM zawierająca monitor mieściła w sobie 2 programy. Interpreter basic oraz "kernal", tak, z "e" w środku, czyli właściwy monitor, zwany już wtedy przez niektórych systemem operacyjnym.

Na katridżu do atarynki można było dostać trochę bardziej rozbudowany system operacyjny, on chyba się nawet nazywał DOS, nie mylić z MS DOS. Wtedy program monitora w zasadzie pełnił funkcję bootloadera albo czegoś w stylu BIOSu. Załadować, uruchomić, usunąć się w cień.

70852320-8a36-429b-9fd6-a0d95cf2d033
bf88c3a1-c708-492d-9488-4517240c6632
f5f45dfb-4428-42cf-aae9-0d2a31a1fa3e

Komentarze (16)

Eber

Małe i skromne początki zapowiedzi czegoś większego, dobrze się czytało

ataxbras

@pierdonauta_kosmolony Mała uwaga - programy dalej wykonują się liniowo. System operacyjny może je wstrzymywać, może rozrzucać po poszczególnych rdzeniach, ale zasada pozostała i pozostanie ta sama. W każdym razie w komputerach klasycznych. Ma to sporo wspólnego z maszyną Turinga i z bardziej abstrakcyjną matematyką - program zawsze wykonuje się krok po kroku, liniowo.

W komputerach kwantowych operacje z pozoru wykonują się nieco inaczej (superpozycja i splątanie powodują, że "dorozumiane" kroki wykonują się jednocześnie). Ale w zasadzie wszystko dalej działa podobnie, krokowo, bo maszyna Turinga. Tylko pewne kroki są zbiorcze. Komputery kwantowe są uogólnionymi maszynami Turinga operującymi w przestrzeni Hilberta.

https://en.wikipedia.org/wiki/Turing_machine

pierdonauta_kosmolony

@ataxbras Od wykonywania instrukcji po instrukcji nigdy nie uciekniemy, nawet w komputerach kwantowych. Natomiast istnieją układy logiczne współbieżne, specjalizowane do bardzo szybkich ale dobrze określonych obliczeń, często spotykane w rdzeniach kryptograficznych. Są architektury SIMD przypominające wcześniejsze DSP oraz coś takiego jak VLIW. Była taka firma Transmeta oferująca procesory wykonujące instrukcje x86 (takie jak inne kąkutery od Intela czy AMD) w trybie emulowanym ale same były procesorami 256 bitowymi które mogły wykonywać instrukcje współbieżne. Ale to nieistotne detale.

ataxbras

@pierdonauta_kosmolony Tak, nieistotne detale, bo nadają się tylko do specyficznych zastosowań. A jeśli chodzi o kryptografię - układy współbieżne istnieją, ale jak nazwa wskazuje w każdym "rdzeniu" takiego układu jest jakiś "bieg" - również liniowy.

Wszystko wynika z faktu, że istnieje tylko jeden maksymalnie wydajny schemat wykonywania obliczeń w tym Wszechświecie i jest on właśnie uogólnioną maszyną Turinga. A to z kolei wynika z istnienia związku przyczynowo-skutkowego i zasad dotyczących entropii informacji. Można brnąć oczywiście dalej, ale myślę, że nie ma sensu zacieminiać obrazu.

Felonious_Gru

@ataxbras

programy dalej wykonują się liniowo

Już dawno nie. Tak, przeczytałem do końca.

ataxbras

@Felonious_Gru Owszem tak - i nie ma innego wyjścia. To, że masz wątki, rdzenie, podprocesy, GPU, nie zmienia faktu, że tak naprawdę nie dostajesz grafu, a linię.
I tak już zostanie.

Felonious_Gru

@ataxbras kurła, większość moich programów działa na maszynie stanów, która jest niczym innym jak grafem. Oszukali mnie!


Ale ja nawet nie o tym chciałem, tylko o predykcjach w mechanizmach decyzyjnych

9fffd617-f308-4f1a-aee8-4caabb822a2a
ataxbras

@Felonious_Gru Ale nie po czasie. Po czasie i tak dostaniesz linię. Znasz jakiś rzeczywisty proces obliczeniowy nie będący uogólnioną maszyną Turinga?

ataxbras

@Felonious_Gru I jeśli uruchomisz je na fizycznej maszynie to zostaną wykonane instrukcja po instrukcji, a jeśli tak nie będzie, to będziesz miał problem. I nie zależy to od ilości rdzeni, wątków, innych mechanizmów izolacji. Możesz zrównoleglić pozornie pewne kalkulacje, ale na końcu musisz je zlinearyzować. Bo czas.

Felonious_Gru

@ataxbras

  1. nie muszę linearyzować, jeśli wyniki są od siebie niezależne

  2. Pisałeś, że nie da się zrobić grafu, a nagle graf ci nie odpowiada xD

ataxbras

@Felonious_Gru

1. "For a sequential algorithm, computational complexity measures how many steps are in the behaviors it generates." - https://lamport.azurewebsites.net/pubs/state-machine.pdf. W przypadku niezależnych wyników, których nie musisz spójnie interpretować w programie, masz tak naprawdę wiele niezależnych programów. Jeśli chcesz to jakoś powiązać (na przykład kolejkując) to de facto, na końcu linearyzujesz.
2. Nie masz grafu po czasie - chyba, że w tym wszechświecie znasz przykład zaburzenia związku przyczynowo-skutkowego poza pseudo naruszeniami w skali kwantowej.

To jak z tym przykładem rzeczywistego procesu obliczeniowego nie będącego uogólnioną maszyną Turinga? RTM, czy PTM można uznać za rozwinięcie, ale nie łamią przyczynowości, więc są sekwencyjne w czasie.

Felonious_Gru

@ataxbras przestań obrażać mnie i moje przekonania!


Twardy zawodnik się trafił

ataxbras

@Felonious_Gru


przestań obrażać mnie i moje przekonania!

A co, identyfikujesz się jako maszyna stanów?

Felonious_Gru

@ataxbras dokładnie tak ( ͡° ʖ̯ ͡°)

Zaloguj się aby komentować