线程上下文:
老是看到线程上下文切换,到底会切换什么呢,
包括:
1,Instruction pointer 执行到那条指令
2,用户和核心态堆栈指针
3,指向这个线程所在的地址空间的指针 page table directory
一个线程的优先级 有进程和线程自身的优先级共同决定
进程的虚拟地址空间
每个进程的用户态地址空间是相互独立的
在32位机上的虚拟地址空间有4G
核心态地址空间2G ,系统代码,文件系统缓存, 驱动等
用户态地址空间2G,用户代码,线程用户态的堆栈。
用户态虚拟地址空间的状态
free 这段地址自由,可被分配。
reserving,这段地址空间被预留,不会再分配做他用,没有影射到物理内存,不能访问,只有被commit之后才能使用
。
committed,被影射到物理内存。
进程使用的内存
private bytes,进程的虚拟地址空间中已分配的内存,不包括和其他进程共享的内存,
Virtual Bytes,进程所使用的虚拟地址空间的大小,包括和其他进程共享的内存,例如共享的动态链接库。
Working set,进程所使用的物理内存的大小
内存映射文件
1,进程保留一段虚拟地址空间,把一个文件中的一部分映射到这段地址空间。
2,操作系统使用内存映射文件来装在.exe和.DLL文件。物理内存里只有一份拷贝。
3,使用内存映射文件来处理大文件,每次只把一部分文件映射到进程的地址空间。
4,多个进程之间共享内存,多个进程映射到同一个文件的同一部分
物理内存和paging file
1 paging file用来保存进程正在使用的修改过的内存,例如当系统物理内存不足时或者这部分内存在很长一段时间没
有被使用。
2 当这部分内容被访问时,这些内容从paging file转移到物理内存。
缺页处理
1,被访问的页面不在物理内存里,但是在硬盘文件里或者paging file里或者内存映射文件里
2,操作系统分配物理内存,把所需的访问内容从硬盘或者paging file里读到物理内存里。
3,这个过程对应用程序时透明的
线程堆栈
1,堆栈是线程运行时用来保存函数参数,局部变量,函数返回地址等数据的一块内存,
2,系统被每个线程reserve一块用户态线程堆栈,并commit其中的一部分内存,缺省情况下,
reserve 1MB堆栈,并commit其中的2个page
堆
1,分配小块的内存
2,进程的缺省堆,缺省为1MB,
3,创建根多的堆, (HeapCreat/HeapAlloc/HeapReAlloc)
进程使用的内存类型总结
1,虚拟内存
2,内存映射文件
3,堆
4,堆栈
843



被折叠的 条评论
为什么被折叠?



