[CS] Process, Thread

park9910ยท2022๋…„ 4์›” 10์ผ
0

๐Ÿ™‚ Process

Process ๋ž€?

์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Why?

์™œ Process ๋ผ๋Š” ๊ฐœ๋…์ด ํ•„์š”ํ• ๊นŒ? ๋ผ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ๋‚˜๋Š” ์ด๋ ‡๊ฒŒ ๋Œ€๋‹ตํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๋™์ ์ธ ์ƒํƒœ์˜ ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์„ธ์Šค) ๋ฅผ ๋ฐ์ดํ„ฐํ™” ํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ Process ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

ํ”„๋กœ์„ธ์Šค ๋ผ๊ณ  ์ ์€ ๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋™์ ์ธ ์ƒํƒœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์นญํ•˜๋Š” ๋ง์ด๊ณ , Process ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ถ”์ƒํ™” ๊ฐ์ฒด ์ •๋„๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์žฅ๋‚œ ์ฒ˜๋Ÿผ ๋Š๊ปด์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์กฐ๊ธˆ ๋” ๋ถ€์—ฐ ์„ค๋ช…์„ ํ•ด๋ณด๊ฒ ๋‹ค.

์•ž์„œ OS ๊ฒŒ์‹œ๊ธ€์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ์™€ Instruction ์„ ํ•œ๊บผ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค ๋ผ๊ณ  ํ–ˆ๋‹ค.

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


๊ตฌ์กฐ

Process ๋Š” ์ตœ๋Œ€ 4GB ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋‹ค(์–ด๋””๊นŒ์ง€๋‚˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์ด๊ณ  ์‹ค์ œ๋กœ๋Š” ์•ฝ 3GB ๋ผ๊ณ  ํ•œ๋‹ค)

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด๊ฐ€ 16GB ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๊ณ ์žˆ๋‹ค๋ฉด 4๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ ์ด์ „์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” 4GB ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋‹ค ์‚ฌ์šฉํ• ๊นŒ?

๋‹น์—ฐํžˆ ์•„๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ”„๋กœ์„ธ์Šค๋Š” ํ• ๋‹น๋œ ๊ณต๊ฐ„์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋‚จ๋Š” ๊ณต๊ฐ„์ด ํ›จ์”ฌ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํ• ๋‹น๋œ ๊ณต๊ฐ„์„ ์ „๋ถ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์ง„ ์•Š๋Š”๋‹ค.

์˜คํžˆ๋ ค ํ”„๋กœ์„ธ์Šค๋Š” ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ณ  ์‹ฌ์ง€์–ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋„ ์•Š๋Š”๋‹ค!

๊ฐ€๋ น 4GB ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ ์„œ ๊ฐ๊ฐ์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค

๊ฐ๊ฐ์˜ ๊ณต๊ฐ„์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด

OS kernel Space : ๋ง ๊ทธ๋Œ€๋กœ kernel ํ”„๋กœ๊ทธ๋žจ์˜ memory ์˜์—ญ์ด๋‹ค ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—์„œ Stack ์ด ์กด์žฌํ•˜์ง€๋งŒ ํ•ด๋‹น Stack ์€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ์˜์—ญ์ด๊ณ  systemcall ์Šคํƒ์€ ๋”ฐ๋กœ kernel stack ์ด๋ผ๋Š” ๊ณณ์— ์Œ“์—ฌ ํŠธ๋žฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์˜์—ญ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Stack : ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ๋ฉ”์†Œ๋“œ์˜ ์˜์—ญ์„ ์˜๋ฏธํ•˜๋ฉฐ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ ๋ณ„๋กœ ์ผ์ • ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด stack pointer ๋กœ offset ์„ ํ†ตํ•ด ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

Heap : ๋Ÿฐํƒ€์ž„ ์ƒ์—์„œ ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์กด์žฌํ•˜๋Š” ์˜์—ญ์œผ๋กœ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์ปดํŒŒ์ผ ์‹œ์ ์—๋Š” ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋Ÿฐํƒ€์ž„ ์ƒ์—์„œ ๋ถ€์—ฌํ•˜๋Š” ๋™์ ํ• ๋‹น(malloc) ๋“ฑ์˜ ๋ช…๋ น์„ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค

BSS : ์•„์ง ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ static(ํ”„๋กœ๊ทธ๋žจ ์ •์  ๋ณ€์ˆ˜, ์ฆ‰ ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋  ๊ฒƒ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹) ๋ณ€์ˆ˜ ์ €์žฅ ๊ณต๊ฐ„์ธ๋ฐ ๋”ฐ๋กœ ์˜์—ญ์„ ๋‘ ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

Data : ์ดˆ๊ธฐํ™”๋œ static ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ณต๊ฐ„์œผ๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ฐ”์™€ ๊ฐ™๋‹ค.

Text : ํ”„๋กœ๊ทธ๋žจ์˜ instruction ์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์œผ๋กœ CPU ๋Š” instruction ์„ ์ฐธ๊ณ ํ•ด์„œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค


PCB

CPU ๋Š” ์—ฐ์‚ฐ ์žฅ์น˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌด์—‡์„ ์—ฐ์‚ฐํ• ๊นŒ? ๋ฐ”๋กœ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๊ฐ’๊ณผ instruction ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฐ’๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

์ฆ‰ CPU ๋Š” ๊ทธ๋ƒฅ ๊ณ„์† ๋ฐ€๋ ค๋“ค์–ด์˜ค๋Š” ๊ฐ’๊ณผ instruction ์„ ์ฒ˜๋ฆฌํ•  ๋ฟ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ๋“ค์„ ๋ฐ€์–ด๋„ฃ์„์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•œ๋ฐ, ์ด ๋•Œ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ, ์ฆ‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋ฐ์ดํ„ฐ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด Process ์ด๊ณ , ์‹ค์ œ๋กœ ์ด Process ๋Š” PCB(Process Control Block) ์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋กœ process ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ Kernel ์ด ๊ด€๋ฆฌํ•œ๋‹ค.

์ด์ œ CPU ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ง๊ด€์ ์œผ๋กœ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

PCB ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค

  1. Process State : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ์ง€ (์•„๋ž˜์—์„œ ๋ถ€์—ฐ ์„ค๋ช…)

  2. Program Counter : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์–ด๋””๊นŒ์ง€ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€

  3. CPU registers : ์ €์žฅ๋  ๋‹น์‹œ์— register ๊ฐ’๋“ค

  4. CPU scheduling info : CPU ์— ์˜ํ•ด ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌ๋  ๊ฒƒ์ธ๊ฐ€

  5. Memory-management info : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ผ๋งˆ๋งŒํผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€

  6. Accounting info : ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์ž์›์„ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉํ•˜๋Š”์ง€

  7. I/O status info : ํ˜„์žฌ ์—ฐ๊ฒฐ๋ผ์žˆ๋Š” ๋””๋ฐ”์ด์Šค ์ •๋ณด

์œ„์™€ ๊ฐ™์€ ์ •๋ณด๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

๊ทธ๊ฑฐ์Šจ ๋ฐ”๋กœ Process ๊ฐ€ ๊ด€๋ฆฌ๋  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค..!!


Process ๊ด€๋ฆฌ

์•ž์„œ Process management ๋Š” kernel ์˜ ์—ญํ• ์ด๋ผ๊ณ  ํ–ˆ๋‹ค

PCB ๊ฐ€ ์กด์žฌํ•จ์œผ๋กœ์จ kernel ์€ PCB ๋งŒ ์ €์žฅํ•˜๊ณ ์žˆ์œผ๋ฉด ์ „์ฒด Process ๋ฅผ ๋ชจ๋‘ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ œ๋กœ ๊ฐ Process ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋งˆ๋‹ค PCB ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋˜๊ณ  kernel ์ด PCB ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

Process ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ CPU ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” Process ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ๋Š”๋ฐ, CPU ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ Process(์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด thread) ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” process ๋ฅผ ๊ต์ฒดํ•ด์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์ฒ˜๋ฆฌ๋˜๋Š” Process ์˜ ๊ตํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ Context Switching ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, kernel ์˜ scheduling ๊ทœ์น™์— ๋”ฐ๋ผ์„œ ๋‹ค์Œ์— ์ฒ˜๋ฆฌ๋  Process ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

Context Switching

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

kernel ์€ PCB ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ ๋ฐ”๋กœ๋ฐ”๋กœ process ์˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ process ๋Š” ๋‹ค์‹œ PCB ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ ํ˜น์€ ๋””์Šคํฌ์— ์ €์žฅํ•ด๋‘”๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” PCB ๋Š” ๋ฉ”๋ชจ๋ฆฌ ready queue ์— ์ ์žฌ(์„ ์ )๊ฐ€ ๋  ๊ฒƒ์ด๊ณ  ๋น„๊ต์  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๊ฑฐ๋‚˜ I/O ๋Œ€๊ธฐ ์ค‘์ธ process ๋Š” wait queue ์— ์ ์žฌ๊ฐ€ ๋œ๋‹ค.

์ž์„ธํ•œ process ์˜ life cycle ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค

life cycle

์ตœ์ดˆ fork system call ๋กœ ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด process ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๊ณง๋ฐ”๋กœ ready ์—์„œ run ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค

run ์€ ์‹ค์ œ๋กœ cpu ์ž์›์„ ํ• ๋‹น๋ฐ›์•„์„œ(cpu ๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋œป) ๋™์ž‘ํ•œ๋‹ค.

์ค‘๊ฐ„์— I/O device ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๋“ฑ์˜ idle ์ƒํƒœ๊ฐ€ ์˜ˆ์ƒ์ด ๋˜๋ฉด wait ๋‹จ๊ณ„ ํ˜น์€ ready ๋‹จ๊ณ„๋กœ ๋Œ์•„๊ฐ€์„œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ I/O controller ์˜ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์ œ์„œ์•ผ ๋‹ค์Œ ๋™์ž‘์„ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๋™์ž‘์ด ๋งˆ๋ฌด๋ฆฌ ๋˜๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์ด์ƒ ์—ฐ์‚ฐํ•  ๊ฒƒ์ด ์—†์œผ๋ฉด terminate ๋œ๋‹ค


๐Ÿ™‚ Thread

process ์™€ ํ•ญ์ƒ ๊ฐ™์ด ๋‚˜์˜ค๋Š” thread ๋Š” ์‹ค์ œ kernel ์˜ scheduling ๋‹จ์œ„ ์ด๋‹ค.

๋ถ„๋ช… ์•ž์„œ์„œ scheduling ์€ process ๋ฅผ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ ธ์„œ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ ๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ ํ”„๋กœ์„ธ์Šค๋‚˜, ์“ฐ๋ ˆ๋“œ๋‚˜ ์ „๋ถ€ ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์—ฐ์‚ฐ ์ฃผ์ฒด์ธ cpu ๋Š” ์ง€๊ธˆ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ž‘์—…์ด A process ์ธ์ง€ B process ์ธ์ง€ ํ˜น์€ A process ๋‚ด๋ถ€์˜ 1๋ฒˆ thread ์ธ์ง€ ๊ถ๊ธˆํ•˜์ง€๋„ ์•Š๊ณ , ๊ณ„์† ๋ฐ€๋ ค๋“ค์–ด์˜ค๋Š” ์—ฐ์‚ฐ๋งŒ์„ ์ˆ˜ํ–‰ํ•  ๋ฟ์ด๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ ์—ฐ์‚ฐ๋  ์ˆœ์„œ๋ฅผ ๋‚ด๊ฐ€ ์ž„์˜๋กœ ์ •ํ•ด์„œ cpu ์— ๋ฐ€์–ด๋„ฃ๋Š”๋‹ค๋ฉด cpu ๋Š” ๋งˆ์น˜ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€๋ฅผ ์ชผ๊ฐœ์„œ ๋™์ž‘์‹œํ‚ค๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

์กฐ๊ธˆ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ๋„ ๋ถ„๋ช… ๋จผ์ € ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ–ˆ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‚˜, ๋™์‹œ์— ์ฒ˜๋ฆฌ๊ฐ€ ๋์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ƒ๊ธธ ๊ฒƒ์ธ๋ฐ

๊ฐ€๋ น ์š”์ฒญ๋œ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ์ณค์„ ๋•Œ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ๋‹จ์ผ ์š”์ฒญ๋งŒ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๋ญ ๋ฌผ๋ก  ์†๋„ ์ž์ฒด๋Š” ๋น ๋ฅด๊ฒ ์ง€๋งŒ 100๋ช…์ด ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๋ฉด ๋ถ„๋ช… ๋’ค์— ๋ช‡๋ช…์€ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๊ฐ€ ๊ต‰์žฅํžˆ ์ง€๋ฃจํ•  ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋Œ€๋กœ 2๋ฒˆ์งธ ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์˜ ๋‹ค์Œ ์—ฐ์‚ฐ์„ 2๋ฒˆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด?
๊ทธ๋ฆฌ๊ณ  ์ผ์ • ์‹œ๊ฐ„(์—„์ฒญ ์งง์€ ์‹œ๊ฐ„) ํ›„์—๋Š” ๋‹ค์‹œ 1๋ฒˆ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค๋ฉด??
๋ถ„๋ช… ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” ์œ„์˜ ๋ฐฉ์‹๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋’ค์— ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋Š” ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋Š๋‚„ ๊ฒƒ์ด๋‹ค.

์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ๋˜๋‚˜์š”?

์•ˆ๋  ๊ฒƒ์€ ์—†์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์—„์ฒญ ๋งŽ์€ ์‹œ์Šคํ…œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

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

๊ตฌ์„ฑ ์š”์†Œ

Thread ์˜ ๊ตฌ์„ฑ์š”์†Œ ๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž

์“ฐ๋ ˆ๋“œ๋Š” ํฌ๊ฒŒ ๊ณต์œ  ์˜์—ญ ๊ณผ ์“ฐ๋ ˆ๋“œ ์˜์—ญ ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค

๊ณต์œ  ์˜์—ญ์€ ๋ง ๊ทธ๋Œ€๋กœ ์“ฐ๋ ˆ๋“œ๊ฐ„์— ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ณต๊ฐ„์„ ์ด์•ผ๊ธฐํ•˜๋Š”๋ฐ, ํ•ด๋‹น ์˜์—ญ์—๋Š” code, data ๋“ฑ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘์— ํ•„์š”ํ•œ ์ฃผ์š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค.

์“ฐ๋ ˆ๋“œ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณ‘๋ ฌ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์œ„์— ์ œ์‹œํ–ˆ๋˜ ์˜ˆ์‹œ์™€ ๊ด€๋ จํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด์ž.

๊ฐ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ์‘๋‹ต์„ ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ž๋ณ„ ๋‚˜์ด์— ๋”ฐ๋ผ์„œ ์‘๋‹ต์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ค€๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž, ์‚ฌ์šฉ์ž์˜ ๋‚˜์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ (data ์˜์—ญ)์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์—†๊ณ  ๊ฐ€๋ณ€์ ์ธ ์š”์†Œ๋‹ค. ๋”ฐ๋ผ์„œ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ๋”ฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” stack ์˜์—ญ์„ ๋‘๊ณ  ์—ฌ๊ธฐ์— ๊ฐ€๋ณ€์ ์ธ state ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์„ค๋ช…ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์“ฐ๋ ˆ๋“œ๋Š” ์ผ์ข…์˜ ํ•จ์ˆ˜๋‹ค. ํ•จ์ˆ˜์˜ ๋กœ์ปฌ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋“ฏ ์“ฐ๋ ˆ๋“œ๋„ ๋กœ์ปฌ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด๊ณ , ํ•จ์ˆ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๊ฐ€ process ์˜ ํ•จ์ˆ˜์šฉ ๋ฐ์ดํ„ฐ ์˜์—ญ์ด stack ์ธ ๊ฒƒ๊ณผ๋„ ์ผ์น˜ํ•œ๋‹ค.

์žฅ์ 

์ด๋ฏธ ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์—ˆ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‘๋Š” ๊ฒƒ๋ณด๋‹ค ์“ฐ๋ ˆ๋“œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์žฅ์ ์ด ๋ฌด์—‡์ธ์ง€๋Š” ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์Šค์ผ€์ฅด๋ง์„ ์‹คํ˜„ํ•˜๋ ค๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ํ•„์—ฐ์ ์ด๋‹ค. Context Swithching ์ด ๋ฐœ์ƒํ•˜๋Š” ๋™์•ˆ์—๋Š” idle ์ฆ‰ cpu ๊ฐ€ ๋…ธ๋Š” ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•˜์—ฌ ๋น„ํšจ์œจ์ ์ธ ์ž์› ํ™œ์šฉ์„ ์ดˆ๋ž˜ํ•œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์“ฐ๋ ˆ๋“œ๋Š” ๋ชจ๋“  ์ฝ”๋“œ ์ž์›์„ ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ํ•„์š”์—†์ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

์ฆ‰ ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•˜๋‹ค !!!!!

๋‹จ์ 

๋‹น์—ฐํžˆ ์žฅ์ ๋งŒ ์žˆ์—ˆ์œผ๋ฉด ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฐœ๋…์€ ์‚ฌ๋ผ์ง€๊ณ  ์“ฐ๋ ˆ๋“œ๋งŒ ๋‚จ์•˜์„ ๊ฒƒ์ด๋‹ค.

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

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

์‹ค์ œ ์ž„๊ณ„์˜์—ญ(critical area) ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ๋Š” locking ํ˜น์€ ์ด์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋ฒ•์˜ thread-safe ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ณ‘๋ชฉ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž˜ ์งœ์•ผํ•œ๋‹ค...

profile
https://ppaksang.tistory.com/ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค !!

0๊ฐœ์˜ ๋Œ“๊ธ€