Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Computer/Computer Science

[Operating System] (iOS) PCB์™€ Context Switching

๊ฐ์ž ๐Ÿฅ” 2022. 9. 7. 22:00
๋ฐ˜์‘ํ˜•

์Šคํ„ฐ๋””๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น repository์— ๊ฐ€๋ฉด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
ํŠนํžˆ close ๋œ PR์„ ๋ณด์‹œ๋ฉด, ์–ด๋–ค ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•˜๊ณ  ์Šคํ„ฐ๋””์›๋“ค๊ณผ ์ด์•ผ๊ธฐ๋‚˜๋ˆด๋Š”์ง€ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค 

https://github.com/JulSaMo/CS-start

 

GitHub - JulSaMo/CS-start: ๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ

๐Ÿ“ CS ์ง€์‹ ๋Œ€๋ฐฑ๊ณผ โœจ. Contribute to JulSaMo/CS-start development by creating an account on GitHub.

github.com

 


๐ŸŸ  ๋“ค์–ด๊ฐ€๋ฉฐ

๐Ÿ”ธ Process Management

CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋Ÿฌ๊ฐœ์ผ ๋•Œ, CPU ์Šค์ผ€์ฅด๋ง์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

https://velog.io/@hyehello/CS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-OS-04.-Process-Management

 

CS - ์šด์˜์ฒด์ œ OS 04. Process Management

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ, ์ข…๋ฃŒCopy-On-Write (COW) : ์ž์‹์€ ๋ถ€๋ชจ ์ž์›์„ ๊ทธ๋Œ€๋กœ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ write ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๋ณต์‚ฌ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค(Parent process)๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค(children process)๋ฅผ ์ƒ์„ฑํ”„๋กœ์„ธ์Šค์˜ ํŠธ

velog.io

 

 

 

๐ŸŸ  PCB (Process Control Block) ์ด๋ž€? 

  • ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“๋Š” ๊ณณ์œผ๋กœ, ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด์ด๋‹ค.
  • ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๊ด€๋ฆฌ์™€ Context Switching์„ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
  • PCB๋Š” ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ์ฃผ๊ธฐ์–ต์žฅ์น˜์— ์œ ์ง€๋œ๋‹ค.

CPU์— ๊ธ‰ํ•œ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ ๋•Œ๋ฌธ์— ๊ธด๊ธ‰ ์š”์ฒญ์ด ์™”์„ ๋•Œ, ๊ธฐ์กด์— ์ž‘์—…ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์–ด๋”˜๊ฐ€์— ์ž„์‹œ์ €์žฅํ•ด๋†“์•„์•ผ ๊ธ‰ํ•œ ์• ๋ฅผ ๋นจ๋ฆฌ ์ฒ˜๋ฆฌํ•œ ํ›„์— ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ์ •๋ณด๋“ค์„ ์–ด๋”˜๊ฐ€์— ๋†“์„ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ณ , ์ด ๊ณต๊ฐ„์ด PCB ์ด๋‹ค.

์ฆ‰, PCB๋ž€ ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“์„ ์ˆ˜ ์žˆ๋Š” ์ €์žฅ ์žฅ์†Œ

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/PCB%20%26%20Context%20Switcing.md

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ → ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ → ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์— (์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ) ์ƒ์„ฑ → ์ด ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์ด PCB์— ์ €์žฅ

 

๐Ÿ”ธPCB ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ •๋ณด, Process Metadata

ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์„ Process Metadata ๋ผ๊ณ  ํ•œ๋‹ค .

https://dev-mystory.tistory.com/119

  • Process ID: ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ID
    • PID๋ผ๊ณ ๋„ ๋ถ€๋ฅด๊ธฐ๋„ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ์ด๋‹ค.
  • Process State: ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค
    • ์ค€๋น„, ๋Œ€๊ธฐ, ์‹คํ–‰ ๋“ฑ์˜ ์ƒํƒœ
  • Program Counter: ๋‹ค์Œ Instruction์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ์นด์šดํ„ฐ. CPU๋Š” ์ด ๊ฐ’์„ ํ†ตํ•ด Process์˜ Instruction์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    • ์ปดํ“จํ„ฐ์—์„œ ๋งํ•˜๋Š” Instruction๋Š” ์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋Š” ๋‹จ์œ„๋กœ, ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ช…๋ น์ด๋‹ค.
    • ํ•˜๋“œ์›จ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. (์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š”๋ช…๋ น์€ command, ์†Œํ”„ํŠธ์›จ์–ด์ ์ธ ๋ช…๋ น์€ statement)
  • Register: Accumulator, CPU Register, General Register ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.
  • CPU Scheduling Information: ์šฐ์„ ์ˆœ์œ„, ์ตœ์ข… ์‹คํ–‰ ์‹œ๊ฐ„, CPU ์ ์œ  ์‹œ๊ฐ„ ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค.
  • Memory Information: ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„ (lower bound~upper bound) ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • Process Information: ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”, ์Šค์ผ€์ฅด๋ง ํ ํฌ์ธํ„ฐ, ์†Œ์œ ์ž, ๋ถ€๋ชจ ๋“ฑ
  • Device I/O Status: ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋ชฉ๋ก, ์—ด๋ฆฐ ํŒ”๋ฆฐ ๋ชฉ๋ก ๋“ฑ
  • Pointer: ๋ถ€๋ชจ/์ž์‹ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ, ์ž์›์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ
  • Open File List: ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ์—ด๋ ค์žˆ๋Š” ํŒŒ์ผ์˜ ๋ฆฌ์ŠคํŠธ

 

์œ„์˜ PCB ์ •๋ณด๊ฐ€ ์•„๋ž˜ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์ €์žฅ๋œ๋‹ค !!

https://overcome-the-limits.tistory.com/260
https://overcome-the-limits.tistory.com/260

 

๐Ÿ”ธPCB ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

Linked List ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
PCB List Head์— PCB๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ™๊ฒŒ ๋œ๋‹ค. ์ฃผ์†Œ ๊ฐ’์œผ๋กœ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. 

์ฆ‰, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น PCB๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ํ”„๋กœ์„ธ์Šค ์™„๋ฃŒ ์‹œ ์ œ๊ฑฐ๋œ๋‹ค.  ์ด๋ ‡๊ฒŒ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ CPU์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ Context Switching ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

< ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๊ณผ์ • >
1. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
2. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์— ํ•œ ์ฃผ์†Œ ๊ณต๊ฐ„๊ณผ ํ”„๋กœ์„ธ์Šค ์ œ์–ด๋ธ”๋ก(PCB)๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
3. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ํ”„๋กœ์„ธ์„œ ์ œ์–ด ๋ธ”๋ก์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (์ƒํƒœ์ •๋ณด, ์นด์šดํ„ฐ, ์šฐ์„ ์ˆœ์œ„ ๋“ฑ)
4. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šค์ผ€์ค„๋ง ํ์˜ ์ค€๋น„/๋ณด๋ฅ˜ ๋ฆฌ์ŠคํŠธ์— ์—ฐ๊ฒฐํ•œ๋‹ค.

 

 


๐ŸŸ  Context Switching 

๐Ÿ”ธ Context Switching ์ด๋ž€?

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ํ™˜๊ฒฝ์—์„œ CPU๊ฐ€ ์–ด๋–ค ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์— ์˜ํ•ด ๋‹ค์Œ ์šฐ์„  ์ˆœ์œ„์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผํ•  ๋•Œ ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’ (Context)๋ฅผ ์ €์žฅํ•˜๊ณ  CPU๊ฐ€ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’(Context)์œผ๋กœ ๊ต์ฒดํ•˜๋Š” ์ž‘์—…
  • ์ธํ„ฐ๋ŸฝํŠธ (Interrupt) : CPU๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ ๋ฐ–์—์„œ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ CPU์—๊ฒŒ ์•Œ๋ ค ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. (I/O request, CPU ์‚ฌ์šฉ ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋์„๋•Œ, ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋“ฑ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด๋‹ค)
    (์‰ฌ์šด๋ง๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋˜ ์ผ์„ ๋ฉˆ์ถ”๊ณ  ์ด๋ฏธ ์ •ํ•ด์ง„ ์ฝ”๋“œ์—์„œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.)

๐Ÿ“ Context(๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’)์ด๋ž€?

์‚ฌ์šฉ์ž์™€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž, ์‚ฌ์šฉ์ž์™€ ์‹œ์Šคํ…œ ๋˜๋Š” ๋””๋ฐ”์ด์Šค๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์‚ฌ๋žŒ, ์žฅ์†Œ, ๊ฐœ์ฒด ๋“ฑ์˜ ํ˜„์žฌ ์ƒํ™ฉ(์ƒํƒœ)๋ฅผ ๊ทœ์ •ํ•˜๋Š” ์ •๋ณด๋“ค์„ ๋งํ•œ๋‹ค. ์ฆ‰ ์—ฌ๊ธฐ์„œ ๋‚˜์˜จ Context์˜ ์˜๋ฏธ๋Š” CPU๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋“ค์ด๋‹ค. (์ด ์ •๋ณด๋“ค์€ ์œ„์— ๋‚˜์˜จ PCB์— ์ €์žฅ๋œ๋‹ค, ์ฆ‰ PCB์— ์ €์žฅ๋˜๋Š” ์ •๋ณด๋“ค์ด Context = ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’!)

โš ๏ธ ์ฃผ์˜

์ฐธ๊ณ ๋กœ Context Switching์ด ๋ฐœ์ƒํ•  ๋•Œ, ํ•ด๋‹น CPU๋Š” ์•„๋ฌด๋Ÿฐ ์ผ์„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Context Switching์ด ์žฆ์•„์ง€๋ฉด ์˜คํžˆ๋ ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํšจ์œจ(์„ฑ๋Šฅ)์ด ๋–จ์–ด์ง„๋‹ค. 

 

๐Ÿ”ธ Context Switching ์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”๊ฐ€?

  • Task์˜ ๋Œ€๋ถ€๋ถ„ ์ •๋ณด๋Š” Register์— ์ €์žฅ๋˜๊ณ  PCB๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค.
  • ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” Task์˜ PCB์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. (Process Stack, Ready Queue)
  • ๋‹ค์Œ ์‹คํ–‰ํ•  Task์˜ PCB ์ •๋ณด๋ฅผ ์ฝ์–ด Register์— ์ ์žฌํ•˜๊ณ  CPU๊ฐ€ ์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ ๊ณผ์ •์„ ์—ฐ์†์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”ธ Context Switching ๊ณผ์ •

  • ์ธํ„ฐ๋ŸฝํŠธ ์‹œ์Šคํ…œ์ฝœ์ด ๋ฐœ์ƒํ•˜๋ฉด p0์—์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  
  • p1 ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ p1์˜ ์ •๋ณด๋“ค์„ ๊ฐ€์ง€๊ณ ์˜ด
  • ๊ทธ๋ฆฌ๊ณ  p1์ด ์‹คํ–‰๋˜๊ณ , ๋‹ค์‹œ p0๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด
  • ๋‹ค์‹œ ์ง„ํ–‰

https://www.youtube.com/watch?v=-4HKhwlH3FQ

 

๐Ÿ”ธ Context switching์˜ ์˜ค๋ฒ„ํ—ค๋“œ

https://www.youtube.com/watch?v=-4HKhwlH3FQ

  • idle : ์•„๋ฌด๊ฒƒ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธ

์ด๋ ‡๊ฒŒ Idle๊ฐ€ ๊ฒน์น˜๋Š” ์‹œ๊ธฐ๋“ค์„ ์˜ค๋ฒ„ํ—ค๋“œ๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋•Œ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ์ค‘์ด๋ผ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ด๋‹ค. Thread๊ฐ€ ๋งŽ์•„์ง€๋ฉด Context swtiching์ด ๋งŽ์•„์ ธ์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์  ์ฆ๊ฐ€ํ•ด์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

 

๐Ÿ”ธ Context Switching swift์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋‚˜?

Task.yield()

์ด ํ‚ค์›Œ๋“œ๋ฅผ ์ฐพ์•„๋ณด๋ฉด ๋ ๊ฒƒ ๊ฐ™๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ–ˆ๋‹ค.

ํ˜„์žฌ ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ

https://developer.apple.com/documentation/swift/task/yield() 

 

Apple Developer Documentation

 

developer.apple.com

 

โœ… ๋ฉด์ ‘์—์„œ ๋‚˜์™”๋˜ ์งˆ๋ฌธ
(https://nesoy.github.io/articles/2018-11/Context-Switching)

  • Computer ๊ฐ€ ๋งค๋ฒˆ ํ•˜๋‚˜์˜ Task๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด? 
    • ํ•˜๋‚˜์˜ Task๊ฐ€ ๋๋‚  ๋•Œ ๊นŒ์ง€ ๋‹ค์Œ Task๋Š” ๊ธฐ๋‹ค๋ฆด์ˆ˜๋ฐ–์— ์—†๊ณ , ๋™์‹œ์— ์ž‘์—…ํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋ฉด์„œ ๋ฐ˜์‘์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์ด ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
    • computer ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์„ ํ†ตํ•ด ๋น ๋ฅธ ๋ฐ˜์‘์†๋„๋กœ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
    • ๋น ๋ฅธ์†๋„๋กœ Task ๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ์˜ ๋ˆˆ์œผ๋กœ ๋ดฃ์„๋•Œ๋Š” ๋™์‹œ์— ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผํ•˜๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • CPU ๊ฐ€ Task๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ Context Switchng์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Context Switching์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
    • CPU๊ฐ€ ์–ด๋Š ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์„๋•Œ, ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด ์žˆ์„ ๊ฒฝ์šฐ ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB์— ์ €์žฅํ•˜๊ณ , ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ต์ฒดํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • ์™œ Context Switching์ด ํ•„์š”ํ•œ๊ฐ€?
    • Context Switching์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์‹ค์€ context switching์ด ์ผ์–ด๋‚  ๋•Œ๋Š” CPU์˜ ๋™์ž‘์ด ๋ฉˆ์ถ”๋Š” '์˜ค๋ฒ„ํ—ค๋“œ'๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ €ํ•˜์˜ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— CPU ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋„ ํŠน๋ณ„ํžˆ ์‹ ๊ฒฝ์จ์„œ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!
  • Context Switching ์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋‚˜์š”?
    • ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ์ž‘์—…์ค‘์ธ ํ™˜๊ฒฝ์—์„œ, ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๋„์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ํ…Œ์Šคํฌ๋ฅผ PCB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ reload ํ•˜์—ฌ ์‹คํ–‰์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ Context switching ํ•˜๋Š” ๊ณผ์ •์—์„œ๋Š” CPU๋Š” ๋™์ž‘์„ ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ํ…Œ์Šคํฌ๋ฅผ ๋๋‚ด๋ฉด PCB์— ์ €์žฅํ•˜๊ณ , ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค ํƒœ์Šคํฌ๋ฅผ ๋‹ค์‹œ reloadํ•˜์—ฌ ํƒœ์Šคํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ“– References

https://foxtrotin.tistory.com/295

 

command, instruction, statement์˜ ์ฐจ์ด์ 

์˜์–ด ๊ธ€์— ์ž์ฃผ ๋‚˜์˜ค๋Š” ์„ธ ๋‹จ์–ด command, instruction, statement ์…‹ ๋‹ค ์‚ฌ์ „์—๋Š” ๋ช…๋ น์ด๋ผ๋Š” ๋œป์ด๊ณ  ์‹ค์ œ๋กœ๋„ ๋ช…๋ น์–ด, ๋ช…๋ น ๋“ฑ์˜ ๋œป์œผ๋กœ ์“ฐ๊ณ  ์žˆ์–ด์„œ ๊ตฌ๋ถ„์ด ์ž˜ ๋˜์ง€๊ฐ€ ์•Š๋Š”๋‹ค With a command line interface you..

foxtrotin.tistory.com

https://dev-mystory.tistory.com/119

 

์šด์˜์ฒด์ œ - PCB(Process Control Block)๋ž€?

PCB๋ž€? ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋†“๋Š” ๊ณณ์œผ๋กœ, ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ์ฒด์ด๋‹ค. ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ๊ด€๋ฆฌ์™€ ๋ฌธ๋งฅ๊ตํ™˜(Context Switching)์„ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค. PCB๋Š”

dev-mystory.tistory.com

https://velog.io/@hoyun7443/PCB

 

PCB(Process Control Block)

CPU์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ, CPU ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ์ด๋•Œ, CPU๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋ˆ„๊ตฐ์ง€ ์•Œ์•„์•ผ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŠน์ง•์„ ๊ฐ–๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Process MetadataProcess IDPro

velog.io

https://nesoy.github.io/articles/2018-11/Context-Switching

 

Context Switching์ด๋ž€?

 

nesoy.github.io

https://www.youtube.com/watch?v=-4HKhwlH3FQ 

 

๋ฐ˜์‘ํ˜•