๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/OS

[OS] ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„

by dar0m! 2021. 8. 23.

๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜(์ถœ์ฒ˜ : https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5)

  1. Code(Text)
    • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ๊ฐ€๋Š” ๋ถ€๋ถ„. ์ฆ‰, ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ(code)์˜์—ญ ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
    • ์ฝ”๋“œ์˜์—ญ์€ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ์— ์ง€์ •๋œ๋‹ค.
    • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ณ  ์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ Read-Only ๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.
  2. Data
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์ดˆ๊ธฐ๊ฐ’ ์žˆ๋Š” ์ „์—ญ ๋ณ€์ˆ˜, ๋ฐฐ์—ด, ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ๊ตฌ๋™๋˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • ์ „์—ญ๋ณ€์ˆ˜, static ๊ฐ’์„ ์ฐธ์กฐํ•œ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ํ•˜๊ณ  ๋‚˜๋ฉด Data ์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ๋ฐ”๋€๋‹ค.
    • ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
    • ์‹คํ–‰ ์ค‘๋„์— ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ด ์˜์—ญ์€ Read-Write๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.
  3. BSS(Block Stated Symbol)
    • ์ดˆ๊ธฐ๊ฐ’ ์—†๋Š” ์ „์—ญ๋ณ€์ˆ˜, ๋ฐฐ์—ด, ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” Data ์˜์—ญ์— ์ €์žฅ๋˜๊ณ , ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS(Block Stated Symbol)์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
      • ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์˜์—ญ๋งŒ ์žก์•„์ฃผ๋ฉด ๋˜๊ณ  ๊ทธ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์œผ๋‚˜, ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๊ทธ ๊ฐ’๋„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ BSS์˜์—ญ ๋ณ€์ˆ˜๋“ค์ด ๋งŽ์•„์ ธ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ฝ”๋“œ ์‚ฌ์ด์ฆˆ๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  4. Stack
    • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • Stack์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
    • ์›์‹œํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋œ๋‹ค.
    • Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
    • LIFO(๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„๊ฒŒ ๋จผ์ € ๋‚˜์˜ด)ํŠน์„ฑ์„ ๊ฐ€์ง
    • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
      • ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉํ• ์ง€ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ stack ํ•จ์ˆ˜์˜ ๋’ท๋ถ€๋ถ„์—์„œ๋ถ€ํ„ฐ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๊ฐ€ ๋งค๊ฒจ์ง„๋‹ค(code๋Š” 0์—์„œ stack FFFFFFFF๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์„ ๊ฐ€์ง€๊ณ , stack์€ FFFFFFFF ๊ทผ์ฒ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค). ์ฆ‰, ๋ณ€์ˆ˜ ์„ ์–ธ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค.
    • ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œํžˆ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด stack ์˜์—ญ์„ ์ดˆ๊ณผํ•˜๋ฉด stack overflow ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  5. Heap
    • ๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
    • ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋œ๋‹ค.
    • ์ฐธ์กฐํ˜•์˜ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ž˜์Šค, ํด๋กœ์ €๊ฐ€ ์ด ๋ถ€๋ถ„์— ํ•ด๋‹น ๋œ๋‹ค.
    • Heap์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
    • HEAP๊ณผ STACK์˜์—ญ์€ ์‚ฌ์‹ค ๊ฐ™์€ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค. HEAP์ด ๋ฉ”๋ชจ๋ฆฌ ์œ„์ชฝ ์ฃผ์†Œ๋ถ€ํ„ฐ ํ• ๋‹น๋˜๋ฉด STACK์€ ์•„๋ž˜์ชฝ๋ถ€ํ„ฐ ํ• ๋‹น๋˜๋Š” ์‹์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ ์˜์—ญ์ด ์ƒ๋Œ€ ๊ณต๊ฐ„์„ ์นจ๋ฒ”ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ๊ฐ๊ฐ HEAP OVERFLOW, STACK OVERFLOW๋ผ๊ณ  ์นญํ•œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ฉด Code ์˜์—ญ์ด ๋Š˜์–ด๋‚œ๋‹ค.

Code, Data, BSS ๋Š” Compile time์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ณ  ์ดํ›„๋กœ ๋ณ€๋™๋˜์ง€ ์•Š๊ณ (๊ณ ์ •),
Stack, Heap์€ Runtime์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๊ฒฐ์ •๋œ๋‹ค. Heap์€ ์•„๋ž˜๋กœ, Stack์€ ์œ„๋กœ ์ฃผ์†Œ๊ฐ’์„ ๋งค๊ธด๋‹ค.


Q. ์ด๋ ‡๊ฒŒ ๊ตฌ์—ญ์„ ๋‚˜๋ˆˆ ์ด์œ ๋Š”?

์ตœ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•จ.
Code๋Š” ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—์„œ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ณต์œ ํ•œ๋‹ค.
Stack๊ณผ Data๋ฅผ ๋‚˜๋ˆˆ ์ด์œ ๋Š”, ์Šคํƒ ๊ตฌ์กฐ์˜ ํŠน์„ฑ๊ณผ ์ „์—ญ ๋ณ€์ˆ˜์˜ ํ™œ์šฉ์„ฑ์„ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜์™€ ์ง€์—ญ ๋ณ€์ˆ˜๋Š”, LIFO(๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„๊ฒŒ ๋จผ์ € ๋‚˜์˜ด)ํŠน์„ฑ์„ ๊ฐ€์ง„ ์Šคํƒ์—์„œ ์‹คํ–‰๋œ๋‹ค.
๋”ฐ๋ผ์„œ ์ด ํ•จ์ˆ˜๋“ค ์•ˆ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” '์ „์—ญ ํ•จ์ˆ˜'๋Š” ๋”ฐ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ 

๋Œ“๊ธ€