#QA26
I7 CPU的VA:48位
PA:52位,
VPO:12位
PPO:12位
VPN:36位
PPN:40位
采用4级页表
其页表项数依次为
L1 PT:每个条目512GB区域
L2 PT:每个条目1GB区域
L3 PT:每个条目2MB区域
L4 PT:每个条目512GB区域
页表空间为5*512字节
每一页表项占5字节(40位)。
TLB采用Cache类型16组,TLB-D1为4路64条,
则其TLBI4 位,TLBT32位。
CacheD1为8路32K,则其64组,Block为64字节,tag为40位。
PA中CT/CI/CO依次为40、6、6位。
页表物理基地址为40位,5byte
由于内存映射机制,所以一个磁盘文件对象可以被多个进程共享访问,也可以被多个进程对象私有访问。如果是共享访问,那么一个进程对这个对象的修改会显示到其他进程。如果是私有访问,内核会采用写时拷贝copy on write的方式,如果一个进程要修改一个私有的写时拷贝的对象,会产生一个保护故障,内核会拷贝这个私有对象,写进程会在新的私有对象上修改,其他进程仍指向原来的私有对象。
execve函数在当前的进程中加载并运行包含在可执行目标文件a.out中的程序,用a.out程序有效的替代了当前程序。加载并运行a.out需要以下几个步骤:
删除已存在的用户区域:删除当前进程虚拟地址的用户部分中的已存在的区域结构。 映射私有区域:为新程序的文本,数据,bss,和栈区创建新的区域结构。所有这些新的区域都是私有的,写时拷贝的。文本和数据区域被映射为a.out文件中的文本和数据区。bss区域是请求二进制零的,映射到匿名文件,其大小包含在a.out中。栈和堆区域也是请求二进制零的,初始长度为0.
映射共享区域:如果a.out程序和共享对象(或目标)链接,比如标准C库libc.so,那么这些对象都是动态链接到这个程序的,然后在映射到用户虚拟地址空间中的共享区域内。 设置程序计数器(PC):exevce做的最后一件事情就是设置当前进程上下文中的程序计数器,使之指向文本区域的入口点。