ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
TTY & PTY Explained ๐Ÿ–จ๏ธ๐Ÿง
Dev.toDev.to
Infrastructure

Hardware TTY์™€ Software PTY๋ฅผ ํ†ตํ•œ Linux I/O ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์กฐ ๋ถ„์„

TTY & PTY Explained ๐Ÿ–จ๏ธ๐Ÿง

ziv cohen2026๋…„ 5์›” 19์ผ4๋ถ„intermediate

Context

๋ฌผ๋ฆฌ์  ๋‹จ๋ง๊ธฐ ๊ธฐ๋ฐ˜์˜ TTY ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ˜„๋Œ€์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ์›๊ฒฉ ์ ‘์† ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„ ๋ฐœ์ƒ. ํ•˜๋“œ์›จ์–ด ์ข…์†์ ์ธ I/O ๊ฒฝ๋กœ๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด ๊ณ„์ธต์œผ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์œ ์—ฐํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ.

Technical Solution

  • Character Device ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ OS-์‚ฌ์šฉ์ž ๊ฐ„ ์ธํ„ฐํŽ˜์ด์Šค ํ‘œ์ค€ํ™”
  • Terminal Driver๋ฅผ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ /dev/ttyX ๋ฒ„ํผ๋ง ๋ฐ Bash Shell stdin ์ „๋‹ฌ ๊ตฌ์กฐ ์„ค๊ณ„
  • ๋ฌผ๋ฆฌ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์—†๋Š” ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์œ„ํ•ด Master-Slave ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ Pseudoterminal(PTY) ๋„์ž…
  • sshd์™€ ๊ฐ™์€ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ PTY Master๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ํŒจํ‚ท์„ ์ˆ˜์‹ ํ•˜๊ณ , PTY Slave๋ฅผ ํ†ตํ•ด Bash Shell๊ณผ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์ˆ˜ํ–‰
  • /dev/tty(์ œ์–ด ํ„ฐ๋ฏธ๋„)์™€ /dev/pts(๊ฐ€์ƒ ํ„ฐ๋ฏธ๋„)์˜ ๊ตฌ๋ถ„์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ณ„ ์ถœ๋ ฅ ๊ฒฝ๋กœ ์ตœ์ ํ™”
  • ํ•˜๋“œ์›จ์–ด ์—ฐ๊ฒฐ ์‹œ OS๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” TTY์™€ ๋‹ฌ๋ฆฌ, ์†Œํ”„ํŠธ์›จ์–ด ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ PTY ๊ตฌ์กฐ ์ฑ„ํƒ

1. ์›๊ฒฉ ์ ‘์† ์„ธ์…˜ ๋ถ„์„ ์‹œ /dev/pts/X ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด Pseudoterminal ํ• ๋‹น ์—ฌ๋ถ€ ํ™•์ธ

2. ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ์‹œ stdin/stdout์ด ์—ฐ๊ฒฐ๋œ ์ œ์–ด ํ„ฐ๋ฏธ๋„(/dev/tty) ์‹๋ณ„ ๋กœ์ง ๊ฒ€ํ† 

3. ํ•˜๋“œ์›จ์–ด ์ข…์†์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์†Œํ”„ํŠธ์›จ์–ด ์ถ”์ƒํ™” ๋ ˆ์ด์–ด(PTY)์˜ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ•œ I/O ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„

์›๋ฌธ ์ฝ๊ธฐ