[์šด์˜์ฒด์ œ] Process Management | ์‹œ์Šคํ…œ ์ฝœ, CPU burst time
๐Ÿ–ฅ CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] Process Management | ์‹œ์Šคํ…œ ์ฝœ, CPU burst time

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  • → ๋ณต์ œ ์ƒ์„ฑ
  • ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋Š” ํŠธ๋ฆฌ ๊ณ„์ธต๊ตฌ์กฐ ํ˜•์„ฑ
  • ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ์ž์›์„ ํ•„์š”๋กœ ํ•จ
    • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š”๋‹ค.
  • ์ž์›์˜ ๊ณต์œ 
    • ๋ถ€๋ชจ์™€ ์ž์‹์ด ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ์ž์›์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์›์น™
  • Copy-on-write(COW)
    • write๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ(๋‚ด์šฉ์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ) ๋ถ€๋ชจ์˜ code, data, stack ๋“ฑ์„ copy ํ•œ๋‹ค.
  • ์ˆ˜ํ–‰ (Execution)
    • ๋ถ€๋ชจ์™€ ์ž์‹ ์€ ๊ณต์กดํ•˜๋ฉฐ ์ˆ˜ํ–‰๋˜๋Š” ๋ชจ๋ธ
    • ์ž์‹์ด ์ข…๋ฃŒ(terminate)๋  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š”(wait - blocked) ๋ชจ๋ธ
  • ์ฃผ์†Œ ๊ณต๊ฐ„(Address space)
    • ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ณต๊ฐ„์„ ๋ณต์‚ฌํ•จ (binary and OS data)
    • ์ž์‹์€ ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฆผ
  • fork() ์‹œ์Šคํ…œ ์ฝœ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
  • fork() ๋‹ค์Œ์— ์ด์–ด์ง€๋Š” exec() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ

 

fork() ์‹œ์Šคํ…œ ์ฝœ - create a child (copy)

  • ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ → ์ƒˆ ์ถœ๋ฐœ
int main(){
	int pid;
	pid = fork();
	if (pid==0) /* this is child */
		printf("\n Hello, I am child! Now I'll run date\n");
		execlp("/bin/date", "/bin/date", (char *) 0);
	else if (pid > 0) /* this is parent */
		printf("\n Hello, I am parent!\n");
}
  • ๊ผญ ์ž์‹์„ ๋งŒ๋“ค์–ด์„œ(fork()๋ฅผ ํ•ด์„œ) exec()์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜
int main(){
	printf("1");
	execlp("echo", "echo", "3", (char *) 0);
	printf("2"); /* ์˜์›ํžˆ ์ถœ๋ ฅ X */
}

 

exit() ์‹œ์Šคํ…œ ์ฝœ - frees all the resources, notify parent

  • ์ž๋ฐœ์  → ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ ค์คŒ (exit)
    • ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ output data๋ฅผ ๋ณด๋ƒ„
  • ๋น„์ž๋ฐœ์  → ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹์˜ ์ˆ˜ํ–‰์„ ์ข…๋ฃŒ์‹œํ‚ด (abort)
    • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ฌ
    • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ ํƒœ์Šคํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ(exit)ํ•˜๋Š” ๊ฒฝ์šฐ
      • ๋‹จ๊ณ„์ ์ธ ์ข…๋ฃŒ → ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ž์‹๋“ค์ด ๋จผ์ € ์ข…๋ฃŒ๋จ
    • ํ‚ค๋ณด๋“œ๋กœ kill, break๋ฅผ ์นœ ๊ฒฝ์šฐ

 

wait() ์‹œ์Šคํ…œ ์ฝœ - sleep until child is done

  • ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด
    • ์ปค๋„์€ child๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค A๋ฅผ sleep์‹œํ‚ด (block ์ƒํƒœ)
    • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ ์‹œ ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค A๋ฅผ ๊นจ์›€ (ready ์ƒํƒœ)

 

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜ - IPC: Interprocess Communication
  • ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
    • message passing: ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
    • ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๊ณต์œ  ๋ณ€์ˆ˜๋ฅผ ์ผ์ฒด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ†ต์‹ ํ•˜๋Š” ์‹œ์Šคํ…œ
  • ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • shared memory: ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋„ ์ผ๋ถ€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ 

 

CPU-burst Time์˜ ๋ถ„ํฌ