Dlaczego jest tyle wirtualnych urządzeń końcowych?

11

Czytam książkę Advanced Linux Programming i wspomina o wirtualnych terminalach, które, jeśli dobrze to zrozumiałem, to funkcja specyficzna dla Linuksa (nie w Uniksie) pozwalająca na wiele konsol logowania w systemie innym niż X11. Wirtualne terminale tworzysz, naciskając ALT-F2. Korzystam z Linux Mint i w folderze / dev, chociaż widzę wiele urządzeń tty i nie wiem, do czego służą. Oto grepped wyjście:

crw-rw-rw-  1 root tty       5,   0 Jan  2 19:45 tty
crw--w----  1 root tty       4,   0 Jan  2 19:10 tty0
crw-rw----  1 root tty       4,   1 Jan  2 19:10 tty1
crw--w----  1 root tty       4,  10 Jan  2 19:10 tty10
crw--w----  1 root tty       4,  11 Jan  2 19:10 tty11
crw--w----  1 root tty       4,  12 Jan  2 19:10 tty12
crw--w----  1 root tty       4,  13 Jan  2 19:10 tty13
crw--w----  1 root tty       4,  14 Jan  2 19:10 tty14
crw--w----  1 root tty       4,  15 Jan  2 19:10 tty15
crw--w----  1 root tty       4,  16 Jan  2 19:10 tty16
crw--w----  1 root tty       4,  17 Jan  2 19:10 tty17
crw--w----  1 root tty       4,  18 Jan  2 19:10 tty18
crw--w----  1 root tty       4,  19 Jan  2 19:10 tty19
crw-rw----  1 root tty       4,   2 Jan  2 19:10 tty2
crw--w----  1 root tty       4,  20 Jan  2 19:10 tty20
crw--w----  1 root tty       4,  21 Jan  2 19:10 tty21
crw--w----  1 root tty       4,  22 Jan  2 19:10 tty22
crw--w----  1 root tty       4,  23 Jan  2 19:10 tty23
crw--w----  1 root tty       4,  24 Jan  2 19:10 tty24
crw--w----  1 root tty       4,  25 Jan  2 19:10 tty25
crw--w----  1 root tty       4,  26 Jan  2 19:10 tty26
crw--w----  1 root tty       4,  27 Jan  2 19:10 tty27
crw--w----  1 root tty       4,  28 Jan  2 19:10 tty28
crw--w----  1 root tty       4,  29 Jan  2 19:10 tty29
crw-rw----  1 root tty       4,   3 Jan  2 19:10 tty3
crw--w----  1 root tty       4,  30 Jan  2 19:10 tty30
crw--w----  1 root tty       4,  31 Jan  2 19:10 tty31
crw--w----  1 root tty       4,  32 Jan  2 19:10 tty32
crw--w----  1 root tty       4,  33 Jan  2 19:10 tty33
crw--w----  1 root tty       4,  34 Jan  2 19:10 tty34
crw--w----  1 root tty       4,  35 Jan  2 19:10 tty35
crw--w----  1 root tty       4,  36 Jan  2 19:10 tty36
crw--w----  1 root tty       4,  37 Jan  2 19:10 tty37
crw--w----  1 root tty       4,  38 Jan  2 19:10 tty38
crw--w----  1 root tty       4,  39 Jan  2 19:10 tty39
crw-rw----  1 root tty       4,   4 Jan  2 19:10 tty4
crw--w----  1 root tty       4,  40 Jan  2 19:10 tty40
crw--w----  1 root tty       4,  41 Jan  2 19:10 tty41
crw--w----  1 root tty       4,  42 Jan  2 19:10 tty42
crw--w----  1 root tty       4,  43 Jan  2 19:10 tty43
crw--w----  1 root tty       4,  44 Jan  2 19:10 tty44
crw--w----  1 root tty       4,  45 Jan  2 19:10 tty45
crw--w----  1 root tty       4,  46 Jan  2 19:10 tty46
crw--w----  1 root tty       4,  47 Jan  2 19:10 tty47
crw--w----  1 root tty       4,  48 Jan  2 19:10 tty48
crw--w----  1 root tty       4,  49 Jan  2 19:10 tty49
crw-rw----  1 root tty       4,   5 Jan  2 19:10 tty5
crw--w----  1 root tty       4,  50 Jan  2 19:10 tty50
crw--w----  1 root tty       4,  51 Jan  2 19:10 tty51
crw--w----  1 root tty       4,  52 Jan  2 19:10 tty52
crw--w----  1 root tty       4,  53 Jan  2 19:10 tty53
crw--w----  1 root tty       4,  54 Jan  2 19:10 tty54
crw--w----  1 root tty       4,  55 Jan  2 19:10 tty55
crw--w----  1 root tty       4,  56 Jan  2 19:10 tty56
crw--w----  1 root tty       4,  57 Jan  2 19:10 tty57
crw--w----  1 root tty       4,  58 Jan  2 19:10 tty58
crw--w----  1 root tty       4,  59 Jan  2 19:10 tty59
crw-rw----  1 root tty       4,   6 Jan  2 19:10 tty6
crw--w----  1 root tty       4,  60 Jan  2 19:10 tty60
crw--w----  1 root tty       4,  61 Jan  2 19:10 tty61
crw--w----  1 root tty       4,  62 Jan  2 19:10 tty62
crw--w----  1 root tty       4,  63 Jan  2 19:10 tty63
crw--w----  1 root tty       4,   7 Jan  2 19:10 tty7
crw--w----  1 root tty       4,   8 Jan  2 19:10 tty8
crw--w----  1 root tty       4,   9 Jan  2 19:10 tty9
ArmenB
źródło
4
W rzeczywistości nie tworzysz Linux VT, naciskając CTRL-ALT-F1 (i tak dalej), już tam są, po prostu ich nie widzisz, ponieważ menedżer ekranu został automatycznie wywołany przy uruchomieniu, a następnie skończyłeś w X (co myląco działa na tty 7). Sprawdź, /etc/inittaba zobaczysz, jak to działa.
Emanuel Berg

Odpowiedzi:

10

Są to w szczególności wirtualne urządzenia konsoli , w terminologii Linuksa. Obsługa wirtualnych konsol na tym samym urządzeniu fizycznym nie jest unikalna dla Linuksa (na przykład BSD nazywa je „sprzętowymi portami terminali”).

Linux nie ma mechanizmu do tworzenia urządzeń konsolowych na żądanie. 63 konsole nie zawsze są aktywne (musisz je aktywować ttyN, aby przełączyć się na nie za pomocą ( Ctrl+) Alt+ FN), ale aktywacja jednej wymaga otwarcia urządzenia konsoli ( openvtpolecenie to robi, podobnie jak gettyserwer X). Tak więc wpis urządzenia musi istnieć przez cały czas, albo trzeba go utworzyć ręcznie, zanim będzie można go użyć.

Nowoczesne systemy Linux (z udev lub devtmpfs) tworzą wpisy urządzeń dla każdego urządzenia obecnego w systemie. Wszystkie wirtualne konsole są zawsze obecne (niezależnie od tego, czy są aktywne czy nie), więc wszystkie wpisy są tworzone. Większość użytkowników nie potrzebuje prawie tak wielu - w rzeczywistości większość użytkowników nigdy nie widzi niczego poza wirtualną konsolą, na której działa X. Ale jest kilku, którzy to robią i muszą załatać swoje jądro, aby zezwolić na ponad 63 konsole, ponieważ obsługują duże maszyny z wieloma konsolami sprzętowymi).

Gilles „SO- przestań być zły”
źródło
-2

Nie jest to kwestia specyficzna dla systemu Linux, a tty są używane nie tylko w terminalach wirtualnych. Są one również używane np. Podczas uruchamiania Xtermu, gdy jesteś w interfejsie graficznym. Gdyby było mniej urządzeń tty, nie miałbyś wielu logowań xterms ani ssh.

Jenny D.
źródło
Hm, chcesz wyjaśnić to trochę więcej? Kiedy uruchamiasz xterm pod X, czy nie dostajesz pkt, a nie tty?
Emanuel Berg
OK, przeczytałem to, ale wciąż nie jest jasne. Czy mówisz, że kiedy uruchamiam Xterm, proces ten jest w jakiś sposób związany z plikiem urządzenia tty w /dev, więc jeśli byłoby ich mniej, to mógłbyś faktycznie „zabraknąć” ttys?
Emanuel Berg
4
W rzeczywistości interfejs urządzenia dla emulatorów X nie jest tty - jest to „pseudo terminal” (pt). Są one zarządzane dynamicznie przez jądro, ale obecnie istniejące są wymienione w /dev/pts/. ttyKomenda daje bieżące urządzenie - spróbuj w X wtedy spróbować go w VT.
goldilocks
2
Mylisz się /dev/ttyN(wirtualne konsole, czasami nazywane wirtualnymi terminalami) ze starymi /dev/ptyN(pseudo-terminale, czasami nazywane także wirtualnymi terminalami). Linux używa teraz dynamicznie alokowanego /dev/pts/Nzamiast starego statycznie alokowanego /dev/ptyN.
Gilles „SO- przestań być zły”