week9_incheol_6 - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

context switching์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด์‹œ์˜ค

Context Switching์ด๋ž€?

์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” Task(Process, Thread)์˜ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์— ์˜ํ•ด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค๋ฅธ Task๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

Context๋ž€?

CPU๊ฐ€ ๋‹ค๋ฃจ๋Š” Task(Process / Thread)์— ๋Œ€ํ•œ ์ •๋ณด๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ •๋ณด๋Š” Register์— ์ €์žฅ๋˜๋ฉฐ PCB(Process Control Block)์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

Process์™€ Thread์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

  • Process :
    • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด
    • PCB๋Š” OS์— ์˜ํ•ด ์Šค์ผ€์ค„๋ง๋˜๋Š” Process Control Block์ด๋‹ค.
  • Thread :
    • ํ”„๋กœ์„ธ์Šค๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํ๋ฆ„์˜ ๋‹จ์œ„(ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„)
    • Process ๋‚ด์˜ TCB(Task Control Block)๋ผ๋Š” ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

Context Switching ๋น„์šฉ

  • Cache ์ดˆ๊ธฐํ™”
  • Memory Mapping ์ดˆ๊ธฐํ™”

Process์™€ Thread ๋น„์šฉ ์ฐจ์ด

  • ํ”„๋กœ์„ธ์Šค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ, ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์บ์‰ฌ๊ฐ€ ์ง€๊ธˆ๊ป ์Œ“์•„๋†“์€ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ฌด๋„ˆ์ง€๊ณ  ์ƒˆ๋กœ ์บ์‰ฌ์ •๋ณด๋ฅผ ์Œ“์•„์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์ด ํ”„๋กœ์„ธ์Šค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์— ๋ถ€๋‹ด์ด ๋˜๋Š” ์š”์†Œ์ด๋‹ค.
  • ๋ฐ˜๋ฉด, ์“ฐ๋ ˆ๋“œ๋ผ๋ฉด ์ €์žฅ๋œ ์บ์‰ฌ ๋ฐ์ดํ„ฐ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ(code, data, heap์˜์—ญ)๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์˜๋ฏธ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ๋น ๋ฅธ ๊ฒƒ์ด๋‹ค.
  • ๋‹จ, ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์“ฐ๋ ˆ๋“œ๊ฐ„์— ๋™๊ธฐํ™” ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.