zoukankan      html  css  js  c++  java
  • 虚拟内存

    这里写图片描述

    在 主存(内存)- 辅存(硬盘等)这一层次的不断发展中,逐渐形成了虚拟存储系统。在这个系统中,程序员编程的地址范围与虚拟存储器的地址空间相对应。例如,机器指令地址码为24位,则虚拟存储器的存储单元个数可达16M(2的24次方是16M。为啥地址码是多少位,存储单元个数就是2的多少次方?)。而这个数字比真实内存的存储单元个数要大得多。这类指令地址码称为虚地址(虚存地址、虚拟地址)或逻辑地址,而把真实内存的地址称为实地址或物理地址。

    物理地址是程序在执行过程中能够真正访问的地址,也是实实在在的主存地址。对具有虚拟存储器的计算机系统而言,程序员编程时,可用的地址空间远远大于主存空间(靠,我编程从来不关心内存地址;内存地址只是一个个符号化了的东西:变量、指针什么的。也从来不关心它够不够,好像没遇到不够的?),使得程序员(其实改为进程更合适)以为自己占有一个容量极大的主存。但其实这个大主存并不存在,这也是被称为虚拟存储器的原因。

    对虚拟存储器而言,其逻辑地址变换为物理地址的工作由操作系统和硬件自动完成,这一切对程序员是透明的。当虚地址的内容在主存时,机器可立即使用;若不在主存,则必须先调入主存才能为机器所用。

    “操作系统的各种内存管理策略都出于同一个目的:同时将多个进程存放在内存中,以便允许多道程序设计。不过,这些策略都需要在进程执行之前将整个进程放在内存中。动态载入虽然能减轻这个限制,但需要程序员小心应用,并且花费额外的工作。
    而虚拟内存则允许执行进程部分在内存中,一个显著的优点是程序可以比物理内存大。而且虚拟内存将内存抽象成一个巨大的数组,将用户视界的逻辑内存与物理内存分离,使得程序员不受内存存储的限制。简而言之,虚拟内存展现在程序员面前的是一个比物理内存要大得多的、地址连续的内存空间,而事实上是映射到支离破碎的物理内存,乃至磁盘上”
    相关文章可见拙作 操作系统学习笔记:虚拟内存

    windows的虚拟内存
    以上所述,感觉虚拟内存就是个逻辑概念,没有实物相对应。但是,windows中,明明是占用了一部分硬盘空间,称为“虚拟内存”的。这是为什么捏?

    确实,Windows的虚拟内存实现技术(虚拟内存是个接口,然后操作系统各自实现?),是匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。物理内存不足,则用虚拟存储器进行补偿。它将计算机的RAM和硬盘上的临时空间组合。当RAM运行速率缓慢时,它便将数据从RAM移动到称为“分页文件”的空间中(操作系统有所谓进程调度,线程调度,对内存的使用有分页、分段等使用方式)。将数据移入分页文件可释放RAM,以便完成工作。

    硬盘上被划作虚拟内存部分,其实就是一个硕大无朋的文件:PageFile.sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件。

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808778.html
Copyright © 2011-2022 走看看