页表

深入浅出计算机组成原理学习笔记:理解内存(上)-虚拟内存和内存保护是什么?(第40讲)

半城伤御伤魂 提交于 2019-11-28 01:14:47
一、简单页表 1、页表的概念 想要把虚拟内存地址,映射到物理内存地址,最直观的办法,就是来建一张映射表。这个映射表,能够实现虚拟内存里面的页,到物理内存里面的页的一一映射。 这个映射表,在计算机里面,就叫作 页表 (PageTable)。 页表这个地址转换的办法,会把一个内存地址分成 页号(Directory)和 偏移量(Offset)两个部分。这么说太理论了,我以一个32位的内存地址为例,帮你理解这个概念。 1、其实,前面的高位,就是内存地址的页号。后面的低位,就是内存地址里面的偏移量。 2、做地址转换的页表,只需要保留虚拟内存地址的页号和物理内存地址的页号之间的映射关系就可以了。 3、同一个页里面的内存,在物理层面是连续的。以一个页的大小是4K比特(4KiB)为例,我们需要20位的高位,12位的低位。 2、内存地址转换,的三个步骤: 总结一下,对于一个内存地址转换,其实就是这样三个步骤: 1. 把虚拟内存地址,切分成页号和偏移量的组合; 2. 从页表里面,查询出虚拟页号,对应的物理页号; 3. 直接拿物理页号,加上前面的偏移量,就得到了物理内存地址。 3、一个页表需要多大的空间 不知道你算出的数字是多少?32位的内存地址空间,页表一共需要记录2^20个到物理页号的映射关系。这个存储关系,就好比一个2^20大小的数组。 一个页号是完整的32位的4字节(Byte)

【操作系统】 内存管理

假如想象 提交于 2019-11-28 01:05:27
内存管理概念 内存管理的功能有: 内存空间的分配与回收。由操作系统完成主存储器空间的分配和管理,提高编程效率。 地址转换。在多道程序环境下,程序中逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供存储变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充。利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。 存储保护。保证各道作业在各自的存储空间内运行,互不干扰。 创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序,通常需要以下几个步骤: 编译。由编译程序将用户源代码编译成若干目标模块。 链接。由链接程序将编译后形成的一组目标代码及所需的库函数链接在一起,形成一个完整的装入模块。 装入。由装入程序将装入模块装入内存运行。 程序的链接有以下三种方式: 静态链接。在程序运行前,先将各自目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开。 装入时动态链接。将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的方式。 运行时动态链接。对某些目标模块的链接,是在程序执行中需要该模块时才进行的。其优点是便于修改和更新,便于实现对目标模块的共享。 内存的装入模块在装入内存时,同样有以下三种方式: 绝对装入 。在编译时,若知道某个程序将驻留在内存的某个位置,则编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址

虚拟内存

扶醉桌前 提交于 2019-11-27 16:08:28
首先先了解下计算机的存储结构: 虚拟内存是借助二级存储空间来扩大一级存储空间的机制。 DRAM是VM系统(虚拟存储器系统)在主存中的缓存,他在主存中用在缓存虚拟页。 SRAM是CPU和主存之间的高速缓冲,CPU从主存中取指。 CPU先在SRAM中查找,如果不命中,则在DRAM中查找,如果再次查找失败,则通过页面置换,从磁盘中读取数据。由于IO操作开销很大,所以DRAM命中失败的开销更大。当CPU需要从磁盘中查找DRAM未命中的数据时,需要借助MMU(内存管理单元)来获取数据在磁盘中的位置,MMU完成物理地址到虚拟地址的转换,数据在磁盘中的地址就是虚拟地址。 数据一般按页存储,一个页面一般是4~8KB。 虚拟地址(VA),假设其范围是[0,1,2......N-1],N=2^n,N的单位为字节,那么这个虚拟地址就叫做一个n位地址空间。32/64位操作系统具有的虚拟内存空间大小分别是2^32和2^64。 虚拟存储器(VM)就是一个存储在磁盘上的N个连续字节大小的单元。每个字节都是一个唯一的虚拟内存地址。操作系统将VM分割成虚拟页大小的块。 物理存储器被分割成物理页(PP),大小也为字节。 虚拟页(VP)有三种状态: 1)未分配虚拟页:在页表中不存在对该虚拟页的记录; 2)已缓存虚拟页:在页表中有记录,且在物理存储器中已经分配了页面; 3)未缓存虚拟页:在页表中有记录

操作系统学习--虚拟存储

回眸只為那壹抹淺笑 提交于 2019-11-27 15:57:56
虚拟存储 由于程序对于内存的需求越来越大,我们可以采用虚拟存储的方式来增加程序可用的内存量。 内存不够时有三种解决方法: 覆盖:在进程内部,互相没有调用关系的模块之间可以相互覆盖,只把正在运行的模块放入内存中。 不足:1.模块间的逻辑关系需要知道 2.从外存读入会增加执行时间 交换:把正在等待的整个进程移到外存中去,把内存交给需要运行的程序。 不足:需要有动态重定位的进程才可以使用这种方式 3.虚拟存储:覆盖和交换发展而来的技术,主要思想是把暂时不用的 内存 块放到 外存 中 实现方式:虚拟页式存储,虚拟段式存储 进程运行时具有 局部性 : 时间局部性:运行两条相同的指令的时间一般是相邻的 空间局部性:指令需要的数据和相邻指令要用到数据一般存放的空间是相近的 跳转局部性:例如在一个循环里,每条语句跳转的位置一般是固定的 局部性原理为虚拟存储提供了理论支持。 虚拟存储每一行的数据通常是在同一页内的,每一列的数据通常不是,所以按列访问通常比按行访问要更耗时。 虚拟页式存储: 以页为单位进行移出和存入内存,与之前的普通的页式非连续存储的区别就是,页表项多了几个标志位,其中一个标志位标志了该页表是否在内存中,如果不在,就是缺页异常,需要从外存往内存掉。 缺页异常的处理流程 : 缺页时,从外存中找到响应页,然后往内存中写,如果内存有地方,就可以直接写,没地方的话

线程基础知识

大兔子大兔子 提交于 2019-11-27 08:15:41
什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 Linux下: 线程:最小的执行单位 进程:最小分配资源单位,可看成是只有一个线程的进程。 Linux内核线程实现原理 类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。 1. 轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone 2. 从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的 3. 进程可以蜕变成线程 4. 线程可看做寄存器和栈的集合 5. 在linux下,线程最是小的执行单位;进程是最小的分配资源单位 察看LWP号:ps –Lf pid 查看指定线程的lwp号。 三级映射:进程PCB --> 页目录(可看成数组,首地址位于PCB中) --> 页表 --> 物理页面 --> 内存单元 参考:《Linux内核源代码情景分析》 ----毛德操 对于进程来说,相同的地址(同一个虚拟地址)在不同的进程中,反复使用而不冲突。原因是他们虽虚拟址一样

linux内存

两盒软妹~` 提交于 2019-11-27 05:27:25
1 内存寻址 1.1 物理地址、虚拟地址以及线性地址 物理地址: 物理内存的内存单元地址 虚拟地址: 程序员看到的内存空间定义未虚拟地址,intel X86 CPU寻址使用了段机制,最初的8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址,解决了CPU数据总线16位寻址20位数据地址空间的问题。 虚拟地址一般用“段:偏移量”的形式来描述,比如在8086中A815:CF2D就代表段首地址为A815,段内偏移位为CF2D的虚地址。 线性地址: 是指一段连续的,不分段的,范围为0到4GB的地址空间,一个线性地址就是线性地址空间的一个绝对地址。 寻址模式有2种: 实模式: 是 段地址+偏移量 的方式,得到物理地址;如当程序执行“mov ax,[1024]”这样一条指令时,在8086的实模式下,把某一段寄存器(比如ds)左移4位,然后与16位的偏移量(1024)相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的地址(例如ds:1024)就叫虚拟地址 保护模式:不 允许通过段寄存器取值得到段的起始地址,而是把虚拟地址转进一个 MMU 的硬件,经过额外的转换和检查,进而得到一个物理地址,如下图所示: 保护模式下寻址 MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件

操作系统 第四章习题

半世苍凉 提交于 2019-11-26 00:58:33
说明:题号前带*的为作业题。 计算机操作系统(第四版) 汤小丹 配套资源: https://blog.csdn.net/COCO56/article/details/101201389 文章目录 *8 什么是基于顺序搜索的动态分区分配算法?它可分为哪几种? *10 什么是基于索引搜索的动态分区分配算法?它可分为哪几种? *22 具有快表时是如何实现地址变换的? *26 分页和分段有何区别? *8 什么是基于顺序搜索的动态分区分配算法?它可分为哪几种? 答:为了实现动态分区式分配,将系统中的空闲分区组织成空闲分区表或空闲分区链。所谓顺序搜索,是指按表或链的组织顺序,检索表或链上记录的空闲分区,去寻找一个最符合算法的、大小能满足要求的分区。分区存储管理中常采用的分配策略有:首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法。 *10 什么是基于索引搜索的动态分区分配算法?它可分为哪几种? 基于顺序搜索的动态分区分配算法,比较适用于不太大的系统。当系统很大时,系统中的内存分区可能会很多,相应的空闲分区链就可能很长,这时采用顺序搜索分区方法可能会很慢。为了提高搜索空闲分区的速度,在大、中型系统中往往会采用基于索引搜索的动态分区分配算法。它分为三种:①快速适应算法②伙伴系统③哈希算法。 *22 具有快表时是如何实现地址变换的? 系统将有效地址(逻辑地址