![在需求分页的情况下卸载如何工作](https://linux22.com/image/126303/%E5%9C%A8%E9%9C%80%E6%B1%82%E5%88%86%E9%A1%B5%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%8D%B8%E8%BD%BD%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C.png)
据我了解,Linux使用需求分页,这意味着当一个进程启动时,只有该进程的那些页面实际上从文件系统中加载,这些页面在执行过程中被触及。
但是,如果文件系统被卸载,这意味着什么?卸载是否意味着在卸载生效之前加载受影响进程的剩余页面(也“锁定”受影响的内存页面)?或者,如果没有,卸载是否会导致以后出现页面错误时进程执行出现问题?
更新:在斯蒂芬·基特提供答案后(即在这种情况下只是阻止卸载),我在以下问题下找到了一些附加信息:在硬盘驱动器上安装根文件系统之前,引导加载程序是否会卸载 ramdisk?。那里给出的解释得出了相同的结论,尽管那里没有解决请求分页方面的问题。
答案1
内核通过防止卸载用作正在运行的进程的后备存储的文件系统来解决这个问题:
$ dd if=/dev/zero of=test.img bs=1M count=50
$ /sbin/mke2fs test.img
$ sudo mount test.img /mnt/temp
$ sudo cp /usr/bin/sleep /mnt/temp
$ /mnt/temp/sleep 120 &
$ sudo umount /mnt/temp
umount: /mnt/temp: target is busy.
$ sudo umount -f /mnt/temp
umount: /mnt/temp: target is busy.
$ wait; sudo umount /mnt/temp
仅当从文件系统运行的进程完成后才能卸载该文件系统。