StackVM๊ณผ RegisterVM

๋“ค์–ด๊ฐ€๋ฉฐ

  • CPU๋Š” Operand๋ฅผ ์ €์žฅํ•˜๋Š” ์œ„์น˜์— ๋”ฐ๋ผ Register-Based VM, Stack-based VM ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.
  • Operand์˜ ์˜ˆ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ ๋ช…๋ ์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ €์žฅ๋˜๋Š” Operand๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
MOV DS, AX // AX์˜ ๊ฐ’์€ DS๋กœ ์ด๋™๋œ๋‹ค.

Stack Based VM

  • JAVA VM, .NET CLR
    • ๋Œ€๋‹ค์ˆ˜์˜ VM์ด ์Šคํƒ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋™์ž‘๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • Operand์™€ ์—ฐ์‚ฐ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์Šคํƒ์— ์ €์žฅํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ๋ง์…ˆ์„ ํ•˜๋Š” ๊ฒฝ์šฐ?
      • ์Šคํƒ ๊ตฌ์กฐ๋กœ Operand๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— PUSH & POP์ด ํ•„์š”ํ•˜๋‹ค
      • 4๋‹จ๊ณ„ ๋ช…๋ น์ด ํ•„์š”ํ•˜๋‹ค.
      POP 20
      POP 7
      ADD 20, 7 RESULT
      PUSH RESULT
      
  • ํŠน์ง•
    • ๋‹ค์Œ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
    • SP๊ฐ€ ๋‹ค์Œ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ์ฆ‰ ์Šคํƒ์—์„œ POP๋งŒ ํ•˜๋ฉด ๋‹ค์Œ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

Register-Based VM

  • Lua VM, Dalvik VM
    • ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ๋‹ค.
    • PUSH & POP ์—ฐ์‚ฐ์ž๊ฐ€ ์—†๋‹ค.
    • ๋ช…๋ น์–ด๊ฐ€ ํ”ผ์—ฐ์‚ฐ์ž์˜ ์œ„์น˜์ธ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.
  • ์žฅ์ 
    • ์•„๋ž˜์™€ ๊ฐ™์ด POP & PUSH ๊ณผ์ •์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๋ง์…ˆ์ด๋ผ๋„ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.
    • ์Šคํƒ๊ธฐ๋ฐ˜์—์„œ๋Š” ํ•  ์ˆ˜ ์—†๋Š” ๋ช…๋ น์–ด ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    • ์Šคํƒ ๊ธฐ๋ฐ˜๋ณด๋‹ค ๋ช…๋ น์–ด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ๋‹ค.
    • ํ”ผ์—ฐ์‚ฐ์ž์˜ ์ฃผ์†Œ๋ฅผ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ ํ‰๊ท ์ ์œผ๋กœ ๊ธธ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

Java์˜ Example

  • addAndPrint()์— ๋Œ€ํ•œ Stack Frame์ด ์žˆ๊ณ  1, 88.88์ด ์กด์žฌํ•œ๋‹ค.
  • addTwoTypes๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ Stack Frame์„ ์ƒ์„ฑํ•˜๊ณ  local variable์— 1, 88.88๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์—ฐ์‚ฐ์ด ๋๋‚œ ํ›„ ๊ธฐ์กด์— ์žˆ๋˜ ์Šคํƒํ”„๋ ˆ์ž„์˜ Operand๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Reference