Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika pierdonauta_kosmolony w IT

Gruba ryba

w IT

44piorunów


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ń.

Komentarze (16)

GURU8piorunów

@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

Turing machineA Turing machine is a mathematical model of computation describing an abstract machine that manipulates symbols on a strip of tape according to a table of rules. Despite the model's simplicity, it is capable of implementing any computer algorithm. The machine operates on an infinite memory tape divided into discrete cells, each of which can hold a single symbol drawn from a finite set of symbols called the alphabet of the machine. It has a "head" that, at any point in the machine's operation, is positioned over one of these cells, and a "state" selected from a finite set of states. At each step of its operation, the head reads the symbol in its cell. Then, based on the symbol and the machine's own present state, the machine writes a symbol into the same cell, and moves the head one step to the left or the right, or halts the computation. The choice of which replacement symbol to write, which direction to move the head, and whether to halt...Wikipedia
GURU4piorunów

@Felonious_Gru :rolling_on_the_floor_laughing:

przestań obrażać mnie i moje przekonania!

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

Lider1piorunów

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

Twardy zawodnik się trafił

GURU6piorunów

@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.

Lider1piorunów

@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

GURU5piorunów

@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.

GURU7piorunów

@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?

Lider1piorunów

@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

GURU6piorunów

@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.

Lider1piorunów

@ataxbras

programy dalej wykonują się liniowo

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

GURU7piorunów

@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.

Gruba ryba4piorunów

@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.

Fenomen3piorunów

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

Gruba ryba2piorunów

Syntax error

Ready

Gruba ryba1piorunów

fajny wpis.