CpuMemSets在Linux操作系统中的实现(3)

文章作者 100test 发表时间 2007:03:14 16:29:05
来源 100Test.Com百考试题网


上述例程通过锁机制以及对cmm&.cms中的引用计数counter的管理,保证了对CpuMemSets进行并行操作的完整性。每个cms中的counter记录着:使用者的引用计数(指向这个cms的任务、虚拟存储区、内核总数)和句柄的引用计数(临时指向这个cms的句柄的总数)。每个cmm中的counter记录着:cms的引用计数(指向这个cmm的cms总数)和句柄的引用计数(临时指向这个cmm的句柄的总数)。

替换CpuMemSets的操作分为下列三个步骤:

1. 调用合适的cmsGetHandle*()安全的获得cms和cmm的句柄;

2. 构造新的cms和cmm;

3. 调用合适的cmsExchange*()安全的更换上述的新旧cms和cmm。

访问任务或虚拟存储区的cms和cmm的操作分为下列三个步骤:

1. 调用合适的cmsGetHandle*()安全的获得cms和cmm的句柄;

2. 调用cms和cmm,此期间无法保证原来的任务或虚拟存储区仍然使用这些cms和cmm;

3. 调用cmsRelease()释放句柄。

挂接、放弃句柄的操作步骤:

1. 调用合适的cmsGetHandle*()或cmsNewHandle*()安全的获得cms和cmm的句柄;

2. 调用合适的cmsAttachNew*()或cmsDiscard()。

3.1.3 基本设置

内核拥有自己的kernel_cms。内核在start_kernel()的开头(build_all_ zonelists()之后,trap_init()之前)首先调用cms_cmm_static_init()为kernel_cms构造静态的初始cmm&.cms,其中只包含执行本内核的处理器和所在节点的内存块,并且将kernel_cms -> mems_allowed赋值-1UL,允许内核在cpu_init()过程中使用所有内存块。然后,内核在start_kernel()的结尾执行cms_cmm_init(),创建cmm和cms高速缓存,为kernel_cms构造包含所有处理器和内存块的cmm&.cms,并传递给init_task。如果系统启动时设置了cpumemset_minimal参数,则使用的是cms_cmm_static_init()构造的最小集。


相关文章


CpuMemSets在Linux操作系统中的实现(4)
CpuMemSets在Linux操作系统中的实现(3)
CpuMemSets在Linux操作系统中的实现(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛