- 论坛徽章:
- 0
|
发帖时最不幸的事情是:快写完了,IE缺崩溃了.
写了一大堆后全没了,只有简单的写一点了.
看过你的文章后确实觉得不错,首先我得承认,我从没搞过VM方面的分析
在这方面我肯定是不行的. 
其次我对你文章中的所说的"5.flags的用途尚不清楚。", 我查了下VM的代码
flags和系统调用
324 AUE_NULL MSTD { int mlockall(int how); }
有关.是用户区对内存页面加锁用的一个系统调用(见syscalls.master).
该调用有两种方式:一个是MCL_FUTURE,另一个是MCL_CURRENT,
(SYS\SYS\mman.h第96,97行)
当然也可两种并用.他的意思分别是对将要用的页,对当前的内存页加锁,这一点是和LINUX
一样的,当方式是MCL_FUTURE时,flags标志会通过vm_map_modflags
(SYS\VM\vm_map.h地222行)
置位{加入MAP_WIREFUTURE}.当然munlockall系统调用在解锁时也要使用vm_map_modflags
函数去掉flags标志中的MAP_WIREFUTURE.
看看 MCL_FUTURE 的意思(Man Pages ):
Lock all pages mapped into the process's address space in
the future, at the time the mapping is established. Note
that this may cause future mappings to fail if those map-
pings cause resource limits to be exceeded
而和flags没关系的MCL_CURRENT 的意思(Man Pages )
Lock all pages currently mapped into the process's address
space
我认为用户区如果要对连续的将要使用的内存页加锁时会用到flags标志(置MAP_WIREFUTURE)
对于用户进程已经有此标志的堆栈页,如果需要增加堆栈,必须同样注意保持堆栈的连续性.(vm_map.c中
第2899行)
参考:vm_map.c
vm_mmap.c
vm_map.h
syscalls.master
等等
好了,不写其他废话了
[ 本帖最后由 xie_minix 于 2006-5-9 23:40 编辑 ] |
|