Jak działa terminal Linux?


32

Jeśli uruchomisz terminal i wywołasz plik wykonywalny (zakładając, że jest on zorientowany liniowo dla uproszczenia), otrzymasz odpowiedź na polecenie z pliku wykonywalnego. Jak to jest drukowane dla ciebie (użytkownika)? Czy terminal robi coś takiego pexpect? (ankieta czeka na wyjście) czy co? Jak otrzymuje powiadomienie o wydruku do wydrukowania? Jak terminal uruchamia program? (Czy jest to coś podobnego do os.fork ()? Pythona). Zastanawiam się, jak działa terminal, bawię się jakimś emulatorem terminala i nadal nie rozumiem, jak działa cała ta magia. Patrzę na źródło konsoli (kde) i yakuake (prawdopodobnie używa konsoli) i nie mogę się dowiedzieć, gdzie dzieje się cała ta magia.


6
Spójrz na prosty emulator terminala i prosty zabawkowy system operacyjny z prostą powłoką (i pierwsze piętnaście stron książki). Przeczytaj także tę odpowiedź na powiązane pytanie.

2
Ten link jest także interesujący dla tematu terminalu i historii tty: linusakesson.net/programming/tty/index.php

@nwildner cool,
mike

Odpowiedzi:


30

Początkowo miałeś tylko głupie terminale - początkowo tak naprawdę maszyny do pisania (podobne do elektrycznej maszyny do pisania, ale z rolką papieru) (stąd / dev / tty - TeleTYpers), ale później ekran + kombinacje klawiszy - które właśnie wysłały kod klucza do komputera, a komputer odesłał polecenie, które napisało list na terminalu (tj. terminal nie miał lokalnego echa, komputer musiał nakazać terminalowi napisanie tego, co użytkownik wpisał na terminalu) - jest to jeden z powodów dlaczego tak wiele ważnych poleceń Uniksa jest tak krótkich. Większość terminali była podłączona liniami szeregowymi, ale (przynajmniej) jeden był bezpośrednio podłączony do komputera (często tego samego pokoju) - była to konsola. Zaufało tylko kilku wybranym użytkownikom, którzy pracowali na „konsoli” (był to często jedyny „terminal” dostępny w trybie pojedynczego użytkownika).

Później pojawiły się również terminale graficzne (tak zwane „xterminale”, których nie należy mylić z xterm-programem) z ekranem i graficzną kartą ekranową, klawiaturą, myszą i prostym procesorem; który może po prostu uruchomić serwer X. Nie wykonali żadnych obliczeń, więc klienci X działali na komputerze, z którym byli połączeni. Niektóre miały dyski twarde, ale mogły także uruchamiać się przez sieć. Były popularne na początku lat 90., zanim komputery stały się tak tanie i wydajne.

„Emulator terminala” - „okno terminala” otwierane za pomocą programów takich jak xtermlub konsole- próbuje naśladować funkcjonalność takich głupich terminali. Również programy takie jak PuTTY(Windows) emulują terminale.

Na PC, gdzie „konsola” (klawiatura + ekran) i „komputer” są bardziej pojedynczą jednostką, masz zamiast tego „wirtualne terminale” (w Linuksie klawisze Alt + F1 do Alt + F6), ale one też naśladują terminale w starym stylu. Oczywiście, ponieważ Unix / Linux stał się bardziej stacjonarnym systemem operacyjnym często używanym przez pojedynczego użytkownika, teraz większość pracy wykonujesz „na konsoli”, gdzie użytkownicy wcześniej korzystali z terminali połączonych liniami szeregowymi.


Oczywiście jest to powłoka, która uruchamia programy. I używa fork-systemcall (język C), aby wykonać swoją kopię z ustawieniami środowiska, a następnie exec-systemcall służy do przekształcenia tej kopii w polecenie, które chcesz uruchomić. Powłoka zawiesza się (chyba że polecenie zostanie uruchomione w tle), dopóki polecenie się nie zakończy. Ponieważ polecenie dziedziczy ustawienia dla stdin, stdout i stderr z powłoki, polecenie zapisze na ekranie terminala i odbierze dane z klawiatury terminala.


Pomiędzy głupimi terminalami szeregowymi a Xtermami była en.wikipedia.org/wiki/Blit_(computer_terminal)
sendmoreinfo

31

Kiedy „otwierasz terminal”, uruchamiasz program emulatora terminala, taki jak xterm, gnome-terminal, lxterm, konsola,…

Jedną z pierwszych rzeczy, które wykonuje emulator terminala, jest przydzielenie pseudo terminala (często nazywanego pseudo-tty lub w skrócie pty). Pty to para plików urządzeń znakowych : pty master, czyli strona, którą otwiera emulator terminala, i pty slave, czyli strona, którą otwierają programy działające w terminalu. W większości współczesnych jednorożców, master jest /dev/ptmx(który ma każdy emulator terminala), a slave jest /dev/pts/NUMBER. Sterownik jądra dla pseudo-terminali śledzi, który proces kontroluje master dla każdego urządzenia slave. Emulator terminala może pobrać ścieżkę do odpowiedniego urządzenia podrzędnego poprzez ioctl na urządzeniu głównym.

Gdy emulator terminala otworzy urządzenie nadrzędne, uruchamia podproces (zazwyczaj powłokę, ale decyzję podejmuje użytkownik, który wywołał emulator terminala). Emulator robi to w zwykły sposób, aby wywołać program:

  • rozwidlić proces potomny,
  • otwórz slave pty device na deskryptorach plików 0, 1 i 2 (standardowe wejście, standardowe wyjście i strumień błędów),
  • uruchom powłokę lub inny program w procesie potomnym.

Gdy dziecko (lub jakikolwiek inny proces) pisze do pty slave, emulator widzi dane wejściowe w pty master.

I odwrotnie, gdy emulator zapisuje do urządzenia nadrzędnego, jest to postrzegane jako wejście na urządzeniu podrzędnym.

Spodziewaj się, że działa dokładnie w ten sam sposób. Różnica między Expect a emulatorem terminali, takim jak xterm, polega na tym, że otrzymują dane wejściowe, którymi karmią program (skrypt vs klawiatura) i co robią z danymi wyjściowymi (plik dziennika lub parser vs rysunek tekstu w oknie).


Jednym z prostych przykładów tego, co tu opisano, jest implementacja scriptpolecenia BusyBox , w której xgetptyfunkcja jest rdzeniem pracy /dev/ptmx.
Ruslan

@Tim Rozumiem, że angielski nie jest twoim językiem ojczystym. Ale jeśli edytujesz post, upewnij się, że nie pomylisz się. Jeśli tego nie rozumiesz, nie edytuj. Również po raz kolejny nie używaj pogrubienia, aby wyróżnić rzeczy, które nie wymagają wyróżnienia.
Gilles 'SO - przestań być zły'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.