一、概述

1.虚拟地址空间

内存是通过指针寻址的,因而CPU的字长决定了CPU所能管理的地址空间的大小,该地址空间就被称为虚拟地址空间,因此32位CPU的虚拟地址空间大小为4G,这和实际的物理内存数量无关。
Linux内核将虚拟地址空间分成了两部分:
  • 一部分是用户进程可用的,这部分地址是地址空间的低地址部分,从0到TASK_SIZE,称为用户空间
  • 一部分是由内核保留使用的,这部分地址是地址空间的高地址部分,从KERNELBASE到结束,称为内核空间
与之相关的一些宏:
  1. KERNELBASE:内核虚拟地址空间的起始地址,一般和PAGE_OFFSET相同,但是也可能不同
  2. PAGE_OFFSET:内核虚拟地址空间中低端内存的起始地址
  3. PHYSICAL_START:内核物理地址的起始地址
  4. MEMORY_START:内核低端内存的物理起始地址
用户进程可用的部分在进程切换时会发生改变,但是由内核保留使用的部分在进程切换时是不变的。在32位系统上,两部分的典型划分比为3:1(该比例可修改),即4G虚拟地址空间中的3G是用户进程可访问的,而另外1G是保留给内核使用的,在这种划分下用户进程可用的虚拟地址空间是0x00000000-0xbfffffff,内核的虚拟地址空间是0xc0000000-0xffffffff。
不同的进程使用不同的用户空间可以使得不同进程的用户空间部分相互隔离,从而保护进程的用户空间部分。
内核空间的保护是通过CPU的特权等级实现的,所有现代CPU都提供了多个特权等级,每个特权等级可以获得的权限是不同的,当CPU处在某个权限等级时就只能执行符合这个等级的权限限制的操作。Linux使用了两个权限等级,分别对应于内核权限和用户权限,并且给属于内核的内存空间添加了权限限制,使得只有处于内核权限等级时CPU才能访问这些内存区域,这就将内核空间也保护了起来。

2.物理地址到虚拟地址的映射

可用的物理内存会被映射到内核虚拟地址空间中。在32位系统中,内核会将一部分物理内存直接映射到内核的虚拟地址空间中,如果访问内存时所使用的虚拟地址与内核虚拟地址起始值的偏移量不超过该部分内存的大小,则该虚拟地址会被直接关联到物理页帧;否则就必须借助”高端内存“来访问,因此也可以看出之所以使用“高端内存”是因为CPU可寻址的虚拟地址可能小于实际的物理内存,因而不得不借助其它机制(“高端内存”)来访问所有的内存。在IA-32系统上,这部分空间大小为896M。
64位系统不使用高端内存,这是因为64位的系统理论上可寻址的地址空间远大于实际的物理内存(至少现在是如此),因而就不必借助“高端内存”了。而对于用户进程来说,由于它的所有内存访问都通过页表进行,不会直接进行,因而对用户进程来说也不存在高端内存之说。
高端内存由32位架构的内核使用,在32位架构的内核中,要使用高端内存必须首先使用kmap将高端内存映射进内核的虚拟地址空间。

3.内存类型

从硬件角度来说存在两种不同类型的机器,分别用不同的方式来管理内存。
  1. UMA(uniform memory access):一致内存访问机器,它将可用内存以连续的方式组织起来。SMP系统中,每个CPU都可以以同样的速度访问内存。
  2. NUMA(non-uniform memory access):非一致内存访问机器总是多处理器机器。系统的各个CPU都有本地内存,可以支持快速访问。系统中的所有处理器都通过总线连接起来,进而可以访问其它CPU的本地内存,但是不如访问本地内存快。

lnux中如果要支持NUMA系统,则需要打开CONFIG_NUMA选项。

二、内存组织

linux内核对一致和不一致的内存访问系统使用了同样的数据结构,因此对于不同的内存布局,内存的管理算法几乎没有区别。对于UMA系统,将其看作只有一个NUMA节点的NUMA系统,即将其看成NUMA的特例。这样就将简化了内存管理的其它部分,其它部分都可以认为它们是在处理NUMA系统。

1.基本概念和相关数据结构

linux引入了一个概念称为node,一个node对应一个内存bank,对于UMA系统,只有一个node。其对应的数据结构为“struct pglist_data”。
对于NUMA系统来讲, 整个系统的内存由一个名为node_data 的struct pglist_data(page_data_t) 指针数组来管理。NUMA系统的内存划分如图所示:
每个node又被分成多个zone,每个zone对应一片内存区域。内核引入了枚举常量 zone_type 来描述zone的类型:
[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. <mmzone.h>  
  2. enum zone_type {  
  3. #ifdef CONFIG_ZONE_DMA  
  4. ZONE_DMA,  
  5. #endif  
  6. #ifdef CONFIG_ZONE_DMA32  
  7. ZONE_DMA32,  
  8. #endif  
  9. ZONE_NORMAL,  
  10. #ifdef CONFIG_HIGHMEM  
  11. ZONE_HIGHMEM,  
  12. #endif  
  13. ZONE_MOVABLE,  
  14. MAX_NR_ZONES  
  15. };  
它们之间的用途是不一样的:
  • ZONE_DMA:可用作DMA的内存区域。该类型的内存区域在物理内存的低端,主要是ISA设备只能用低端的地址做DMA操作。
  • ZONE_NORMAL:直接被内核直接映射到自己的虚拟地址空间的地址。
  • ZONE_HIGHMEM:不能被直接映射到内核的虚拟地址空间的地址。
  • ZONE_MOVABLE:伪zone,在防止物理内存碎片机制中使用
  • MAX_NR_ZONES:结束标记
很显然根据内核配置项的不同,zone的类型是有变化的。每个zone都和一个数组关联在一起,该数组用于组织管理属于该zone的物理内存页。
zone用数据结构struct zone来表示。
所有的node都被保存在一个链表中。在使用时,内核总是尝试从与进程所运行的CPU所关联的NUMA节点申请内存。这是就要用到备用列表,每个节点都通过struct zonelist提供了备用列表,该列表包含了其它节点,可用于代替本节点进行内存分配,其顺序代表了分配的优先级,越靠前优先级越高。

2.页(Page)

1.页概念

内核使用struct page作为基本单位来管理物理内存,在内核看来,所有的RAM都被划分成了固定长度的页帧。每一个页帧包含了一个页,也就是说一个页帧的长度和一个页的长度相同。页帧是主存的一部分,是一个存储区域。页和页帧的区别在于,页是抽象的数据结构,可以存放在任意地方,而页帧是真实的存储区域。
struct page包含了跟踪一个物理页帧当前被用于什么的有信息。比如页面计数,标志等等。

2.映射页面到zone

内核使用struct page的flags中的字段来保存页所属于的zone以及node。这是通过set_page_zone和set_page_node,这两个函数由函数set_page_links调用。

三、页表

1.页表机制

CPU管理虚拟地址,因而物理地址需要映射到虚拟地址才能给CPU使用。用于将虚拟地址空间映射到物理地址空间的数据结构称为页表。
在使用4k大小页的情况下,4k地址空间需要2的20次方个页表项。即便每个页表项大小为4字节也需要4M内存,而每个进程都需要有自己的页表,这就成了一个极大的内存开销。而且在大多数情况下,虚拟地址空间的大部分区域都是没有被使用的,因而没必要为虚拟地址空间中的每个页都分配管理结构,因而实际中采用的是如下方案:
  • 使用多级页表,每个线性地址被看为形如“页目录表+页目录表+...+页目录表+页表+页内偏移”的形式,每个比特组按照其含义被用于在相应的表中查找数据,最终找到页表。
  • 进程的页表只包含了它所使用的地址空间。进程不使用的地址空间不需要加入进程的页表。
  • 只有在进程实际需要一个页表时才会给该页分配RAM,而不是在一开始就为进程的所有页都分配空间。
页表中包含了关于该页的信息,例如是否存在于主存中,是否是“脏”的,访问所需权限等级,读写标志,cache策略等等。内核的页表保存在全局变量swapper_pg_dir中,应用进程的页表保存在task_struct->mm->pgd中,在应用进程切换时,会切换进程的页表(schedule-->__schedule-->context_switch-->switch_mm-->switch_mmu_context-->local_flush_tlb_mm)。

linux中采用了4级分页模型。如下:

PGD PUD PMD PTE OFFSET

虽然采用了4级模型,但是:
  • 对于32位且未使能物理地址扩展的系统,使用二级页表。Linux的做法是让页上级目录表和页中间目录表所包含的比特数目为0,让页全局目录表的比特数目包含除了页表和偏移量之外的所有比特,从而取消这两级目录。同时为了让代码可以同时运行在32比特环境和64比特环境,linux保留了这两级目录在指针序列中的位置,做法是将这两级目录所包含的表项数设置为1(这里需要注意的是即便只有一个比特,也可以表示两个项,因此需要此设置)。
  • 对于32且使能了物理地址扩展的系统,使用三级页表。
  • 对于64位系统,取决于硬件对线性地址位的划分。
在linux中,每个进程都有自己的页全局目录表(PGD),以及自己的页表集。当发生进程切换时,linux会完成页表的切换。
使用该方案后,每个虚拟地址都划分为相应的比特分组,其中PGD用于索引每个进程所专有的页全局表,以找到PUD,PUD用于索引进程的页上级目录表,以找到PMD依次类推直到找到PTE。PTE即页表数组,该表的表项包含了指向页帧的指针以及页的访问控制相关的信息,比如权限,是否在主存中,是否包含“脏”数据等等,OFFSET用做表内偏移。
使用该机制后,虚拟地址空间中不存在的内存区域对应的PUD,PMD,PTE将不被创建,这就节省了地址空间。

但是使用该机制后每次寻址都需要多次查表,才能找到对应的物理地址,因而降低了速递,CPU使用高速缓存和TLB来加速寻址过程。在访问内存时,如果虚拟地址对应的TLB存在,也就是TLB 命中了,则直接访问,否则就要使用相关的页表项更新TLB(此时可能需要创建新的页表项)然后再继续进行访问。下图是一个CPU的虚拟地址到实地址的转换过程:


当被访问的地址不存在对应的TLB表项时,就会产生TLB中断。在TLB中断中,会:

  1. 首先查找访问地址对应的页表,如果找不到对应的页表,就会生成相应的页表项(powerpc通过调用读写异常的处理函数完成该过程)。

  2. 使用PTE的内容更新TLB。

在TLB的内容更新完后,仍可能产生读写异常(也就是通常说的page fault),因为页表项虽然存在,但是其内容可能是非法的(比如页表并不在内存中),。

2.x86架构中的页

1.地址空间

当使用x86时,必须区分以下三种不同的地址:
  • 逻辑地址:机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。这种寻址方式在Intel的分段结构中表现得尤为具体,它使得MS-DOS或Windows程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。
  • 线性地址:线性地址是一个32位的无符号整数,可以表达高达2的32次方(4GB)的地址。通常用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。
  • 物理地址:也就是内存单元的实际地址,用于芯片级内存单元寻址。物理地址也由32位无符号整数表示。
X86中的MMU包含两个部件,一个是分段部件,一个是分页部件,分段部件(段机制)把一个逻辑地址转换为线性地址;接着,分页部件(分页机制)把一个线性地址转换为物理地址。转化过程如图所示:

 

2.分段

1)分段机制

在x86段机制中,逻辑地址由两部分组成,即段部分(选择符)及偏移部分。
段是形成逻辑地址到线性地址转换的基础。如果我们把段看成一个对象的话,那么对它的描述如下:
  1. 段的基地址(Base Address):在线性地址空间中段的起始地址。
  2. 段的界限(Limit):表示在逻辑地址中,段内可以使用的最大偏移量。
  3. 段的属性(Attribute): 表示段的特性。例如,该段是否可被读出或写入,或者该段是否作为一个程序来执行,以及段的特权级等等。
段的界限定义逻辑地址空间中段的大小。段内在偏移量从0到limit范围内的逻辑地址,对应于从Base到Base+Limit范围内的线性地址。在一个段内,偏移量大于段界限的逻辑地址将没有意义,使用这样的逻辑地址,系统将产生异常。另外,如果要对一个段进行访问,系统会根据段的属性检查访问者是否具有访问权限,如果没有,则产生异常。例如,在80386中,如果要在只读段中进行写入,80386将根据该段的属性检测到这是一种违规操作,则产生异常。
下图表示一个段如何从逻辑地址空间,重新定位到线性地址空间。图的左侧表示逻辑地址空间,定义了A,B及C三个段,段容量分别为LimitA、LimitB及LimitC。图中虚线把逻辑地址空间中的段A、B及C与线性地址空间区域连接起来表示了这种转换。
段的基地址、界限及保护属性存储在段的描述符表中,在虚拟—线性地址转换过程中要对描述符进行访问。段描述符又存储在存储器的段描述符表中,该描述符表是段描述符的一个数组。简单的说段描述符表里存储了段描述符,而段描述符又包含了硬件进行逻辑地址到线性地址转换所需的所有信息。
每个段描述符都定义了线性地址空间中的一段地址,它的属性以及它和逻辑地址空间之间的映射关系,实际上是如何从逻辑地址空间映射到线性地址空间。

2)linux中的段

各种段描述符都存放于段描述符表中,要么在GDT中,要么在LDT中。
描述符表(即段表)定义了386系统的所有段的情况。所有的描述符表本身都占据一个字节为8的倍数的存储器空间,空间大小在8个字节(至少含一个描述符)到64K字节(至多含8K)个描述符之间。
  1. 全局描述符表(GDT):全局描述符表GDT(Global Descriptor Table),包含着系统中所有任务都共用的那些段的描述符。
  2. 局部描述符表(LDT):局部描述符表LDT(local Descriptor Table),包含了与一个给定任务有关的描述符,每个任务各自有一个的LDT。有了LDT,就可以使给定任务的代码、数据与别的任务相隔离。
每一个任务的局部描述符表LDT本身也用一个描述符来表示,称为LDT描述符,它包含了有关局部描述符表的信息,被放在全局描述符表GDT中。
但是linux很少使用分段机制,这是因为,分段和分页都能用于将物理地址划分为小的地址片段的功能,因而它们是相互冗余的。分段可以为不同的进程分配不同的线性地址空间,而分页可以将相同的线性地址空间映射到不同的物理地址空间。linux采用了分页机制,原因是:
  1. 如果所有的进程都使用相同的线性地址空间,内存管理更简单
  2. 很多其他架构的CPU对分段的支持很有限
在linux中,所有运行在用户模式的进程都使用相同的指令和数据段,因此这两个段也被成为用户数据段和用户指令段。类似的,内核使用自己的内核数据段和内核数据段。这几个段分别用宏_ _USER_CS,_ _USER_DS,_ _KERNEL_CS, and_ _KERNEL_DS定义。这些段都从0开始,并且大小都相同,因而linux中,线性地址和逻辑地址是相同的,而且内核和用户进程都可以使用相同的逻辑地址,逻辑地址也就是虚拟地址,这就和其它架构统一起来了。
单处理器系统只有一个GDT,而多处理器系统中每个CPU都有一个GDT,GDT存放在cpu_gdt_table中GDT包含了用户数据段,用户指令段,内核数据段内核指令段以及一些其他段的信息。
绝大多数的linux用户程序并不使用LDT,内核定义了一个缺省的LDT给大多数进程共享。它存放于default_ldt中。如果应用程序需要创建自己的局部描述附表,可以通过modify_ldt系统调用来实现。使用该系统调用创建的LDT需要自己的段。应用程序也可以通过modify_ldt来创建自己的段。

四、内存管理初始化 

1.初始化流程

内存初始化关键是page_data_t数据结构以及其下级数据结构(zone,page)的初始化。
宏NODE_DATA用于获取指定节点对应的page_data_t,在多节点系统中,节点数据结构为struct pglist_data *node_data[];该宏获取对应节点所对应的数据结构,如果是单节点系统,节点的数据结构为struct pglist_data contig_page_data;该宏直接返回它。

1.初始化代码流程

系统启动代码中与内存管理相关的初始化代码如图:
其功能分别为:
  • setup_arch:架构相关的初始化,其中包括了内存管理中与架构相关部分的初始化。boot分配器在这个时候被初始化。
  • setup_per_cpu_areas:SMP中,该函数初始化源代码中静态定义的每CPU变量,该类变量对系统中每一个CPU都一个副本。此类变量保存在内核二进制影响的一个独立的段中。
  • build_all_zonelists:建立节点和zone的数据结构
  • mem_init:初始化内存分配器
  • setup_per_cpu_pageset:遍历系统中所有的zone,对于每一个zone为所有的CPU分配pageset(冷热页缓存)并进行初始化,在这个函数被调用之前,只有boot pagesets可用。

2.节点和zone的初始化

build_all_zonelists会遍历系统中所有的节点,并为每个节点的内存域生成数据结构。它最终会使用节点数据结构调用build_zonelists,该函数会在该节点和系统中其它节点的内存之间建立一种距离关系,距离表达的是从其它节点分配的代价,因而距离越大,分配代价也越大;之后的内存分配会依据这种距离进行,优先选择本地的,如果本地的不可用,则按照距离从近到远来分配,直到成功或者所有的都失败。
在一个节点的内存域中:
  1. 高端内存被看做是最廉价的,因为内核不依赖于高端内存,它被耗尽不会对系统有不良影响
  2. DMA看做是最昂贵的,因为它有特殊用途,它用于和外设交互数据
  3. 普通内存介于两者之间,因为内核有些部分是依赖于普通内存的,所以它耗尽对系统会有影响
当分配内存时,假设指定的内存区域的昂贵程度为A,则分配过程为:
  1. 首先尝试从本节点分配,并且是按照昂贵程度递增的顺序从A开始尝试,直到最昂贵的区域
  2. 如果从本节点分配失败,则按照距离关系依次检查其它几点,在检查每个节点时,仍是按照昂贵程度递增的顺序从A开始尝试,直到最昂贵的区域

2.特定于体系结构的设置

1.内核在内存中的布局

在启动装载器将内核复制到内存,并且初始化代码的汇编部分执行完后,内存布局如图所示:
 
这是一种默认布局,也存在一些例外:
  • PHYSICAL_START可用于配置修改内核在内存中的位置。
  • 内核可以被编译为可重定位二进制程序,此时由启动装载器决定内核的位置。
默认情况下,内核安装在RAM中从物理地址0x00100000开始的地方。也就是第2M开始的那个。没有安装在第1M地址空间开始的地方的原因:
  • 页帧0由BIOS使用,存在上电自检(POST)期间检查到的系统硬件配置。
  • 物理地址从0x000a0000到0x000fffff的范围通常保留给BIOS程序使用
  • 第一个MB内的其它页帧可能由特定计算机模型保留
从_edata到_end之间的初始化数据部分所占用的内存在初始化完成后有些是不再需要的,可以回收利用,可以控制哪些部分可以回收,哪些部分不能回收。
内核占用的内存分为几段,其边界保存在变量中,可以通过System.map查看相关的信息,在系统启动后也可以通过/proc/iomem查看相关的信息。

2.初始化步骤

在start_kernel,在其中会调用setup_arch来进行架构相关的初始化。setup_arch会完成启动分配器的初始化以及各个内存域的初始化(paging_init)。paging_init最终会调用free_area_init_node这是个架构无关的函数,它会完成节点以及zone的数据结构的初始化。

3.分页机制初始化

Linux内核将虚拟地址空间分成了两部分:用户空间和内核空间。用户进程可用的部分在进程切换时会发生改变,但是由内核保留使用的部分在进程切换时是不变的。在32位系统上,两部分的典型划分比为3:1(该比例可修改),即4G虚拟地址空间中的3G是用户进程可访问的,而另外1G是保留给内核使用的。
32位系统中,内核地址空间又被分为几部分,其图示如下:

3.1 直接映射

其中第一部分用于将一部分物理内存直接映射到内核的虚拟地址空间中,如果访问内存时所使用的虚拟地址与内核虚拟地址起始值的偏移量不超过该部分内存的大小,则该虚拟地址会被直接关联到物理页帧;否则就必须借助”高端内存“来访问,在IA-32系统上,这部分空间大小为896M。
对于直接映射部分的内存,内核提供了两个宏:

  • __pa(vaddr):用于返回与虚拟地址vaddr相对应的物理地址。
  • __va(paddr):用于返回和物理地址paddr相对应的虚拟地址。
剩余部分被内核用作其它用途:
  1. 虚拟地址中连续,但是物理地址不连续的内存区域可以从VMALLO区域分配。该机制通常用于用户进程,内核自己会尽量尝试使用连续的物理地址。当然,当直接映射部分不能满足需求时,内核也会使用该区域。在ppc32中ioremap就使用了该区域。
  2. 持久映射区域用于将高端内存中的非持久页映射到内核中。
  3. 固定映射用于与物理地址空间中的固定页关联的虚拟地址页,但是物理地址页即页帧可以自由选择。
内存的各个区域边界由图中所示的常数定义。high_memory定义了直接映射区域的边界。
系统中定义了与页相关的一些常量:
  • num_physpages:最高可用页帧的页帧号
  • totalram_pages:可用页帧的总数目
  • min_low_pfn:RAM中在内核映像之后的第一个可用的页帧号
  • max_pfn:最后一个可用的页帧号
  • max_low_pfn:被内核直接映射的最后一个页帧的页帧号(低端内存中)
  • totalhigh_pages:没有被内核直接映射的页帧的总数(高端内存中)
在直接映射的内存区域和用于vmalloc的内存区域之间有一个大小为VMALLOC_OFFSET的缺口,它用于对内核进行地址保护,防止内核进行越界访问(越过了直接映射区域)。

3.2 vmalloc区

vmalloc区域的起始位置取决于high_memory和VMALLOC_OFFSET。而其结束位置则取决于是否启用了高端内存支持。如果没有启用高端内存支持,就不需要持久映射区域,因为所有内存都可以直接映射。

3.3 持久映射区

持久映射页则开始于PKMAP_BASE,其大小由LAST_PKMAP表示有多少个页。

3.4 固定映射区

固定映射开始于FIXADDR_START结束于FIXADDR_END。这部分区域指向物理内存的随机位置。在该映射中,虚拟地址和物理地址之间的关联是可以自由定义的,但是定义后就不能更改。该区域一直延伸到虚拟地址空间的顶端。

固定映射的优势在于编译时,对该类地址的处理类似于常数,内核一旦启动即为它分配了物理地址。对此类地址的引用比普通指针要快。在上下文切换期间,内核不会将对应于固定地址映射的TLB刷新出去,因此对这类地址的访问总是通过高速缓存。
对于每一个固定地址,都必须创建一个常数并添加到称为fixed_addresses的枚举列表里。内核提供了virt_to_fix和fix_to_virt用于虚拟地址和固定地址常数之间的转换。

set_fixmap用于建立固定地址常量和物理页之间的对应关系。

3.5 冷热页

free_area_init_node最终会调到zone_pcp_init,它会为该zone计算一个batch值。而setup_per_cpu_pageset则会完成冷热缓存的初始化。

3. 启动过程中的内存管理

bootmem分配器用于内核在启动过程中分配和内存。这是一个很简单的最先适配的分配器。它使用位图来管理页面,比特1表示页忙,0表示空闲。需要分配内存时就扫描位图,直到找到第一个能够满足需求的内存区域。

1. 数据结构

内核为每个节点都分配了一个struct bootmem_data结构的实例用来管理该node的内存。

2. 初始化

在不同的架构下初始化的代码不尽相同,但是都是在paging_int中被调用。

3. 分配器接口

alloc_bootmem*用于分配内存free_bootmem*用于释放内存

4. 停用bootmem分配器

当slab系统完成初始化,能够承担内存分配工作时,需要停掉该分配器,这是通过free_all_bootmem(UMA系统)或free_all_bootmem_node(NUMA系统)来完成的

5. 释放初始化数据

内核提供了两个属性__init用于标记初始化函数,__initdata用于标记初始化数据,这意味着这个函数/数据在初始化完成后其内存就不需了,可以进行回收利用。

4. 内核页表的初始化

以powerpc为例,内核页表的初始化由MMU_init来完成,它在start_kernel之前被调用:

MMU_init->mapin_ram->__mapin_ram_chunk->map_page,

map_page的代码如下:

[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. int map_page(unsigned long va, phys_addr_t pa, int flags)  
  2. {  
  3.         pmd_t *pd;  
  4.         pte_t *pg;  
  5.         int err = -ENOMEM;  
  6.   
  7.         /* Use upper 10 bits of VA to index the first level map */  
  8.         pd = pmd_offset(pud_offset(pgd_offset_k(va), va), va);  
  9.         /* Use middle 10 bits of VA to index the second-level map */  
  10.         pg = pte_alloc_kernel(pd, va);  
  11.         if (pg != 0) {  
  12.                 err = 0;  
  13.                 /* The PTE should never be already set nor present in the 
  14.                  * hash table 
  15.                  */  
  16.                 BUG_ON((pte_val(*pg) & (_PAGE_PRESENT | _PAGE_HASHPTE)) &&  
  17.                        flags);  
  18.                 set_pte_at(&init_mm, va, pg, pfn_pte(pa >> PAGE_SHIFT,  
  19.                                                      __pgprot(flags)));  
  20.         }  
  21.         return err;  
  22. }  

再看下init_mm的相关定义:

[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. struct mm_struct init_mm = {   
  2.         .mm_rb          = RB_ROOT,  
  3.         .pgd            = swapper_pg_dir,  
  4.         .mm_users       = ATOMIC_INIT(2),  
  5.         .mm_count       = ATOMIC_INIT(1),  
  6.         .mmap_sem       = __RWSEM_INITIALIZER(init_mm.mmap_sem),  
  7.         .page_table_lock =  __SPIN_LOCK_UNLOCKED(init_mm.page_table_lock),  
  8.         .mmlist         = LIST_HEAD_INIT(init_mm.mmlist),  
  9.         INIT_MM_CONTEXT(init_mm)  
  10. };  

因此可见,kernel的页表是保存在swapper_pg_dir中的。它是init_task的active_mm:

[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. #define INIT_TASK(tsk)  \  
  2. {                                                                       \  
  3.         .state          = 0,                                            \  
  4.         .stack          = &init_thread_info,                            \  
  5.         .usage          = ATOMIC_INIT(2),                               \  
  6.         .flags          = PF_KTHREAD,                                   \  
  7.         .prio           = MAX_PRIO-20,                                  \  
  8.         .static_prio    = MAX_PRIO-20,                                  \  
  9.         .normal_prio    = MAX_PRIO-20,                                  \  
  10.         .policy         = SCHED_NORMAL,                                 \  
  11.         .cpus_allowed   = CPU_MASK_ALL,                                 \  
  12.         .nr_cpus_allowed= NR_CPUS,                                      \  
  13.         .mm             = NULL,                                         \  
  14.         .active_mm      = &init_mm,                                     \  

[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. truct task_struct init_task = INIT_TASK(init_task);  

init_task是内核代码开始位置被执行的:

[cpp] viewplain copy
 在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * This is where the main kernel code starts. 
  3.  */  
  4. start_here:  
  5.         /* ptr to current */  
  6.         lis     r2,init_task@h  
  7.         ori     r2,r2,init_task@l  
start_here在start_kernel之前被执行。在start_kernel里rest_init会启动kernel_init来启动一个init进程,init_task并不是init进程,init_task是内核启动主代码所在的上下文,该进程最后停在了cpu_idle中(start_kernel->rest_init->cpu_idle),好吧,它的真面目出来了,它就是创世界的进程,并且最后变成了无所事事的idle了。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 探讨map空值以及json空值

    平时的项目中由于不知名情况,数据库中的字段不知道有意还是无意,反正都会有null、或者空字符串的情况。1.mybatis取数时空会得到什么? mapper:<select id="findAll" resultType="User">select user_id id,user_name userName,user_age age from …...

    2024/4/12 11:23:06
  2. 解决“适配器 无线网络/本地网络 可能出现问题”

    问题首先,你遇到的问题可能是 1、此计算机当前已将连接限制为XXX(xxx为你的wifi名称)。2、对网络进行诊断之后发现“适配器 无线网络 遇到问题“。(如果是本地网络则也有可能是”本地网络“) 3、适配器驱动程序出现问题 诊断无法解决 分析那么很有可能是有一些驱动出现问…...

    2024/4/28 16:16:55
  3. 压缩JS的eclipse插件

    主页:http://jscompressor.oncereply.me/Update site: http://jscompressor.oncereply.me/update/...

    2024/4/28 11:54:28
  4. 新版本的Firefox浏览器不支持firebug JS调试的问题

    菜鸟小钢炮最近初学JavaScript,听人说想学好js就得学会用firebug调试,于是今天下午的时候就试了试。 结果遇到了一些问题,就是我的Firefox浏览器安装好firebug插件之后,然后用firebug调试的时候死活 识别不出js脚本,一直说我文件中不包含js代码,这我就郁闷了呀,作为菜鸟…...

    2024/4/12 11:22:30
  5. 如何通过CSS隐藏overflow滚动条,但保留滚动效果

    主要分三类主流浏览器,亲测可行 IE10+. /*对应添加了overflow的元素添加如下CSS样式*/ -ms-overflow-style: none;Firefox. /*对应添加了overflow的元素添加如下CSS样式*/ scrollbar-width: none;Chrome/Safari. /*添加CSS滚动条选择器*/ class名、id名等::-webkit-scrollbar …...

    2024/4/12 11:23:42
  6. Java的Map中value为一个json数据,将map序列化多了转义及在某一方法中return多个值问题

    感谢素的帮助和指导才解决这个问题 一、首先我想在某一方法中return多个值 情景:将一个方法中多次post的结果都返回,后来我想到的是将每一次的请求的结果(Json数据类似下面的例子)放在一个Map里面,然后将这个Map再序列化,然后返回序列化结果就OK了。 然后就导致了,返回…...

    2024/4/28 9:06:58
  7. linux 内存占用过大分析

    1、使用 free -g 查看内存使用情况:2、查看进程占用的内存情况: ps aux|awk {sum+=$6} END {print sum/1024} 结果发现占用了 17G3、查看内存分配情况:cat /proc/meminfo 那slab是什么呢?slab是Linux操作系统的一种内存分配机制。其工作是针对一些经常分配并释放的对象,如…...

    2024/4/28 9:16:49
  8. 网卡正常启动 ipv4 ipv6未连接 ipconfig网络适配器无法获取相应信息 win7诊断适配器驱动问题

    一天,重启笔记本后,电脑无法上网,有线和无线都不行,甚至连手机数据线共享网络都不行。网卡正常启动 ipv4 ipv6未连接 ipconfig网络适配器无法获取相应信息 win7诊断适配器驱动问题。具体情况如图:网上说卸载了360就可以,但是本人试过没用,还试了各种方法:重装驱动,重置…...

    2024/4/28 17:29:17
  9. java 后端,把数据转换为树,map递归生成一颗json树,返回给前端(后台转换)

    java 后端,把数据转换为树,map递归生成一颗json树,返回给前端(后台转换)1.为什么要写这样的一篇博客?2.java 后端代码3. 转化完的数据在前端格式为类似于: 1.为什么要写这样的一篇博客?在公司的实习的时候,遇到了一个略坑的东西,就是要医院的科室通过其子父id做成一颗…...

    2024/4/28 5:55:48
  10. js判断对象不为空对象

    一、我用的ES6判断对象不为空对象let data = {}; //判断空对象 let count = Object.keys(data).length; //用Object.keys(data).length来判断是否味空对象, 如果为空对象,length == 0二、JSON.stringify(evtValue)=={}欢迎关注我的个人技术公众号!javascript艺术...

    2024/4/28 12:46:01
  11. 深入浅出内存管理--内存管理概述

    内存管理我的理解是分为两个部分,一个是物理内存的管理,另一个部分是物理内存地址到虚拟地址的转换。 物理内存管理 内核中实现了很多机制和算法来进行物理内存的管理,比如大名鼎鼎的伙伴系统,以及slab分配器等等。我们知道随着Linux系统的运行,内存是不断的趋于碎片化的,…...

    2024/4/28 16:02:55
  12. UBUNTU下安装Broadcom 802.11g 网络适配器驱动

    (最近在联想E43A笔记本上装了一个ubuntu,但无线无法使用,查了好多办法都没有成功,知道找到这篇文章,故转来mark一下!)UBUNTU下安装Broadcom 802.11g 网络适配器驱动 2011-02-11 23:51:23| 分类: LINUX|字号 订阅安装这个无线网卡的驱动有两种方法,一种是用ndiswrapper…...

    2024/4/12 12:56:12
  13. 记录css自定义滚动条遇到的兼容性问题

    CSS3自定义滚动条样式 -webkit-scrollbar相关参数:::-webkit-scrollbar 滚动条整体部分 ::-webkit-scrollbar-thumb 滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条) ::-webkit-scrollbar-track 滚动条的轨道(里面装有Thumb) ::…...

    2024/4/28 6:33:15
  14. VMware重装:网络适配器驱动安装失败解决办法

    1.原因安装失败猜测是因为注册表没有删除干净,所以需要软件将无用注册表清楚。尝试使用过腾讯管家,但还是无用,最后通过CCleaner解决。2.CCleaner安装官网:https://www.ccleaner.com/ccleaner/download3.卸载VMware控制面板->卸载程序->右键VMware->更改->下一…...

    2024/4/18 6:57:56
  15. JS实现文本框不可编辑

    JS实现文本框不可编辑 方法1: οnfοcus=this.blur() 当鼠标放不上就离开焦点 <input type="text" name="input1" value="中国" οnfοcus=this.blur()> 方法2:readonly <input type="text" name="input1" value=…...

    2024/4/28 18:21:48
  16. css 修改滚动条、css 修改选中颜色

    选中颜色::selection {background-color: red;color: #fff; }滚动条::-webkit-scrollbar {width: 5px;height: 10px;overflow: auto; } ::-webkit-scrollbar-thumb {background-color: $color_blue1;min-height: 25px;min-width: 25px;border: 1px solid #e0e0e0; } ::-webkit-…...

    2024/4/28 8:38:37
  17. hive表中json字符串转map的处理

    有一次a表中一个字段A string 但是存的是 {"orderid":745005721,"dealtype":[23,311,226]} 要将a表的A字段导入到b表的B字段 但是B字段的类型是map 会报错 Cannot convert column 1 from string to map<string,string>. 那么想到用udf函数来解决 写…...

    2024/4/28 8:48:58
  18. linux系统内存实际使用率

    linux系统内存实际使用率图中的例子很典型,就是:多数的linux系统在free命令后会发现free(剩余)的内存很少,而自己又没有开过多的程序或服务。对于上述的情况,正确的解释是:linux的内存管理机制与windows的有所不同。具体的机制我们无需知道,我们需要知道的是,linux的内…...

    2024/4/28 6:45:55
  19. 采用json-lib进行Map与Json转换

    Json转换工具实在之多,最近又听说FastJson对Java序列化和反序列化最优,相比 Java自带序列化、Json-lib、Jackson等。不过本人很青睐Gson,但是好像用的人也不是很多,项目中用的最多的就是垃圾Json-lib了,虽然烂,但是还是的继续使用着,因为项目在我来之前已经搭建了,不过…...

    2024/4/12 11:23:42
  20. 网络适配器、网卡和网卡驱动

    网络适配器(网卡)网络适配器其实就是计算机内部的网络连接设备,也就是俗称的网卡。网卡分为有线网卡和无线网卡,有线网卡能够支持宽带有线网络的连接和网络访问,而无线网卡则支持无线wifi局域网的网络连接和访问。台式电脑一般默认都不带无线卡,所以是无法接收wifi进行上…...

    2024/4/28 8:39:47

最新文章

  1. 项目经理学习PMP对自己工作有多大帮助?

    PMP是一种项目管理认证&#xff0c;也是最流行和含金量较高的认证之一。因此&#xff0c;你问它对项目管理有多大帮助&#xff0c;我可以说PMP可以被视为量身定制给项目管理岗人员的一个证书&#xff0c;你能理解它的重要性吗&#xff1f; 随着国家经济建设由基础设施向高端产业…...

    2024/4/28 18:34:35
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 微信小程序生命周期管理:从数据初始化到事件绑定

    作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…...

    2024/4/28 12:35:56
  4. PHP中常见的CRUD函数

    PHP中常见的CRUD函数 创建&#xff08;Create&#xff09;&#xff1a;创建一个新的数据记录 function create($name, $age, $email) {$conn mysqli_connect("localhost", "username", "password", "myDB");$sql "INSERT INT…...

    2024/4/22 9:22:19
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/28 13:52:11
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/28 13:51:37
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/28 15:57:13
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57