[Linux] TTY

kafkaaaa·2023년 9월 19일
0

Linux

목록 보기
2/4
post-thumbnail

업로드중..

🤔 TTY ?

1800년대 텔레프린터 개발됨 ➡

텔레프린터 = 텔레타이프라이터 = 텔레타이프 = TTY 라는 이름이 붙여짐 ➡

1963년 ASCII 채택 ➡ 1980년대 까지 메세지 전송에 있어 주요 수단으로 사용됨 ➡

컴퓨터가 개발되고 발전하면서 컴퓨터와 상호작용 하는 기본 수단이 됨 ➡

[소프트웨어 에뮬레이트 텔레타이프]
*에뮬레이트 : 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램 또는 전자기기

Unix 계열 OS에서 데스크톱 환경과 터미널 창, 📌xterm, 📌Konsole 과 같은 응용 프로그램.
-> 이것을 pseudo-teletypes(=PTS) 라고 부름
(※PTS = pseudo-terminal slave 로 자주 쓰는 것 같다)


아무튼 tty라는 단어의 기원은 영화에서만 보던 타자기였고, 이게
소프트웨어적으로 구현되어 Unix계열 운영체제에 들어간 것이 tty

man tty 를 해보면 다음과 같이 설명해준다.

tty : print the file name of the terminal connected to standard input

(tty : 표준 입력에 연결된 터미널의 파일명을 출력)

/dev/pts 를 보면 다음과 같다.

Linux에서 tty 명령은 PTS가 사용하는 장치 파일(=터미널)의 이름을 출력한다.
(= pseudo-teletype Slave가 Master와의 인터페이스에 사용하는 장치 파일의 이름을 출력한다)
(터미널 창 = TTY의 소프트웨어 에뮬레이션)

이런 설명들로는 충분히 이해하기 힘들다.
일단 위의 내용들 관련해서 더 깊게 찾아본 것들은 다음과 같다.


외부 터미널 장치 연결

  • 위 그림은 외부 터미널 장치가 시리얼라인을 통해 연결되는 경우
  • 📌getty 프로세스가 백그라운드에서 라인을 모니터링하고 있다가 터미널에서 접속을 하면 login prompt를 보여줌
  • /dev/ttyS[번호] 파일이 사용됨

UART Driver

물리적으로 bytes를 전송하는 역할. Parity check, Flow control 수행.

Line discipline

(discipline= 입력된 데이터가 처리되는 방식)
low level 장치 드라이버 위에 Line discipline 이라는 레이어를 하나 두면
같은 장치를 여러가지 용도로 사용할 수 있다고 한다.
ex) backspace, erase word, clear line, reprint 같은 Line editing 기능을 제공한다고..
PPP(Point-to-Point), SLIP <- 이것들은 나중에 알아봐야 겠다..

TTY driver

-> Session management (=job control) 기능을 제공.
Ctrl + z (작업 중단)
Ctrl + c (작업 종료)
사용자 입력은 foreground job에만 전달되게,
background job이 입력받기를 하면 SIGTTIN (=Signal TTY Input) 신호 보내기 등
위 기능들은 모두 TTY Driver에서 제공한다네요.


Linux Virtual Console

한 모니터에서 여러 개의 가상 화면을 사용할 수 있는 기능이다.
리눅스는 기본적으로 6개의 가상 콘솔을 제공 (환경에 따라 조금씩 다를 수 있음) 하는데,
Ctrl + Alt + F1 ~ F6 키 조합으로 각각 이동할 수 있다.
실제 물리적인 장치가 연결된 것이 아닌 커널에서 터미널을 에뮬레이트한 것이다.
dev/tty[번호] 파일이 사용된다고 한다.

*1~6번은 text 모드, 7번은 X-window 제공
📌X-window


Pseudo TTY (=PTY)

  • PTY는 Master/Slave Pair 구조
  • /dev/pts 에 있던 ptmx는 pseudo-terminal master multiplexer 를 의미
  • 파일을 open하면 pseudo-terminal master(PTM) 에 해당하는 FD가 반환되고,
  • pseudo-terminal slave(PTS)에 해당하는 device가 /dev/pts/ 디렉토리에 생성됨.
  • 일단 두 Master와 Slave (PTM과 PTS)가 open되면 /dev/pts/[번호]는 실제 터미널과 같은 인터페이스를 프로세스에게 제공함.

    ex) xterm

    • xterm이 master(PTY Master)에 연결되고 bash같은 app process가 slave(PTY Slave)에 연결되는 구조
    • xterm에서 사용자가 입력하면 master -> 커널(Line discipline) -> slave 를 거쳐 bash process에 전달되고,
    • 실행 결과는 다시 slave -> 커널(Line discipline) -> master 를 거쳐 xterm에 전달 -> 화면에 출력
    • 이 과정도 일종의 📌IPC임 (중간에 커널 부분이 있는것이 다름)


결론

  • TTY는 (TTY driver는) Kernel에 있음
  • 커널에 있는 TTY를 사용하기 위한 가상 터미널이 PTY(Pseudo TTY)
  • 터미널 에뮬레이터와 같은 프로그램들이 실행될 때 커널에 요청하면 TTY Master/Slave 쌍을 생성함
  • 터미널 에뮬레이터는 PTY Master와 입출력하고, 커널의 TTY driver는 해당 내용을 PTY Slave와 중계. PTY Slave는 Shell과 대화.
  • Terminal Emulator <-> PTY Master <-> TTY driver <-> PTY Slave <-> Shell
  • 📌터미널 vs 쉘

Ref

https://ko.linux-console.net/?p=8198#gsc.tab=0
https://mug896.github.io/bash-shell/tty.html
https://cosmosproject2015.tistory.com/143
https://jhnyang.tistory.com/48
https://velog.io/@preeded/TTY%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-%EA%B7%B8%EB%A6%AC%EA%B3%A0-ptsdevpts
https://asset.library.wisc.edu/1711.dl/CAWJ5VKXFKIS78B/M/h1380-66dba.jpg

profile
일모도원

0개의 댓글