MY QUESTION IS
1)WHY PRINTF() PRINT VIRTUAL ADDRESS(MENTIONED IN EXPLANTION) NOT PHYSICAL ADDRESS
2) WHY VIRTUAL ADDRESS(O/P OF PRINTF(&VAR)) OF A VARIABLE CHANGES WHEN WE RUN A PROGRAM MANY TIMES
Consider the following code fragment:
if (fork() == 0)
{ a = a + 5; printf ( "%d,%d\n" , a, &a); }
else { a = a –5; printf ( "%d, %d\n" , a, &a); }
|
Run on IDE
Let u, v be the values printed by the parent process, and x, y be the values printed by the child process.
ANS-> u + 10 = x and v = y
Explanation:
fork() returns 0 in child process and process ID of child process in parent process. In Child (x), a = a + 5 In Parent (u), a = a – 5; Therefore x = u + 10. The physical addresses of ‘a’ in parent and child must be different. But our program accesses virtual addresses (assuming we are running on an OS that uses virtual memory). The child process gets an exact copy of parent process and virtual address of ‘a’ doesn’t change in child process. Therefore, we get same addresses in both parent and child.