Przed systemami operacyjnymi, jakiej koncepcji użyto, aby działały? [Zamknięte]

50

Systemy operacyjne są ściśle powiązane z architekturą komputerową. System operacyjny dba o wszystkie dane wejściowe i wyjściowe w systemie komputerowym. Zarządza użytkownikami, procesami, zarządzaniem pamięcią, drukowaniem, telekomunikacją, obsługą sieci itp. Wysyła dane na dysk, drukarkę, ekran i inne urządzenia peryferyjne podłączone do komputera.

Przed wprowadzeniem systemu operacyjnego

Co wykorzystano w systemach komputerowych, aby działały?

Jaką koncepcję wykorzystano w systemie operacyjnym w naszej ewolucji komputerów?

Itachi Uchiha
źródło
5
„Wcześniej to, co było używane w systemach komputerowych ...” - To było tak, jakbyś dzisiaj nie uruchomił systemu operacyjnego. Uruchomić wsadowe pracy poprzez przekazanie całego systemu komputerowego do pojedynczego użytkownika, po jednym na raz.
trociny
4
Pomyśl o kodzie działającym na mikrokontrolerze. Nie działa w systemie operacyjnym, ale jest to kod C, który kompiluje się do kodu maszynowego, i jest uruchamiany na prawdziwym, fizycznym urządzeniu (po tym, jak ten kod maszynowy zostanie „sflashowany” do oprogramowania układowego). Systemy operacyjne ułatwiają współdziałanie wielu programów jednocześnie ze wszystkimi częściami komputera, wykorzystując koncepcje współdzielenia zasobów i planowania procesów . Podobnie możesz użyć systemu operacyjnego na tym małym mikrokontrolerze - jeśli go potrzebujesz.
Przełom
Wiele odpowiedzi koncentruje się na We / Wy, w jaki sposób programy się ładują i urządzeniach peryferyjnych. Ale to tylko zaciemnia cel systemu operacyjnego: zarządzanie zasobami i dzielenie się nimi, a być może także możliwość obsługi wielu użytkowników. Cel systemu operacyjnego nie zmienia się, jeśli załadujesz kod z płyty drucianej lub taśmy perforowanej lub bębna lub użyjesz nowoczesnej karty SD.
trociny
Talia kart. Perforowana taśma papierowa. Operator, aby karmić to samo przez komputer.
Daniel R Hicks,

Odpowiedzi:

42

Wczesne komputery uruchamiały jeden program na raz.

Programy były ładowane bezpośrednio z (na przykład) taśmy papierowej z dziurkami.

Zaprogramujesz najwcześniejsze komputery , ustawiając duży zestaw przełączników on-off.

Kolos:

Atlas:

Manchester:


Używam słowa „Komputer”, aby oznaczać urządzenie, które istnieje obecnie w miliardach. Z tej ogromnej liczby komputerów, prawie niewielka liczba to cyfrowe elektroniczne programowalne komputery z zapisanymi programami. Jestem pewien, że pierwotne pytanie nie dotyczy tego, jak ludzie z tytułem pracy „Komputer” spędzili dzień pracy. Pomiędzy tymi dwoma typami komputerów występuje szereg interesujących urządzeń nie ujętych w tej odpowiedzi.

RedGrittyBrick
źródło
1
Mam sprzęt, z którym pracuję, który używa tych przełączników na drugim zdjęciu. Uruchamia również programy dokładnie w ten sam sposób. Głosowanie za użycie tak wspaniałego zdjęcia
Ramhound
czy najwcześniejsi, powiedzmy ENIAC, nie mieliby stałego połączenia? Nie przełączono ani nie masz zapisanych programów? A może nie jest to już komputer z tego powodu ... ciekawy
Rich Homolka
1
@RichHomolka: Jak sugerujesz, to naprawdę zależy od tego, co uważasz za komputer. Obecnie większość ludzi prawdopodobnie oznacza cyfrowy elektroniczny programowalny komputer. Oczywiście istniały na przykład mechaniczne komputery analogowe, a najwcześniejszymi komputerami byli ludzie (był to tytuł pracy). Jeśli mam czas, mogę rozwinąć odpowiedź, aby rozwiązać ten problem. Wierzę, że ENIAC został zaprogramowany przez manipulowanie przełącznikami i kablami.
RedGrittyBrick
Systemy operacyjne pojawiły się dość wcześnie (1956 - patrz en.wikipedia.org/wiki/GM-NAA_I/O ). Pierwszym masowo produkowanym komputerem był około 1954 r.
Bruce Martin
„Jestem pewien, że pierwotne pytanie nie dotyczy tego, jak ludzie z tytułem pracy„ Komputer ”spędzili dzień pracy - moja babcia była komputerem.
Paul D. Waite,
13

Źródło: Historia systemów operacyjnych

Systemy operacyjne ewoluowały przez szereg różnych faz lub generacji, które odpowiadają mniej więcej dziesięcioleciom.

Lata 40. XX wieku - pierwsze pokolenia

Najwcześniejsze elektroniczne komputery cyfrowe nie miały systemów operacyjnych. Maszyny tamtych czasów były tak prymitywne, że programy były często wprowadzane pojedynczo po kolei w rzędach przełączników mechanicznych (płytki wtykowe) . Języki programowania były nieznane (nawet języki asemblera). Systemy operacyjne były niespotykane.

Lata 50. XX wieku - druga generacja

Na początku lat 50. rutyna nieco się poprawiła dzięki wprowadzeniu kart dziurkaczy. General Motors Research Laboratories realizowane pierwszych systemów operacyjnych na początku 1950 roku na ich IBM 701 . System lat 50-tych generalnie prowadził jedno zadanie na raz. Nazywały się one systemami przetwarzania wsadowego z pojedynczym strumieniem, ponieważ programy i dane były przesyłane w grupach lub partiach.

Źródło: http://en.wikipedia.org/wiki/History_of_operating_systems

Najwcześniejszymi komputerami były komputery mainframe, które nie posiadały żadnej formy systemu operacyjnego.

Każdy użytkownik korzystał z urządzenia wyłącznie przez określony czas i przybywał do komputera z programem i danymi, często na perforowanych kartach papierowych i taśmie magnetycznej lub papierowej. Program zostanie załadowany do maszyny, a maszyna będzie działać do momentu zakończenia lub awarii programu.

Programy można ogólnie debugować za pomocą panelu sterowania za pomocą przełączników i lampek panelu. Mówi się, że Alan Turing był mistrzem tego na wczesnej maszynie Manchester Mark 1 i już czerpał pierwotną koncepcję systemu operacyjnego z zasad uniwersalnej maszyny Turinga.

DavidPostill
źródło
10

Wracając do początku systemów komputerowych, nie miałeś pojedynczych systemów komputerowych, zamiast tego miałeś komputery mainframe.

wprowadź opis zdjęcia tutaj

Te komputery mainframe działałyby na kartach perforowanych, które zawierałyby twój program (i często dane). Ludzie mieliby przydzielany czas w tych systemach, zabierali ze sobą karty i podłączali je do maszyn, aby mogli je przetwarzać. Maszyna będzie uruchamiać program, dopóki się nie skończy, a następnie pojawi się następny użytkownik z taśmą i kartami.

Zasadniczo tak to działało.

Matthew Williams
źródło
4
Tak więc „system operacyjny” to… ktokolwiek wykonuje harmonogramy dla użytkowników?
Kyle Strand
2
Chodzi mi o to, że twoja odpowiedź tak naprawdę nie wyjaśnia, co masz na myśli mówiąc „Ściśle mówiąc, systemy operacyjne istnieją od bardzo dawna w takiej czy innej formie”. Podajesz podstawowy opis komputerów mainframe, ale wcale nie jest jasne, że te komputery miały coś podobnego do tego, co nazywamy „systemami operacyjnymi”.
Kyle Strand
3
Wiem, co próbujesz powiedzieć, ale nie jestem zbytnio zadowolony z tego opisu, ponieważ jestem wystarczająco stary, aby pracować na komputerach mainframe, które spełniają twój dokładny opis powyżej, ale które faktycznie zawierały system operacyjny. Komputer mainframe na twoim zdjęciu prawdopodobnie byłby komputerem mainframe IBM z 1970 roku (jako / 360 lub s / 370?) Z systemem OS / 360 lub wczesną wersją MVS.
Rob Moir,
2
Nie ma czegoś takiego jak „perforowane karty magnetyczne” . Twoje zdjęcie „mainframe” jest zgodne z wizją komputera Hollywood i laików: rzędami transportów taśm magnetycznych.
trociny
1
Kilka błędnych stwierdzeń tutaj. Jak powiedział @sawdust, dziurkowane karty nie były magnetyczne. Ponadto karty perforowane często zawierały Twój program i dane; lub twój program może znajdować się na papierowej (perforowanej) taśmie. Szpule z taśmą magnetyczną pojawiły się znacznie później. Wcześniej programy były ładowane za pomocą przełączników panelu, jak pokazano w odpowiedzi RedGrittyBrick, lub przez ponowne podłączenie komputera za pomocą wtyczki. Znalazłem dla ojca, Son & Co. interesującą i pouczającą historię.
Stephen P
6

1890–1950 - Operacja związana z systemem Najwcześniejsze komputery miały odpowiednik tego, co teraz wbudowany system operacyjny. Ty (operator) również byłeś częścią systemu operacyjnego. Przełączyłeś przełączniki rejestrów (lub użyłeś karty dziurkacza) i fizycznie zamieniłeś przewody magistrali (pomyśl o starej stacji operatora telefonicznego w modzie), a pamięć została połączona (za pomocą fizycznych przewodów) bezpośrednio z żarówką (monitorem dnia) i drukarkami ( długoterminowe przechowywanie) w taki sposób, aby wyjście programu świeciło i drukowało bezpośrednio na urządzeniu, gdy było ono umieszczane w buforze pamięci wyjściowej. Do tych rzeczy nie był potrzebny sterownik, ponieważ (ze względu na sposób poprowadzenia tych fizycznych przewodów) po prostu „działały” (w tych czasach nie było też czegoś takiego jak monitor). W rzeczywistości minęło jeszcze kilkadziesiąt lat w tej erze, dopóki nie zostanie wynaleziony cyfrowy wyświetlacz numeryczny, aby można było zobaczyć liczby, które już wprowadzono do rejestru, i dane wyjściowe jako liczby dziesiętne; drukarze rządzili całą tą erą aż do monitorów. Zostały podłączone dokładnie tak, jak powinny, aby działać poprawnie. Żadna z tych części tak naprawdę nie zmieniła się znacznie po przejściu z mechanicznego (1890) na elektryczny analogowy (1910) na cyfrowy (1930). Architektura „Plug N play” została w tym czasie zastąpiona systemem przerwań i nie pojawi się ponownie dopiero pod koniec lat dziewięćdziesiątych; oczywiście do tego czasu byłoby o wiele mniej zatykania. Dzięki przerwaniom urządzenia mogły zająć czas procesora, co pozwoliło architekturom, które nie były t bezpośrednio związane ze sprzętem, ale zajęło kilka pokoleń, aby naprawdę był to usprawniony proces, który widzimy w architekturze x86 (i nowszych); wczesne systemy często napotykały okropne warunki wyścigowe, problemy ze zgodnością sprzętu / opóźnieniami i inne dziwne zachowania w przypadku przerw. Ponieważ każda maszyna używała w tym okresie radykalnie różnych architektur (eksperymentalnych); prawie wszystkie urządzenia zostały wykonane na zamówienie dla maszyny, na której pracowały.

1950–1973 - Działanie w systemie W tej erze pojawiło się większość funkcji, o których myślimy, gdy mówimy o prawdziwym systemie operacyjnym. W tej erze wprowadzono debugowanie, języki programowania, wielu użytkowników, wielozadaniowość, terminale, napędy dyskowe, sieci, standaryzację komponentów itp. Tym razem nastąpił ogromny skok w kierunku standaryzacji znacznej części tego, co oznaczało, że mieliśmy bardziej znormalizowane urządzenia, ale wciąż każdy system operacyjny został ręcznie opracowany dla każdej maszyny, co oznaczało, że funkcjonalność systemu operacyjnego była poważnie ograniczona przez wszystko, co inżynierowie, którzy zaprojektowali ten konkretny system, uznali, że potrzebują . W tym czasie istniał znaczny szary obszar w tym, czym był system operacyjny, ponieważ różne architektury radzą sobie znacznie inaczej, a maszyna bardziej ogólnego przeznaczenia będzie potrzebowała dużo więcej systemu operacyjnego niż maszyna zawierająca sprzęt do obsługi tych samych zadań. Faktem jest, że sprzęt zawsze będzie szybszy niż oprogramowanie i praktycznie wszystko, co można zrobić w oprogramowaniu, można teoretycznie zrobić w sprzęcie (to koszt \ elastyczność \ rozmiar \ czas \ itd., Co ogranicza nas od robienia niemal czysto sprzętowych wersji wszystkiego do tego dzień). System operacyjny został stworzony dla określonego komputera lub typu komputera; nie działałoby to gdzie indziej. Każdy nowy projekt komputera wymagał przepisania całego oprogramowania systemu operacyjnego niskiego poziomu od zera do pracy z konkretnym modelem maszyny. Pod koniec tego czasu pojawił się nowy system operacyjny, który wkrótce zmieni ten paradygmat, UNIX napisany w Bell Labs przez Kena Thompsona i Dennisa Ritchie.

1973 - Operacja między systemami Jeden program zmienił to wszystko, ale nie był to system UNIX. Był to kompilator C (który został słynnie wykonany w garażu przez Kena Thompsona i Dennisa Ritchie po wycięciu go przez Bell Labs). Do tego momentu, za każdym razem, gdy pisałeś kod, był to albo kod maszynowy (kod, który maszyna bezpośrednio rozumie, ale nie jest przenośny) lub był napisany w języku, który skompilował kod do kodu bajtowego (kod interpretowany przez inny program, ponieważ działa). Ogromną różnicą dla systemów operacyjnych, które przyniósł ze sobą C, była możliwość robienia tak zwanej kompilacji krzyżowej w kodzie maszynowym. Oznaczało to, że kod mógł zostać napisany raz i skompilowany tak, aby działał natywnie na wielu różnych typach maszyn, o ile napisano dla niego kompilator. Systemy operacyjne muszą być zapisane w kodzie maszynowym, ponieważ kod maszynowy jest dosłownie jedynym kodem, który zna maszyna.

Powiedziałbym, że dopiero wtedy, gdy Ken i Dennis po raz pierwszy skompilowali jądro UNIX przy użyciu kompilatora C, narodził się prawdziwy system operacyjny we współczesnym sensie. Wcześniej system operacyjny był albo obiektem fizycznym, albo po prostu wstępnie zainicjalizowanym fragmentem pamięci zaprojektowanym specjalnie dla konkretnej maszyny. Dodanie nowych urządzeń do systemu wymagało dosłownie przepisania kodu „jądra”. Teraz system operacyjny UNIX, który zaprojektowali dla konkretnego komputera, może zostać ponownie skompilowany i uruchomiony na innych komputerach bez przepisywania WSZYSTKIEGO (o ile ten komputer był w stanie skompilować kompilator C ze środowiska rozruchowego, w którym można zapisać resztę systemu operacyjnego) stosunkowo wysoki poziom kodu C).

krowe
źródło
1
Ktoś wspomniał, że OS \ 360 był wcześniejszy niż UNIX. Jest to również prawdą, ale podobnie jak wszystkie inne systemy operacyjne tego dnia, został ręcznie zakodowany dla każdego modelu maszyny, na którym działał.
krowe
1
Ktoś wspomniał, że FORTRAN może również kompilować krzyżowo. co jest prawdą, podobnie jak ALGOL (poprzednik C), ale C był pierwszym ładowanym w celu zbudowania systemu operacyjnego niezależnego od maszyny.
krowe
1
dopóki Ken i Dennis nie skompilowali jądra UNIX… że narodził się prawdziwy system operacyjny we współczesnym znaczeniu …” OMG. Na tej stronie rzadko napisano mniej prawdziwe słowa. Nie ma sensu, aby to stwierdzenie było zdalnie dokładne.
RBarryYoung
1
ignoruje również MULTICS (i BCPL)
Francis Davey
Większość rzeczy wymienionych powyżej na temat pierwszeństwa systemów UNIX i C jest nieprawidłowa, w szczególności dlaczego systemy UNIX i C były tak ważne w historii systemów operacyjnych. Było to prawie w całości spowodowane dekretem zgody na AT&T z 1974 r., Co oznaczało, że był on (i wiele innych technologii AT&T) darmowy , w tym kod źródłowy . Z tego powodu prawdziwi „pierwsi” byli pierwszymi darmowymi, w pełni funkcjonalnymi nowoczesnymi systemami operacyjnymi i kompilatorami niskiego poziomu, w tym całym kodem źródłowym. Samotna pozycja zajmowałaby przez 10-20 lat, zanim konkurenci uczciwie przyznaliby jej przewagę.
RBarryYoung
3

Na początku programy były podłączone do komputera, co uruchamiałoby program natychmiast z określonej lokalizacji podczas uruchamiania.

Następnie wymyślono różne formy przechowywania offline: karty perforowane, taśmy, bębny, a nawet dyski. Znacznie bardziej elastyczny. Ale niedostępne bezpośrednio z procesora. Program musi zostać załadowany do pamięci, zanim będzie można go uruchomić. Więc piszesz program, aby załadować swój program. Jest to znane jako moduł ładujący lub bootstrap (od wyrażenia „ciągnąć się za pasy startowe”).

Ponieważ system staje się bardziej skomplikowany, możesz mieć prostszy moduł ładujący ładujący bardziej złożony moduł ładujący. Zaczęło się od mikrokomputerów: normalny moduł ładujący taśmę działał powoli, więc załaduj dekompresor i szybko załaduj resztę taśmy. Lub program ładujący dyski, który działał jako system ochrony przed kopiowaniem, wykonując niestandardowe czynności na dysku.

Lub proces rozruchu komputera przed UEFI: procesor zaczyna działać w systemie BIOS. Spowoduje to załadowanie pierwszego sektora z dysku i przejście do niego. Wyszukuje aktywną partycję i ładuje stamtąd program ładujący, który ładuje system operacyjny. Pierwotnie byłby to COMMAND.COM dla MSDOS; teraz zwykle jest to NTLDR.EXE dla Windows.

pjc50
źródło
3

Należy zauważyć, że we wczesnym sprzęcie (przed 1960 r.) Operacje wejścia / wyjścia były znacznie prostsze. Można było odczytać kartę, wbić kartę lub wydrukować wiersz na drukarce, każda z pojedynczą instrukcją: rozmiar bufora został ustalony, a często także adres bufora.

Nawet na początku lat 60., z bardziej wyrafinowanymi procesorami (np. 7090), nadal można było czytać lub dziurkować karty za pomocą niewielkiej procedury (około 20 instrukcji), którą łatwo skopiować do każdego programu.

Ponieważ komputer był w całości poświęcony jednemu zadaniu, nie miało znaczenia, czy procesor był bezczynny, czekając, aż czytnik kart będzie gotowy do odczytania następnej karty, czy też drukarka liniowa załaduje następną linię.

Cóż, to miało znaczenie, ponieważ czas obliczeń był rzeczywiście drogi. Właśnie dlatego ludzie wymyślili wieloprocesorowe, dzielone czasowo, dodane asynchroniczne operacje we / wy, a także przerwały sterowniki urządzeń i systemy operacyjne. Interfejsy urządzeń sprzętowych stały się dla programisty bardziej złożone, dając dostęp do rejestrów We / Wy niższego poziomu, co wymagało większej złożoności ze strony sterowników urządzeń. Ten koszt złożoności (pamięć, czas programowania) był amortyzowany przez kilka programów przy użyciu urządzeń „jednocześnie”, multipleksowanych przez system operacyjny.

Jeszcze w latach 80. używałem komputera z mikroprocesorem, emulując jeden ze starszych systemów. Instrukcje maszyny miały jednolity format ponad 80 bitów (10 oktetów), a instrukcja odczytu pierwszego sektora pierwszego dysku twardego i zapisania go w pamięci pod adresem 0 była bardzo wygodna: 0000000000. Tak więc procedura uruchamiania składała się każdego ranka wpisać tę instrukcję na terminalu, który przechował ją pod adresem 0 i wykonał, a następnie załadował sektor rozruchowy i kontynuował wykonywanie przy następnej instrukcji (pod adresem 10). System plików składał się ze statycznego pliku mapowania „nazw” plików na zakresy sektorów, które zostały przydzielone ręcznie! We / Wy wykonano w asemblerze tych plików, bezpośrednio odczytując lub zapisując sektory, przesunięte przez pozycję pliku na dysku twardym, który został odzyskany przez „

Pascal Bourguignon
źródło
2

Pierwsza generacja komputerów zaprojektowanych do szerszego użytku osobistego miała tak zwany „Monitor” w pamięci ROM (pamięć tylko do odczytu).

Natychmiast po uruchomieniu monitor dostarczył bardzo ograniczony interfejs wiersza poleceń, głównie w celu załadowania programu z pamięci danych, np. Magnetofonu i rozpoczęcia wykonywania (kilka innych poleceń było dostępnych do ręcznego wprowadzania kodu, choć rzadko było to konieczne). W danym momencie mógł działać tylko jeden program.

W odróżnieniu od systemu operacyjnego, Monitor nie obsługiwał żadnego systemu plików. Ludzki operator był odpowiedzialny za znalezienie odpowiedniej taśmy, umieszczenie jej w rejestratorze i ustawienie na początku potrzebnego programu do załadowania.

Monitoruj połączone funkcje zarówno systemu BIOS, jak i systemu operacyjnego, i już był bardzo wyraźnie oprogramowaniem.

Po włączeniu krótki sygnał „resetowania” po prostu zerował licznik programu tak samo jak każdy inny licznik, jednocześnie przełączając element mapujący pamięć (jeśli był obecny) w celu mapowania adresu 0000 na ROM monitora. Często spotykał się obwód sprzętowy do ponownego mapowania Monitora w wysokiej przestrzeni adresowej później. Oprócz uruchomienia kodu, przycisk „Reset” został również użyty do zakończenia uruchomionego programu, aby można było załadować inny.

Podstawowy przycisk „reset” można znaleźć na niektórych komputerach stacjonarnych nawet w tych dniach.

h22
źródło
Dotyczy to pierwszej (lub drugiej) generacji „komputerów osobistych” do użytku domowego. Przed ich powstaniem uczniowie szkół średnich mieli zdalny dostęp do komputerów dzielących czas, które działały inaczej, ale nadal byłyby „zaprojektowane do szerszego użytku”. Nie jestem pewien, czy pierwsza generacja komputerów domowych, Altair i Heathkit, wszystkie miały monitory z linii poleceń.
RedGrittyBrick
0

Najbardziej bezpośredni poprzednik systemu operacyjnego stanowiłby kombinację standardowych bibliotek do łączenia się z urządzeniami oraz systemu ładującego bootstrap do pobierania programu do pamięci i uruchamiania.

keshlam
źródło