To calculate the total time taken for the CPU to access the 100 program instructions, we need to consider both the memory accesses and the instruction replacements.
Initial 50 Instructions:
The first 50 instructions are already in memory, so accessing these will take:
\[ \text{Time for first 50 instructions} = 50 \text{ instructions} \times 5 \text{ ns/instruction} = 250 \text{ ns} \]
Next 50 Instructions:
After accessing the first 50 instructions, the CPU needs to access the next 50 instructions. Since the memory can only hold 50 instructions at a time, it must first replace the currently held instructions. This replacement takes 400 ns.
After the replacement, the CPU can access the next 50 instructions, which takes another 250 ns:
\[ \text{Time for replacing instructions} = 400 \text{ ns} \] \[ \text{Time for the next 50 instructions} = 50 \text{ instructions} \times 5 \text{ ns/instruction} = 250 \text{ ns} \]
Total Time Calculation
Now, we sum all the time components together:
\[ \text{Total Time} = \text{Time for first 50 instructions} + \text{Time for replacing instructions} + \text{Time for next 50 instructions} \] \[ \text{Total Time} = 250 \text{ ns} + 400 \text{ ns} + 250 \text{ ns} = 900 \text{ ns} \]
Thus, the total time taken for the CPU to access all 100 program instructions is:
\[ \boxed{900 \text{ ns}} \]