header-img
Info :

0. ํ”„๋กœ์„ธ์Šค

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ๋กœ ์นดํ†ก์ด๋‚˜ ํฌ๋กฌ์„ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ง€๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์ด๋Ÿฐ ์นดํ†ก์ด๋‚˜ ํฌ๋กฌ ๋ชจ๋‘ ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด์ œ ์šฐ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ๋กœ ์›น์„œํ•‘์„ ํ•˜๊ฒ ๋‹ค๊ณ  ์˜๋„์ ์œผ๋กœ ํฌ๋กฌ ํ•˜๋‚˜๋งŒ ๋„์›Œ๋†“๊ณ  ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋…ธ๋ž˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ์›น์„œํ•‘์„ ํ•˜๊ฒ ๋‹ค๋ฉด ์Œ์•… ํ”„๋กœ๊ทธ๋žจ๋„ ์‹คํ–‰์‹œ์ผœ๋†“๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ๋ณดํ†ต ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

  1. ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ญ”๋ฐ..?
  2. ํ”„๋กœ์„ธ์Šค ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ญ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

 

 

1. ํ”„๋กœ์„ธ์Šค ๋„ˆ ๋ญ”๋ฐ ...

๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์€ ๋””์Šคํฌ์— ๊ณ ์ด ์ž ๋“ค์–ด ์žˆ๋Š” ์ฝ”๋“œ+๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ์ด๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋‹จ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€์•ผ ๋˜๊ณ , CPU๊ฐ€ ์ผํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๋“ค์„ ๋ชจ๋‘ ๋งˆ์ณ์•ผ ํ•œ๋‹ค. ์ด ์ž‘์—…๋“ค์ด ๋๋‚ฌ์„ ๋•Œ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ๋ช…์นญํ•œ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์€ ์ˆ˜๋™์  ์กด์žฌ(passive entity) ์ด์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ด๊ฑฐ๋‚˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™œ์„ฑ ์กด์žฌ(active entity) ์ด๋‹ค.

 

์ด๋ฅผ ๋น„์œ ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์€ ๋ƒ‰๋™ ๋งŒ๋‘์™€ ์œ ์‚ฌํ•˜๋‹ค. ๋ƒ‰๋™ ๋งŒ๋‘๋Š” ๋ƒ‰๋™๊ณ (๋””์Šคํฌ)์— ๋“ค์–ด์žˆ๋Š” ์žฌ๋ฃŒ(์ฝ”๋“œ + ๋ฐ์ดํ„ฐ)๊ฐ€ ๋ญ‰์ณ์ง„ ์ƒํƒœ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ƒ‰๋™ ๋งŒ๋‘๋ฅผ

  1. ๋ƒ‰๋™๊ณ (๋””์Šคํฌ)์—์„œ ๊บผ๋‚ด์„œ
  2. ์ฐœ๊ธฐ(๋ฉ”๋ชจ๋ฆฌ)์— ์˜ฌ๋ฆฌ๊ณ 
  3. ๋ถˆ์„ ์˜ฌ๋ ค ์กฐ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์กฐ๋ฆฌํ•  ์ค€๋น„๋ฅผ ๋งˆ์น˜๋ฉด(CPU ํ• ๋‹น)

ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์˜ ๋งŒ๋‘, ์ฆ‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

1 - a. ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„ = ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜

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

 

ํ”„๋กœ๊ทธ๋žจ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ํฌ๊ฒŒ 4 ์„น์…˜์˜ ๊ตฌ์„ฑ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•œ๋‹ค. 

 

์š”์•ฝ

 

Text Segment

  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ฝ”๋“œ๋“ค์ด ๊ธฐ๊ณ„์–ด ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ ๋ฒˆ ์˜ฌ๋ผ๊ฐ€๋ฉด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, read only์ด๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘์— ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Data Segment

  • ์ „์—ญ ๋ณ€์ˆ˜ & Static ๋ณ€์ˆ˜๋“ค์ด ํฌํ•จ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ฝ”๋“œ์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์ด Data Segment๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ํ™œ์šฉํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๋„์ค‘์— ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Heap Segment

  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ด ์˜์—ญ์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ์นœ๊ตฌ๊ฐ€ ๋ฐ”๋กœ Garbage Collector์ด๊ณ , ์•ฑ ์‹คํ–‰ ๋„์ค‘์— ์ •ํ•ด์ง„ heap size๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด OOM์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ฎ์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ~ ๋†’์€ ์ฃผ์†Œ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • runtime์— ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ™”ํ•œ๋‹ค.

 

Stack Segment

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋“ค์ด ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ ์˜ˆ๋กœ activation record๊ฐ€ ์žˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ด activation record๊ฐ€ ์Šคํƒ์— push ๋˜๊ณ , ์ข…๋ฃŒ๋˜๋ฉด pop ๋œ๋‹ค. activation record์—๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ & ๋ณต๊ท€๊ฐ€ ์›ํ™œํžˆ ์ด๋ค„์ง€๋„๋ก ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธด๋‹ค. ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜, ์–ด๋””๋กœ ๋ณต๊ท€ํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•œ ์ฃผ์†Œ๊ฐ’ ๋“ฑ์ด ๋‹ด๊ธด๋‹ค.
  • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ๋ฌดํ•œํžˆ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, ๋„ˆ๋ฌด ๋งŽ์€ activation record๊ฐ€ stack์— ์ถ”๊ฐ€๋˜์–ด, stack overflow๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋†’์€ ์ฃผ์†Œ๋ถ€ํ„ฐ ~ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • Compile Time์— Stack max size๋Š” ์ •ํ•ด์ง€์ง€๋งŒ, ๊ทธ ์•ˆ์—์„œ ์–ผ๋งŒํผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€๋Š” runtime์— ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•œ๋‹ค.

 

 

1 - b. Heap & Stack Segment

Heap์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์ด ๋‚ฎ์€ ๊ณณ๋ถ€ํ„ฐ ๋†’์€ ๊ณณ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค. ๋ฐ˜๋ฉด Stack์€ ๋†’์€ ๊ณณ๋ถ€ํ„ฐ ๋‚ฎ์€ ๊ณณ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฑ„์›Œ์ง„๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ• ๊นŒ?


ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์šด์˜์ฒด์ œ๊ฐ€ ์ •ํ•ด์ฃผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ…์ŠคํŠธ, ๋ฐ์ดํ„ฐ Segment๋Š” ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋ถˆ๋ณ€ํ•œ๋‹ค. ๊ทธ๋Ÿผ ๋‘ ๊ฐœ๋Š” ์ œ์™ธํ•˜๊ณ  ์Šคํƒ & ํž™์„ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ Stack & Heap ์˜์—ญ์ด ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ growing ๋˜๋ฉด ์–ด๋–ค ์žฅ์ ์ด ์žˆ์„๊นŒ?

  1. ๋ฏธ๋ฆฌ ์˜์—ญ์„ ๋‚˜๋ˆ„์ง€ ์•Š์•„, ๊ฐ์ž ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ž์œ ๋กญ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๊ฝ‰ ์ฑ„์šด๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด, ๋‚จ๋Š” ๊ณต๊ฐ„ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ fully ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

1 - c. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ

 

๊ทธ ์œ ๋ช…ํ•œ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ € 5๊ฐ€์ง€์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šด์˜์ฒด์ œ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ ์ข€ ๋” ์„ธ๋ถ„ํ™”๋œ ์ถ”๊ฐ€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ธฐ๋„ ํ•œ๋‹ค. ์–ด์จŒ๋“  ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒ์„ฑ๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ new, ready, running, waiting, terminated ์ค‘ ํ•˜๋‚˜์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ state flow๋ฅผ ์ฒœ์ฒœํžˆ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

  1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ ์ค‘์ด๋ฉด new ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ , cpu์— ํ• ๋‹น๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด ready ์ƒํƒœ์ด๋‹ค.
  3. ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์„ ํƒ๋˜์–ด cpu์—์„œ ์‹คํ–‰๋œ๋‹ค๋ฉด running ์ƒํƒœ์ด๋‹ค.
  4. running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค
    1. running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ io event๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด waiting ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. io event๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ready ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€์„œ cpu ํ• ๋‹น์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    2. running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ์–ด์ง„ CPU ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ๋ชจํ–ˆ๊ฑฐ๋‚˜, interrupt๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ready ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค. (์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด interrupt service routine์„ ์ข…๋ฃŒํ•œ ํ›„ ready๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.)
  5. running ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด์•ผ ๋  ์ผ์„ ๋ชจ๋‘ ์ข…๋ฃŒํ–ˆ๋‹ค๋ฉด terminated ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

 

 

2. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

์ง€๊ธˆ๊นŒ์ง€๋Š”, ํ”„๋กœ์„ธ์Šค ์ž์ฒด์— ๋Œ€ํ•ด์„œ๋งŒ ์•Œ์•„๋ดค๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ์˜ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ฐœ๋…์ด ํ•„์š”ํ•˜๋‹ค. CPU๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ์ง€๋ ค๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์•„์ฃผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ด์ „์— ์‹คํ–‰ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž˜ ๋ณด๊ด€ํ•˜๊ณ , ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ Context Switching, ๋ฌธ๋งฅ ๊ตํ™˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ ์•ž์„œ ์–ธ๊ธ‰ํ•œ activation record์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ, ์–ด๋””์„œ๋ถ€ํ„ฐ ์žฌ๊ฐœํ• ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ ์•Œ์•„๋ณผ ๊ฐœ๋…์€ Context Switching & PCB์ด๋‹ค.

 

 

2 - a. Context Switching

๋จผ์ € Context Switching์€ CPU ์ฝ”์–ด๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ถ™์–ด ์ผํ•˜๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰, CPU๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋กœ ํ• ๋‹น๋˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์— ํ•„์š”ํ•œ ์ž‘์—…์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

  1. ์‹คํ–‰์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ PCB ํ˜•ํƒœ๋กœ backup. (state save)
  2. ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ PCB๋กœ๋ถ€ํ„ฐ load. (state restore)

PCB๋Š” ๋’ค์—์„œ ์„ค๋ช…ํ•  ๊ฒƒ์ด์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ์ž‘์—…๋“ค์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋Š” ์‹œ์Šคํ…œ์€ ์œ ์šฉํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ, ์ด ์‹œ๊ฐ„์€ ์ˆœ์ˆ˜ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ(overhead) ์‹œ๊ฐ„์ด๋‹ค.

 

 

2 - b. Process Control Block

Process Control Block, ์ดํ•˜ PCB๋Š” ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค. ์šด์˜์ฒด์ œ ์ˆ˜์ค€์—์„œ ํŠน์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ดํ•ดํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ๋Š” PCB๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด Context Switching์ด ์ผ์–ด๋‚˜๋ฉด, ๋Œ€๊ธฐ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ๊ฐœํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ์ด ์ •๋ณด๋“ค์„ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋น„์œ ํ•˜์ž๋ฉด, PCB๋Š” Context Switching์ด ์ผ์–ด๋‚  ๋•Œ๋ฅผ ์œ„ํ•œ ์„ธ์ด๋ธŒ ํฌ์ธํŠธ์ด๋‹ค. ๋‚˜์ค‘์— ์œ ์ €๊ฐ€ resumeํ•  ๋•Œ๋ฅผ ์œ„ํ•ด ์–ด๋””๊นŒ์ง€ ์‹คํ–‰ํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

PCB์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋“ค์ด ๋‹ด๊ธฐ๊ฒŒ ๋œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ: ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ, ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค ID: ํ”„๋กœ์„ธ์Šค unique ID. (PID๋ผ๊ณ  ๋ถˆ๋ฆผ.)
  • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ: ํ”„๋กœ์„ธ์Šค๋Š” active entity์ด๋ฏ€๋กœ, ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ์—๋Š” ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • CPU registers: ํ”„๋กœ์„ธ์Šค๋Š” ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ˆ˜๋งŽ์€ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด ์—ฐ์‚ฐ๊ฐ’๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์†๋„๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ , CPU registers์— ์ €์žฅํ•œ๋‹ค. ์ด ์ €์žฅ๊ฐ’๋“ค์€ process๊ฐ€ ๋Œ€๊ธฐ -> ์žฌ๊ฐœ๋  ๋•Œ ๋‹ค์‹œ cpu registers์— ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก PCB์— ์ €์žฅํ•œ๋‹ค.

์ด์™ธ์—๋„ ๋” ๋งŽ์€ ์ •๋ณด๋“ค์ด ๋‹ด๊ธฐ์ง€๋งŒ, ์ค‘์š”ํ•œ ๊ฒƒ ์œ„์ฃผ๋กœ ์ถ”๋ ธ๋‹ค.

 

 

2 - c. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ์˜ PCB

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค & ๋‹จ์ผ CPU core๊ฐ€ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ์šด์˜์ฒด์ œ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(ready, waiting ๋“ฑ)๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์ด๋ฅผ ์œ„ํ•ด PCB์™€ ํ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

 

 

์šด์˜์ฒด์ œ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Ready Queue, Wait Queue์ธ๋ฐ, ๊ฐ๊ฐ์€ Linked List๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

 

1๏ธโƒฃ Ready Queue

  • Ready Queue๋Š” ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์˜ PCB๊ฐ€ ๋‹ด๊ธด๋‹ค.
  • e.g. ํ”„๋กœ์„ธ์Šค๊ฐ€ ready ์ƒํƒœ๊ฐ€ ๋˜๋ฉด, ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ PCB๊ฐ€ Ready Queue์— ๋“ค์–ด๊ฐ€ CPU ํ• ๋‹น ๋ฐ›๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

 

2๏ธโƒฃ Wait Queue

  • Wait Queue์—๋Š” wait ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์˜ PCB๊ฐ€ ์ฐจ๋ก€๋กœ ๋‹ด๊ธด๋‹ค.
  • e.g. ํ”„๋กœ์„ธ์Šค๊ฐ€ running ํ•˜๋‹ค๊ฐ€ I/O event ๋“ฑ์ด ๋ฐœ์ƒํ•˜์—ฌ waiting ์ƒํƒœ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ๋Š” Waiting Queue์— PCB๊ฐ€ ๋“ค์–ด๊ฐ€ ํ•ด๋‹น ์ž‘์—…์ด ๋งˆ๋ฌด๋ฆฌ ๋ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • Wait Queue๋Š” I/O ์žฅ์น˜๋ณ„๋กœ ๋ณ„๋„๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. (e.g. network i/o queue, disk i/o queue)

 

 

3. ์ •๋ฆฌํ•˜์ž๋ฉด . . .

์ฒ˜์Œ ํฌ์ŠคํŒ…์„ ์‹œ์ž‘ํ•  ๋•Œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋‹ตํ•˜๊ณ ์ž ํ–ˆ๋‹ค

  1. ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ญ”๋ฐ..?
  2. ํ”„๋กœ์„ธ์Šค ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ญ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

 

์ด ๋ชฉํ‘œ์— ๋”ฐ๋ผ ์ •๋ฆฌํ•ด๋ณด๋ฉด, ํฌ์ŠคํŒ…์˜ ํ•ต์‹ฌ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

  1. ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ญ”๋ฐ..?
    • ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
    • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ๋งŒ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
    • ์šด์˜์ฒด์ œ์—์„œ ์ •์˜ํ•œ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง„๋‹ค.
  2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ญ๊ฐ€ ํ•„์š”ํ• ๊นŒ?
    • ๋‹จ์ผ CPU ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜์—ฌ ๋™์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•œ๋‹ค.
    • ์ด๋•Œ cpu๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ๊ณผ์ •์„ context switching์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • context switching์€ PCB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต๊ตฌํ•œ๋‹ค.

 

 

# ์ด ๊ธ€์„ ์ฝ๊ฒŒ ๋  JH๋‹˜๊ป˜ ๋“œ๋ฆฌ๋Š” ๋ฉ”์„ธ์ง€ . .  ใ…Ž

๋”๋ณด๊ธฐ

์–ธ๋‹ˆ ๋Šฆ๊ฒŒ ์ž‘์„ฑํ•ด์„œ ์ •๋ง์ •๋ง ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค์š” . . . ใ…Ž

์ด๋ ‡๊ฒŒ๊นŒ์ง€ ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ผ์ด์—ˆ๋‚˜ ์‹ถ๊ธด ํ•œ๋ฐ ์ฉ . . . ์ •๋ง ๋ฏธ์•ˆํ•˜๊ตฌ, ์ด๋ฒˆ ๊ธ€ ํ”ผ๋“œ๋ฐฑ ์ž˜ ๋ถ€ํƒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค์š” ใ…Ž
์–ธ๋‹ˆ ๊ทธ๋ฆฌ๊ณ  ํ”ผ๋“œ๋ฐฑ์€ ์ •๋ง ์ •๋ง ์ฒœ์ฒœํžˆ ์ค˜๋„ ๋ผ ! ๋‚ด๊ฐ€ ์›Œ๋‚™์— ๋Šฆ๊ฒŒ ์˜ฌ๋ ค๊ฐ€์ง€๊ณ  ... ใ…‹.. 

์–ธ๋‹ˆ์˜ ํ•œ ์ฃผ๋ฅผ ์‘์›ํ•˜๋ฉฐ ! ์•„๋ž˜ ์‚ฌ์ง„์€ ๊ท€์—ฌ์›Œ์„œ ๋„ฃ์—ˆ์–ด ใ…‹ใ…‹ใ…‹ ๋‚ด๊ฐ€ ์ฐ์€ ๋ฆฌ๋ฒ„์Šค ๋ˆˆ์‚ฌ๋žŒ์ด์•ผ.. 

 

 

 

CS