;sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /mm/active_mmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/zh_TW/mm/active_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/it_IT/mm/active_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ja_JP/mm/active_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ko_KR/mm/active_mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/sp_SP/mm/active_mmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/mm/active_mm.rsthKubh field_body)}(hDocumentation/mm/active_mm.rst h]h)}(hDocumentation/mm/active_mm.rsth]hDocumentation/mm/active_mm.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjhhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhKubh)}(hhh]h}(h]h ]h"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h Active MMh]h Active MM}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jihjfhhhhhKubh)}(hXL注意,在配置了 CONFIG_MMU_LAZY_TLB_REFCOUNT=n 的内核中,mm_count 引用计数 可能不再包括“懒惰”用户(运行任务中 ->active_mm == mm && ->mm == NULL)。 获取和释放这些懒惰引用必须使用 mmgrab_lazy_tlb() 和 mmdrop_lazy_tlb() 这 两个辅助函数,它们抽象了这个配置选项。h]hXL注意,在配置了 CONFIG_MMU_LAZY_TLB_REFCOUNT=n 的内核中,mm_count 引用计数 可能不再包括“懒惰”用户(运行任务中 ->active_mm == mm && ->mm == NULL)。 获取和释放这些懒惰引用必须使用 mmgrab_lazy_tlb() 和 mmdrop_lazy_tlb() 这 两个辅助函数,它们抽象了这个配置选项。}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjfhhubh)}(hn这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。h]hn这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjfhhubh literal_block)}(hXList: linux-kernel Subject: Re: active_mm From: Linus Torvalds Date: 1999-07-30 21:36:24 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些, 且更多的人在阅读它们时,我觉得棒极了。 1999年7月30日 星期五, David Mosberger 写道: > > 是否有一个简短的描述,说明task_struct中的 > "mm" 和 "active_mm"应该如何使用? (如果 > 这个问题在邮件列表中讨论过,我表示歉意--我刚 > 刚度假回来,有一段时间没能关注linux-kernel了)。 基本上,新的设定是: - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用 户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间 处于活动状态。 一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线 程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不 会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老 式的bdflush sync能做到这一点。 - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL, 其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。 - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们 有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。 规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm 显然必须与真实的mm相同。 对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时 “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users” 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy” 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只** 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。 “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码 if (current->mm == &init_mm) 一般来说,应该用 if (!current->mm) 取代上面的写法(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常 由缺页异常处理程序和类似的东西来完成)。 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改 变了接口以适配alpha(谁会想到呢,但alpha体系结构上下文切换代码实际上最终是 最丑陋的之一--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者 连接起来,你需要同时切换两者)。 (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)h]hXList: linux-kernel Subject: Re: active_mm From: Linus Torvalds Date: 1999-07-30 21:36:24 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些, 且更多的人在阅读它们时,我觉得棒极了。 1999年7月30日 星期五, David Mosberger 写道: > > 是否有一个简短的描述,说明task_struct中的 > "mm" 和 "active_mm"应该如何使用? (如果 > 这个问题在邮件列表中讨论过,我表示歉意--我刚 > 刚度假回来,有一段时间没能关注linux-kernel了)。 基本上,新的设定是: - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用 户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间 处于活动状态。 一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线 程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不 会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老 式的bdflush sync能做到这一点。 - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL, 其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。 - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们 有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。 规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm 显然必须与真实的mm相同。 对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时 “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users” 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy” 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只** 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。 “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码 if (current->mm == &init_mm) 一般来说,应该用 if (!current->mm) 取代上面的写法(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常 由缺页异常处理程序和类似的东西来完成)。 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改 变了接口以适配alpha(谁会想到呢,但alpha体系结构上下文切换代码实际上最终是 最丑陋的之一--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者 连接起来,你需要同时切换两者)。 (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKhjfhhubeh}(h] active-mmah ]h"] active mmah$]h&]uh1jdhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jiN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh، _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}jjs nametypes}jsh}jjfs footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log]1Documentation/translations/zh_CN/mm/active_mm.rst(NNNNta decorationNhhub.