页表

操作系统之存储管理_2019-11-20

眉间皱痕 提交于 2019-12-05 05:36:50
存储管理  早期计算机编程并不需要过多的存储管理  随着计算机和程序越来越复杂,存储管理成为必要   在存储管理中分为连续存储和非连续存储,非连续存储又分为分页存储、分段存储和段页式存储。  存储管理的目的:   确保计算机有足够的内存处理数据   确保程序可以从可用内存中获取一部分内存使用   确保程序可以归还使用后的内存以供其他程序使用  内存分配与回收   内存分配的过程    单一连续分配:     把内存分为系统区(被系统所使用)和用户区     只能在单用户、单进程的操作系统中使用    固定分区分配:     内存空间被划分为若干固定大小的区域,每个分区只提供给一个程序使用,互不干扰     支持多道程序的最简单存储分配方式     动态分区分配(最常用的内存分配方法):     根据进程实际需要,动态分配内存空间     相关 数据结构 (计算机存储、组织数据的方式 ):      (1)动态分区 空闲表 数据结构        存储使用情况,是否被使用,是否容量足够              (2)动态分区 空闲链 数据结构        把所有的空闲节点首尾相连,形成一个双向链表        可以把连续的空闲区合并为一个节点来减少节点数量              动态分区相关 分配算法:      首次适应算法(FF算法):      

vmalloc/vfree问题思考记录

依然范特西╮ 提交于 2019-12-04 22:10:10
arm 32 用户进程陷入内核态通过vmalloc/vfree分配内存的流程 内核在更新非连续内存区对应的页表项是非常懒惰的。--《深入理解linux内核》 arm 32 只有一个PGD 寄存器,即每个进程的内核态和用户态是共享一份PGD,不同于内核主页表 vmalloc分配内存时,实际是将物理内存映射到内核的主页表(即init_task的页表); 当用户进程访问vmalloc内存时,触发vmalloc fault,同步init_task的vmalloc一级页表到进程PGD,即vmalloc的二级页表,大家都是共用一份的; 当第二用户进程访问vmalloc内存,同上; 当用户进程vfree时,实际是将物理内存释放,同时释放二级页表,以及将init_task的vmalloc一级页表置0; 当第二个用户进程继续访问vmalloc内存时,触发vmalloc transaction fault(二级页表异常),此时由于init_task并无此二级页表,无法同步,故panic。 arm 64 vmalloc/vfree流程 arm 64 有两个PGD 寄存器,其中一个存放用户态的PGD,一个存放内核态的PGD(即init_task的PGD,整个内核空间只有一个PGD); 由于大家都是共用一个PGD,就无所谓的vamlloc fault了,流程也简单明了了 问题引申 copy_from_usr

oslab oranges 一个操作系统的实现 实验三 认识保护模式(二):分页

Deadly 提交于 2019-12-04 14:29:17
实验目的: 掌握内存分页机制 对应章节: 3.3 实验内容: 1.认真阅读章节资料,掌握什么是分页机制 2. 调试代码,掌握分页机制基本方法与思路 – 代码3.22中,212行---237行,设置断点调试这几个循环,分析究竟在这里做了什么? 3. 掌握PDE,PTE的计算方法 – 动手画一画这个映射图 4. 熟悉如何获取当前系统内存布局的方法 5. 掌握内存地址映射关系的切换 – 画出流程图 6. 基础题:依据实验的代码, – 自定义一个函数,给定一个虚拟地址,能够返回该地址从虚拟地址到物理地址的计算 过程,如果该地址不存在,则返回一个错误提示。 – 完善分页管理功能,补充alloc_pages, free_pages两个函数功能 7. 进阶题(选做) – 设计一个内存管理器,选择其一实现:首次适应算法、最佳适应算法、伙伴算法,要 求实现内存的分配与回收。(提示,均按照页为最小单位进行分配、对于空闲空间管 理可采用位图法或者双向链表法管理) 完成本次实验要思考的问题: 1. 分页和分段有何区别?在本次实验中,段页机制是怎么搭配工作 的? 2. PDE、PTE,是什么?例程中如何进行初始化?CPU是怎样访问 到 PDE、PTE,从而计算出物理地址的? 3. 为什么PageTblBase初始值为2M+4K? 4. 怎么读取本机的实际物理内存信息? 5. 如何进行地址映射与切换? 6.

操作系统-第4章习题解析

我只是一个虾纸丫 提交于 2019-12-04 12:21:06
第4章习题解析 1.为什么要配置层次式存储器? 答:这是因为:   a.设置多个存储器可以使存储器两端的硬件能并行工作。   b.采用多级存储系统,特别是Cache技术,这是一种减轻存储器带宽对系统性能影响的最佳结构方案。   c.在微处理机内部设置各种缓冲存储器,以减轻对存储器存取的压力。增加CPU中寄存器的数量,也可大大缓解对存储器的压力。 2.可采用哪几种方式将程序装入内存?它们分别适用于何种场合? 答:将程序装入内存可采用的方式有:绝对装入方式、重定位装入方式、动态运行时装入方式;绝对装入方式适用于单道程序环境中,重定位装入方式和动态运行时装入方式适用于多道程序环境中。 3.何为静态链接?静态链接时需要解决两个什么问题? 答:静态链接是指在程序运行之前,先将各自目标模块及它们所需的库函数,链接成一个完整的装入模块,以后不再拆开的链接方式。   将几个目标链接装配成一个装入模块时,需解决以下两个问题:     将相对地址进行修改。即将除第一个模块外的相对地址修改成装入模块中的相应的相对地址。     变换外部调用符号。即将每个模块中所用的外部调用符号,都变换为相对地址。 4.何谓装入时动态链接?装入时动态链接方式有何优点? 答:装入时动态链接是指将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的一种 链接方式,即在装入一个目标模块时

OS课程 ucore_lab2实验报告

放肆的年华 提交于 2019-12-04 09:25:38
练习零:填写已有实验    本实验依赖实验1。请把你做的实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。提示:可采用diff和patch工具进行半自动的合并(merge),也可用一些图形化的比较/merge工具来手动合并,比如meld,eclipse中的diff/merge工具,understand中的diff/merge工具等。 其实 lab1 中只有 kern/debug/kdebug.c kern/init/init.c kern/trap/trap.c 被改过了 所以只用把这三个文件复制到lab2中就可以了。 练习一:实现 first-fit 连续物理内存分配算法(需要编程)    在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。   查看注释后,发现代码已经写了,于是 make qemu 了一发,发现错了,断言失败。仔细看了后,代码是不完整的。   断言失败之前的检查都是针对页分配成功、失败的测试

分页内存管理——虚拟地址到物理地址的转换【转】

大城市里の小女人 提交于 2019-12-04 06:05:27
转自: https://blog.csdn.net/qq_39755395/article/details/78380942 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_39755395/article/details/78380942 引子: 这是逻辑地址(虚拟地址),包括程序中打印的变量地址显示的都是逻辑地址,并不是内存空间上的物理地址。 每条指令在被执行时,读取操作数时需要给出操作数所在的内存地址,这个地址不能是物理主存地址,因为该程序在哪种硬件设置的机器上运行并不能事前确定,那操作系统就不能在此给出对应于某台机器的物理地址。 一、物理内存和虚拟内存 我们先来了解一下,什么是物理内存,什么又是虚拟内存? 1.物理内存:指通过物理内存条而获得的内存空间,主要作用是在计算机运行时为操作系统和各种程序提供临时储存。 2.虚拟内存:对内存架构(内存、缓存、硬盘)进行管理(内存管理系统)的一种手段。简单理解就是在硬盘上划分出一块区域作为内存使用。 2.1 对于用户: 计算机主要面向的是对操作系统等计算机知识几乎没有了解的普通大众,他们大多是不了解什么主存外存的,所以为了方便用户的使用,就有必要使得程序不管是位于内存架构的哪个层次,对于用户来说都是一样的

操作系统实现(二):分页和物理内存管理(转载)

北城以北 提交于 2019-12-04 03:44:39
原文链接: http://www.cppblog.com/airtrack/archive/2015/04/27/210451.html 上一篇 从 Bootloader 开始到内核载入使用的都是平坦内存,即所有地址对应实际的物理地址。现代操作系统都使用分页来管理内存,分页可以让每个进程都有完整的虚拟地址空间,进程间的虚拟地址空间相互隔离以提供页层级的保护。另外分页可以让物理内存少于虚拟地址空间,同时可以使用磁盘存储暂时未使用的内存页,提供更多的「内存」。 分页 分页通过 CPU 的 MMU(Memory Management Unit) 完成,MMU 通过当前的分页表完成虚拟地址到物理地址的转换。在 x86 下 MMU 通过两级分页表(也可以开启三级)完成地址转换,这两级分别是页目录(Page Directory)和页表(Page Table)。在 x86 下,由 cr3 寄存器存储页目录的地址(物理地址),页目录和页表都包含 1024 项,每项 4 字节,因此页目录和页表大小为 4KB ,按照 4KB 一页的话,刚好占用一页。 MMU 将虚拟地址转换成物理地址的方式是,取虚拟地址的 22~31bits 表示页目录的下标,获得页目录项定位到页表,再取 12~21bits 表示页表的下标,获得页表项定位到页,最后取 0~11bits 表示页偏移。页目录项和页表项的下标分别用

[期末复习] 计算机操作系统复习(一)

青春壹個敷衍的年華 提交于 2019-12-03 11:14:06
操作系统期末复习 第一章-操作系统引论 操作系统的作用 作为计算机硬件系统之间的接口 系统资源的管理者 实现对计算机资源的抽象 操作系统的发展过程 未配置操作系统的计算机系统 人工操作,用户独占全机,资源浪费 脱机输入输出(Off-Line I/O)方式。 单道批处理系统 这里批处理指的是把很多作业放在一个磁带上,一次性输入给计算机 解决了人机矛盾(每执行一道程序都要手动装载)和cpu与I/O设备速度不匹配矛盾。提高了系统的吞吐量。 缺点:系统资源利用率低(I/O请求成功前CPU空闲)。 多道批处理系统 用户提交的作业都放在外存上,形成“后备队列”。 A在执行I/O请求时B进行作业,防止CPU空闲。 多道:从1和2可以看出内存中可以同时存在多个程序,故为多道。 好处:资源利用率高(显而易见,指CPU、存储器、设备和数据利用率高)、系统吞吐量大(指系统在单位时间完成的作业数量提升) 缺点:平均周转时间长、无交互能力 这里注意,提交任务是在外存形成队列,而执行时多道指的是内存中可以有多道程序运行。 分时系统 分时系统出现是为了满足人机交互的需求 分时:采用轮转方式,每隔一段时间片调度下一个作业运行。 分时系统的作业直接进入内存(要注意)。 关键问题:及时接受、及时处理。 实时操作系统 这个我们RM电控用的就是RTOS。 “实时”指的是“及时”而非“实时计算”。 实时系统规定了任务时间

操作系统――虚拟内存

匿名 (未验证) 提交于 2019-12-03 00:28:02
(尚未完整,预计2018-06-18完成) 虚拟内存: 用辅助存储器(一般指磁盘)作为内存的补充。虚拟内存允许进程执行时只将部分程序放入内存,因此程序可以比物理内存大。虚拟内存的大小**受计算机寻址机制和可用的辅助存储器容量大限制,而不受内存容量的限制。 特征:①运行进程时只把现在要执行的页/段装入内存,其余页/段放在外存,需要时再利用 请求调入 页/段功能和 置换 功能将其调入内存。 ②在逻辑上扩充内存容量 ③访问速度接近于内存,没位(bit)成本接近于外存。 虚拟地址 :即 逻辑地址 ,虚拟内存中某个字节的地址,仿佛该字节在内存中(其实可能位于磁盘,但这对用户是透明的)。 虚拟地址空间 :分配给某个进程(程序)的虚拟地址范围。 实地址 :即物理地址。物理内存中某个字节的地址。 驻留集 :进程运行时装入内存的部分。 内存管理单元MMU :集成在CPU中,或作为一个协处理器。 功能:分解逻辑地址;逻辑地址到物理地址的转换;查找更新快表TLB;进程切换时清空TLB;发出缺页中断或越界中断;设置和检查页表中各个特征位等。 !#当访问一个不再内存的逻辑地址时,产生 缺页中断/缺段中断 ;OS阻塞该进程;启动磁盘I/O;装入所需的页/段后,将阻塞进程设置为就绪态。 ?#就绪挂起态和阻塞挂起态进程的换入/换出内存和虚拟存储的换入/换出内存有什么区别? 答:挂起态进程的所有内存驻留页

微机原理-80386(3)

匿名 (未验证) 提交于 2019-12-03 00:26:01
保护模式下的内存管理: 逻辑地址:对段内存空间进行寻址的地址称为逻辑地址,也叫做虚拟地址,这是应用程序设计人员进行变成设计时用到的地址。 逻辑地址由一个16位的段选择子和32位的偏移量两部分组成。 段选择子存放在段寄存器中。 线性地址:它是沟通物理地址与逻辑地址的桥梁,32位微处理器芯片内部的分段部件将逻辑地址空间转换成32位的线性地址。 物理地址:物理地址是指内存芯片阵列中每个阵列所对应的唯一的地址,32位地址线可直接寻址4GB内存单元。 地址转换框图 采用分页管理,便于实现虚拟存储器管理,可以方便地以页为单位把内存空间映射到磁盘空间,分页还能明显提高存取数据的效率,有效利用内存碎片。 分段技术将逻辑地址转换成线性地址,当CR0的PG字段设为0时,线性地址就是物理地址,当PG为1时,分页部件将线性地址转换成物理地址。 80386采用两层表来实现分页管理。第一层被称为页目录,第二层被称为页表。 页目录表中包含1024个页目录项,每项4字节;页表中也包含1024个32位的页表项,每个页表项对应了一个4KB的连续物理地址空间。 分页机制将32位的线性地址分为3部分: (1)线性地址的高10位作为页目录的索引号,指向1024个页目录项中的某一项。 (2)线性地址的的中间10位作为页表的索引号 (3)线性地址的低12位作为页面的偏移地址,也就是物理地址的低12位 转载请标明出处: 微机原理