Operating System

๐Ÿ“Œ ์งˆ๋ฌธ์€ WeareSoft๋‹˜์˜ tech-interview๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Table of Contents


#1

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด(Process vs Thread)๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.

ํ”„๋กœ๊ทธ๋žจ(Program)์ด๋ž€ ํŒŒ์ผ์ด ์ €์žฅ ์žฅ์น˜์— ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์ง€ ์•Š์€ ์ •์ ์ธ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

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

ํ• ๋‹น๋ฐ›๋Š” ์‹œ์Šคํ…œ ์ž์›์˜ ์˜ˆ

  • CPU ์‹œ๊ฐ„

  • ์šด์˜๋˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„

  • Code, Data, Stack, Heap์˜ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋Š” ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ง•

  • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Stack, Heap์˜ ๊ตฌ์กฐ)์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.

  • ํ”„๋กœ์„ธ์Šค๋‹น ์ตœ์†Œ 1๊ฐœ์˜ ์Šค๋ ˆ๋“œ(๋ฉ”์ธ ์Šค๋ ˆ๋“œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ„๋„์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€์ˆ˜๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

  • ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ (IPC, Inter-Process Communication)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์Šค๋ ˆ๋“œ(Thread)๋ž€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„๋กœ ํ”„๋กœ์„ธ์Šค์™€๋Š” ๋‹ค๋ฅธ ๋” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„ ๊ฐœ๋…์ด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ์— ์ •์˜๋œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š” ํŠน์ •ํ•œ ์ˆ˜ํ–‰ ๊ฒฝ๋กœ์ด๋‹ค.

์Šค๋ ˆ๋“œ์˜ ํŠน์ง•

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๊ฐ๊ฐ Stack ์˜์—ญ๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  Code, Data, Heap ์˜์—ญ์€ ๊ณต์œ ํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋™์ž‘๋˜๋Š” ์—ฌ๋Ÿฌ ์‹คํ–‰์˜ ํ๋ฆ„์œผ๋กœ, ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋‚˜ ์ž์›๋“ค(ํž™ ๊ณต๊ฐ„ ๋“ฑ)์„ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ ํ•˜๋ฉด์„œ ์‹คํ–‰๋œ๋‹ค.

  • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋“ค์€ ๊ฐ™์€ ํž™ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

  • ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์Šคํƒ์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ, ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์„œ๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ์ž์›์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ๋‹ค๋ฅธ ์ด์›ƒ ์Šค๋ ˆ๋“œ(sibling thread)๋„ ๊ทธ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

References


#2

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ž€ ํ•˜๋‚˜์˜ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์žฅ์ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋งŒ ์ฃฝ๋Š” ๊ฒƒ ์ด์ƒ์œผ๋กœ ๋‹ค๋ฅธ ์˜ํ–ฅ์ด ํ™•์‚ฐ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋‹จ์ 

    • Context Switching ๊ณผ์ •์—์„œ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™” ๋“ฑ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋˜๋Š” ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

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

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

  • ์žฅ์ 

    • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ์ค„์–ด๋“ค์–ด ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด์ง€๊ณ  ์‹œ์Šคํ…œ ์ž์› ์†Œ๋ชจ๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

    • ์Šค๋ ˆ๋“œ ์‚ฌ์ด์˜ ์ž‘์—…๋Ÿ‰์ด ์ž‘์•„ Context Switching์ด ๋น ๋ฅด๋‹ค.

    • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ Stack ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์˜ ๋ถ€๋‹ด์ด ์ ๋‹ค.

  • ๋‹จ์ 

    • ์ฃผ์˜ ๊นŠ์€ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๋””๋ฒ„๊น…์ด ๊นŒ๋‹ค๋กญ๋‹ค.

    • ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

    • ํ”„๋กœ์„ธ์Šค ๋ฐ–์—์„œ ์Šค๋ ˆ๋“œ ๊ฐ๊ฐ์„ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค.

    • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ ์ž์› ๊ณต์œ ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.(๋™๊ธฐํ™” ๋ฌธ์ œ)

    • ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๋Œ€์‹  ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์ž์›์˜ ํšจ์œจ์„ฑ ์ฆ๋Œ€

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

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

  • ์ฒ˜๋ฆฌ ๋น„์šฉ ๊ฐ์†Œ ๋ฐ ์‘๋‹ต ์‹œ๊ฐ„ ๋‹จ์ถ•

์Šค๋ ˆ๋“œ๋Š” Stack ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ (IPC)๋ณด๋‹ค ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ํ†ต์‹ ์˜ ๋น„์šฉ์ด ์ ์œผ๋ฏ€๋กœ ์ž‘์—…๋“ค ๊ฐ„์˜ ํ†ต์‹ ์˜ ๋ถ€๋‹ด์ด ์ค„์–ด๋“ ๋‹ค.

Context Switching ์‹œ ์Šค๋ ˆ๋“œ๋Š” Stack ์˜์—ญ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ „ํ™˜ ์†๋„๋ณด๋‹ค ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ์ „ํ™˜ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

Context Switching

CPU์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ด ๊ณผ์ •์„ Context Switching๋ผ ํ•œ๋‹ค. ๋™์ž‘ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ๋ฅผ ํ•˜๋ฉด์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(Context)๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋˜ ๋‹ค์Œ ์ˆœ์„œ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ์ด์ „์— ๋ณด๊ด€ํ–ˆ๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

๋™๊ธฐํ™” ๋ฌธ์ œ(Synchronization Issue)

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ์–ด๋–ค ์ˆœ์„œ๋กœ ์‹คํ–‰๋ ์ง€ ๊ทธ ์ˆœ์„œ๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ A ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์ž์›์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ B ์Šค๋ ˆ๋“œ๋กœ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ„ ํ›„ B ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์ž์›์„ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ, ๋‹ค์‹œ ์ œ์–ด๊ถŒ์„ ๋ฐ›์€ A ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์ž์›์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋ฐ”๋€ ์ž์›์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ๊ป˜ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ์„ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.

Context Switching์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ #14. Context Switching์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜๊ณ  ๊ณผ์ •์„ ๋‚˜์—ดํ•ด์ฃผ์„ธ์š”. ์ฐธ๊ณ !

References


#3

์บ์‹œ์˜ ์ง€์—ญ์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” CPU์˜ ์ฒ˜๋ฆฌ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„ ์ฐจ์ด๋กœ ์ธํ•œ ๋ณ‘๋ชฉํ˜„์ƒ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์† ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค. ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๋น„๊ต์  ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์— ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‘๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ๊ธฐ์–ต์žฅ์น˜ ๋‚ด์—์„œ ์ž์ฃผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ฅผ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถˆ๋Ÿฌ์™€ ์†๋„ ์ฐจ์ด๋ฅผ ์ค„์ด๊ณ , ์ฃผ๊ธฐ์–ต์žฅ์น˜์™€ CPU ๊ฐ„ ์‹ ํ˜ธ ๊ตํ™˜์— ์ด์šฉ๋˜๋Š” Memory Bandwidth๋ฅผ I/O ์‚ฌ์šฉ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ ์ค‘๋ฅ (Hit rate)์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ง€์—ญ์„ฑ(Locality)์˜ ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ง€์—ญ์„ฑ์˜ ์ „์ œ์กฐ๊ฑด์œผ๋กœ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ๋ชจ๋“  ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์„ฑ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ๋‹ค. ์ฆ‰, ์ง€์—ญ์„ฑ(Locality)์ด๋ž€ ๊ธฐ์–ต ์žฅ์น˜ ๋‚ด์˜ ์ •๋ณด๋ฅผ ๊ท ์ผํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์–ด๋Š ํ•œ์ˆœ๊ฐ„์— ํŠน์ • ๋ถ€๋ถ„์„ ์ง‘์ค‘์ ์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ํŠน์„ฑ์ด๋‹ค.

๋ฐ์ดํ„ฐ ์ง€์—ญ์„ฑ์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ(Temporal Locality), ๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ(Spatial Locality), ์ˆœ์ฐจ์  ์ง€์—ญ์„ฑ(Sequential Locality)์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

์‹œ๊ฐ„์  ์ง€์—ญ์„ฑ(temporal locality): CPU๊ฐ€ ํ•œ ๋ฒˆ ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์‹œ ์ฐธ์กฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

๊ณต๊ฐ„์  ์ง€์—ญ์„ฑ(spatial locality): CPU๊ฐ€ ์ฐธ์กฐํ•œ ๋ฐ์ดํ„ฐ์™€ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ ์—ญ์‹œ ์ฐธ์กฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

์ˆœ์ฐจ์  ์ง€์—ญ์„ฑ(sequential locality): ๋ถ„๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ช…๋ น์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ธ์ถœ/์‹คํ–‰๋œ๋‹ค.

์ง€์—ญ์„ฑ์€ ์–ด๋””๊นŒ์ง€๋‚˜ ๊ฒฝํ–ฅ์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ํ•ญ์ƒ ์บ์‹œ์˜ ๋†’์€ ์ ์ค‘๋ฅ ์„ ๋ณด์žฅํ•ด ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค.

์ ์ค‘๋ฅ (Hit rate)

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์€ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ์ „ ๋จผ์ € ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ ์ค‘(hit), ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์‹คํŒจ(miss)๋ผ๊ณ  ํ•œ๋‹ค.

์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฐพ์„ ํ™•๋ฅ ์„ ์ ์ค‘๋ฅ (hit rate)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์„ฑ๋Šฅ์€ ์ ์ค‘๋ฅ ์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.

References


#4

Thread-safe์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. (hint: critical section)

์Šค๋ ˆ๋“œ ์•ˆ์ „(Thread-safe)์ด๋ž€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋–ค ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜, ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ๋œปํ•œ๋‹ค. ์ฆ‰, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

import threading
from threading import Thread

def increase_count():
    global count
    for _ in range(1000000):
        count += 1


if __name__=="__main__":
    count = 0

    # ์Šค๋ ˆ๋“œ ์ƒ์„ฑ
    thread_a = Thread(target=increase_count, name="thread a")
    thread_b = Thread(target=increase_count, name="thread b")

    # ์Šค๋ ˆ๋“œ ์‹คํ–‰
    thread_a.start()
    thread_b.start()

    # ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ
    thread_a.join()
    thread_b.join()

    print("์ตœ์ข… count:", count)

๋‹ค์Œ์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ ์ˆ˜์— 1000000์„ ๊ณฑํ•œ ๊ฐ’์ด count์˜ ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, count๋Š” 2000000๊ฐ€ ์•„๋‹Œ 1448523์ด ๋‚˜์˜จ๋‹ค. (์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค)

์™œ ๊ทธ๋Ÿด๊นŒ? ๋ฐ”๋กœ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ count ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋•Œ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ์„ ์ž„๊ณ„ ์˜์—ญ(critical section)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ž„๊ณ„ ์˜์—ญ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๊ฒƒ์„ ์ƒํ˜ธ ๋ฐฐ์ œ(mutual exclusion)๋ผ๊ณ  ํ•œ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” threading ๋ชจ๋“ˆ์— ์žˆ๋Š” Lock ๊ฐ์ฒด๋กœ ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ตœ์ข… count๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ–ˆ๋˜ 2000000์ด ๋‚˜์˜จ๋‹ค.

import threading
from threading import Thread

def increase_count():
    lock.acquire()
    global count
    for _ in range(1000000):
        count += 1
    lock.release()


if __name__=="__main__":
    count = 0

    # ์Šค๋ ˆ๋“œ ๋ฝ ์ƒ์„ฑ
    lock = threading.Lock()

    # ์Šค๋ ˆ๋“œ ์ƒ์„ฑ
    thread_a = Thread(target=increase_count, name="thread a")
    thread_b = Thread(target=increase_count, name="thread b")

    # ์Šค๋ ˆ๋“œ ์‹คํ–‰
    thread_a.start()
    thread_b.start()

    # ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ
    thread_a.join()
    thread_b.join()

    print("์ตœ์ข… count:", count)

References


#5

๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ƒํ˜ธ๋ฐฐ์ œ(Mutual Exclusion, Mutex)๋Š” ํ•œ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชป ๋“ค์–ด์˜ค๋„๋ก ๋ง‰๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ƒํ˜ธ๋ฐฐ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋œ๋‹ค.

  1. ์ž„๊ณ„ ์˜์—ญ ์ง„์ž… ์ „ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž„๊ณ„ ์˜์—ญ์— ์•ˆ์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

  2. ์—†๋‹ค๋ฉด ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•˜์—ฌ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค. ์žˆ๋‹ค๋ฉด ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

  3. ๋๋‚˜๋ฉด ์ž„๊ณ„ ์˜์—ญ์„ ๋ฒ—์–ด๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž„๊ณ„ ์˜์—ญ์— ๋ฒ—์–ด๋‚ฌ์Œ์„ ์•Œ๋ฆฐ๋‹ค.

์„ธ๋งˆํฌ์–ด(Semaphore)๋Š” ํ˜„์žฌ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์„ ๋‘์–ด ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์„ธ๋งˆํฌ์–ด๋Š” ๋ณ€์ˆ˜๋กœ ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ S(์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์กด์žฌ ๊ฐ€๋Šฅ)์™€, ํ•จ์ˆ˜๋กœ ์ดˆ๊ธฐํ™” ์—ฐ์‚ฐ, P(๊ฒ€์‚ฌ), V(์ฆ๊ฐ€) ์—ฐ์‚ฐ์ด ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋œ๋‹ค.

  1. ๋ณ€์ˆ˜ S๋ฅผ ์ดˆ๊ธฐํ™” ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

  2. P ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ S๊ฐ€ 0๋ณด๋‹ค ํฐ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

  3. ๋งŒ์•ฝ 0๋ณด๋‹ค ํฌ๋‹ค๋ฉด, S๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…ํ•˜์—ฌ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค.

  4. ํฌ์ง€ ์•Š๋‹ค๋ฉด, ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋ฅผ Ready Queue์— ๋„ฃ์–ด ๋Œ€๊ธฐ์‹œํ‚จ๋‹ค.

  5. ์ž„๊ณ„ ์˜์—ญ์—์„œ ๋‚˜์˜จ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋Š” V ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Ready Queue์— ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด, ๊ทธ ์ค‘ 1๊ฐœ๋ฅผ ์ž„๊ณ„ ์˜์—ญ์— ์ง„์ž…์‹œํ‚จ๋‹ค. ์—†๋‹ค๋ฉด, S๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

References


#6

์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋ฌด์—‡์ด๊ณ , ๋‹จ๊ธฐ/์ค‘๊ธฐ/์žฅ๊ธฐ๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์‹œ์Šคํ…œ ๋‚ด์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด ๋•Œ ์‹œ๊ฐ„(time)๊ณผ ๊ณต๊ฐ„(space) ์ฆ‰, ์ž์›์„ ํ• ๋‹นํ•  ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์„ ๋งก์€ ๊ฒƒ์„ ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ์˜ ๋ชฉ์ ์€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋กœ ์‘๋‹ต์‹œ๊ฐ„(response time), ์ž‘์—… ์ฒ˜๋ฆฌ๋Ÿ‰(throughput), ์ž์› ํ™œ์šฉ๋„(resource utilization)์ด ์žˆ๋‹ค. ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์„ ํƒํ•œ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜๋Š” ๋นˆ๋„์™€ ํ• ๋‹นํ•˜๋Š” ์ž์›์— ๋”ฐ๋ผ ์žฅ๊ธฐ/์ค‘๊ธฐ/๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(Long-term Scheduler)๋Š” ์‹œ์Šคํ…œ์— ์ œ์ถœํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•˜๋Š” Job Scheduling(Job โ†’ created)์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹œ์Šคํ…œ ๋‚ด์— ํ”„๋กœ์„ธ์Šค ์ˆ˜๋ฅผ ์กฐ์ ˆํ•œ๋‹ค. ์ด ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ CPU๋“  I/O๋“  ๋ชจ๋‘ ์จ์„œ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ I/O bounded์™€ compute-bounded ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ž˜ ์„ž์–ด์„œ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(Mid-term Scheduler)๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๊ฒฐ์ •ํ•˜๋Š” Memory Allocation(suspended ready โ†’ ready)์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(Short-term Scheduler)๋Š” ํ”„๋กœ์„ธ์„œ๋ฅผ ํ• ๋‹น ๋ฐ›์„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” Process Scheduling(ready โ†’ running)์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋นจ๋ผ์•ผ ํ•œ๋‹ค.

์‘๋‹ต์‹œ๊ฐ„ vs ์ž‘์—… ์ฒ˜๋ฆฌ๋Ÿ‰ vs ์ž์› ํ™œ์šฉ๋„

  • ์‘๋‹ต์‹œ๊ฐ„(response time): ์ž‘์—… ์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„

  • ์ž‘์—… ์ฒ˜๋ฆฌ๋Ÿ‰(throughput): ๋‹จ์œ„ ์‹œ๊ฐ„ ๋™์•ˆ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜

  • ์ž์› ํ™œ์šฉ๋„(resource time): ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ์ž์›์ด ํ™œ์šฉ๋œ ์‹œ๊ฐ„

I/O Bounded ํ”„๋กœ์„ธ์Šค vs Compute-bounded ํ”„๋กœ์„ธ์Šค

  • I/O Bounded ํ”„๋กœ์„ธ์Šค: I/O ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค

  • Compute-bounded ํ”„๋กœ์„ธ์Šค: CPU ์‚ฌ์šฉ์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค

์Šค์ผ€์ค„๋ง์˜ ๋‹จ๊ณ„

References


#7

CPU ์Šค์ผ€์ค„๋Ÿฌ์ธ FCFS, SJF, SRTF, RR, Priority Scheduling์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์Šค์ผ€์ค„๋ง ์ •์ฑ…

์Šค์ผ€์ค„๋ง ์ •์ฑ…(scheduling policy)์— ๋”ฐ๋ผ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์„ ์ /๋น„์„ ์ ๊ณผ ์ •์ /๋™์  ์šฐ์„ ์ˆœ์œ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ๋น„์„ ์  ์Šค์ผ€์ค„๋ง(Non-preemptive scheduling): ํ• ๋‹น ๋ฐ›์„ ์ž์›์„ ์Šค์Šค๋กœ ๋ฐ˜๋‚ฉํ•  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” Context Switching ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์—ญ์ „๋˜์–ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜ ํ‰๊ท  ์‘๋‹ต์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  • ์„ ์  ์Šค์ผ€์ฅด๋ง(Preemptive Scheduling): ํƒ€์˜์— ์˜ํ•ด ์ž์›์„ ๋นผ์•—๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋น„์„ ์  ์Šค์ผ€์ค„๋ง๊ณผ ๋‹ค๋ฅด๊ฒŒ Context Switching ๋ถ€ํ•˜๊ฐ€ ํฌ์ง€๋งŒ, ์‘๋‹ต์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ real-time system, time-sharing system์— ์ ํ•ฉํ•˜๋‹ค.

  • ์ •์  ์šฐ์„ ์ˆœ์œ„(Static Priority): ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ ๊ฒฐ์ •๋œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์œ ์ง€๋œ๋‹ค. ์ด๋Š” ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๊ณ , Context Switching์ด ๋œ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๊ฐ€ ์ ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋Œ€ํ•œ ๋Œ€์‘์ด ์–ด๋ ต๋‹ค.

  • ๋™์  ์šฐ์„ ์ˆœ์œ„(Dynamic Priority): ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ๊ตฌํ˜„์ด ๋ณต์žกํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์Šค์ผ€์ค„๋Ÿฌ

FCFS(First Come First Service)๋Š” ๋น„์„ ์  ์Šค์ผ€์ค„๋Ÿฌ๋กœ, Ready Queue์— ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ผ๊ด„ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ธด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ๋„์ฐฉํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” Convoy Effect๋กœ ์ธํ•ด ํ‰๊ท  ์‘๋‹ต์‹œ๊ฐ„์ด ๊ธธ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

RR(Round Robin)์€ ์„ ์  ์Šค์ผ€์ค„๋Ÿฌ๋กœ, Ready Queue์— ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ ์—์„œ FCFS์™€ ๊ฐ™์ง€๋งŒ ์ž์› ์‚ฌ์šฉ ์‹œ๊ฐ„(time quantum)์ด ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ฒŒ ํ•˜์—ฌ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ž์› ๋…์ ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

SJF(Shortest Job First)๋Š” ๋น„์„ ์  ์Šค์ผ€์ค„๋Ÿฌ๋กœ, CPU burst time์ด ๊ฐ€์žฅ ์ž‘์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ฐ€์žฅ ์‹คํ–‰์‹œ๊ฐ„์ด ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹คํ–‰์‹œ๊ฐ„์„ ์˜ˆ์ธกํ•œ๋‹ค๋Š” ์ ์—์„œ ๋น„ํ˜„์‹ค์ ์ด๋ฉฐ ๊ณ„์†ํ•ด์„œ ์งง์€ ํ”„๋กœ์„ธ์Šค๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๊ธด ํ”„๋กœ์„ธ์Šค๋Š” ๋’ค๋กœ ๋ฐ€๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

SRTF(Shortest Remaining Time First)๋Š” ์„ ์  ์Šค์ผ€์ค„๋Ÿฌ๋กœ, ์ž”์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋” ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค. SJF์˜ ์žฅ์ ์„ ๊ทน๋Œ€ํ™” ํ–ˆ์œผ๋‚˜, ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ ์ด ์‹คํ–‰ ์‹œ๊ฐ„ ์˜ˆ์ธก์ด ํ•„์š”ํ•˜๊ณ  ์ž”์—ฌ ์‹œ๊ฐ„์„ ๊ณ„์† ์ถ”์ ํ•ด์•ผ ํ•ด์„œ overhead๊ฐ€ ํฌ๊ณ  ๊ตฌํ˜„ ๋ฐ ์‚ฌ์šฉ์ด ๋น„ํ˜„์‹ค์ ์ด๋‹ค.

Priority Scheduling์€ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์ง€์ •๋œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ๊ณ„์†ํ•ด์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋Š” ๋’ค๋กœ ๋ฐ€๋ฆฌ๋Š” starvation ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Š” ์ผ์ • ์‹œ๊ฐ„ ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์—ฌ์ฃผ๋Š” aging ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

References


#8

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋™๊ธฐ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์€ ํ›„์—์•ผ ๋‹ค์Œ ์š”์ฒญ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค. ๋™๊ธฐ๋Š” ์ง๊ด€์ ์ธ ๊ตฌ์กฐ์ด์ง€๋งŒ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๋น„๋™๊ธฐ๋Š” ์š”์ฒญ ๊ฒฐ๊ณผ์— ๊ด€๊ณ„ ์—†์ด ๋ฐ”๋กœ ๋‹ค์Œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ›๋Š”๋‹ค. ๋น„๋™๊ธฐ๋Š” ์„ค๊ณ„๊ฐ€ ๋ณต์žกํ•˜์ง€๋งŒ ํšจ์œจ์ ์ด๋‹ค.

Blocking, Non-Blocking

Blocking ๊ณผ Non-Blocking์€ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ด€์ ๋ณด๋‹ค๋Š” System Call(์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ์˜ ์ฒ˜๋ฆฌ) ์˜ ๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. Blocking์€ System Call ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ Waiting Queue์—์„œ ๋Œ€๊ธฐํ•œ๋‹ค. Non-Blocking์€ System Call์ด ์™„๋ฃŒ์™€ ์ƒ๊ด€์—†์ด ์ž์‹ ์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

References


#9

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต์—๋Š” ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ๋œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต์ด ํ•„์š”ํ•˜๋‹ค.

์Šค์™‘

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์•ผํ•œ๋‹ค. ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ์ค‘, ๊ธฐ์กด์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณด์กฐ ๊ธฐ์–ต์žฅ์น˜ (HDD, SSD) ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ swap-out, ๋ณด์กฐ ๊ธฐ์–ต์žฅ์น˜์— ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ swap-in ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ swap-out ์‹œํ‚ฌ์ง€์— ๋Œ€ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” round-robin ์ด ์žˆ๋‹ค.

๋” ์ž์„ธํ•œ ์„ค๋ช…์€ 15. Swapping์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”์„ ์ฐธ๊ณ !

์••์ถ•

๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๋“ค์„ ์˜ฌ๋ฆฌ๋‹ค๋ณด๋ฉด ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋นˆ ๊ณต๊ฐ„(free) ์ด ์ƒ๊ธด๋‹ค. ์ด ๊ณต๊ฐ„์„ fragmentation(๋‹จํŽธํ™”) ์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ”„๋กœ์„ธ์Šค์™€ ๋‹จํŽธํ™”๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ํ• ๋‹น๋˜๊ฒŒ ๋‹จํŽธํ™”๋ฅผ ์—†์• ๋Š” ๋ฐฉ๋ฒ•์„ ์••์ถ•์ด๋ผ ํ•œ๋‹ค. ์••์ถ•์€ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

ํŽ˜์ด์ง•

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

์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜

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

References


#10

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์‹คํ–‰์ด๋ ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ํ”„๋กœ์„ธ์Šค์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ํŽ˜์ด์ง€์™€ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ์ค‘ ์ฃผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด์šฉํ•˜๋Š” Demand Paging ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

Demand Paging ๋Š” ํ”„๋กœ์„ธ์Šค์—์„œ ํ˜„์žฌ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์€ ๊ธฐ์กด์˜ ํ…Œ์ด๋ธ”์—์„œ valid ์™€ modified ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค.

valid ๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ๊ฒฝ์šฐ (valid == 0) ๋ฅผ page fault ๋ผ๊ณ  ํ•œ๋‹ค. ์•„๋ž˜์˜ ๊ณผ์ •์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค.

  1. ํ•ด๋‹น ํŽ˜์ด์ง€ valid bit ํ™•์ธ

  2. valid ๊ฐ€ 0 ์ด๋ฉด CPU ์ธํ„ฐ๋ŸฝํŠธ, ํ•ด๋‹น ISR ๋กœ ์ด๋™

  3. ISR ์—์„œ backing store ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ํŽ˜์ด์ง€ ์ฐพ์Œ

  4. ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋นˆ ํ”„๋ ˆ์ž„์— ํ• ๋‹น

  5. ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๊ฐฑ์‹  (valid 1 ๋กœ ๋ณ€๊ฒฝ)

  6. ๋‹ค์‹œ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰

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

๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ”๋˜ ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ๋‚ด๋ ค๊ฐ€๋ฉด victim page ๋ผ๊ณ  ํ•˜๋Š”๋ฐ, modified bit ๋ฅผ ํ™•์ธํ•˜์—ฌ ํŽ˜์ด์ง€๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์€ (modified == 0) ํŽ˜์ด์ง€ ์ค‘ ๋žœ๋คํ•˜๊ฒŒ ํ˜น์€ ๊ฐ€์žฅ ๋จผ์ € ์˜ฌ๋ผ์˜จ ํŽ˜์ด์ง€๋ฅผ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.

References


#11

๊ต์ฐฉ์ƒํƒœ(๋ฐ๋“œ๋ฝ, Deadlock)์˜ ๊ฐœ๋…๊ณผ ์กฐ๊ฑด์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

  • ์ƒํ˜ธ๋ฐฐ์ œ(Mutual exclusion) : ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ์ž์›์— ๋Œ€ํ•ด ๋ฐฐํƒ€์ ์ธ ํ†ต์ œ๊ถŒ์„ ์š”๊ตฌํ•œ๋‹ค.

  • ์ ์œ ๋Œ€๊ธฐ(Hold and wait) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋œ ์ž์›์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

  • ๋น„์„ ์ (No preemption) : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์˜ ์‚ฌ์šฉ์„ ๋๋‚ผ ๋•Œ๊นŒ์ง€ ๊ทธ ์ž์›์„ ๋บ์„ ์ˆ˜ ์—†๋‹ค.

  • ์ˆœํ™˜๋Œ€๊ธฐ(Circular wait) : ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ˆœํ™˜์ ์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

Dining Philosophers ๋ฌธ์ œ๋ฅผ ๋– ์˜ฌ๋ฆฌ๋ฉด, ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

References


#12

์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ์™€ ์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ž€, ์œ ์ € ๋ ˆ๋ฒจ์—์„œ ์ƒ์„ฑ๋˜๊ณ  ๋™์ž‘ํ•˜๋Š” ์Šค๋ ˆ๋“œ์ด๋‹ค. ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” pthread์™€ ๊ฐ™์€ ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ์‚ฌ์šฉ์ž ๋‹จ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋Š” ์Šค์ผ€์ค„๋ง ๊ฒฐ์ •์ด๋‚˜ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์ปค๋„์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ (์‚ฌ์šฉ์ž/์ปค๋„)๋ชจ๋“œ ์ „ํ™˜๊ณผ Context Switch๊ฐ€ ์—†์–ด, ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ์—๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋Š” ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์นœ ์Šค์ผ€์ค„๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์Šจ ์Šค๋ ˆ๋“œ๊ฐ€ ๋จผ์ € ๋™์ž‘ํ•  ์ง€ ๋ชจ๋ฅธ๋‹ค๋Š” ๋‹จ์ ๊ณผ ํ”„๋กœ์„ธ์Šค์— ์†ํ•œ ์Šค๋ ˆ๋“œ ์ค‘ I/O ์ž‘์—…๋“ฑ์— ์˜ํ•ด ํ•˜๋‚˜๋ผ๋„ ๋ธ”๋ฝ(block)์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด ์ „์ฒด ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋ฝ๋œ๋‹ค๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.

์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ž€, ์ปค๋„ ๋ ˆ๋ฒจ์—์„œ ์ƒ์„ฑ๋˜๋Š” ์Šค๋ ˆ๋“œ๋กœ, ์ปค๋„์ด ์ง์ ‘ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋ž˜๋จธ ์š”์ฒญ์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋”๋ผ๋„, ์Šค์ผ€์ค„๋งํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์ปค๋„์ด๋ฉด ์ปค๋„ ๋ ˆ๋ฒจ(Kernel Level) ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋“ค์„ ๋ช‡๋ช‡ ํ”„๋กœ์„ธ์„œ์— ํ•œ๊บผ๋ฒˆ์— ๋””์ŠคํŒจ์น˜(dispatch) ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ๋‹ค ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปค๋„์ด ๊ฐ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปค๋„์ด ์ง์ ‘ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ๊ณตํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ •์„ฑ๊ณผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋œ๋‹ค.

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

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ชจ๋ธ

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

์‚ฌ์šฉ์ž/์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ ์ฐจ์ด

์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

  • kernel์˜ ์ง€์›์—†์ด ์™„์ „ํžˆ user space์—์„œ๋งŒ library๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์ง€์—ญํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

  • ์šด์˜์ฒด์ œ์— ์˜ํ•ด kernel space์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ kernel system call์„ ์‚ฌ์šฉํ•œ๋‹ค.

References


#13

์™ธ๋ถ€ ๋‹จํŽธํ™”์™€ ๋‚ด๋ถ€ ๋‹จํŽธํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

๋‚ด๋ถ€ ๋‹จํŽธํ™”(Internal Fragmentation) ๋ž€, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ์–‘๋ณด๋‹ค ๋” ํฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜์–ด์„œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‚ญ๋น„ ๋˜๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”๋ชจ์žฅ์„ ์ผฐ๋Š”๋ฐ OS๊ฐ€ 4kb๋ฅผ ํ• ๋‹นํ•ด์ฃผ์—ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ๋Š” 1kb๋งŒํผ๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ํ•„์š” ์ด์ƒ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•˜์œผ๋ฏ€๋กœ ๋‚ด๋ถ€ ๋‹จํŽธํ™”๊ฐ€ 3kb๋งŒํผ ์ƒ๊ฒผ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”(External Fragmentation) ๋ž€, ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค‘๊ฐ„์ค‘๊ฐ„์— ์กด์žฌํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ๋˜๋Š” ์ž‘์—…์ด ๋ฐ˜๋ณต๋  ๋•Œ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ค‘๊ฐ„์— ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ hole์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๋ ‡๊ฒŒ ์ค‘๊ฐ„์— ๋ผ์ธ hole๋“ค์ด ๋งŽ์•„์ง€๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋กœ ์ธํ•ด, ์ด ๊ฐ€์šฉ๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•˜๋”๋ผ๋„ ์ƒˆ๋กœ์šด ํƒœ์Šคํฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ์˜ ๋ฐ˜๋ณต์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ค‘๊ฐ„์— ๋นˆ hole๋“ค์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค๊ณ  ํ•ด๋ณด์ž. ํ˜„์žฌ ๋ชจ๋“  hole์˜ ์ดํ•ฉ์€ 16MB ์ด๊ณ , 9MB์งœ๋ฆฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋นˆ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์ค‘์— ์ œ์ผ ํฐ ๋นˆ ๋ฉ”๋ชจ๋ฆฌ(hole)์˜ ํฌ๊ธฐ๊ฐ€ 9MB ๋ณด๋‹ค ์ž‘์„ ๋•Œ, ์™ธ๋ถ€ ๋‹จํŽธํ™”๊ฐ€ ์ผ์–ด๋‚ฌ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ๋ฒ•

๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ์—ฐ์†ํ• ๋‹น ๋ฐฉ์‹๊ณผ ๋ถˆ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ๋‹ค. ์—ฐ์†ํ• ๋‹น ๋ฐฉ์‹์—๋Š” ๊ณ ์ •๋ถ„ํ•  ๋ฐฉ์‹, ๊ฐ€๋ณ€๋ถ„ํ•  ๋ฐฉ์‹์ด ์žˆ๊ณ , ๋ถˆ์—ฐ์† ํ• ๋‹น ๋ฐฉ์‹์—๋Š” ํŽ˜์ด์ง• ๊ธฐ๋ฒ•๊ณผ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ ๊ธฐ๋ฒ•, ํŽ˜์ด์ง€๋“œ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜(Paged Segmentations) ๊ธฐ๋ฒ• ๋“ฑ์ด ์žˆ๋‹ค.

  • ์••์ถ•(Compaction)๊ธฐ๋ฒ•

์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ญ์ œ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  • ํŽ˜์ด์ง•(Paging)๊ธฐ๋ฒ•: ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ, ์™ธ๋ถ€ ๋‹จํŽธํ™” ํ•ด๊ฒฐ, ๋‚ด๋ถ€ ๋‹จํŽธํ™” ์กด์žฌ

์‰ฝ๊ฒŒ๋งํ•ด, ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์ •ํ•œ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์‚ฌ์šฉํ•˜์ž๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์— ํŽ˜์ด์ง€๋“ค์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ์ด๋•Œ, ๋…ผ๋ฆฌ(๊ฐ€์ƒ) ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์œ„๋Š” ํŽ˜์ด์ง€(page), ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์œ„๋Š” ํ”„๋ ˆ์ž„(frame)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๊ณต๊ฐ„๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์‹  ํŽ˜์ด์ง€ ๋‹จ์œ„์— ์•Œ๋งž๊ฒŒ ๊ฝ‰์ฑ„์›Œ ์“ฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ฏ€๋กœ ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค. ํŽ˜์ด์ง€ ๋‹จ์œ„๋ฅผ ์ž‘๊ฒŒํ•˜๋ฉด ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๋Œ€์‹  page mapping ๊ณผ์ •์ด ๋งŽ์•„์ง€๋ฏ€๋กœ ์˜คํžˆ๋ ค ํšจ์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜(Segmentation)๊ธฐ๋ฒ•: ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์‚ฌ์šฉ, ๋‚ด๋ถ€ ๋‹จํŽธํ™” ํ•ด๊ฒฐ, ์™ธ๋ถ€ ๋‹จํŽธํ™” ์กด์žฌ

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

ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋งŒํผ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€๋‹จํŽธํ™”๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š์œผ๋‚˜ ์—ฌ์ „ํžˆ ์ค‘๊ฐ„์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋ฉด ์ƒ๊ธฐ๋Š” hole, ์ฆ‰ ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค.

References


#14

Context Switching์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜๊ณ  ๊ณผ์ •์„ ๋‚˜์—ดํ•ด์ฃผ์„ธ์š”.

Context Switching์ด๋ž€, ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. CPU๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋งŒ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๊ธฐ์กด์— ์‹คํ–‰์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’(Context)์„ PCB์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์กด์˜ ๊ฐ’์„ ์ €์žฅํ•œ ํ›„, ๋‹ค์Œ ์‹คํ–‰์‹œํ‚ฌ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์™€ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’์„ PCB์—์„œ ์ฝ์–ด์™€์„œ ๋ ˆ์ง€์Šคํ„ฐ์— ์ ์žฌํ•˜๋Š” ์ž‘์—…์„ Context Switching ์ด๋ผ ํ•œ๋‹ค.

Context Switching ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Interrupt๋‚˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ์˜ํ•ด context switching ์š”๊ตฌ

  2. User Mode์—์„œ Kernel Mode๋กœ ๋ณ€๊ฒฝ

  3. ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ context๋ฅผ PCB์— ์ €์žฅ

  4. ๋‹ค์Œ์— ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์ •๋ณด๋ฅผ PCB์—์„œ ๋ณต๊ตฌํ•œ ํ›„ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰

  5. Kernel Mode์—์„œ User Mode๋กœ ๋ณ€๊ฒฝ

Context Switching์ด ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ

Context Switching์€ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ์— ๋ฐœ์ƒํ•˜๊ณ , ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์‹คํ–‰ ์ค‘์ธ CPU ์‚ฌ์šฉ ํ• ๋‹น ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ๋ชจํ•˜๊ฑฐ๋‚˜, ์ž…์ถœ๋ ฅ์„ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค์˜ CPU ์ œ์–ด๊ถŒ์ด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ด์–‘๋˜๋Š” ์ƒํ™ฉ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์™€๋„ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, 3๊ฐ€์ง€ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. Context Switch๋ฅผ ํ•˜๋Š” ์ฃผ์ฒด๋Š” OS ์Šค์ผ€์ค„๋Ÿฌ์ด๋‹ค.

  1. running โ†’ ready

  2. ready โ†’ running

  3. running โ†’ waiting

PCB(Process Control Block)

ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์žˆ์–ด ํ•„์š”ํ•œ ์ •๋ณด(๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ)๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ์šด์˜์ฒด์ œ ์ปค๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ๊ณ ์œ ์˜ PCB๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด PCB๋Š” ์ œ๊ฑฐ๋œ๋‹ค. PCB์—๋Š” Process ID, Process State(ex. ready, running), Program Counter(๋‹ค์Œ instruction), Register ๊ฐ’, Pointer, CPU scheduling/Memory/Process information ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ๋‹ค.

Thread ๋‹จ์œ„์˜ Context Switching

Process๋Š” Thread๋ณด๋‹ค Context Switching ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค. Thread๋Š” Stack ์˜์—ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

References


#15

Swapping์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์Šค์™€ํ•‘(Swapping)์ด๋ž€, ์ฃผ๊ธฐ์–ต์žฅ์น˜(๋ฉ”์ธ๋ฉ”๋ชจ๋ฆฌ)์— ์ ์žฌํ•œ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์™€ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜(ํ•˜๋“œ๋””์Šคํฌ)์— ์ ์žฌํ•œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ํ”„๋กœ์„ธ์Šค์˜ ๋ช…๋ น์–ด์™€ ๋ช…๋ น์–ด๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์กด์žฌํ•˜๋˜ ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค๋ฅผ backing store(ํ•˜๋“œ๋””์Šคํฌ, ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜)๋ผ๋Š” ๊ณต๊ฐ„์œผ๋กœ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.(=์ซ’์•„๋‚ธ๋‹ค) ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ํ•„์š”ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•„์š”์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ backing store์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ swap out, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ swap in์ด๋ผ๊ณ  ํ•œ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ in, out) ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„๋กœ swap in, swap outํ•˜๋Š” ๊ฒƒ์„ swapping์ด๋ผ๊ณ  ํ•œ๋‹ค.

ํ‘œ์ค€ ์Šค์™€ํ•‘๊ณผ ํŽ˜์ด์ง€ ๋‹จ์œ„ ์Šค์™€ํ•‘

์Šค์™€ํ•‘์„ ์‚ฌ์šฉํ•˜๋ฉด, ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šค์™€ํ•‘์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญํ• ์€ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜์—ฌ, ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ •๋„(degree of muliprogramming)๋ฅผ ์กฐ์ ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์œ ํœด ์ƒํƒœ๊ฐ€ ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์Šค์™€ํ•‘์— ์ ํ•ฉํ•˜๋ฉฐ, swap out ๋  ๋Œ€์ƒ ํ”„๋กœ์„ธ์Šค๋Š” ์Šค์™€ํผ(swapper)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ(medium-term scheduler)์— ์˜ํ•ด ์„ ์ •๋œ๋‹ค. ์ฃผ์˜ํ•  ์ ์€, ์Šค์™€ํ•‘์ด๋ผ๋Š” ๊ฐœ๋…์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ๊ทธ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋””์Šคํฌ๋กœ ๋‚ด์ซ“๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŠน์ •ํ•œ ์ด์œ ๋กœ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ผ์‹œ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋””์Šคํฌ๋กœ ๋‚ด๋ ค๋†“๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

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

Backing Store

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

References

Last updated