根据段选择子,任务A在一个线性地址空间里获得了描述符,从而知道了自己的线性地址。任务B也获得了自己的线性地址空间范围。还有很多c,d...,那么这些任务已经那些描述符表都在一个线性地址空间里么?
如果是,那么任务一切换,A获得了执行,那么a不是有自己的私立的线性空间么,这个线性空间和前面那个线性空间是什么关系,它是怎么建立的,因为系统什么的占一部分线性空间,映射进所有进程。那么进程的执行代码,就是在上段提到的根据描述符表找到的那个空间,是怎么样又到了00400000的进程的私有线性空间的,不用考虑分页什么的跟物理地址相关的部分,给俺描述一下就可以了。
------解决方案--------------------------------------------------------
但是别忘了还有底层的页影射关系,虽然进程a和b可能线形地址范围相同,但是
同一线性地址指向的phymem addr 往往不同
------解决方案--------------------------------------------------------
虚拟地址每个程序都是独立的,不存在虚拟地址的一部分分给一个程序而另一部分分给另外一个程序,一个程序一个虚拟地址。
所谓虚拟地址,就是指它实际上是不存在的。分页式内存管理可以实现虚拟地址机制。将虚拟地址分成大小相等的页(其大小是由硬件决定的),这些页保存在内存和硬盘上。内存是磁盘的一个高速缓存区。假设程序P的虚拟地址上按照顺序有4个页:A,B,C,D,可能在内存中只有A和C,B和D保存在磁盘上。内存中并不按照程序P虚拟地址中的顺序保存A和C,就是说C很有可能保存在A的前面(地址上来说),这是由分页的机制来决定的。内存中的A页和C页映射到P的虚拟内存中的A页和C页。当P要用到B页或D页时,机器便从硬盘中读出B和D换掉内存中没有用到的页。(换哪些页也是由分页机制决定的。)虚拟内存技术定义了内存和磁盘间的数据交换规则。
分页的好处是程序一般不用再考虑自身的大小问题。
这些问题其实只要你学过操作系统,就都会明白的。