页表

冬天OS(三):jmp to kernel

99封情书 提交于 2019-12-11 07:59:16
-------------------------------------------------------- 打印内存信息 开启分页 jmp to kernle -------------------------------------------------------- 上节我们说过,在进入保护模式之后紧接着就要 jmp 到 kernel ,jmp 之前我们还要做几件事情... 一,显示可用内存并开启分页 ; ---------------------------- ; <loader.asm> ; Jack Zheng 11.26 ; ---------------------------- .... ; ---------------------------- ; ---- ; 在实模式下获得可用内存信息 ; ---- mov ebx, 0 ; ebx = 后续值, 开始时需为 0 mov di, _MemChkBuf ; es:di 指向一个地址范围描述符结构(Address Range Descriptor Structure) .MemChkLoop: mov eax, 0E820h ; eax = 0000E820h mov ecx, 20 ; ecx = 地址范围描述符结构的大小 mov edx, 0534D4150h ; edx = 'SMAP' int

Linux操作系统 内存管理、用户操作和文件操作

﹥>﹥吖頭↗ 提交于 2019-12-08 05:16:21
内存管理、用户操作和文件操作 预备知识: 1、Linux系统的内存分为物理内存和虚拟内存。 物理内存 是指安装在计算机当中的主存储器; 虚拟内存 是 一段 虚拟的逻辑上连续的储存空间, 虚拟内存是由多个内存碎片组成,只有 正在使用的 虚拟内存被存放在 内存 上,对于暂时不使用的虚拟内存空间其实是储存在 外存 中。虚拟内存空间地址和实际的物理内存空间地址存在某种逻辑上的关系,如果虚拟内存空间地址的内容将被使用,通过逻辑关系可以计算出此部分内容对应的实际物理内存空间,然后将内容加载到内存中。虚拟内存在 一定程度上 独立于物理内存。 2、计算机的物理 内存空间有限(虚拟内存只要运行部分占用物理内存空间) 而且不同PC的 物理内存是不一样(通过虚拟内存空间,进程中代码的访存操作的地址全部是这个内存空间的地址) ,所以进程使用的是 虚拟内存空间 。 3、内存的最小粒度是页,进程虚拟地址空间和内存的映射也是以页为单位。页(面)的大小称为页面的大小,大小应该为2的幂。页号P=A/L;A表示逻辑地址空间中的地址(虚拟内存空间地址),L表示页面大小。 4、物理块:将内存的物理地址空间划分为若干块,称为物理块,物理块与页(面)一一对应。 5、页表储存在物理内存中,由操作系统维护。CPU中有一个 页表寄存器 ,里面存放着当前进程页表的 起始地址和页表长度

CSAPP第七章概念

不羁的心 提交于 2019-12-06 23:22:23
CSAPP第七章概念 1.虚拟地址数=2^(虚拟地址位数) 最大可能的虚拟空间=虚拟地址数-1 2. 使用虚拟寻址,CPU需要将虚拟地址转换成物理地址,这样才能访问真实的物理内存 concepts:1)VM on disk,PM (DRAM cache) 2)page--cache blocks 3.page tables :an array of PTEs(page table entry) that map VP to PP 虚拟内存空间被组织为一个存放在硬盘上的M个连续的字节大小的单元组成的数组,每个字节都有一个唯一的虚拟地址 页数=虚拟地址数/页大小,每个页都需要一个PTE 操作系统通过将虚拟内存分割为大小固定的块来作为硬盘和内存之间的传输单位,这个块被称为虚拟页(Virtual Page, VP),每个虚拟页的大小为 P=2^p 字节。物理内存也会按照这种方法分割为物理页(Physical Page, PP),大小也为 P 字节。 CPU在获得虚拟地址之后,需要通过MMU将虚拟地址翻译为物理地址。而在翻译的过程中还需要借助页表 VP1,VP2,VP7,VP4被缓存到物理内存中(cached),VP3,VP6已被分配但尚未缓存到物理内存(uncached),VP0和VP5尚未分配(unallocated) 4.page hit MMU根据虚拟地址在页表中寻址到PTE4

物理内存与虚拟内存之间的映射

耗尽温柔 提交于 2019-12-06 19:31:39
1、用户编制程序时使用的地址称为 虚地址或逻辑地址 ,其对应的存储空间称为虚存空间或逻辑地址空间;而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间。 2、虚拟存储器的 容量限制 :主存容量+辅存(硬盘)容量。 3、 物理内存: 在应用中,真实存在的,插在主板内存槽上的内存条的容量的大小。从本质上来说,物理内存是代码和数据在其中运行的窗口。 4、 虚拟内存: 使程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows 会用虚拟存储器进行补偿,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。它将计算机的RAM和硬盘上的临时空间组合。将数据移入分页文件可释放RAM,以便完成工作。 若计算机的速率由于RAM可用空间匮乏而减缓,则可尝试通过增加虚拟内存来进行补偿。但是,计算机从RAM读取数据的速率要比从硬盘读取数据的速率快,因而扩增RAM容量(可加内存条)是最佳选择。 分页文件:硬盘上一个或者多个隐藏文件pagefile.sys,Windows用于存储未存入内存的部分程序和数据文件

linuxC线程pthread的相关理解

て烟熏妆下的殇ゞ 提交于 2019-12-06 13:12:24
1. 线程概念  Linux里的线程,也叫轻量级进程(light weight process),本质上是进程。  Linux早期是没有线程的,后来的线程是借助进程实现的。线程、进程的核心都是调用系统的clone方法实现。  线程和进程的区别:(说明:PCB即进程控制块)    进程拥有PCB,用于独立的地址空间。是操作系统最小资源分配单位。(独居地址空间)    线程也有PCB,但没有独立的地址空间,共享同一个地址空间。是操作系统最小执行单位。(合租地址空间)    Linux内核线程实现原理:    1)轻量级进程,也有PCB,创建线程使用的底层方法和进程一样都是clone方法。    2)线程有各自的PCB,但是各自的PCB指向内存资源的三级页表是相同的。所以地址空间是相同的,即共享地址空间。    3)线程可看作是寄存器和栈的集合。  三级页表映射:进程PCB -> 页目录(可看作数组,首地址位于PCB里)-> 页表(可看作数组元素) -> 物理页表 -> 内存单元  线程共享的资源:    文件描述符、信号处理方式、当前工作目录、用户ID和组ID、内存地址空间(.text/.data/.bss/heap/so)  线程非共享的资源:    线程ID、处理器现场和内核栈指针、用户空间栈、errno变量、信号屏蔽字、线程调度优先级、线程调度策略 2. pthread线程函数 

主存储器空间的分配和回收

允我心安 提交于 2019-12-05 19:21:39
一、实验内容 主存储器空间的分配和回收。 二、实验目的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。 三、实验题目 模拟在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收。 [提示]: (1) 分页式存储器把主存分成大小相等的若干块,作业的信息也按块的大小分页,作业装入主存时可把作业的信息按页分散存放在主存的空闲块中,为了说明主存中哪些块已经被占用,哪些块是尚未分配的空闲块,可用一张位示图来指出。位示图可由若干存储单元来构成,其中每一位与一个物理块对应,用0/1表示对应块为空闲/已占用。 (2) 假设某系统的主存被分成大小相等的64块,则位示图可用8个字节来构成,另用一单元记录当前空闲块数。如果已有第0,1,4,5,6,9,11,13,24,31,共10个主存块被占用了,那么位示图情况如下: 字 位 节 数 号 0 1 2 3 4 5 6 7 0 1 1 0

2019-2020-1 20175311 《信息安全系统设计基础》第十一周学习总结

[亡魂溺海] 提交于 2019-12-05 11:36:53
2019-2020-1 20175311 《信息安全系统设计基础》第十一周学习总结 教材学习内容总结 第九章 虚拟内存虚拟存储器 虚拟存储器 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟存储器提供了三个重要的能力: (1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。 (2)它为每个进程提供了一致的地址空间,从而简化了存储器管理。 (3)它保护了每个进程的地址空间不被其他进程破坏。 物理和虚拟寻址 物理寻址:计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每字节都有一个唯一的物理地址(Physical Address,PA)。第一个字节的地址为0,接下来的字节的地址为1,再下一个为2,依此类推。给定这种简单的结构,CPU访问存储器的最自然的方式就是使用物理地址,我们把这种方式称为物理寻址。 虚拟寻址:使用虚拟寻址时,CPU通过生成一个虚拟地址(Virtual Address,VA)来访问主存,这个虚拟地址在被送到存储器之前先转换成适当的物理地址。将一个虚拟地址转换为物理地址的任务叫做地址翻译(address translation)。就像异常处理一样

ucore lab3

被刻印的时光 ゝ 提交于 2019-12-05 11:36:25
## OS课程 ucore_lab3实验报告 练习零:填写已有实验   本实验依赖实验1/2。请把你做的实验1/2的代码填入本实验中代码中有“LAB1”,“LAB2”的注释相应部分。 下面三个, 复制过去就ok pmm.c default_pmm.c trap.c 练习1:给未被映射的地址映射上物理页(需要编程)   完成do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页。设置访问权限 的时候需要参考页面所在 VMA 的权限,同时需要注意映射物理页时需要操作内存控制 结构所指定的页表,而不是内核的页表。注意:在LAB2 EXERCISE 1处填写代码。执行 make qemu 后,如果通过check_pgfault函数的测试后,会有“check_pgfault() succeeded!”的输出,表示练习1基本正确。 do_pgfault(){ ptep = get_pte(mm->pgdir, addr, 1); // 根据引发缺页异常的地址 去找到 地址所对应的 PTE 如果找不到 则创建一页表 if (*ptep == 0) { // PTE 所指向的 物理页表地址 若不存在 则分配一物理页并将逻辑地址和物理地址作映射 (就是让 PTE 指向 物理页帧) if (pgdir_alloc_page(mm->pgdir, addr, perm) ==

存储管理-段页式管理

烂漫一生 提交于 2019-12-05 11:14:04
存储管理-段页式管理 为何引出? 段式管理为用户提供一个二维的虚地址空间,反映了程序的逻辑结构,有利于段的动态增长以及共享和内存保护 分页系统有效地克服了碎片,提高了存储器的利用率 两者结合,会结合两者优点的同时,也会代开开销大的问题 基本思想 在段页式存储中,每个分段又被分成若干个固定大小的页。 虚拟地址构成 段页式管理时,虚拟地址由三部分组成:段号s,页号p和页内相对地址d。 地址映射 系统为每个作业或进程建立一张段表,管理内存分配与释放、缺段处理、存储保护和地址变换等。 每个段建立一张页表,把段中的虚页变换成内存中的实际页面。页表中有针对缺页中断处理和页面保护等功能的表项。 段页式管理系统中,对内存中指令或数据进行一次存取,至少需要访问三次以上的内存。 1.第一次是由段表地址寄存器得到段表始址去访问段表,由此取出对应段的页表地址。 2.第二次是访问页表得到要访问的物理地址。 3.第三次访问真正需要访问的物理单元。 提高变换速度-快表 为了提高地址转换速度,设置快速联想寄存器存放当前最常用的段号s、页号p和对应的内存页面与其他控制用栏目。 当要访问内存空间某一单元时,通过段表、页表进行内存地址查找的同时,根据快速联想寄存器查找其段号和页号。 如果要访问的段或页在快速联想寄存器中,则系统不再访问内存中的段表、页表,直接把快速联想寄存器中的值与页内相对地址d拼接起来得到物理地址。

存储管理-页式管理

匆匆过客 提交于 2019-12-05 07:30:55
存储管理-页式管理 页式管理解决什么问题 分区式管理,存在着严重的碎片问题使得内存的利用率不高 1.固定分区,因为每一个分区只能分配给某一个进程使用,而该进程可能占不满这个分区,就会有 内部碎片 2.动态分区,会产生大量的 外部碎片 ,虽然可以使用紧凑技术,但是这样时间成本过高了 出现这种情况的原因是分区管理必须要求进程占用一块连续的内存区域,如果让一个进程分散的装入到不同的内存分区当中的话,这样就可以充分的利用内存,并且不需要紧凑这种技术了。比如把一个进程离散的拆分放到零散的内存碎片中去,这样就可以更为高效的利用内存。也就是产生了非连续的管理方式。 比如就是把一个进程拆分为若干部分,分别放到不同的分区中,比如一个进程23M,可以拆分为10M,10M,3M放到不同的分区中 如果分区分的更小,23M拆分为11个2M的,和一个1M的,每个分区是2M,那么总共会装满11个分区,剩下一个分区装不满,也仅仅浪费1M的空间,也就是分区越小的话,那么就是内存利用率就会越高。 分区式管理时,进程的大小受分区大小或内存可用空间的限制 分区式管理也不利于程序段和数据的共享 页式管理的改进 页式管理只在内存存放反复执行或即将执行的程序段与数据部分 不经常执行的程序段和数据存放于外存待执行时调入。 页式管理的基本概念 页框(页帧):将内存空间分成一个个大小相等的分区,每个分区就是一个页框。 页框号