๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„

[๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ

๊ฐœ๋ฐœ์ž HOON 2022. 10. 31. 14:38

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ..

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

 

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ์šด์˜์ฒด์ œ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก OS(์šด์˜์ฒด์ œ)๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

 ์šด์˜์ฒด์ œ๋Š” ํ•˜๋“œ์›จ์–ด ์ž์›์„ ๊ด€๋ฆฌํ•˜๊ณ , ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด๋ฅผ ์ค‘์žฌํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

+ ์ธํ„ฐํŽ˜์ด์Šค : ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์‹œ์Šคํ…œ ์‚ฌ์ด์—์„œ ์ •๋ณด๋‚˜ ์‹ ํ˜ธ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ ‘์ ์ด๋‚˜ ๊ฒฝ๊ณ„๋ฅผ ์˜๋ฏธ

 

 

๐Ÿ’ก ์ปค๋„์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์ ์žฌ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šด์˜์ฒด์ œ ์—ญ์‹œ ํ”„๋กœ๊ทธ๋žจ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋‚˜, ์šด์˜์ฒด์ œ์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ์ „์ฒด๋ฅผ ๋‹ค ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ฒŒ ๋œ๋‹ค๋ฉด ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„)

 

๋”ฐ๋ผ์„œ ์ปค๋„(kernel)์ด๋ผ๊ณ  ํ•˜๋Š” ํ•ญ์ƒ ํ•„์š”ํ•œ ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„๋งŒ์„ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜์—ฌ ์šด์˜์ฒด์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋” ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์ปค๋„์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๋Š” ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ์˜์—ญ์— ๋”ฐ๋ผ์„œ ์„ค๋ช…ํ•ด์ค„ ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

 

1) ์ฝ”๋“œ ์˜์—ญ(ํ…์ŠคํŠธ ์˜์—ญ) :

์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ, 'ํ…์ŠคํŠธ' ์˜์—ญ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. CPU๋Š” ํ•ด๋‹น ์ฝ”๋“œ ์˜์—ญ์— ์ €์žฅ๋œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ๊ฐ€์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

2) ๋ฐ์ดํ„ฐ ์˜์—ญ(static ์˜์—ญ) : 

 ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ํ•˜๋Š” ๋™์‹œ์— ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•ฉ๋‹ˆ๋‹ค.

 

3) ํž™ ์˜์—ญ (Heap) : 

 ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์ด๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋™์ ์œผ๋กœ ํ• ๋‹น ๋ฐ ํ—ค์ œ๋ฉ๋‹ˆ๋‹ค. ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋ฏ€๋กœ new๋กœ ์ƒ์„ฑํ•œ object๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ํž™ ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

4) ์Šคํƒ ์˜์—ญ (Stack) : 

 ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ, ์ปดํŒŒ์ผ ์‹œ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๊ณ , ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ์˜ ํž™ ์˜์—ญ๊ณผ ์Šคํƒ ์˜์—ญ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  ์Šคํƒ ์˜์—ญ (Stack Area) ํž™ ์˜์—ญ (Heap Area)
์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜ (new ์—ฐ์‚ฐ์ž)
ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ํƒ€์ด๋ฐ ์ปดํŒŒ์ผ (Compile) ๋Ÿฐํƒ€์ž„ (Runtime)
ํฌ๊ธฐ ์ œํ•œ ์Šคํƒ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. (๋Š˜์–ด๋‚จ)
์ฃผ์†Œ ํ• ๋‹น ๋ฐฉํ–ฅ ๋†’์€ ์ฃผ์†Œ → ๋‚ฎ์€ ์ฃผ์†Œ ๋‚ฎ์€ ์ฃผ์†Œ → ๋†’์€ ์ฃผ์†Œ
๋น„๊ต ํž™์— ๋น„ํ•ด ๋น ๋ฅด๋‹ค, ํ•จ์ˆ˜์— ์ข…๋ฃŒ์— ๋”ฐ๋ผ ์†Œ๋ฉธ๋˜๋ฏ€๋กœ ๋ณ„๋‹ค๋ฅธ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š” ์—†๋‹ค. ์Šคํƒ์— ๋น„ํ•ด ๋А๋ฆฌ๋‹ค, ์ง์ ‘ ํž™ ์˜์—ญ ๊ด€๋ฆฌ ํ•„์š”

 

๋‘ ์˜์—ญ์€ ๊ฐ™์€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š”๋ฐ, ์Šคํƒ์€ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ, ํž™์€ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ๋กœ ์ฑ„์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ์˜ ์˜์—ญ์„ ๋ˆ„๊ฐ€ ์นจ๋ฒ”ํ•˜๋А๋ƒ์— ๋”ฐ๋ผ heap overflow, stack overflow๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์ชฝ์— ์œ„์น˜ํ•  ์ˆ˜๋ก ๋‚ฎ์€ ์ฃผ์†Œ์ด๋ฉฐ, ์•„๋ž˜์ชฝ์— ์œ„์น˜ํ•  ์ˆ˜๋ก ๋†’์€ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ์˜ ํž™ ์˜์—ญ์„ ๋„ˆ๋ฌด ํฌ๊ฒŒ ์žก์œผ๋ฉด ์–ด๋–ค ์ผ์ด ์ƒ๊ธธ๊นŒ์š”?

๋”๋ณด๊ธฐ

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

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

 

๋”ฐ๋ผ์„œ Java์˜ JVM์—์„œ๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ํž™ ์˜์—ญ์„ ํฌ๊ฒŒ ์žก์ง€ ์•Š๊ณ , Heap ์˜์—ญ์ด ๊ฝ‰ ์ฐผ์„ ๋•Œ GC ์ง„ํ–‰ ํ›„ Heap ์˜์—ญ์„ ํ™•์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ๋‘˜์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

1) ํ”„๋กœ์„ธ์Šค

- ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ(์ฃผ๊ธฐ์–ต์žฅ์น˜)์— ์ ์žฌ๋˜์–ด ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

- PCB, code, data, heap, stack ์˜์—ญ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

- ํ”„๋กœ์„ธ์Šค๋ณ„ ๊ฐ๊ฐ์˜ ์˜์—ญ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋‹ค๋ฅธ ๋™๊ธฐํ™” ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

- ํ”„๋กœ์„ธ์Šค๋ณ„ ๊ฐ๊ฐ์˜ ์˜์—ญ์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— context switching ๋น„์šฉ์ด ํฝ๋‹ˆ๋‹ค.

- ํ”„๋กœ์„ธ์Šค ์“ฐ๋ ˆ๋“œ๋ณด๋‹ค ๋ฌด๊ฒ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ ์‹œ๊ฐ„์ด ๋” ๊น๋‹ˆ๋‹ค.

- ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

2) ์“ฐ๋ ˆ๋“œ

- ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์‹คํ–‰ ๋‹จ์œ„, ์‹คํ–‰์˜ ํ๋ฆ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

- stack ์˜์—ญ๋งŒ ๋ณ„๋„๋กœ ๊ฐ–๊ณ , ๋‚˜๋จธ์ง€ ์˜์—ญ(code, data, heap)์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ํฌํ•จํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

- stack ์˜์—ญ ์™ธ๋ถ€์˜ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•ด ์ ‘๊ทผ ์‹œ ๋™๊ธฐํ™” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

- stack ์˜์—ญ ์™ธ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋ฏ€๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์ด ์ ์Šต๋‹ˆ๋‹ค.

- ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๊ฐ€๋ณ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ ์‹œ๊ฐ„์ด ๋” ์งง์Šต๋‹ˆ๋‹ค.

- ํ•œ ์“ฐ๋ ˆ๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์“ฐ๋ ˆ๋“œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜๊ณ , ์™œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

 ๋ฌธ๋งฅ๊ตํ™˜(context switching)์€, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ Task(ํ”„๋กœ์„ธ์Šค ํ˜น์€ ์“ฐ๋ ˆ๋“œ)์˜ ์ƒํƒœ๋ฅผ PCB์— ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ์— ์ง„ํ–‰ํ•  Task์˜ ์ƒํƒœ ๊ฐ’์„ ์ฝ์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ์ ์žฌํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, CPU Cycle์˜ ์†๋„๋Š” I/O ์ž‘์—…์— ๋น„ํ•ด ๊ต‰์žฅํžˆ ๋น ๋ฆ…๋‹ˆ๋‹ค.

I/O ์ž‘์—…์ด ์‹คํ–‰๋˜๊ณ  Blocking ๋œ๋‹ค๋ฉฐ, CPU๋Š” ์•„๋ฌด๋Ÿฐ ์ผ์„ ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋žœ ๊ธฐ๊ฐ„๋™์•ˆ ์‰ฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—…์œผ๋กœ ์ „ํ™˜ํ•œ๋‹ค๋ฉด, CPU์˜ ์‚ฌ์šฉ๋ฅ ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†๋Š”๋ฐ(์˜ค๋ฒ„ํ—ค๋“œ), ๋ณดํ†ต ์ด ์‹œ๊ฐ„๋ณด๋‹ค I/O ์ž‘์—…์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1) CPU๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜ํ•˜๋ฉด ์‹œ์Šคํ…œ์€ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค

2) ๋Œ€๊ธฐ์—ด์—์„œ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

3) PCB์˜ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(๋ ˆ์ง€์Šคํ„ฐ)๊ฐ€ ๋กœ๋“œ๋˜์–ด ์ด์ „๊นŒ์ง€ ์ž‘์—…ํ•œ ๊ณณ์˜ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ€ ์„ ํƒํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์„ ์ด์–ด์„œ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก (PCB)์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

- ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(Process Control Block, ์ค„์—ฌ์„œ PCB)์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” OS ์ปค๋„์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

- OS๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๊ณ ์œ ํ•œ PCB ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

- PCB๊ฐ€ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ณดํ˜ธ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์•ˆ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

- PCB ์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž(Process ID, PID) : ํ”„๋กœ์„ธ์Šค ์‹๋ณ„๋ฒˆํ˜ธ
  • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ : new, ready, running, waiting, terminated ๋“ฑ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ
  • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ
  • CPU ๋ ˆ์ง€์Šคํ„ฐ
  • CPU ์Šค์ผ€์ฅด๋ง ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„, ์Šค์ผ€์ค„ ํ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ •๋ณด : ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋˜๋Š” ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ” ๋“ฑ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จ
  • ์ž…์ถœ๋ ฅ ์ƒํƒœ ์ •๋ณด : ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋“ค๊ณผ ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก
  • ์–ด์นด์šดํŒ… ์ •๋ณด : ์‚ฌ์šฉ๋œ CPU ์‹œ๊ฐ„, ์‹œ๊ฐ„์ œํ•œ, ๊ณ„์ •๋ฒˆํ˜ธ ๋“ฑ

 

 

๐Ÿ’ก ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ ํƒญ์— ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„, ๋‹ค๋ฅธ ํƒญ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ํฌ๋กฌ ํƒญ์€ ํ”„๋กœ์„ธ์Šค์ผ๊นŒ์š”? ์“ฐ๋ ˆ๋“œ์ผ๊นŒ์š”?

๋”๋ณด๊ธฐ

 ํฌ๋กฌ ํƒญ์ด ์“ฐ๋ ˆ๋“œ๋ผ๋ฉด, ํ•œ ํฌ๋กฌ ํƒญ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค๋ฅธ ํฌ๋กฌ ํƒญ์—๋„ ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ํƒญ์— ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๋„ ๋‹ค๋ฅธ ํƒญ์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์„ฑ์— ์˜ํ•ด, ํฌ๋กฌ ํƒญ์€ ๋ณ„๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น„๊ตํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

1) ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑํ•ด ์ž์›์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ , Context Switching์ด ๋น ๋ฅธ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์˜ค๋ฅ˜๋กœ ์ธํ•ด ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ „์ฒด ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๊ณผ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.

 

3) ์™œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

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

 

4) Python์—์„œ์˜ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

ํŒŒ์ด์ฌ์€ GIL(Global Interpreter Lock) ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ๋ชจ๋“  ์ž์›์˜ Lock์„ ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ ์ž์›์„ ์ปจ๋“œ๋กคํ•ด ๋™์ž‘ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. GIL ๋•๋ถ„์— ์ž์› ๊ด€๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, CPU ์ž‘์—…์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์†๋„ ๊ฐœ์„ ์„ ๋А๋ผ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

I/O ๋™์ž‘์ด ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋งŒ์œผ๋กœ ํฐ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CPU ๋™์ž‘์ด ๋งŽ์€ ๊ฒฝ์šฐ, ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹นํ•˜๋Š” 2๊ฐ€์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์“ฐ๋ ˆ๋“œ๋Š”, ๋…๋ฆฝ์ ์œผ๋กœ ์Šคํƒ ์˜์—ญ๊ณผ PC Register๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์“ฐ๋ ˆ๋“œ์˜ ์ •์˜์™€ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์— ์žˆ์Šต๋‹ˆ๋‹ค.

 

1) ๋…๋ฆฝ์ ์œผ๋กœ ์Šคํƒ ์˜์—ญ์„ ๊ฐ–๋Š” ์ด์œ  : 

 ์Šคํƒ ์˜์—ญ์€ ํ•จ์ˆ˜์˜ ์‹คํ–‰๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋…๋ฆฝ์ ์œผ๋กœ ์Šคํƒ์„ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๊ณง ๋…๋ฆฝ์ ์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค ์Šคํƒ ์˜์—ญ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

2) ๋…๋ฆฝ์ ์œผ๋กœ PC Register๋ฅผ ๊ฐ–๋Š” ์ด์œ  : 

 PC Register ๊ฐ’์€, ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์–ด๋””๊นŒ์ง€ ์ˆ˜ํ–‰ํ–ˆ๋Š” ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›์•˜๋‹ค๊ฐ€, ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด์„œ ์„ ์ ๋‹นํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์‹œ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์–ด๋””๊นŒ์ง€ ์‹คํ–‰์ด ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ๋…๋ฆฝ์ ์œผ๋กœ PC Register ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋”๋ณด๊ธฐ

 ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋Š” ์„œ๋กœ ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ž์›์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ๋™๊ธฐํ™”๋ฅผ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

+ ๋™๊ธฐํ™”๊ฐ€ ๋ฌด์—‡์ธ์ง€ Java ์ฑ•ํ„ฐ์—์„œ ์ฐธ๊ณ .

 

 

๐Ÿ’ก ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋™๊ธฐ๋Š” ์š”์ฒญ๊ณผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚œ๋‹ค๋Š” ์•ฝ์†์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์„ ํ•˜๋ฉด, ์‹œ๊ฐ„์ด ์–ผ๋งˆ๊ฐ€ ๊ฑธ๋ฆฌ๋˜์ง€ ์š”์ฒญํ•œ ์ž๋ฆฌ์—์„œ ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค๊ณ„๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€๋งŒ, ๊ฒฐ๊ณผ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ๊นŒ์ง€ ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ•˜๊ณ  ๋Œ€๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ์„ค๋ช…์œผ๋กœ๋Š”, Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Bํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ A๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

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

์ •ํ™•ํ•œ ์„ค๋ช…์œผ๋กœ๋Š”, Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Bํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ B๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ  A์—๊ฒŒ callback์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

๐Ÿ’ก Blocking๊ณผ Non-Blocking์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Blocking์€, Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, B ํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ A ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, B ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ A ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

Non-Blocking์€, Aํ•จ์ˆ˜๊ฐ€ Bํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Bํ•จ์ˆ˜๊ฐ€ A ํ•จ์ˆ˜์—๊ฒŒ ๊ณง๋ฐ”๋กœ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. A ํ•จ์ˆ˜๋Š” ๊ณง๋ฐ”๋กœ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ Blocking != Sync, Non-blocking != Async ์ž…๋‹ˆ๋‹ค.

๋™๊ธฐ/๋น„๋™๊ธฐ = ํ˜ธ์ถœ๋‹นํ•œ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ๋ฅผ ๋ˆ„๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋А๋ƒ

blocking/non-blocking = ์ œ์–ด๊ถŒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ๋Œ์•„๊ฐ€๋А๋ƒ

 

 

 

๐Ÿ’ก ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฅ˜๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • ์ž์‹ ํ”„๋กœ์„ธ์Šค
    • fork๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“  ์ƒํƒœ, ๋ถ€๋ชจ์˜ ๋ฐ์ดํ„ฐ, ํž™, ์Šคํƒ, PCB ๋ณต์‚ฌ
  • ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค
    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์ž‘ํ•˜๋ฉด์„œ ํŠน์ •ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
  • ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ๋˜์–ด ๊ณ ๋ฆฝ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค
  • ์ข€๋น„ ํ”„๋กœ์„ธ์Šค
    • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ž‘์—… ์ข…๋ฃŒ์— ๋Œ€ํ•œ ์Šน์ธ์„ ๋ฐ›์ง€ ๋ชปํ•œ ํ”„๋กœ์„ธ์Šค

 

 

๐Ÿ’ก Race Condition๊ณผ Critical Section์ด ๋ฌด์—‡์ด๊ณ , ๊ฒฝ์Ÿ์ƒํƒœ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋‘ ๊ฐœ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ์ž์›์— ๋Œ€ํ•ด ์ ‘๊ทผํ•˜๋ ค๊ณ  ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒƒ์„ 'Race Condition(๊ฒฝ์Ÿ์ƒํƒœ)'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ณต์œ ์ž์›์ด ์กด์žฌํ•˜๋Š” ๊ตฌ๊ฐ„์œผ๋กœ Race Condition์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์„ 'Critical Section(์ž„๊ณ„์˜์—ญ)'์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ž„๊ณ„์˜์—ญ์— ๋Œ€ํ•œ ๊ฒฝ์Ÿ์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ ๊ณต์œ ์ž์›์— ๋Œ€ํ•ด์„œ ํ•œ ์“ฐ๋ ˆ๋“œ์—๋งŒ ์ ‘๊ทผ์„ ํ—ˆ๋ฝํ•˜๋„๋ก ํ•˜๋Š” '์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclusion)'๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก DeadLock(๊ต์ฐฉ์ƒํƒœ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

DeadLock(๊ต์ฐฉ์ƒํƒœ)๋Š”, ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ๋ฌดํ•œํžˆ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

DeadLock์ด ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์€ 4๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒํ˜ธ ๋ฐฐ์ œ (Mutual Exclusion)
    • ํ•œ ์ž์›์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ ์œ  ๋Œ€๊ธฐ (Hold and Wait)
    • ํ•˜๋‚˜์˜ ์ž์›์„ ์†Œ์œ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ๋น„์„ ์  (Non-preemption)
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์˜ ์‚ฌ์šฉ์„ ๋๋‚ผ ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†๋‹ค.
  • ์ˆœํ™˜ ๋Œ€๊ธฐ (Circular Wait)
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆœํ™˜์ ์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์›์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

 

๊ต์ฐฉ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ œ๊ฑฐํ•˜๋ฉด ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Race Condition ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด์„œ '์ƒํ˜ธ ๋ฐฐ์ œ' ์กฐ๊ฑด์„ ์ œ๊ฑฐํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

  • ์˜ˆ๋ฐฉ(Prevention)
    • ๊ต์ฐฉ ์ƒํƒœ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ œ๊ฑฐํ•จ์œผ๋กœ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ์‹
    • ์ž์› ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค.
  • ํšŒํ”ผ(Avoidance)
    • ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์„ ์ธ์ •ํ•˜๋ฉด์„œ๋„ ์ ์ ˆํ•˜๊ฒŒ ํšŒํ”ผํ•˜๋Š” ๋ฐฉ์‹
    • ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ์ž์›์„ ํ• ๋‹นํ•œ ํ›„์—๋„ ์•ˆ์ • ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ์‚ฌ์ „์— ๊ฒ€์‚ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์›์„ ํ• ๋‹นํ•˜๊ณ , ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.
      • ์•ˆ์ „์ƒํƒœ: ์‹œ์Šคํ…œ์ด ๊ต์ฐฉ์ƒํƒœ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•œ ์ตœ๋Œ€ ์š”๊ตฌ๋Ÿ‰๋งŒํผ ํ•„์š”ํ•œ ์ž์›์„ ํ• ๋‹นํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ
      • ํ•ญ์ƒ ์•ˆ์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜ ์ตœ๋Œ€ ์ž์› ์š”๊ตฌ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์•Œ์•„์•ผ ํ•˜๊ณ  ํ•ญ์ƒ ๋ถˆ์•ˆ์ „ ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž์› ์ด์šฉ๋„๊ฐ€ ๋‚ฎ๋‹ค.
  • ํšŒ๋ณต(Recovery)
    • ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์‹œ์Šคํ…œ์˜ ์ž์› ํ• ๋‹น ์ƒํƒœ๋ฅผ ๊ฐ–๊ณ  ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ํƒ์ง€ํ–ˆ๋‹ค๋ฉด ๋ฐ๋“œ๋ฝ์„ ํšŒ๋ณตํ•œ๋‹ค.
      • ๋ฐ๋“œ๋ฝ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ๋ชจ๋‘ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ
      • ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ์ค‘๋‹จ ์‹œํ‚ฌ ๋•Œ๋งˆ๋‹ค ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ๋“œ๋ฝ์„ ํƒ์ง€ํ•˜๋ฉด์„œ ํšŒ๋ณต์‹œํ‚ค๊ธฐ
      • ์ž์› ์„ฌ์ ์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ธฐ(๊ต์ฐฉ ์ƒํƒœ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์„ ์ ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น)

 

 

๐Ÿ’ก '์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ๋ฌธ์ œ'์—์„œ, DeadLock์ด ์–ด๋–จ ๋•Œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด์ฃผ์„ธ์š”.


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

๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ ๋ฐฉ์— ์ž…์žฅํ•œ ํ›„, ๊ฐ์ž์˜ ์™ผ์ชฝํฌํฌ๋ฅผ 5๋ช…์ด ๋ชจ๋‘ ๋“œ๋Š” ๊ฒฝ์šฐ์— DeadLock์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

1) 5๋ช… ๋ชจ๋‘ ์ž์‹ ์˜ ์™ผ์ชฝ ํฌํฌ๋ฅผ ๋“ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ '์ ์œ ๋Œ€๊ธฐ'

2) ๋‚จ์ด ํฌํฌ๋ฅผ ๋บ์–ด์ฃผ์ง€ ์•Š์Œ '๋น„์„ ์ '

3) ์„œ๋กœ ์˜ค๋ฅธ์ชฝ ํฌํฌ๋ฅผ ๋†“๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆผ 'ํ™˜ํ˜•๋Œ€๊ธฐ'

4) ๊ฐ ํฌํฌ์— ๋Œ€ํ•ด ํ•œ ์‚ฌ๋žŒ๋งŒ ๋“ค ์ˆ˜ ์žˆ์Œ '์ƒํ˜ธ๋ฐฐ์ œ'

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

 

 

๐Ÿ’ก Mutex(๋ฎคํ…์Šค)์™€ Semaphore(์„ธ๋งˆํฌ์–ด)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • ๋ฎคํ…์Šค
    • ์˜ค์ง 1๊ฐœ๋งŒ์˜ ์Šค๋ ˆ๋“œ(๋˜๋Š” ํ”„๋กœ์„ธ์Šค)๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • 1๊ฐœ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๋ฝ์„ ํš๋“ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฝ์„ ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ธ๋งˆํฌ์–ด
    • ์„ธ๋งˆํฌ์–ด ๋ณ€์ˆ˜๋งŒํผ์˜ ์Šค๋ ˆ๋“œ(๋˜๋Š” ํ”„๋กœ์„ธ์Šค)๊ฐ€ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„ธ๋งˆํฌ์–ด๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ด์ง„ ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค์™€ ๋™์ผํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด์ง„ ์„ธ๋งˆํฌ์–ด๊ฐ€ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์„ธ๋งˆํฌ์–ด๋ฅผ ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์ž„๊ณ„์˜์—ญ์—์„œ์˜ ๊ฒฝ์Ÿ์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก CPU Scheduling์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜๊ณ , CPU ์Šค์ผ€์ค„๋ง์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘, ๋‹ค์Œ์— CPU๋ฅผ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ CPU Scheduling์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

<๋น„์„ ์ >

  • First Come First Served(FCFS)
    • ํ์— ๋„์ฐฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜ด
  • Shortest Job First (SJF)
    • CPU ์ ์œ  ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋จผ์ € ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹
    • ๊ธฐ์•„ ๋ฌธ์ œ ๋ฐœ์ƒ
  • Highest Response Ratio Next
    • ์ค€๋น„ ํ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ์‘๋‹ต๋น„์œจ์ด ๊ฐ€์žฅ ํฐ๊ฒƒ์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
    • ์„œ๋น„์Šค ๋ฐ›์„ ์‹œ๊ฐ„์ด ๋ถ„๋ชจ, ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋ถ„์ž์— ์žˆ์–ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํฐ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์ง„๋‹ค.

<์„ ์ >

  • Round Robin(RR)
    • ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์„ ๋งค ํ”„๋กœ์„ธ์Šค์— ์ฃผ๊ณ  ํ• ๋‹น๋œ ์‹œ๊ฐ„ ์•ˆ์— ์™„๋ฃŒํ•˜์ง€ ๋ชปํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ ˆ๋”” ํ์˜ ๋งจ ๋’ค์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ์‹
  • Shortest Remaining Time First (SRTF)
    • CPU ์ ์œ  ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋จผ์ € ํ• ๋‹นํ•˜๋Š” ๋น™์‹
    • SJF ๋ฐฉ์‹์—์„œ ์„ ์  ๋ฐฉ์‹๋งŒ ๋‹ค๋ฅด๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
    • ๊ธฐ์•„ ๋ฌธ์ œ ๋ฐœ์ƒ
  • Multilevel Feedback Queue(๋‹ค์ค‘ ๋ ˆ๋ฒจ ํ”ผ๋“œ๋ฐฑ ํ)
    • ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ•˜๋‚˜์˜ ํ๋ฅผ ๋‘๊ณ , ํ ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ๋‚ด์— ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ํ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹
    • ๋‹จ๊ณ„๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์ด ์ปค์ง€๋Š” ํ˜•ํƒœ

 

 

๐Ÿ’ก CPU์˜ ์„ฑ๋Šฅ ์ฒ™๋„์—” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • CPU Utilization(์ด์šฉ๋ฅ ) : CPU๊ฐ€ ๋†€์ง€ ์•Š๊ณ  ์ผํ•œ ์‹œ๊ฐ„
  • Throughput(์ฒ˜๋ฆฌ๋Ÿ‰) : ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฒ˜๋ฆฌ๋Ÿ‰, CPU๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ผ์„ ํ–ˆ๋Š”์ง€
  • Turnaround Time(์†Œ์š”์‹œ๊ฐ„, ๋ฐ˜ํ™˜์‹œ๊ฐ„) : CPU ์‚ฌ์šฉ ์‹œ๊ฐ„ + ๊ธฐ๋‹ค๋ฆฐ ์‹œ๊ฐ„ (์งง์„์ˆ˜๋ก ์ข‹๋‹ค)
  • Waiting Time(๋Œ€๊ธฐ์‹œ๊ฐ„) : ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์—์„œ ๊ธฐ๋‹ค๋ฆฐ ์ „์ฒด ์‹œ๊ฐ„์˜ ํ•ฉ
  • Response Time(์‘๋‹ต์‹œ๊ฐ„) : ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์— ๋“ค์–ด๊ฐ€์„œ ์ตœ์ดˆ๋กœ CPU ์–ป๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

 

 

๐Ÿ’ก ์„ ์ (preemption)๊ณผ ๋น„์„ ์ (non-preemption)์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์„ ์  ๋ฐฉ์‹์€, ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋”๋ผ๋„ CPU ํ• ๋‹น์„ ๋บ์–ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

System Call, Time Quantum, Interrupt ๋“ฑ์— ์˜ํ•ด ์„ ์ ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

๋น„์„ ์  ๋ฐฉ์‹์€, ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ ˆ๋Œ€๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU๋ฅผ ๋บ๊ธฐ์ง€ ์•Š๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์„ฑ์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋™์‹œ์„ฑ์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Multi-Programming)์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์œผ๋กœ, ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ์žฌํ•ด์„œ Context Switching์„ ํ†ตํ•ด ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฒˆ๊ฐˆ์•„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ ์ฝ”์–ด์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

๋ณ‘๋ ฌ์„ฑ์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ (Multi-Processing)์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์œผ๋กœ, ์‹ค์ œ๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” CPU๊ฐ€ ๋ฉ€ํ‹ฐ์ฝ”์–ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

 

๐Ÿ’ก Interrupt(์ธํ„ฐ๋ŸฝํŠธ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Interrupt(์ธํ„ฐ๋ŸฝํŠธ)๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๋„์ค‘์— ์ž…์ถœ๋ ฅ ์š”์ฒญ ํ˜น์€ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉด ์‹คํ–‰ํ•˜๋˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉˆ์ถ”๊ณ  CPU๊ฐ€ ํ•ด๋‹น ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก System Call์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋”๋ณด๊ธฐ

System Call(์‹œ์Šคํ…œ ์ฝœ)์€ ์‚ฌ์šฉ์ž๋‚˜ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

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

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ์ข…๋ฅ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

CPU์— ๊ฐ€๊นŒ์šด ์ˆœ์„œ๋Œ€๋กœ ๋ ˆ์ง€์Šคํ„ฐ, ์บ์‹œ, ์ฃผ๊ธฐ์–ต์žฅ์น˜, ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์€ ์ด์œ ๋Š”, ์ ‘๊ทผ ์†๋„์— ๋”ฐ๋ฅธ ์ฐจ์ด๋ฅผ ๋‘๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. (๋ ˆ์ง€์Šคํ„ฐ > ์บ์‹œ > ์ฃผ๊ธฐ์–ต์žฅ์น˜ > ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜)

 

 

๐Ÿ’ก OS๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์–ด๋–ค ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

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

 

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•œ Swapping, ํŽ˜์ด์ง• ๋ฐ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์ „๋žต, ๊ณ ์ • ๊ธธ์ด ํ• ๋‹น / ๊ฐ€๋ณ€ ๊ธธ์ด ํ• ๋‹น, ์••์ถ• ๋“ฑ์˜ ๋ฐฉ์‹์œผ๋กœ OS๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ์˜ fit์˜ ์ข…๋ฅ˜ 4๊ฐ€์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
  • First fit : ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ด์„œ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํ•œ ์ฒซ๋ฒˆ์งธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น
  • Next fit : ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐธ์กฐํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ด ๊ณต๊ฐ„์„ ์ฐพ์Œ
  • Best fit : ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฒ€์‚ฌํ•ด์„œ ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ณต๊ฐ„์— ํ• ๋‹น
  • Worst fit : ๋‚จ์€ ๊ณต๊ฐ„ ์ค‘์— ๊ฐ€์žฅ ํฐ ๊ณต๊ฐ„์— ํ• ๋‹น

 

 

๐Ÿ’ก ํŽ˜์ด์ง•๊ณผ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ
ํŽ˜์ด์ง•
  • ํŽ˜์ด์ง• : ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋กœ ๋ถ„๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์™€ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ 13MB์ด๊ณ  ํŽ˜์ด์ง€๊ฐ€ 4MB๋ผ๋ฉด, ํ•œ ํŽ˜์ด์ง€๋Š” 1MB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์€ ๋ฌด์กฐ๊ฑด 4MB๋กœ ๋ถ„๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ 3MB์˜ '๋‚ด๋ถ€๋‹จํŽธํ™”'๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹๋ณด๋‹ค๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.)

 

์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜
  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ : ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€๋ณ€์ ์ธ ํฌ๊ธฐ์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋…ผ๋ฆฌ์ ์ธ ๋ธ”๋ก๋‹จ์œ„ ์„ธ๊ทธ๋จผํŠธ๋กœ Code, Data, Stack & Heap์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์—ญ์‹œ '์™ธ๋ถ€ ๋‹จํŽธํ™”'๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ”์˜ limit๋Š” ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์—๋Š” ์—†๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ์„ธ๊ทธ๋จผํŠธ ํฌ๊ธฐ๋Š” ๊ฐ€๋ณ€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•ด๋‹น ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๊ทธ๋ ‡๋‹ค๋ฉด, ๋‚ด๋ถ€๋‹จํŽธํ™”์™€ ์™ธ๋ถ€๋‹จํŽธํ™”๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋‹จํŽธํ™”๋ž€, ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์— ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•  ๋งŒํผ์˜ ์ž‘์€ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ๊ณ ์ •๊ธธ์ด ํ• ๋‹น / ํŽ˜์ด์ง€์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ •์ ์ธ ๊ธธ์ด์˜ ํŒŒํŠธ๋กœ ์ž˜๋ž์„ ๋•Œ, ํ•ด๋‹น ํŒŒํŠธ์˜ ๊ธธ์ด๋ณด๋‹ค ๋” ์ž‘์€ ํฌ๊ธฐ์˜ ์กฐ๊ฐ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด ์ƒ๊ธฐ๋Š” ์—ฌ๋ฐฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์™ธ๋ถ€ ๋‹จํŽธํ™”๋Š” ๊ฐ€๋ณ€๊ธธ์ด ํ• ๋‹น / ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ตœ๋Œ€ํฌ๊ธฐ - ์‚ฌ์šฉ์ค‘์ธ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ ์žฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ด ์ฐจ(์—ฌ๋ฐฑ)์„ ์™ธ๋ถ€ ๋‹จํŽธํ™”๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋Š” '๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ๊ธฐ๋ฒ•์—์„œ ๋‚˜์˜จ ๊ฐœ๋…์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์˜ฌ๋ผ์˜ค์ง€ ์•Š๋”๋ผ๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์˜ ์ „๋ถ€๋ฅผ ์ ์žฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰๋ณด๋‹ค ํฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์‹œ์— ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ์‘๋‹ต์‹œ๊ฐ„์„ ์œ ์ง€ํ•˜๋ฉด์„œ CPU ์ด์šฉ๋ฅ ๊ณผ ์ฒ˜๋ฆฌ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ ์œผ๋กœ๋Š” ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ตฌ๋™๋ณด๋‹ค๋Š” ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

+ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ด ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€์žˆ๊ณ , ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๊ณต์œ ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

๐Ÿ’ก ์š”๊ตฌ ํŽ˜์ด์ง•(Demand Paging)์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์š”๊ตฌ ํŽ˜์ด์ง•(Demand Paging)์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ž‘ ์‹œ์— ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๋Œ€์‹ , ์ดˆ๊ธฐ์— ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ์ ์žฌํ•˜๋Š” ์ „๋žต์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์™€ ํŽ˜์ด์ง€ ๊ฐœ๋…์„ ํ™œ์šฉํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ํŽ˜์ด์ง€ ๊ต์ฒด๊ฐ€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”์ง€, ์–ด๋–ค ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์ดˆ๊ธฐ์— ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋“ค๋งŒ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค ๋™์ž‘ ์ค‘, ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ์ƒํ™ฉ์„ ํŽ˜์ด์ง€ ๋ถ€์žฌ(Page Fault)๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ํŽ˜์ด์ง€ ๋ถ€์žฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ํ•˜๋“œ๋””์Šคํฌ์˜ Swap Space์—์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ์ค‘์ด๋ผ์„œ ์›ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ํŽ˜์ด์ง€ ๊ต์ฒด๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

  • FIFO
    • ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
  • OPT(Optimal)
    • ๊ฐ€์žฅ ๋จผ ๋ฏธ๋ž˜ ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.(๋ถˆ๊ฐ€๋Šฅ)
  • LFU(Least Frequently Use)
    • ๊ฐ€์žฅ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
  • MFU(Most Frequently used)
    • ๊ฐ€์žฅ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋งŽ์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
  • LRU(Least Recently Use)
    • ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
  • NUR(Not Used Recently)
    • LRU์™€ ์œ ์‚ฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•œ๋‹ค.
    • ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฐธ์กฐ๋น„ํŠธ์™€ ๋ณ€ํ˜•๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ฐธ์กฐ ๋น„ํŠธ : ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” 0, ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ๋Š” 1
    • ๋ณ€ํ˜• ๋น„ํŠธ : ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” 0, ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋Š” 1
    • 00์ธ๊ฒƒ์ด ๊ฐ€์žฅ ๋จผ์ € ๊ต์ฒด๋˜๋ฒ„๋ฆฐ๋‹ค.
  • Clock Algorithm
    • LRU์™€ ์œ ์‚ฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊ฐ ํŽ˜์ด์ง€๊ฐ€ ์ตœ๊ทผ์— ์ฐธ์กฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
    • ํŽ˜์ด์ง€๋งˆ๋‹ค reference bit์„ ๊ฐ–๊ณ  ์žˆ๊ณ , ์ดˆ๊ธฐ์—๋Š” ๋ชจ๋‘ 0, ์ฐธ์กฐ๋˜๋ฉด 1์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.
    • page replacement๊ฐ€ ์ง„ํ–‰๋˜๋ฉด ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ page table์„ ์ฐธ์กฐํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ 1๋น„ํŠธ๋ฅผ ๋งŒ๋‹ค๋ฉด 0๋น„ํŠธ๋กœ ๋‚ด๋ฆฌ๊ณ  0๋น„ํŠธ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ replacement ๋Œ€์ƒ์ด ๋œ๋‹ค.
    • ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€๋Š” ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ’ก Thrashing(์“ฐ๋ ˆ์‹ฑ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

ํŽ˜์ด์ง€ ๋ถ€์žฌ์œจ์ด ๋†’์€ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

ํŽ˜์ด์ง€ ๋ถ€์žฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํŽ˜์ด์ง€ ๊ต์ฒด ํ˜น์€ ํŽ˜์ด์ง€ ๋กœ๋“œ๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ ํšจ ์‚ฌ์šฉ ๊ณต๊ฐ„์€ ์ค„์–ด๋“ค๊ณ , CPU์˜ ๊ฐ€๋™ ์‹œ๊ฐ„์ด ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ž์›์„ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋ฉด, ํ”„๋กœ์„ธ์Šค๋‹น ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ณ , ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์ ๊ฒŒ ์˜ฌ๋ผ์˜จ ํ”„๋กœ์„ธ์Šค๋Š” ๋ช…๋ น์ด ์ง„ํ–‰๋  ๋•Œ ๋งˆ๋‹ค Page Fault๊ฐ€ ์ผ์–ด๋‚˜ ํŽ˜์ด์ง€ ๊ต์ฒด๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—” CPU ์‚ฌ์šฉ๋ฅ ์ด ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ณผ์ •์—์„œ๋Š” CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํŽ˜์ด์ง€ ๊ต์ฒด๋งŒ์„ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด, ์šด์˜์ฒด์ œ๋Š” CPU๊ฐ€ ๋†€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋ ค๊ณ  ํ•˜๋ฉฐ ์•…์ˆœํ™˜์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ Thrashing(์“ฐ๋ ˆ์‹ฑ)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ•ด์†Œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ Working Set ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ Page Fault Frequency ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • Working Set : ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠน์ • ํŽ˜์ด์ง€๋งŒ ์ง‘์ค‘์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ํŠน์„ฑ์„ ์ด์šฉ, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ฐธ์กฐ๋˜๋Š” ํŽ˜์ด์ง€ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๊ทธ ํŽ˜์ด์ง€ ์ˆ˜๋งŒํผ ์—ฌ๋ถ„ ํ”„๋ ˆ์ž„์ด ํ™•๋ณด๋˜๋ฉด ๊ทธ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค.
  • Page Fault Frequency : Page Fault ํผ์„ผํŠธ์˜ ์ƒํ•œ๊ณผ ํ•˜ํ•œ์„ ๋‘ก๋‹ˆ๋‹ค. ์ƒํ•œ์„ ๋„˜์œผ๋ฉด ํŽ˜์ด์ง€์—๊ฒŒ ์ง€๊ธ‰ํ•˜๋Š” ํ”„๋ ˆ์ž„ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ , ํ•˜ํ•œ์„ ๋„˜์œผ๋ฉด ์ง€๊ธ‰ ํ”„๋ ˆ์ž„ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

๋˜ CPU ์‚ฌ์šฉ๋ฅ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ๋Ÿ‰์„ ํ•จ๊ป˜ ์ฒดํฌํ•ด์•ผ ์“ฐ๋ ˆ์‹ฑ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ๊ฐˆ๋˜๋ฉด ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ๊ฐˆ๋˜์—ˆ์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Swap์ด ํ™œ๋ฐœํ•ด์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CPU ์ด์šฉ๋ฅ ์ด ํ•˜๋ฝํ•˜๊ณ , OS๋Š” CPU ์ด์šฉ๋ฅ ์ด ๋‚ฎ์œผ๋ฏ€๋กœ ์˜คํžˆ๋ ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ์“ฐ๋ ˆ์‹ฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด์†Œํ•˜์ง€ ๋ชปํ•˜๋ฉด Out Of Memory ์ƒํƒœ๋กœ ํŒ๋‹จํ•ด ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ์บ์‹œ(cache) ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, CPU์˜ ์ ์ค‘๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์˜ ์†๋„ ์ฐจ์ด๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์™€ ์ €์žฅํ•ด๋‘๋Š” ์ž„์‹œ ์žฅ์†Œ๋กœ, ์บ์‹œ์˜ ํฌ๊ธฐ๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด ์บ์‹œ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ '์ ์ค‘'์ด๋ผ๊ณ  ํ•˜๊ณ , ์ด๋Ÿฌํ•œ ์ ์ค‘๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์ฐธ์กฐ ์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

- ์ตœ๊ทผ์— ์ฐธ์กฐ๋œ ์ฃผ์†Œ์˜ ๋‚ด์šฉ์€ ๊ณง ๋‹ค์Œ์— ๋‹ค์‹œ ์ฐธ์กฐ๋˜๋Š” ํŠน์„ฑ (ex. ๋ฐ˜๋ณต๋ฌธ)

- ์ฐธ์กฐ๋œ ์ฃผ์†Œ์™€ ์ธ์ ‘ํ•œ ์ฃผ์†Œ์˜ ๋‚ด์šฉ์ด ๋‹ค์‹œ ์ฐธ์กฐ๋˜๋Š” ํŠน์„ฑ (ex. ๋ฐฐ์—ด)

 

 

๐Ÿ’ก DMA(Direct Memory Access)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

๋ฐ์ดํ„ฐ์˜ ์ด๋™์—๋Š” CPU์˜ ๊ฐœ์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹ค๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋™ํ•˜๋Š” ๊ณผ์ •์—์„œ๋Š” CPU์— ๋งŽ์€ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ CPU๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ DMA๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ค‘, ์—ฐ์†(Contiguous) ๋ฐฉ์‹๊ณผ ๋ถˆ์—ฐ์†(Non-Contiguous) ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์€, ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๊ฐ€ ๋ถ„๋ฆฌ๋˜์ง€ ์•Š์€ ์˜จ์ „ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์—๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ '๊ณ ์ • ๊ธธ์ด ํ• ๋‹น'๊ณผ '๊ฐ€๋ณ€ ๊ธธ์ด ํ• ๋‹น'์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณ ์ • ๊ธธ์ด ํ• ๋‹น : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด๋กœ ํŒŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•ด๋‹น ํŒŒํŠธ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์ •๋œ ๊ธธ์ด์˜ ํŒŒํŠธ ๋‚ด์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ, ์—ฌ๋ฐฑ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ '๋‚ด๋ถ€ ๋‹จํŽธํ™”'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€๋ณ€ ๊ธธ์ด ํ• ๋‹น : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ”„๋กœ์„ธ์Šค์˜ ๊ธธ์ด์— ์•Œ๋งž๊ฒŒ ํŒŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ณ€๋œ ๊ธธ์ด์ด๋ฏ€๋กœ ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ฐ€๋ณ€์ ์ธ ๊ธธ์ด ํ• ๋‹น์— ์˜ํ•ด ์ผ๋ถ€๋ถ„์ด ๋‚จ์œผ๋ฏ€๋กœ '์™ธ๋ถ€ ๋‹จํŽธํ™”'๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

๋ถˆ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์€, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์†๋œ ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ ๋ถ„๋ฆฌ๋œ ์ด๋ฏธ์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. 'ํŽ˜์ด์ง•'๊ณผ '์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜' ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŽ˜์ด์ง• : ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋กœ ๋ถ„๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€์™€ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ 13MB์ด๊ณ  ํŽ˜์ด์ง€๊ฐ€ 4MB๋ผ๋ฉด, ํ•œ ํŽ˜์ด์ง€๋Š” 1MB๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์€ ๋ฌด์กฐ๊ฑด 4MB๋กœ ๋ถ„๋ฆฌํ–ˆ์œผ๋ฏ€๋กœ 3MB์˜ '๋‚ด๋ถ€๋‹จํŽธํ™”'๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹๋ณด๋‹ค๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.)
  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ : ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€๋ณ€์ ์ธ ํฌ๊ธฐ์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋…ผ๋ฆฌ์ ์ธ ๋ธ”๋ก๋‹จ์œ„ ์„ธ๊ทธ๋จผํŠธ๋กœ Code, Data, Stack & Heap์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์—ญ์‹œ '์™ธ๋ถ€ ๋‹จํŽธํ™”'๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ ํŽ˜์ด์ง•๊ณผ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๋ฐฉ์‹์€ ์—ฐ์†์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ฐ ์กฐ๊ฐ์ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜์— ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ํŽ˜์ด์ง€/์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

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

 

๐Ÿƒ‍โ™‚๏ธ ๋‹ค๋ฅธ ์งˆ๋ฌธ ๋Œ€๋น„ ์ž๋ฃŒ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ - โ“ช ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘  ์ž๋ฃŒ๊ตฌ์กฐ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ก ์•Œ๊ณ ๋ฆฌ์ฆ˜
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ข ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฃ ๋„คํŠธ์›Œํฌ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ค ์šด์˜์ฒด์ œ
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฅ ์ž๋ฐ”(Java)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ฆ ๋ฐฑ์—”๋“œ(Java Spring ๊ธฐ๋ฐ˜)
[๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„] - [๋ฉด์ ‘์ด์ •๋ฆฌ] ์‹ ์ž… ๊ฐœ๋ฐœ์ž ์ธํ„ฐ๋ทฐ ๋Œ€๋น„ ์ด์ •๋ฆฌ ์ž๋ฃŒ - โ‘ง ๊ฐœ๋ฐœ๊ณตํ†ต / ์ธ์„ฑ๋ฉด์ ‘

 

 

๐Ÿ˜Ž ๋„์›€์„ ๋ฐ›์€ ์ถœ์ฒ˜ : 

[๋งํฌ] https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/OS.md 

[๋งํฌ] https://melonicedlatte.com/2020/10/07/233100.html

[์ž๋ฃŒ] ํ•™๊ต ์šด์˜์ฒด์ œ๊ณผ๋ชฉ PPT ์ž๋ฃŒ ๋ฐ ๋ฉด์ ‘์‹œ ๋ฐ›์•˜๋˜ ์งˆ๋ฌธ๋“ค ํฌํ•จ.