🎒 fork() system call둜 ν”„λ‘œμ„ΈμŠ€λŠ” λͺ‡κ°œκ°€ λ§Œλ“€μ–΄μ§ˆκΉŒ?

jaypyonΒ·2021λ…„ 4μ›” 2일
0

운영체제

λͺ©λ‘ 보기
8/11
post-thumbnail

🎈 ν•œκ°œμ˜ fork()κ°€ μ‹€ν–‰λ λ•Œ

  • μ•„μ£Ό 자λͺ…ν•˜κ²Œλ„ 2개의 ν”„λ‘œμ„ΈμŠ€λ‘œ λΆ„κΈ°ν•œλ‹€.

🎈🎈 κ·Έλ ‡λ‹€λ©΄ μ—¬λŸ¬κ°œμΌλ•ŒλŠ”?

pid_t pid = fork();  // fork #1
pid = fork();        // fork #2
pid = fork();        // fork #3
if (pid == 0)
{
  fork();            // fork #4
}
fork();              // fork #5

πŸ™„ μœ„ μ†ŒμŠ€μ½”λ“œμ—μ„œλŠ” 총 5번의 fork()κ°€ μ‹€ν–‰λœλ‹€.

  • fork #1μ—μ„œ 2개둜 λΆ„κΈ°λœλ‹€.
  • fork #2 2개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 4κ°œκ°€ λœλ‹€.
  • fork #3 4개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 8κ°œκ°€ λœλ‹€.
  • fork #4 8개의 ν”„λ‘œμ„ΈμŠ€ 쀑 절반인 4개의 μžμ‹ ν”„λ‘œμ„ΈμŠ€λ§Œμ΄ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 12κ°œκ°€ λœλ‹€.
  • fork #5 12개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 24κ°œκ°€ λœλ‹€.

πŸ˜‰ 직접 해보기

for(int i=0; i<4; i++)
   fork();

μœ„ μ†ŒμŠ€μ½”λ“œλŠ” λͺ‡κ°œμ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“€κΉŒ?

πŸ€” κ²°κ³Ό

총 λ„€ 번의 fork()κ°€ μ§„ν–‰λœλ‹€.

  • fork #1 2개의 ν”„λ‘œμ„ΈμŠ€λ‘œ λΆ„κΈ°ν•œλ‹€.
  • fork #2 2개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 λ„€ κ°œκ°€ λœλ‹€.
  • fork #3 4개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 μ—¬λŸκ°œκ°€ λœλ‹€.
  • fork #4 8개의 ν”„λ‘œμ„ΈμŠ€κ°€ 각각 2개둜 λΆ„κΈ°ν•˜μ—¬ 총 μ—΄μ—¬μ„―κ°œκ°€ λœλ‹€.
profile
DGU CSE

0개의 λŒ“κΈ€