现代操作系统 - 存储设备
作者:Frank 发布时间:[ 2016/10/26 10:37:34 ] 推荐标签:操作系统 Linux 内存
分段和分页结合:Pentium
如果一个段比较大,把它整个保存在内存中可能很不方便甚至是不可能的,因此产生了对它进行分页的想法。这样,只有那些真正需要的页面才会被调入内存。
每个段都看做是一个虚拟内存并对它进行分页,以结合分页的优点(统一的页面大小和在只使用段的一部分时不用把它全部调用内存)和分段的优点(易于变成、模块化、保护和共享)。
Pentium处理器中虚拟内存的核心是两张表,即LDT(局部描述符表)和GDT(全局描述符表)。每个程序都有自己的LDT,但是同一台计算机上的所有程序共享一个GDT。LDT描述局部于每个程序的段,包括其代码、数据、堆栈等,GDT描述系统段,包括操作系统本身。
为了访问一个段,一个Pentium程序必须把这个段装入机器的6个段寄存器的某一个。在运行过程中,CS寄存器保存代码段,DS寄存器保存数据,其他寄存器不太重要。
小结
系统通过交换技术可以同时运行总内存占用超过物理内存大小的多个进程,如果一个进程没有内存空间可用,它将被换到磁盘上。内存和磁盘上的空间可以使用位图或空闲区列表来记录。
现代计算机都有某种形式的虚拟内存。在简单的形式中,每一个进程的地址空间呗划分为同等大小的块,成为页面,页面可以被放入内存中任何可用的页框中。有多重页面置换算法,其中两个比较好的算法是老化算法和工作集时钟算法。
分段可以帮助处理在执行过程中大小有变化的数据结构,并能简化链接和共享。分段还有利于不同的段提供不同的保护。有时,可以把分段和分页结合起来,以提供一种二维的虚拟内存,Pentium是这样及支持分段也支持分页的系统。
Linux中的内存管理
每个Linux进程都有一个地址空间,逻辑上有三段组成:代码段、数据段和堆栈段。
代码段包含了形成程序可执行代码的机器指令。它是由编译器和汇编器把C、C++或者其他程序源码转换成机器代码而产生的。
数据段包含了所有程序变量、字符串、数字和其他数据的存储。它有两部分,初始化数据和未初始化数据。
跟代码段不同,数据段可以改变。程序总是修改它的变量。而且,许多程序需要在执行时动态分配空间。Linux允许数据段随着内存的分配和回收而增长和缩短,通过这种机制来解决动态分配的问题。
第三段是栈段。在大多数机器里,它从虚拟地址空间的顶部或者附近开始,并且向下生长。如果栈生长到了栈段的底部以下,会产生一个硬件错误同时操作系统把栈段的底部降低一个页面。程序并不显式地控制栈段的大小。
当一个程序启动的时候,它的栈并不是空的。相反,它包含了所有的环境变量以及为了调用它而向shell输入的命令行。
Windows Vista内管管理
在Windows Vista系统中,每个用户进程都有它自己的虚拟地址空间。对于x86机器,虚拟地址是32位的,因此,每个进程拥有4GB大小的虚拟地址空间。其中用户态进程的虚拟地址大小为2GB(在服务器器系统中,用户态进程的虚拟地址大小可以配置为3GB)。另外的2GB(或1GB)空间为内核进程所用。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Linux下开源的DDR压力测试工具曝Linux恶意软件:让树莓派设备挖掘数字货币linux系统中不同颜色的文件夹及根目录介绍软件测试工程师必知必会Linux命令Linux下DNS服务器配置如何成为不可替代的Linux运维工程师?详解Linux进程(作业)的查看和杀死Linux 日志定时轮询流程详解比特币勒索病毒不只Windows系统有,Linux版的来了Linux日志定时轮询流程详解Linux iommu和vfio概念空间解构Linux系统如何低于TCP洪水攻击Linux无损调整分区大小Linux下防火墙配置实例Linux使用Jexus托管Asp.Net Core应用程序Linux中引号的那些事
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南