User Stack(์ฌ์ฉ์ ์คํ)
- ์ฌ์ฉ์ ๋ชจ๋์์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ํ๋๋ก, ํจ์ ํธ์ถ ์ ํ์ํ ๋ฐ์ดํฐ(์: ์ธ์, ๋ก์ปฌ ๋ณ์, ๋ณต๊ท ์ฃผ์ ๋ฑ)๋ฅผ ์์๋ก ์ ์ฅํ๋ ๊ตฌ์กฐ์ ๋๋ค.
- User Stack์ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ , ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
User Stack์ ์ฃผ์ ํน์ง๊ณผ ์ญํ
- ํจ์ ํธ์ถ ๊ด๋ฆฌ
- User Stack์ ํจ์ ํธ์ถ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ๋ก, ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํจ์ ์ธ์, ๋ก์ปฌ ๋ณ์, ๋ณต๊ท ์ฃผ์(Return Address) ๋ฑ์ด ์คํ์ ์์ ๋๋ค.
- ํจ์๊ฐ ์คํ์ ๋ง์น๊ณ ๋ฐํ๋ ๋๋ ์ด ์คํ์ ์์ธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ์ด์ ์ํ๋ก ๋ณต๊ทํฉ๋๋ค.
- LIFO(Last-In, First-Out) ๊ตฌ์กฐ
- User Stack์ LIFO(ํ์ ์ ์ถ) ๊ตฌ์กฐ๋ก, ๋ง์ง๋ง์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ์์ฐ์ค๋ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ํธ์ถ๋ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์คํ์ ์ ์ฅ๋ ์ด์ ํจ์์ ์ํ๋ก ๋์๊ฐ๋๋ค.
- ํ๋ก๊ทธ๋จ ์คํ ์ค ํ ๋น๊ณผ ํด์
- User Stack์ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋์ ์ผ๋ก ํ์ฅ ๋ฐ ์ถ์๋ฉ๋๋ค.
- ํจ์๊ฐ ํธ์ถ๋ ๋ ์คํ ํ๋ ์์ด ์์ฑ๋์ด ์คํ์ ๋ฐ์ดํฐ๊ฐ ์์ด๊ณ , ํจ์๊ฐ ๋ฐํ๋ ๋ ํด๋น ์คํ ํ๋ ์์ด ํด์ ๋ฉ๋๋ค.
- ํ๋ก์ธ์ค๋ณ ๋
๋ฆฝ๋ ์คํ
- ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ User Stack์ ๊ฐ์ง๋ฏ๋ก, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ ์ฐธ์กฐํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ์ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ํ ์ค์ํ ๊ธฐ์ด๊ฐ ๋ฉ๋๋ค.
User Stack์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ
- ํจ์ ์ธ์: ํจ์ ํธ์ถ ์ ์ ๋ฌ๋๋ ์ธ์๋ค์ด ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- ๋ณต๊ท ์ฃผ์: ํจ์ ํธ์ถ์ด ์๋ฃ๋ ํ ๋์๊ฐ์ผ ํ ์ฃผ์(๋ณต๊ท ์ฃผ์)๊ฐ ์ ์ฅ๋ฉ๋๋ค.
- ๋ก์ปฌ ๋ณ์: ํจ์ ๋ด์์ ์ ์ธ๋ ๋ก์ปฌ ๋ณ์๋ค์ด ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- ์ค๊ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ: ์ผ๋ถ ์ฐ์ฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ ์์๋ก ์คํ์ ์ ์ฅ๋ ์ ์์ต๋๋ค.
User Stack์ ์ค์์ฑ
- ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ํ๋ฆ ๊ด๋ฆฌ: User Stack์ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ์์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ํ๋ก์ธ์ค์ ๋ ๋ฆฝ์ฑ ์ ์ง: ๊ฐ ํ๋ก์ธ์ค๋ ๊ณ ์ ํ User Stack์ ๊ฐ๊ณ , ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ญ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ: User Stack์ ์ด์์ฒด์ ๊ฐ ๊ด๋ฆฌํ์ฌ, ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์ปค๋ ์คํ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ ์์๋ก ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ณดํธํฉ๋๋ค.
Extra 1
StackFrame์ ํ์ตํ๋ฉด UserStack๋ฟ๋ง ์๋๋ผ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฑ ๋ค์ํ ๋ถ๋ถ์์ ๋์์ด ๋ ๊ฑฐ ๊ฐ์ ์ถ๊ฐ์ ์ผ๋ก ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค.
์คํ ํ๋ ์ (Stack Frame)
- ์คํ ํ๋ ์์ ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ(๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์, ๋ฆฌํด ์ฃผ์ ๋ฑ)๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์คํ์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋ค. ์ด๋ ํจ์ ํธ์ถ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ํจ์๊ฐ ์ข ๋ฃ๋ ํ ์๋ ํธ์ถ ์์น๋ก ๋์๊ฐ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
์คํ ํ๋ ์์ ๊ตฌ์กฐ
- ์ผ๋ฐ์ ์ผ๋ก ํจ์๊ฐ ํธ์ถ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ค์ด ์คํ์ ์ ์ฅ๋ฉ๋๋ค:
- ๋ฆฌํด ์ฃผ์ (Return Address)
- ํธ์ถ๋ ํจ์๊ฐ ์ข ๋ฃ๋ ํ, ํธ์ถํ ํจ์๋ก ๋์๊ฐ ์ฃผ์.
- ํธ์ถํ ํจ์์ ๋ช ๋ น์ด ํฌ์ธํฐ(Instruction Pointer, EIP)๊ฐ ์ ์ฅ๋ฉ๋๋ค.
- ๋งค๊ฐ๋ณ์ (Arguments/Parameters)
- ํธ์ถ๋ ํจ์์ ์ ๋ฌ๋๋ ์ธ์.
- ํธ์ถ ๊ท์ฝ(Calling Convention)์ ๋ฐ๋ผ ์คํ์ ์ ์ฅ๋๊ฑฐ๋ ๋ ์ง์คํฐ๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๋ค.
- ์ ์ฅ๋ ๋ ์ง์คํฐ (Saved Registers)
- ํธ์ถ๋ ํจ์๊ฐ ์คํ ์ค ๋ณ๊ฒฝ๋ ์ ์๋ ํธ์ถ์/ํผํธ์ถ์ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅ.
- ์: EBP, ESP, EIP ๋ฑ์ ๋ ์ง์คํฐ.
- ์ง์ญ ๋ณ์ (Local Variables)
- ํธ์ถ๋ ํจ์ ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์๋ค์ด ์ ์ฅ๋ฉ๋๋ค.
- ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์ด ๊ณต๊ฐ์ ํด์ ๋ฉ๋๋ค.
- ํ๋ ์ ํฌ์ธํฐ (Frame Pointer, EBP)
- ์คํ ํ๋ ์์ ๊ธฐ์ค์ด ๋๋ ํฌ์ธํฐ.
- ์ด์ ์คํ ํ๋ ์์ ์์ ์์น๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ๋ฆฌํด ์ฃผ์ (Return Address)
์คํ ํ๋ ์ ํด์ ๊ณผ์
- ํจ์๊ฐ ์ข
๋ฃ๋๋ฉด ์คํ ํ๋ ์์ด ํด์ ๋ฉ๋๋ค. ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ง์ญ ๋ณ์ ๊ณต๊ฐ ํด์
- ์คํ ํฌ์ธํฐ(ESP)๋ฅผ ํ๋ ์ ํฌ์ธํฐ(EBP) ์์น๋ก ๋ณต๊ตฌํฉ๋๋ค.
- ํ๋ ์ ํฌ์ธํฐ ๋ณต์
- ์ด์ ์คํ ํ๋ ์์ ๊ธฐ์ค(EBP)์ ๋ณต๊ตฌํฉ๋๋ค.
- ๋ฆฌํด ์ฃผ์ ๋ณต์
- ์คํ์ ์ ์ฅ๋ ๋ฆฌํด ์ฃผ์๋ฅผ EIP์ ๋ณต์ํฉ๋๋ค.
- ์ง์ญ ๋ณ์ ๊ณต๊ฐ ํด์
์คํ ํ๋ ์์ ์๊ฐํ
| ์ฃผ์ | ๋ด์ฉ |
| ๋์ ์ฃผ์ | ... |
| ๋ฆฌํด ์ฃผ์ | main ํจ์์์ ํธ์ถํ ์์น ์ ์ฅ |
| ์ ์ฅ๋ EBP | ์ด์ ์คํ ํ๋ ์์ ์์ ์ฃผ์ ์ ์ฅ |
| ๋งค๊ฐ๋ณ์ | ํจ์ ํธ์ถ ์ ์ ๋ฌ๋ ์ธ์ |
| ์ง์ญ ๋ณ์ | ํจ์์์ ์ ์ธ๋ ๋ณ์ |
| ๋ฎ์ ์ฃผ์ | ... |
์คํ ํ๋ ์์ ์ค์์ฑ
- ํจ์ ํธ์ถ ๊ฐ ๋ ๋ฆฝ์ฑ ๋ณด์ฅ: ๊ฐ ํจ์ ํธ์ถ๋ง๋ค ๋ ๋ฆฝ๋ ์คํ ํ๋ ์์ด ์์ฑ๋๋ฏ๋ก ํจ์ ๊ฐ ๊ฐ์ญ ์์ด ์คํํ ์ ์์ต๋๋ค.
- ์ฌ๊ท ํจ์ ์ง์: ์คํ ํ๋ ์์ ์ฌ์ฉํ๋ฉด ๊ฐ ์ฌ๊ท ํธ์ถ์ ๋ํด ๋ณ๋์ ๊ณต๊ฐ์ ์ ๊ณตํ๋ฏ๋ก ํจ์ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น : ํ๋ ์ ํฌ์ธํฐ(EBP)๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด ํจ์ ํธ์ถ ์คํ์ ์ถ์ ํ ์ ์์ต๋๋ค.
Extra 2
์ ์ ๋ชจ๋ ์ปค๋๋ชจ๋๊ฐ ์๋ฏ์ด ์ ์ ์คํ ์ปค๋์คํ์ด ์กด์ฌํ๋ค. ์ปค๋์คํ์ ๋ํด ์ถ๊ฐ ํ์ต์ ์งํํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
์ปค๋ ์คํ(Kernel Stack)
- ์ด์์ฒด์ ๊ฐ ์ปค๋ ๋ชจ๋์์ ์คํ๋๋ ๋์ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋๋ก ์ ๊ณต๋๋ ์คํ์ ๋๋ค.
- ์ปค๋ ์คํ์ ์ฃผ๋ก ์์คํ ํธ์ถ์ด๋ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๋ ๋์ ์ปค๋ ๋ชจ๋์์์ ํจ์ ํธ์ถ ๋ฐ ๋ฐํ์ ์ํ ๋ฐ์ดํฐ(์: ์ง์ญ ๋ณ์, ํจ์ ํธ์ถ ์์, ๋ฆฌํด ์ฃผ์ ๋ฑ)๋ฅผ ์ ์ฅํฉ๋๋ค.
์ปค๋ ์คํ์ ํน์ง
- ํ๋ก์ธ์ค๋ณ ์คํ
- ์ปค๋ ์คํ์ ๊ฐ ํ๋ก์ธ์ค๋ง๋ค ๋ณ๋๋ก ์ ๊ณต๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์คํ๊ณผ๋ ๋ณ๋๋ก ์ ์ง๋๋ฉฐ, ํ๋ก์ธ์ค๊ฐ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋ ๋ ํ์ฑํ๋ฉ๋๋ค.
- ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋จ
- ์ปค๋ ์คํ์ ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์๊ณ (์: 4KB, 8KB ๋ฑ) ๊ณ ์ ๋์ด ์์ต๋๋ค. ์ด๋ ์ปค๋ ์คํ์ด ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํจ์ ๋๋ค.
- ์ปค๋ ๋ชจ๋์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ปค๋ ์คํ์ ์ฌ์ฉ์ ๋ชจ๋์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ฅผ ์ํ ๋ณด์ ์กฐ์น์ ๋๋ค.
- ๋จ์ผ ์ค๋ ๋ ์ ๊ทผ
- ํ๋ก์ธ์ค์ ์ปค๋ ์คํ์ ํด๋น ํ๋ก์ธ์ค์ ์ค๋ ๋๊ฐ ์คํ๋ ๋๋ง ์ฌ์ฉ๋๋ฏ๋ก, ๋ณ๋ ฌ ์ก์ธ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ปค๋ ์คํ์ ๊ตฌ์ฑ
| ๊ตฌ์ฑ ์์ | ์ค๋ช |
| ์ธํฐ๋ฝํธ ์ปจํ ์คํธ | ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ์ ์ ์ฅ๋๋ ๋ ์ง์คํฐ ๊ฐ, ์ํ ์ ๋ณด ๋ฑ์ ์ ์ฅ |
| ํจ์ ํธ์ถ ์คํ | ์ปค๋ ํจ์ ํธ์ถ ์ ์ ์ฅ๋๋ ํจ์์ ๋งค๊ฐ๋ณ์, ๋ณต๊ท ์ฃผ์, ์ง์ญ ๋ณ์ |
| ํธ๋ฉ ํ๋ ์ | ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํ ์ ๋ ์ง์คํฐ์ CPU ์ํ ์ ์ฅ |
์ปค๋ ์คํ์ ๋์
- ์์คํ
ํธ์ถ ์
- ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋ ๋, ์ปค๋ ์คํ์ด ํ์ฑํ๋ฉ๋๋ค.
- ํ์ฌ ์คํ ์ค์ธ ํจ์์ ์ํ(์: ์ฌ์ฉ์ ์คํ ํฌ์ธํฐ ESP, ํ๋ก๊ทธ๋จ ์นด์ดํฐ EIP)๋ ์ปค๋ ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- ์ธํฐ๋ฝํธ ๋ฐ์ ์
- ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ ์ปค๋ ์คํ์ ์ฌ์ฉํ์ฌ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํฉ๋๋ค.
- ํ์ฌ ์คํ ์ค์ด๋ ์ฌ์ฉ์ ์คํ ์ํ๋ ์ปค๋ ์คํ์ผ๋ก ๋ฐฑ์ ๋๋ฉฐ, ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด ๋ณต์๋ฉ๋๋ค.
- ํจ์ ํธ์ถ ์
- ์ปค๋ ๋ชจ๋์์ ํธ์ถ๋๋ ๋ชจ๋ ํจ์๋ ์ปค๋ ์คํ์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ํจ์ ๊ฐ ํธ์ถ ์์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ฌ์ฉ์ ์คํ vs ์ปค๋ ์คํ ๋น๊ต
| ์ปค๋ ์คํ | ์ ์ ์คํ | |
| ์ ๊ทผ ๊ถํ | ์ปค๋ ๋ชจ๋์์๋ง ์ ๊ทผ ๊ฐ๋ฅ | ์ฌ์ฉ์ ๋ชจ๋์์ ์ ๊ทผ ๊ฐ๋ฅ |
| ์คํ ์์น | ์ปค๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์น | ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์น |
| ์คํ ํฌ๊ธฐ | ๊ณ ์ ๋ ํฌ๊ธฐ (์ผ๋ฐ์ ์ผ๋ก ์์, 4KB ๋ฑ) | ๋์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ |
| ์ญํ | ์์คํ ํธ์ถ ๋ฐ ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ์ ์ฌ์ฉ | ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ํจ์ ํธ์ถ ๋ฐ ์คํ์ ์ฌ์ฉ |
| ๋ณด์ | ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ ์ ์์ | ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์ง์ ๊ด๋ฆฌ |
'๐ซ Krafton Jungle > PintOS Project2 _ User Programs' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์์ ๋ฐ ๋ณด์ ํ์ - Atomic Operation (0) | 2024.11.28 |
|---|---|
| ์์ ๋ฐ ๋ณด์ ํ์ - File Descriptor (1) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | System Call (1) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | Register VS Memory (0) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | UserMode VS KernelMode (1) | 2024.11.28 |