Minęło niewiele ponad 50 lat od pojawienia się pierwszego komputera elektronicznego. W tym krótkim okresie rozwoju społeczeństwa zmieniło się kilka generacji komputerów, a pierwsze komputery są dziś rzadkością w muzeum. Sama historia rozwoju technologii komputerowej jest bardzo interesująca, ukazując ścisły związek matematyki z fizyką (głównie z fizyką ciała stałego, półprzewodników, elektroniki) i nowoczesną technologią, której poziom rozwoju w dużej mierze determinuje postęp w produkcji urządzeń komputerowych.
Komputery elektroniczne w naszym kraju są podzielone na pokolenia. Technologia komputerowa charakteryzuje się przede wszystkim szybkością zmiany pokoleń - bowiem jej krótka historia rozwoju została już zastąpiona przez cztery pokolenia, a teraz pracujemy na komputerach piątej generacji. Jaka jest cecha definiująca przypisanie komputera do tego lub innego pokolenia? Jest to przede wszystkim ich baza elementów (z której są w większości budowane) i takie ważne cechy, jak szybkość, pojemność pamięci, sposoby zarządzania i przetwarzania informacji. Oczywiście podział komputerów na pokolenia jest w pewnym stopniu warunkowy. Istnieje wiele modeli, które zgodnie z jednym atrybutem odnoszą się do jednego i do drugiego, do innego pokolenia. A jednak, pomimo tej konwencjonalności, pokolenia komputerowe można uznać za jakościowe skoki w rozwoju technologii komputerowej.
Pierwsza generacja komputerów (1948 - 1958).
Elementem bazowym samochodów tego pokolenia były lampy elektroniczne - diody i triody. Maszyny zostały zaprojektowane do rozwiązywania stosunkowo prostych problemów naukowych i technicznych. Do tej generacji komputery należą: SECM, BESM-1, M-1, M-2, m-W "Strzałka", "Mińsk-1", "Ural-1", "Ural-2", „Ural 3 ", M-20," Setun ", BESM-2," Hrazdan ". Były one znacznych rozmiarów, zużywały dużo energii, miały niską niezawodność pracy i słabe oprogramowanie. Ich prędkości nie przekracza 2-3 milionów operacji na sekundę, pojemność pamięci RAM, 2k, 2048 słów urządzenia (1K = 1024) z 48 cyfr binarnych. W 1958 roku pojawiła się maszyna M-20 z pamięcią 4K i prędkością około 20 tysięcy operacji na sekundę. W maszynach pierwszej generacji główne zasady logiczne budowy komputerów elektronicznych i koncepcji Johna von Neumanna do obsługi komputera dla wejścia do programu pamięci i danych wejściowych (numery). Okres ten był początkiem komercyjnego zastosowania komputerów elektronicznych do przetwarzania danych. W komputerach tego czasu używano lamp elektrycznych i pamięci zewnętrznej na bębnie magnetycznym. Zaplątali się w druty i mieli czas dostępu 1x10-3 s. Systemy produkcyjne i kompilatory jeszcze się nie pojawiły. Pod koniec tego okresu produkowano urządzenia pamięciowe na rdzeniach magnetycznych. Niezawodność tej generacji komputerów była bardzo niska.
Druga generacja komputerów (1959 - 1967).
Podstawą elementów maszyn tej generacji były urządzenia półprzewodnikowe. Maszyny zostały zaprojektowane do rozwiązywania różnych pracochłonnych zadań naukowych i technicznych, a także do zarządzania procesami technologicznymi w produkcji. Pojawienie się elementów półprzewodnikowych w obwodach elektronicznych znacznie zwiększyło pojemność pamięci RAM, niezawodność i szybkość działania komputera. Zmniejszyły się wymiary, waga i zużycie energii. Wraz z pojawieniem się maszyn drugiej generacji znacznie wzrosła powierzchnia korzystania z komputerów elektronicznych, głównie ze względu na rozwój oprogramowania. Były też wyspecjalizowane maszyny, na przykład komputery do rozwiązywania problemów ekonomicznych, zarządzania procesami produkcyjnymi, systemami transmisji informacji itp. Komputery drugiej generacji to:
Komputer M-40, -50 dla systemów obrony antyrakietowej;
Ural -11, -14, -16 - komputery ogólnego przeznaczenia, koncentrujące się na rozwiązywaniu zadań inżynieryjnych, technicznych i planistycznych;
Mińsk -2, -12, -14 do rozwiązywania problemów inżynierskich, naukowych i projektowych o charakterze matematycznym i logicznym;
Mińsk-22 jest przeznaczony do rozwiązywania zadań naukowych i technicznych oraz planowania;
BESM-3 -4, -6 maszyny ogólnego przeznaczenia, skoncentrowane na rozwiązywaniu złożonych problemów nauki i technologii;
M-20, -220, -222 maszyna ogólnego przeznaczenia, skoncentrowana na rozwiązywaniu złożonych problemów matematycznych;
MIR-1 to mały elektroniczny komputer cyfrowy zaprojektowany do rozwiązywania wielu problemów matematycznych z zakresu inżynierii i projektowania,
"Nairi" jest maszyną ogólnego przeznaczenia przeznaczoną do rozwiązywania szeregu zadań inżynieryjnych, naukowych i technicznych, a także niektórych rodzajów planowanych zadań rachunkowości gospodarczej i statystycznej;
Małe komputery ogólnego przeznaczenia Ruta-110;
i wiele innych komputerów.
Komputery BESM-4, M-220, M-222 miały prędkość około 20-30 tysięcy operacji na sekundę i odpowiednio RAM-8K, 16K i 32K. Spośród maszyn drugiej generacji, BESM-6 wyróżnia się prędkością około miliona operacji na sekundę oraz pamięcią operacyjną z 32K do 128K (w większości maszyn wykorzystuje się dwa segmenty pamięci po 32K każdy).
Okres ten charakteryzuje się szerokim zastosowaniem tranzystorów i ulepszonych układów pamięci na rdzeniach. Dużo uwagi poświęcono tworzeniu oprogramowania systemowego, kompilatorów i operacji we / wy. Pod koniec tego okresu pojawiły się uniwersalne i dość skuteczne kompilatory dla Kobolu, Fortrana i innych języków.
Czas dostępu był już 1 × 10-6 s, chociaż większość elementów komputera była nadal połączona przewodami.
Maszyny obliczeniowe z tego okresu zostały z powodzeniem wykorzystane w obszarach związanych z przetwarzaniem zbiorów danych i rozwiązaniem zadań, które zazwyczaj wymagają rutynowych operacji w fabrykach, instytucjach i bankach. Te komputery pracowały na zasadzie przetwarzania wsadowego danych. Zasadniczo skopiowano ręczne metody kopiowania. Nowe możliwości oferowane przez komputery praktycznie nie były wykorzystywane.
W tym czasie powstał zawód eksperta w dziedzinie informatyki, a wiele uniwersytetów zaczęło stwarzać możliwość kształcenia się w tej dziedzinie.
Trzecia generacja komputerów (1968 - 1973).
Podstawa elementu komputera - małe układy scalone (MIS). Maszyny były przeznaczone do szerokiego zastosowania w różnych dziedzinach nauki i technologii (obliczenia, zarządzanie produkcją, obiekty mobilne itp.). Dzięki układom scalonym możliwe było znaczne poprawienie technicznych i operacyjnych cech komputerów. Na przykład maszyny trzeciej generacji, w porównaniu do maszyn drugiej generacji, mają większą ilość pamięci RAM, wyższą wydajność, większą niezawodność i zużycie energii, a także mniejszy ślad i ciężar. W ZSRR w latach 70. XX w. Rozwinięto ACS. Podstawy systemu państwowego i międzypaństwowego, obejmujące kraje członkowskie CMEA (Rada Wzajemnej Pomocy Gospodarczej), są ustanawiane dla systemu przetwarzania danych. komputery mainframe opracowany trzeciej generacji UE kompatybilny zarówno między sobą (WE średniej i wysokiej wydajności maszyn komputerowych) oraz z obcego komputera trzeciej generacji (IBM-360 itd. - USA). W rozwoju pojazdów UCS udziału ekspertów radzieckich, Republika Ludowo Bułgarii (PRB), Węgierskiej Republiki Ludowej (HPR), Polskiej Rzeczypospolitej Ludowej (Polska), czechosłowacki Socjalistyczna Republika Radziecka (CSSR) i Niemiecka Republika Demokratyczna (NRD). W tym samym czasie w ZSRR są tworzone i quasianalog komputery wieloprocesorowe, produkowane średnie „Peace-31”, „Peace-32”, „Nairi-34.” Do sterowania procesami technologicznymi tworzone są komputery serii ASVT M-6000 i M-7000 (programiści VP Ryazanov i inni). Zaprojektowane i wyprodukowane pulpitu minikomputer na ICS M-180, "Elektronika -79, -100, -125, -200," "Elektronika RS-28", "Elektronika NC-60" i inne.
W maszynach trzeciej generacji obejmują "DNIEPR- 2" komputer jednolitego systemu (EU-1010, Eu-1020, PL-1030, Eu-1040, Eu-1050 EU-1060 i ich niektórych związków pośrednich zmian - EU-1021 i inne. ), MIR-2, "Nairi-2" i wielu innych.
Cechą charakterystyczną tego okresu był gwałtowny spadek cen sprzętu. Osiągnięto to głównie dzięki zastosowaniu układów scalonych. Konwencjonalne połączenia elektryczne za pomocą przewodów zostały wbudowane w mikroukład. Pozwoliło to uzyskać wartość czasu dostępu do 2х10 -9 s. W tym okresie na rynku pojawiły się przyjazne dla użytkownika stacje robocze, które dzięki pracy w sieci znacznie uprościły możliwość uzyskania niewielkiego czasu dostępu, zwykle związanego z dużymi maszynami. Dalszy postęp w rozwoju technologii komputerowej wiązał się z rozwojem pamięci półprzewodnikowej, ekranów ciekłokrystalicznych i pamięci elektronicznej. Pod koniec tego okresu nastąpił komercyjny przełom w dziedzinie technologii mikroelektronicznej.
Zwiększona produktywność komputerów i dopiero powstające systemy z wieloma maszynami umożliwiły zasadniczo realizację nowych zadań, które były dość złożone i często prowadziły do nierozwiązywalnych problemów związanych z wdrażaniem ich oprogramowania. Zaczęliśmy rozmawiać o "kryzysie oprogramowania". Następnie były skuteczne metody tworzenia oprogramowania. Tworzenie nowych produktów programowych w coraz większym stopniu opiera się na metodach planowania i specjalnych metodach programowania.
Ten okres jest związany z szybkim rozwojem komputerów czasu rzeczywistego. Istniała tendencja, zgodnie z którą w zadaniach zarządzania wraz z dużymi komputerami jest miejsce na korzystanie z małych maszyn. Okazało się więc, że minikomputer jest wyjątkowo dobry w zarządzaniu złożonymi instalacjami przemysłowymi, gdzie duża maszyna licząca często zawodzi. Złożone systemy kontroli podzielone są na podsystemy, z których każdy wykorzystuje swój własny minikomputer. Dużemu komputerowi czasu rzeczywistego przypisywane są zadania planowania (obserwacji) w systemie hierarchicznym w celu koordynacji zarządzania podsystemami i przetwarzania danych centralnych dotyczących obiektu.
Oprogramowanie dla małych komputerów na początku było dość proste, ale przez 1968 pierwszy komercyjny system operacyjny czasu rzeczywistego specjalnie zaprojektowany języki programowania wysokiego poziomu, a cross-System. Wszystko to zapewniało dostępność małych maszyn do szerokiej gamy zastosowań. Dzisiaj trudno jest znaleźć gałąź przemysłu, w której te maszyny w takiej czy innej formie nie zostały z powodzeniem zastosowane. Ich funkcje w produkcji są bardzo zróżnicowane; Można więc określić proste systemy gromadzenia danych, zautomatyzowane stanowiska testowe, systemy sterowania procesem. Należy podkreślić, że komputer sterujący coraz bardziej atakuje dziedzinę komercyjnego przetwarzania danych, gdzie jest wykorzystywany do rozwiązywania problemów komercyjnych.
Minikomputery były również wykorzystywane do rozwiązywania problemów inżynierskich związanych z projektowaniem. Przeprowadzono pierwsze eksperymenty, które wykazały skuteczność wykorzystania komputerów jako narzędzi projektowych.
Wykorzystanie rozproszonych systemów komputerowych było podstawą decentralizacji rozwiązania zadań związanych z przetwarzaniem danych w fabrykach, bankach i innych instytucjach. Jednocześnie charakterystyczny dla tego okresu jest chroniczny niedobór personelu przeszkolonego w dziedzinie komputerów elektronicznych. Dotyczy to w szczególności zadań związanych z projektowaniem rozproszonych systemów komputerowych i systemów czasu rzeczywistego.
Komputery elektroniczne w naszym kraju są podzielone na pokolenia. Technologia komputerowa charakteryzuje się przede wszystkim szybkością zmiany pokoleń - bowiem jej krótka historia rozwoju została już zastąpiona przez cztery pokolenia, a teraz pracujemy na komputerach piątej generacji. Jaka jest cecha definiująca przypisanie komputera do tego lub innego pokolenia? Jest to przede wszystkim ich baza elementów (z której są w większości budowane) i takie ważne cechy, jak szybkość, pojemność pamięci, sposoby zarządzania i przetwarzania informacji. Oczywiście podział komputerów na pokolenia jest w pewnym stopniu warunkowy. Istnieje wiele modeli, które zgodnie z jednym atrybutem odnoszą się do jednego i do drugiego, do innego pokolenia. A jednak, pomimo tej konwencjonalności, pokolenia komputerowe można uznać za jakościowe skoki w rozwoju technologii komputerowej.
Pierwsza generacja komputerów (1948 - 1958).
Elementem bazowym samochodów tego pokolenia były lampy elektroniczne - diody i triody. Maszyny zostały zaprojektowane do rozwiązywania stosunkowo prostych problemów naukowych i technicznych. Do tej generacji komputery należą: SECM, BESM-1, M-1, M-2, m-W "Strzałka", "Mińsk-1", "Ural-1", "Ural-2", „Ural 3 ", M-20," Setun ", BESM-2," Hrazdan ". Były one znacznych rozmiarów, zużywały dużo energii, miały niską niezawodność pracy i słabe oprogramowanie. Ich prędkości nie przekracza 2-3 milionów operacji na sekundę, pojemność pamięci RAM, 2k, 2048 słów urządzenia (1K = 1024) z 48 cyfr binarnych. W 1958 roku pojawiła się maszyna M-20 z pamięcią 4K i prędkością około 20 tysięcy operacji na sekundę. W maszynach pierwszej generacji główne zasady logiczne budowy komputerów elektronicznych i koncepcji Johna von Neumanna do obsługi komputera dla wejścia do programu pamięci i danych wejściowych (numery). Okres ten był początkiem komercyjnego zastosowania komputerów elektronicznych do przetwarzania danych. W komputerach tego czasu używano lamp elektrycznych i pamięci zewnętrznej na bębnie magnetycznym. Zaplątali się w druty i mieli czas dostępu 1x10-3 s. Systemy produkcyjne i kompilatory jeszcze się nie pojawiły. Pod koniec tego okresu produkowano urządzenia pamięciowe na rdzeniach magnetycznych. Niezawodność tej generacji komputerów była bardzo niska.
Druga generacja komputerów (1959 - 1967).
Podstawą elementów maszyn tej generacji były urządzenia półprzewodnikowe. Maszyny zostały zaprojektowane do rozwiązywania różnych pracochłonnych zadań naukowych i technicznych, a także do zarządzania procesami technologicznymi w produkcji. Pojawienie się elementów półprzewodnikowych w obwodach elektronicznych znacznie zwiększyło pojemność pamięci RAM, niezawodność i szybkość działania komputera. Zmniejszyły się wymiary, waga i zużycie energii. Wraz z pojawieniem się maszyn drugiej generacji znacznie wzrosła powierzchnia korzystania z komputerów elektronicznych, głównie ze względu na rozwój oprogramowania. Były też wyspecjalizowane maszyny, na przykład komputery do rozwiązywania problemów ekonomicznych, zarządzania procesami produkcyjnymi, systemami transmisji informacji itp. Komputery drugiej generacji to:
Komputer M-40, -50 dla systemów obrony antyrakietowej;
Ural -11, -14, -16 - komputery ogólnego przeznaczenia, koncentrujące się na rozwiązywaniu zadań inżynieryjnych, technicznych i planistycznych;
Mińsk -2, -12, -14 do rozwiązywania problemów inżynierskich, naukowych i projektowych o charakterze matematycznym i logicznym;
Mińsk-22 jest przeznaczony do rozwiązywania zadań naukowych i technicznych oraz planowania;
BESM-3 -4, -6 maszyny ogólnego przeznaczenia, skoncentrowane na rozwiązywaniu złożonych problemów nauki i technologii;
M-20, -220, -222 maszyna ogólnego przeznaczenia, skoncentrowana na rozwiązywaniu złożonych problemów matematycznych;
MIR-1 to mały elektroniczny komputer cyfrowy zaprojektowany do rozwiązywania wielu problemów matematycznych z zakresu inżynierii i projektowania,
"Nairi" jest maszyną ogólnego przeznaczenia przeznaczoną do rozwiązywania szeregu zadań inżynieryjnych, naukowych i technicznych, a także niektórych rodzajów planowanych zadań rachunkowości gospodarczej i statystycznej;
Małe komputery ogólnego przeznaczenia Ruta-110;
i wiele innych komputerów.
Komputery BESM-4, M-220, M-222 miały prędkość około 20-30 tysięcy operacji na sekundę i odpowiednio RAM-8K, 16K i 32K. Spośród maszyn drugiej generacji, BESM-6 wyróżnia się prędkością około miliona operacji na sekundę oraz pamięcią operacyjną z 32K do 128K (w większości maszyn wykorzystuje się dwa segmenty pamięci po 32K każdy).
Okres ten charakteryzuje się szerokim zastosowaniem tranzystorów i ulepszonych układów pamięci na rdzeniach. Dużo uwagi poświęcono tworzeniu oprogramowania systemowego, kompilatorów i operacji we / wy. Pod koniec tego okresu pojawiły się uniwersalne i dość skuteczne kompilatory dla Kobolu, Fortrana i innych języków.
Czas dostępu był już 1 × 10-6 s, chociaż większość elementów komputera była nadal połączona przewodami.
Maszyny obliczeniowe z tego okresu zostały z powodzeniem wykorzystane w obszarach związanych z przetwarzaniem zbiorów danych i rozwiązaniem zadań, które zazwyczaj wymagają rutynowych operacji w fabrykach, instytucjach i bankach. Te komputery pracowały na zasadzie przetwarzania wsadowego danych. Zasadniczo skopiowano ręczne metody kopiowania. Nowe możliwości oferowane przez komputery praktycznie nie były wykorzystywane.
W tym czasie powstał zawód eksperta w dziedzinie informatyki, a wiele uniwersytetów zaczęło stwarzać możliwość kształcenia się w tej dziedzinie.
Trzecia generacja komputerów (1968 - 1973).
Podstawa elementu komputera - małe układy scalone (MIS). Maszyny były przeznaczone do szerokiego zastosowania w różnych dziedzinach nauki i technologii (obliczenia, zarządzanie produkcją, obiekty mobilne itp.). Dzięki układom scalonym możliwe było znaczne poprawienie technicznych i operacyjnych cech komputerów. Na przykład maszyny trzeciej generacji, w porównaniu do maszyn drugiej generacji, mają większą ilość pamięci RAM, wyższą wydajność, większą niezawodność i zużycie energii, a także mniejszy ślad i ciężar. W ZSRR w latach 70. XX w. Rozwinięto ACS. Podstawy systemu państwowego i międzypaństwowego, obejmujące kraje członkowskie CMEA (Rada Wzajemnej Pomocy Gospodarczej), są ustanawiane dla systemu przetwarzania danych. komputery mainframe opracowany trzeciej generacji UE kompatybilny zarówno między sobą (WE średniej i wysokiej wydajności maszyn komputerowych) oraz z obcego komputera trzeciej generacji (IBM-360 itd. - USA). W rozwoju pojazdów UCS udziału ekspertów radzieckich, Republika Ludowo Bułgarii (PRB), Węgierskiej Republiki Ludowej (HPR), Polskiej Rzeczypospolitej Ludowej (Polska), czechosłowacki Socjalistyczna Republika Radziecka (CSSR) i Niemiecka Republika Demokratyczna (NRD). W tym samym czasie w ZSRR są tworzone i quasianalog komputery wieloprocesorowe, produkowane średnie „Peace-31”, „Peace-32”, „Nairi-34.” Do sterowania procesami technologicznymi tworzone są komputery serii ASVT M-6000 i M-7000 (programiści VP Ryazanov i inni). Zaprojektowane i wyprodukowane pulpitu minikomputer na ICS M-180, "Elektronika -79, -100, -125, -200," "Elektronika RS-28", "Elektronika NC-60" i inne.
W maszynach trzeciej generacji obejmują "DNIEPR- 2" komputer jednolitego systemu (EU-1010, Eu-1020, PL-1030, Eu-1040, Eu-1050 EU-1060 i ich niektórych związków pośrednich zmian - EU-1021 i inne. ), MIR-2, "Nairi-2" i wielu innych.
Cechą charakterystyczną tego okresu był gwałtowny spadek cen sprzętu. Osiągnięto to głównie dzięki zastosowaniu układów scalonych. Konwencjonalne połączenia elektryczne za pomocą przewodów zostały wbudowane w mikroukład. Pozwoliło to uzyskać wartość czasu dostępu do 2х10 -9 s. W tym okresie na rynku pojawiły się przyjazne dla użytkownika stacje robocze, które dzięki pracy w sieci znacznie uprościły możliwość uzyskania niewielkiego czasu dostępu, zwykle związanego z dużymi maszynami. Dalszy postęp w rozwoju technologii komputerowej wiązał się z rozwojem pamięci półprzewodnikowej, ekranów ciekłokrystalicznych i pamięci elektronicznej. Pod koniec tego okresu nastąpił komercyjny przełom w dziedzinie technologii mikroelektronicznej.
Zwiększona produktywność komputerów i dopiero powstające systemy z wieloma maszynami umożliwiły zasadniczo realizację nowych zadań, które były dość złożone i często prowadziły do nierozwiązywalnych problemów związanych z wdrażaniem ich oprogramowania. Zaczęliśmy rozmawiać o "kryzysie oprogramowania". Następnie były skuteczne metody tworzenia oprogramowania. Tworzenie nowych produktów programowych w coraz większym stopniu opiera się na metodach planowania i specjalnych metodach programowania.
Ten okres jest związany z szybkim rozwojem komputerów czasu rzeczywistego. Istniała tendencja, zgodnie z którą w zadaniach zarządzania wraz z dużymi komputerami jest miejsce na korzystanie z małych maszyn. Okazało się więc, że minikomputer jest wyjątkowo dobry w zarządzaniu złożonymi instalacjami przemysłowymi, gdzie duża maszyna licząca często zawodzi. Złożone systemy kontroli podzielone są na podsystemy, z których każdy wykorzystuje swój własny minikomputer. Dużemu komputerowi czasu rzeczywistego przypisywane są zadania planowania (obserwacji) w systemie hierarchicznym w celu koordynacji zarządzania podsystemami i przetwarzania danych centralnych dotyczących obiektu.
Oprogramowanie dla małych komputerów na początku było dość proste, ale przez 1968 pierwszy komercyjny system operacyjny czasu rzeczywistego specjalnie zaprojektowany języki programowania wysokiego poziomu, a cross-System. Wszystko to zapewniało dostępność małych maszyn do szerokiej gamy zastosowań. Dzisiaj trudno jest znaleźć gałąź przemysłu, w której te maszyny w takiej czy innej formie nie zostały z powodzeniem zastosowane. Ich funkcje w produkcji są bardzo zróżnicowane; Można więc określić proste systemy gromadzenia danych, zautomatyzowane stanowiska testowe, systemy sterowania procesem. Należy podkreślić, że komputer sterujący coraz bardziej atakuje dziedzinę komercyjnego przetwarzania danych, gdzie jest wykorzystywany do rozwiązywania problemów komercyjnych.
Minikomputery były również wykorzystywane do rozwiązywania problemów inżynierskich związanych z projektowaniem. Przeprowadzono pierwsze eksperymenty, które wykazały skuteczność wykorzystania komputerów jako narzędzi projektowych.
Wykorzystanie rozproszonych systemów komputerowych było podstawą decentralizacji rozwiązania zadań związanych z przetwarzaniem danych w fabrykach, bankach i innych instytucjach. Jednocześnie charakterystyczny dla tego okresu jest chroniczny niedobór personelu przeszkolonego w dziedzinie komputerów elektronicznych. Dotyczy to w szczególności zadań związanych z projektowaniem rozproszonych systemów komputerowych i systemów czasu rzeczywistego.