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์ด ์คํ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋์๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํน์ง
- ๋ค์ ํผ์ฐ์ฐ์์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์๋ค.
- 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