笔记本电脑维修查询_硅基智慧

笔记本电脑开不了机维修多少钱_物理内存与虚拟内存

笔记本无法开机 CPU知识

一.虚拟地址的来源

在早期的计算机中,要运行程序,该程序将全部加载到内存中,并且该程序直接在物理内存上运行。换句话说,程序运行时直接访问实际的物理内存地址。当计算机要运行某些程序(正在运行的程序称为进程)时,只要这些进程所需的内存空间不超过计算机拥有的物理内存空间,那么就不会有问题。由于程序直接访问物理内存,因此一个进程可以随意修改其他进程的内存数据。如果“恶意”进程修改了其他进程的内存数据,则通常会导致系统崩溃。这种情况对我们来说是无法忍受的,因为当我们要使用计算机时,任何任务都有问题,并且我们不应该影响其他任务的执行。当以不同的顺序运行多个任务时,这些程序的内存地址是不确定的。如果当时计算机的物理存储空间为128MB,而操作系统需要78MB的物理存储空间,则剩余的物理存储空间为50MB。这时,运行另一个任务A需要30MB的物理内存空间。如果要运行另一个任务B,则任务B所需的物理内存空间不能超过20MB,否则会出现问题。下次,先运行任务B,然后再运行任务A。这一次,它们的地址与上次不同。此外,在程序运行时,如果程序上运行的物理内存中的数据被篡改,则程序可能会挂起,或者计算机系统可能崩溃。从上面可以看到,计算机的物理内存使用率相对较低且不安全。笔记本电脑开不了机维修多少钱_物理内存与虚拟内存,轻微的错误可能会导致系统崩溃,并且某些程序在运行时不需要运行所有功能。,只需在特定时间内运行特定功能即可。在程序执行期间,物理内存和硬盘之间还有许多数据交换过程。

二,细分

为了解决上述一系列问题,人们想到了一种有效的方法,在程序和物理存储器之间增加一个中间层,并使用间接地址访问方法来访问物理存储器。根据此方法,在程序中访问的内存地址不再是实际的物理内存地址,而是虚拟地址,然后操作系统将此虚拟地址映射到物理内存地址。这样,只要操作系统处理虚拟地址和物理内存地址之间的映射关系,就可以确保最终由不同程序访问的内存地址位于不同的区域,并且不会有地址重叠。,并且可以隔离物理内存地址。这样的效果,从而保护计算机免于“轻松”损坏。例如,在32位Windows操作系统中,当创建进程时,操作系统将为该进程分配4GB的虚拟进程地址空间。之所以是4GB,是因为在32位操作系统中,指针的长度为4个字节,而4字节指针的可寻址性为0x00000000至0xFFFFFFFF,最大值0xFFFFFFFF表示容量为4GB。与虚拟地址空间相反,还有一个物理地址空间,它对应于实际的物理内存。如果您的计算机上安装了512MB的内存,则此物理地址空间的范围是0x00000000〜0x1FFFFFFF。当操作系统将虚拟地址映射到物理地址时,它只能映射到该范围,并且操作系统只能映射到该范围。创建一个进程时,每个进程将拥有自己的4GB虚拟地址空间。应该注意的是,这个4GB的地址空间是“虚拟”的,不是真实的,并且每个进程只能访问其自己的虚拟地址空间中的数据,而不能访问其他进程中的数据。通过此方法可以实现进程之间的地址隔离。这4GB的虚拟地址空间应用程序可以免费使用吗?不幸的是,在Windows系统下,该虚拟地址空间分为4部分:NULL指针区域,用户区域,隔离区域和内核区域。

1)NULL指针区域(0x00000000〜0x0000FFFF):如果进程中的线程试图操纵该分区中的数据,则cpu将导致非法访问。它的功能是在调用malloc和其他内存分配函数时,如果找不到足够的内存空间,它将返回NULL。不执行安全检查。它仅假定地址已成功分配,并开始访问内存地址0x00000000(NULL)。由于禁止访问该存储器分区,因此将发生非法访问,并且该过程的操作将终止。
2)用户区(0x00010000〜0xBFFEFFFF):该分区存储进程的专用地址空间。一个进程无法以任何方式(同一exe,通过写时复制来完成地址隔离)访问驻留在该分区中的另一个进程的数据。(在Windows中,所有.exe和动态链接库均已加载到该区域。系统还将进程可访问的所有内存映射文件映射到此分区)。
3)隔离区(0xBFFF0000〜0xBFFFFFFF):禁止该分区进入。任何尝试访问此内存分区都是非法的。Microsoft保留此分区的目的是简化操作系统。
4)内核区域(0xC0000000〜0xFFFFFFFF):此分区存储操作系统所在的代码。线程调度,内存管理,文件系统支持,网络支持以及所有设备驱动程序代码均加载在该分区中,并由该分区共享所有过程。

虚拟地址空间

由于程序必须在实际的物理内存上运行,并且直接操作物理内存更加危险,因此通过创建虚拟地址空间,虚拟地址与物理地址之间存在一对一的映射关系,和程序运行地址与物理地址的隔离确保了将不同的进程地址空间映射到不同的人类物理地址空间。这解决了同一台计算机上同一程序的运行地址不确定的问题,也解决了该程序运行时由于其他程序对物理内存数据的修改而直接导致系统崩溃的问题。但是,仍然无法解决物理内存使用效率低下的问题。

笔记本电脑开不了机维修多少钱_物理内存与虚拟内存

三,分页

为了解决物理内存使用效率低的问题,人们提出了一种分页方法。分页的基本方法是将地址空间分为许多页,每页的大小由CPU确定,然后由操作系统选择要执行的页数。一些CPU页的大小为4KB,而某些CPU页的大小为4MB。假设页面大小为4KB,则4GB虚拟内存空间可以分为4×1024×1024÷4=1048576页。如果此时计算机中安装的内存模块的大小为512MB,则512MB物理内存可以分为512×1024÷4=131072页,显然虚拟内存地址空间中的页数比物理内存空间中的页面数。

在分段方法中,每次程序运行时,都将全部加载到虚拟内存中。尽管分页方法不同,但是它会将大部分程序存储在硬盘中,硬盘的这一部分称为“交换区”。将一小部分要运行的虚拟内存加载到虚拟内存中,并通过映射在物理内存中运行,从而提高了物理内存的利用率。

物理内存和交换区

为了促进CPU对物理内存的高效执行和管理,有必要每次从虚拟内存中提取一页代码并将其放入物理内存中。虚拟内存页面具有三种状态,即未分配,已缓存和未缓存。

未分配:指尚未由操作系统分配或创建的未分配虚拟页面。未分配的虚拟页面没有任何与之关联的数据和代码,因此它不占用磁盘资源。

缓存:表示已经为该部分分配了部分物理内存,虚拟内存和物理内存之间存在映射关系;

未缓存:是指已经加载到虚拟内存中,但尚未在物理内存中建立映射关系的缓存。

四,页表

虚拟内存中的某些虚拟页面需要先缓存在物理内存中,然后才能执行。因此,操作系统具有一种机制来确定虚拟页是否已缓存在物理内存中。您还需要知道此虚拟页面存储在磁盘上。在物理内存中,选择可用页面或更新缓存页面,然后将所需的虚拟页面从磁盘复制到物理内存。这些功能通过软件和硬件的组合来完成,并存储在物理内存中称为页表的数据结构中。页表的结构如下图所示:

页表实际上是一个数组。该数组存储称为页表项(PTE)的结构。虚拟地址空间的每个页面在页面表中都有一个对应的页面表项(PTE)。转换虚拟页面地址时,是查询页面表中每个虚拟页面的PTE进行地址转换的。地址转换的过程如下:

假定每个PTE都有一个有效位和一个n位字段地址。有效位指示相应的虚拟页是否已缓存在物理内存中。0表示未缓存。1表示已缓存。n位地址字段指示如果未缓存(有效字段为0)并且n位地址字段不为空,则n位地址字段指示虚拟页在磁盘上的起始位置。如果n位字段为空,则表示未分配虚拟页面;如果将其缓存(有效字段为1),则n位地址字段不为空,这表示物理内存中虚拟页的起始地址。

四个虚拟页VP1,VP2,VP4,VP7缓存在物理内存中。尚未分配两个虚拟页面VP0和VP5。但是剩余的虚拟页面VP3和VP6已分配,但尚未缓存在物理内存中以供执行。

五,内存管理单元MMU(MemoryManagementUnit)

存储器管理单元MMU的主要功能是将虚拟地址转换为物理地址。此外,它还可以实现内存保护,高速缓存控制,总线仲裁和存储区切换。也就是说,程序运行过程所需的物理内存地址全部由所谓的内存管理单元完成。应当注意,存储器管理单元是硬件管理,而不是软件。内存管理单元使每个程序都有自己独立的虚拟地址空间,从而提高了物理内存的利用率。它还提供了内存保护功能,可以将特定的内存块设置为读,写或可执行属性,以防止内存被程序恶意篡改。其工作流程如下:

六,逻辑地址,线性地址,物理地址和虚拟地址的区别

1)逻辑地址(LogicalAddress):是指与程序生成的段相关的偏移地址部分。例如,在C语言指针编程中,您可以读取指针变量本身的值(&operation)。实际上,该值是逻辑地址,相对于当前进程的数据段的地址,与绝对物理地址无关。仅在Intel实模式下,逻辑地址等于物理地址(因为实模式没有分段或分页机制,CPU不会执行自动地址转换),逻辑地址是程序执行的偏移地址英特尔保护模式下的代码(假设代码段和数据段完全相同)。程序员开发应用程序时,他们需要处理逻辑地址,而无需处理分段和分页机制。系统程序员需要进行分段和分页。尽管程序员可以直接操作内存,但他们只能在操作系统分配给您的内存段上操作。
2)线性地址:它是逻辑地址和物理地址转换之间的中间层。程序代码将在段中生成逻辑地址或偏移地址,再加上相应段的基址以生成线性地址。如果启用了分页机制,则可以转换线性地址以生成物理地址。如果未启用分页机制,则线性地址直接是物理地址。Intel80386的线性地址空间容量是4G(2到32的幂是32地址总线寻址)。
3)物理地址:指CPU外部地址总线上物理存储器的地址。它是地址转换的最终地址,它是计算机中安装的内存模块的大小。如果启用了分页机制,则将使用页面目录和页面表中的条目将线性地址转换为物理地址。如果未启用分页机制,则线性地址将直接变为物理地址。
4)虚拟地址(VirtualAddress):是指计算机提供的内存量比实际内存大得多。每个程序使用其自己的虚拟内存,并且其大小通常与物理内存相同。这使程序员可以编写和运行比实际系统大得多的内存的程序。这允许在内存资源有限的系统上实施许多大型项目。一个适当的类比是,如果您要从深圳到北京,则不必拥有从深圳到北京的距离那么长的火车。您只需要两个比火车长一点的导轨即可完成此任务。铺设铁轨的动作足够快,因此可以将两段铁轨交替放置在道路上,以使火车从深圳行驶到北京,使火车就像在铁路上行驶。这是虚拟内存管理需要完成的任务。在Linux0.11内核中,为每个进程划分了一个总容量为64MB的虚拟内存空间。因此,程序的逻辑地址范围是0x0000000到0x4000000。有时我们也将逻辑地址称为虚拟地址。逻辑地址和物理地址之间的差异为0xC0000000,这是因为虚拟地址->线性地址->物理地址映射正是此值。该值由操作系统指定。逻辑地址(或虚拟地址)到线性地址由CPU的分段机制自动转换。如果未打开分页管理,则线性地址是物理地址。如果启用了分页管理,则系统程序需要参与从线性地址到物理地址的转换过程。具体来说,这是通过设置页面目录表和页面表条目来完成的。

标签:物理内存 虚拟内存 笔记本电脑开不了机