๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰

๋ณธ ๊ฒŒ์‹œ๊ธ€์€ KOCW ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜์˜ <์šด์˜์ฒด์ œ> ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
๊ฒŒ์‹œ๊ธ€์— ํฌํ•จ๋˜๋Š” ์ด๋ฏธ์ง€ ์ž๋ฃŒ ๋˜ํ•œ ํ•ด๋‹น ๊ฐ•์˜์— ํฌํ•จ๋œ ๊ฐ•์˜ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ - ๋ฉ”๋ชจ๋ฆฌ load ๊ณผ์ •

ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ธ์ง€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ด…์‹œ๋‹ค.

๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋“œ๋””์Šคํฌ(ํŒŒ์ผ ์‹œ์Šคํ…œ)์— ์‹คํ–‰ํŒŒ์ผ(exe) ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ค๊ฒŒ ๋˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ํฐ ๊ตฌ์กฐ๋Š” Disk์— ์žˆ๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด, ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋•Œ, ๋ฐ”๋กœ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ(Physical Memory)๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๊ฒŒ ๋˜๋ฉด, ๊ทธ ํ”„๋กœ๊ทธ๋žจ๋งŒ์˜ ๋…์ž์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ณต๊ฐ„(= Virtual Memory, ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ)์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ์ฃผ์†Œ๊ณต๊ฐ„์€ code, data, stack์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋Š” ์ฃผ์†Œ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ณ  ์ข…๋ฃŒ์‹œํ‚ค๋ฉด ์ด ์ฃผ์†Œ๊ณต๊ฐ„์€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ์†Œ๊ณต๊ฐ„์€ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค ์˜ฌ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋˜๊ธฐ ๋•Œ๋ฌธ)

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋‹น์žฅ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์˜ฌ๋ฆฌ๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ disk์˜ swap area์— ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

swap area๋Š” ํœ˜๋ฐœ์„ฑ ๊ณต๊ฐ„(์ปดํ“จํ„ฐ ์ „์›์ด ๋‚˜๊ฐ€๋ฉด ์ด ๊ณต๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ ์‚ฌ๋ผ์ง)์œผ๋กœ, ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์˜ ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฐ์žฅ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๋‚ด์šฉ

์šด์˜์ฒด์ œ ์ปค๋„๋„ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์— code, data, stack ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. (์œ„์˜ ๊ทธ๋ฆผ์—์„œ ํฐ์ƒ‰)

์šด์˜์ฒด์ œ ์ปค๋„์€ ์–ด๋–ค ์ฝ”๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๋‚ด์šฉ์„ ์‚ดํŽด๋ด…์‹œ๋‹ค!

 

code

  • ์‹œ์Šคํ…œ ์ฝœ, ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
  • ํšจ์œจ์ ์ธ ์ž์› ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ
  • ํŽธ๋ฆฌํ•œ ์„œ๋น„์Šค ์ œ๊ณต์„ ์œ„ํ•œ ์ฝ”๋“œ  

data

  • ์šด์˜์ฒด์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์ด ์ •์˜๋˜์–ด ์žˆ์Œ
  • CPU, memory, disk ์™€ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ํ†ต์ œํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์กด์žฌ
  • ํ”„๋กœ์„ธ์Šค(= ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ) ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ PCB(Process Control Block) ์กด์žฌ

stack

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์˜์—ญ
  • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ ์ปค๋„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ์Šคํƒ ๊ณต๊ฐ„์„ ๋”ฐ๋กœ ๋‘๊ณ  ์žˆ์Œ

์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜

  • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜ํ•œ ํ•จ์ˆ˜

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜

  • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜
  • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด ์žˆ์Œ

์ปค๋„ ํ•จ์ˆ˜

  • ์šด์˜์ฒด์ œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜
  • ์ปค๋„ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ == ์‹œ์Šคํ…œ ์ฝœ

์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์— ์ •์˜๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ปค๋„ ํ•จ์ˆ˜๋Š” ์ปค๋„ ์ฝ”๋“œ ๋‚ด์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.