进程内容在保存在哪里?

jiyeyuran 2010-08-15 04:25:55
在多进程环境下,当某进程在运行时,它的地址空间是整个内存(除去操作系统占用的内存空间),那其它进程的内容保存在什么地方呢?在内存中,还是在磁盘上?如果在内存中,那它们的数据就有可能被当前运行的进程覆盖。如果在磁盘上,那每次系统进行进程切换时,就要把当前的进程数据写到磁盘,然后再从磁盘中调出新的进程数据,这样开销也太大了吧。
...全文
1228 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
谭海燕 2010-08-16
  • 打赏
  • 举报
回复
虚拟内存是相对于物理内存而言的。

虚拟内存是一段地址空间。

每个进程都有一个虚拟内存,虚拟内存是映射到物理内存的。

虚拟内存中,各个进程都只能看到自己的东西,他的所有操作都是在这段虚拟内存中进行的。在进程自己看来,

好像自己占用了内存的全部。

而实际上他只是一段虚拟内存。最终虚拟内存是映射到物理内存。
黑呼乎 2010-08-16
  • 打赏
  • 举报
回复
要弄明白就要知道虚拟地址,逻辑地址,线性地址,物理地址这些概念
现在PC的内存管理一般都采用 分段技术+分页技术

分段:
我们的应用程序中有时打印出的0x***地址,只是段偏移地址,也就是逻辑地址,段描述符+逻辑地址=虚拟地址,其中的段描述符我们无法知道,由操作系统管理
段描述符 --> 查询GDT表 --> 段基地址 + 逻辑地址 = 线性地址
若没有采用分页技术的话,上边的线性地址就是物理地址,CPU可以拿它找到指定的内存地址
分页:
若采用了分页地址,将上边得到的线性地址分3段 第一段用来定位页表目录中的某一页表,第二段用来定位页表中的某一个页表项,页表项中存储的有此页的基地址,页基地址 + 第三段(页偏移地址) = 物理地址

以上小弟愚见,希望LZ有所收获
FancyMouse 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiyeyuran 的回复:]
引用 1 楼 hqin6 的回复:

当某进程在运行时,它的地址空间是整个内存
----------
是么?

除操作系统和末用的空间外,进程地址空间应该是整个内存
[/Quote]
乃到底知道不知道虚拟内存是啥?
yzx714 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiyeyuran 的回复:]

引用 5 楼 yzx714 的回复:

楼主直接参考IA32手册分页的那一部分,我也不爱赘述了


请问是在哪一卷呢?
[/Quote]第三卷,也就是系统编程那一卷,OldLinux有翻译,并且翻译得不错,原版也很好
jiyeyuran 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yzx714 的回复:]

楼主直接参考IA32手册分页的那一部分,我也不爱赘述了
[/Quote]

请问是在哪一卷呢?
yzx714 2010-08-15
  • 打赏
  • 举报
回复
楼主直接参考IA32手册分页的那一部分,我也不爱赘述了
jiyeyuran 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hqin6 的回复:]

当某进程在运行时,它的地址空间是整个内存
----------
是么?
[/Quote]
除操作系统和末用的空间外,进程地址空间应该是整个内存
jiyeyuran 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ljhnew 的回复:]

"在多进程环境下,当某进程在运行时,它的地址空间是整个内存"

不对,在保护模式下,一个进程只能被保护运行在知道的内存空间中。不是整个内存,除了VxWorks等实模式系统(非保护模式,它是一个单进程多线程即任务的操作系统)。每个进程只占用他自己的内存空间,只有进程调用到的核心态程序,才有公用的核心内存,共享内存除外。

详细资料参考一下linux的书本吧。你提的问题后面部分涉及到的内容太……
[/Quote]
深入理解计算机系统一本书中写道:32位的机器上,进程的虚拟地址空间分布如下,0~0x08048000末用,0x08048000~0x40000000 保存只读代码和数据、读/写数据和运行时堆,0x40000000~0xc0000000 是共享库和用户栈存储区,xc0000000~0xffffffff 是内核虚拟存储器。如果一个进程只能被保护运行在知道的内存空间中,那操作系统如何知道分配多大的内存空间给它。
ljhnew 2010-08-15
  • 打赏
  • 举报
回复
"在多进程环境下,当某进程在运行时,它的地址空间是整个内存"

不对,在保护模式下,一个进程只能被保护运行在知道的内存空间中。不是整个内存,除了VxWorks等实模式系统(非保护模式,它是一个单进程多线程即任务的操作系统)。每个进程只占用他自己的内存空间,只有进程调用到的核心态程序,才有公用的核心内存,共享内存除外。

详细资料参考一下linux的书本吧。你提的问题后面部分涉及到的内容太多,参考书上度有。
太乙 2010-08-15
  • 打赏
  • 举报
回复
当某进程在运行时,它的地址空间是整个内存
----------
是么?

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧