Для чего нужна подсистема tty?

К настоящему времени я потратил как минимум 10 часов, пытаясь разобраться в знаменитом сообщении в блоге Линуса Акессона, и мне все еще не удается. Итак, позвольте мне задать свои сомнения по поводу tty / ptty в виде серии коротких вопросов.

1) Находится ли tty / ptty в пространстве пользователя или ядра?

2) Какое соединение tty / ptty с устройствами или драйверами, какая-то нумерация или что-то в этом роде?

3) Кажется, что tty связан с чем-то, что называется управляющим терминалом процесса. Каковы отношения и связан ли каждый процесс с терминалом?

4) В целом, я до сих пор не понимаю, где, черт возьми, вписывается эта концепция терминала. Процесс хочет что-то прочитать из stdio, но не может просто сделать это из нужного файла устройства. Какую именно проблему намеревается решить tty?

5) Я где-то читал, что есть попытки переместить tty из пользовательского пространства в пространство ядра. Является ли tty просто историческим остатком, чем сильной конструктивной особенностью?


person user2277550    schedule 24.05.2016    source источник


Ответы (1)


Уточнение (которое может ответить на некоторые из ваших вопросов): я думаю, вы имели в виду pty (а не ptty), который является псевдо-tty / псевдотерминалом.

  1. TTY (/ dev / ttyx) - означает телетайп - это оригинальные терминалы (для вывода использовался строчный принтер, а для ввода - клавиатура!). Терминал - это просто устройство пользовательского интерфейса, которое использует текст для ввода и вывода.

  2. Pty (/ dev / pty / n) - это псевдотерминал - это программная реализация, которая выглядит для присоединенной программы как терминал, но вместо того, чтобы напрямую взаимодействовать с «настоящим» терминалом, она передает ввод и вывод другому программа. Это конечная точка telnet / SSH или даже терминала GNOME.

Например, когда вы подключаетесь по ssh к удаленному компьютеру и запускаете ls, вывод ls отправляется на псевдотерминал, другая сторона которого подключена к демону SSH.

РЕДАКТИРОВАТЬ: Насколько я знаю, tty и т.д. находятся в пользовательском режиме. НО они представляют собой терминал-драйвер. Я имею в виду: файл устройства / dev / tty1 - это первая виртуальная консоль. Большая часть кода находится в файлах drivers / char, tty_io.c, n_tty.c и vt.c (исходный код ядра). В отличие от символьных устройств, чтобы открыть эти файлы, вызывается tty_open процедура, и, поверьте мне, это намного сложнее, чем открытие символьного устройства ...

Tty / pty обозначает упомянутые выше драйверы терминала, но они обозначают последовательные порты («нумерация», которую вы сказали). Я знаю об этом очень мало, поэтому я не хочу говорить неверные данные ... но вы можете поискать в сети об этом (или кто-то другой может продолжить отсюда)

EDIT2: вы изменили вопрос, поэтому теперь кажется, что я говорил вне контекста ... В любом случае, у tty есть много разных ролей даже сейчас. Терминальный драйвер - это способ "общения" между пользователем и ядром. Есть некоторые методы, такие как драйверы терминалов, символьные устройства и т. Д.

Если у вас все еще есть вопрос, прокомментируйте и не меняйте весь пост ...

person I-V    schedule 24.05.2016
comment
Нет, я просто добавил дополнительный тег. Я вообще вопрос не редактировал. - person user2277550; 25.05.2016
comment
Ой, тогда извините, я мог пропустить это, извините - person I-V; 25.05.2016
comment
Это то, что ты искал? Или я что-то упускаю? - person I-V; 25.05.2016
comment
@ I-V, как pty diff от ptty? Кроме того, что такое линейный принтер? - person Pacerier; 11.12.2017
comment
@ I-V, Есть ли у разработчиков ПО доступ к драйверу терминала? - person Pacerier; 11.12.2017
comment
@ I-V, что эквивалентно /dev/ttyx в Mac? - person Pacerier; 11.12.2017
comment
Вы имели в виду tty vs pty? - person I-V; 12.12.2017