物理内存

内存管理

佐手、 提交于 2019-11-29 05:40:01
如何进行内存管理 为了让每个进程认为 独占 地使用内存,并且让每个进程看到的内存是 一致 的,操作系统对物理内存、磁盘进行了 抽象 ,抽象出 虚拟内存 。并且把虚拟内存、物理内存以相同固定大小的 页 进行切分管理( 分页 ),虚拟内存中叫页,物理内存中的叫页帧。 每个进程虚拟地址空间是独立的。用户访问的是虚拟内存的地址,即虚拟地址。需要通过 CPU 芯片上的 内存管理单元 MMU 硬件根据页表 翻译 成物理地址,才能真正访问内存。 页表 :每个进程都有它的独立的页表(放在内存里),用来存对虚拟页、物理页的 映射 。页表可以有多级页表,以时间换取空间(实际上,多级页表的地址翻译,并不比单级页表慢很多)。 为什么用分页机制 如果直接按一个个程序加载到内存,会出现内存 碎片 。 后来出现 分段 机制,按程序的各段来存储,从而减少碎片,但是还是有很多。 所以引出分页,把程序分成更小的页(一般大小为 4KB )来管理内存。分得更小,会增加负荷,但实际上利大于弊。 硬件关系 通过虚拟地址 访问 数据: MMU 先通过它里面的 TLB 缓存查询,如果没有,则去内存中的 页表 进行查询。成功翻译成物理地址后,访问 一级缓存 获取数据。如果没有则访问 二级缓存 (可能还有三级缓存)。还是没有就访问 内存 。 物理内存 不够 时: 将不用的页面换出到磁盘中的 swap 分区 里。 内存空间布局

ucore Lab2 实验笔记

风流意气都作罢 提交于 2019-11-29 04:57:51
ucore Lab2 lab 2 直接执行 make qemu-nox 会显示 assert 失败: kernel panic at kern/mm/default_pmm.c:277: assertion failed: (p0 = alloc_page()) == p2 - 1 1 连续物理内存管理 1.1 page 概览 对物理内存的管理,为了节省空间,也是为了配合接下来的虚拟内存管理,通常以某个比 byte 大一些的单位进行管理,我们称这一单位内存为一" 页(page) ",通常是 4KB.待 pages 初始化完毕后,物理内存示意图如下: 其中绿色代表可以分配的内存,红色代表不可被分配的内存.注意, ucore 规定物理内存可用范围最大不超过 KERNSIZE .函数 page_init 的主要作用就是初始化 pages 也就是所有 page 的所有信息. 注意, pages 以全局指针的形式存在,因为最开始无法知道 page 的数量,所以无法写成数量确定的数组.此数量必须尽快确认,否则后期无法管理. 如何确定 page 的数量 npage 呢? 1.1 探测物理内存布局,获取 pages 大小 npages 可由最大物理内存边界/PGSIZE 得出. 而最大物理内存边界可以借助 BIOS 可以探测并计算出来,参考 探测系统物理内存布局 和 实现物理内存探测

Hadoop YARN参数介绍(二)

谁说胖子不能爱 提交于 2019-11-29 00:26:57
Hadoop YARN同时支持内存和CPU两种资源的调度,本文将介绍YARN是如何对这些资源进行调度和隔离的。 在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的"资源调度")后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。 在正式介绍具体的资源调度和隔离之前,先了解一下内存和CPU这两种资源的特点,这是两种性质不同的资源。内存资源的多少会会决定任务的生死,如果内存不够,任务可能会运行失败;相比之下,CPU资源则不同,它只会决定任务运行的快慢,不会对生死产生影响。 【YARN中内存资源的调度和隔离】 基于以上考虑,YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是"可用的",因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下: (1)yarn.nodemanager.resource.memory-mb 表示该节点上YARN可使用的物理内存总量

二十一、进程管理之一基本概念

强颜欢笑 提交于 2019-11-29 00:05:54
硬件 调用、调用接口、库调用 线性内存地址空间、物理内存地址空间、线性地址、物理地址 交换内存:缺页异常 进程内存结构 常驻内存集、虚拟内存集 进程、进程元数据、结构体、任务结构体、链表 进程类型、状态(read,runing,sleep,stopped,zombie) 可中断睡眠、不可中断睡眠 创建子进程的过程 进程优先级、进程调度、进程队列 过期队列:抢占式多任务、系统调用IO IO模型、系统调用IO等待过程 进程间通信:IPC 硬件 编程接口 : syscall(系统调用) libcall(库调用) 硬件 库调用 : 用户空间发生(独立的模块或系统调用的二次封装) 系统调用 :内核空间发生,特权指令 **如果非内核将要运行特权指令,会发起软中断,CPU会通知内核,除非内核有漏洞,特权指令一定是由内核执行。 调用 :载入事先编写好的功能模块 模块 :由别人提供,调用此模块完成功能 调用接口 :得到模块的途径     例如:想要卖一双鞋(功能),到鞋店去买(提供功能的位置),鞋店的大门(调用接口)。 内核的功能   驱动硬件、用户及权限管理、网络管理、程序包管理、文件系统管理、进程管理、安全管理 网络管理 : ip,ifcfg,nmcli配置ip,route,dns。配置文件配置ip,dns,route,图形工具配置 文件系统管理 : 块组、bitmap,GDT,Supper

linux内存管理

大兔子大兔子 提交于 2019-11-28 22:44:20
在linux下,使用top,vmstat,free等命令查看系统或者进程的内存使用情况时,经常看到buff/cache memeory,swap,avail Mem等,他们都代表什么意思呢?这篇文章将来聊一聊Linux下的内存管理并解答这个问题。 讨论Linux下的内存管理其实就是讨论Linux下虚拟内存的实现方式,本人不是内核专家,所以这篇文章只会介绍一些概念性的东西,不会深入实现细节,有些地方描述的有可能不精确。 在早些时候,物理内存比较有限,人们希望程序可以使用的内存空间能超过实际物理内存,于是出现了虚拟内存的概念,不过随着时间的推移,虚拟内存的意义已经远远的超过了最初的想法。 1、虚拟内存 虚拟内存是Linux管理内存的一种技术。它使得每个应用程序都认为自己拥有独立且连续的可用的内存空间(一段连续完整的地址空间),而实际上,它通常是被映射到多个物理内存段,还有部分暂时存储在外部磁盘存储器上,在需要时再加载到内存中来。 每个进程所能使用的虚拟地址大小和CPU位数有关,在32位的系统上,虚拟地址空间大小是4G,在64位系统上,是2^64=?(算不过来了)。而实际的物理内存可能远远小于虚拟地址空间的大小。 虚拟地址和进程息息相关,不同进程里的同一个虚拟地址指向的物理地址不一定一样,所以离开进程谈虚拟地址没有任何意义。 注意 : 网上很多文章将虚拟内存等同于交换空间

malloc vs memset

纵饮孤独 提交于 2019-11-28 21:51:07
malloc vs memset OS内存分配过程如下: 用户态程序使用malloc接口,分配虚拟地址。 用户程序访问该虚拟地址,比如memset。 硬件(MMU)需要将虚拟地址转换为物理地址。 硬件读取页表。 硬件发现相应的页表项不存在,硬件自动触发缺页异常。 硬件自动跳转到page fault的处理程序(内核实现注册好) 内核中的page fault处理程序执行,在其中分配物理内存,然后修改页表(创建页表项) 异常处理完毕,返回程序用户态,继续执行memset相应的操作。 至此,虚拟内存和物理内存都分配完成,并完成映射。 另一个角度看,如果malloc分配内存后,一直不使用,那就一直不会分配物理内存,这种内存分配策略叫延迟分配 来源: https://www.cnblogs.com/pugang/p/11428245.html

操作系统

孤街醉人 提交于 2019-11-28 21:35:18
C的内存分配 32bitCPU可寻址4G线性空间, 每个进程都有各自独立的4G逻辑地址, 其中0~3G是用户态空间, 3~4G是内核空间, 不同进程相同的逻辑地址会映射到不同的物理地址中. 其逻辑地址其划分如下: 正文段(code segment/text segment, .text段): 或称代码段, 通常是用来存放程序执行代码的一块内存区域. 这部分区域的大小在程序运行前就已经确定, 并且内存区域通常属于只读, 某些架构也允许代码段为可写, 即允许修改程序. 在代码段中, 也有可能包含一些只读的常数变量, 例如字符串常量等 . CPU执行的机器指令部分. ( 存放函数体的二进制代码 . ) 只读数据段(RO data, .rodata):只读数据段是程序使用的一些不会被改变的数据, 使用这些数据的方式类似查表式的操作, 由于这些变量不需要修改, 因此只需放在只读存储器中. 已初始化读写数据段(data segment, .data段):通常是用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 常量字符串就是放在这里的, 程序结束后由系统释放(rodata—read only data). 已初始化读写数据段(RW data, .data):已初始化数据是在程序中声明, 并且具有初值的变量, 这些变量需要占用存储器空间,

linux下性能分析命令[总结]

邮差的信 提交于 2019-11-28 19:26:49
linux下性能分析命令[总结] 1、前言 在linux下开发程序,为了追求高性能,经常需要测试程序的性能,包括cpu、内存、io、网络等等使用情况。liunx下提供了众多命令方便查看各种资源的使用情况。经常用的有ps、top、free、mpstat、iostat、vmstat、netstat。 2、ps、top、free命令 ps用于查看系统中进程的情况,top能够实时显示系统中各个进程的资源占用状况,free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。 3、mpstat命令 用于获取 CPU 相关统计信息,命令执行结果如下图所示: **- %user 表示处理用户进程所使用 CPU 的百分比。 %nice 表示使用 nice 命令对进程进行降级时 CPU 的百分比。nice 命令更改进程的优先级。 %system 表示内核进程使用的 CPU 百分比 %iowait 表示等待进行 I/O 所使用的 CPU 时间百分比 %irq 表示用于处理系统中断的 CPU 百分比 %soft 表示用于软件中断的 CPU 百分比 %idle 显示 CPU 的空闲时间** 4、iostat命令 性能评估的一个主要部分就是磁盘性能,iostat 命令提供了存储接口的性能指标。执行结果下图所示: tps 每秒的传输数量,例如,每秒的 I/O 操作数。注

物理内存 虚拟内存

我是研究僧i 提交于 2019-11-28 18:18:06
1.物理内存的概念,虚拟内存的概念? 物理内存,真实的插在板子上的内存是多大就是多大了。而对CPU来说,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。 2.虚拟内存和物理内存的区别? 正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。 关键的是不要把虚拟内存跟真实的插在主板上的内存条相挂钩,虚拟内存它是“虚拟的”不存在,假的啦,它只是内存管理的一种抽象! 3.什么是虚拟内存地址和物理内存地址? 假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间

存储管理2

怎甘沉沦 提交于 2019-11-28 13:20:58
磁盘分区与格式化 fdisk命令 作用:fdisk命令用于管理磁盘分区,它提供了集添加、删除、转换分区等功能于一身的"一站式分区服务"。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见表6-5)是交互式的,因此在管理硬盘设备时特别方便,可以根据需求动态调整。 格式:fdisk 磁盘名 内部选项: 参数 作用 m 查看全部可用的参数 n 添加新的分区 d 删除某个分区信息 l 列出所有可用的分区类型 t 改变某个分区的类型 p 查看分区表信息 w 保存并退出 q 不保存直接退出 mkfs命令 作用:对磁盘分区进行格式化操作。 格式:mkfs.文件类型 磁盘分区 挂载磁盘 当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是"挂载"。 mount命令 作用:用于挂载文件系统。 格式:mount 文件系统 挂载目录。 选项: 参数 作用 -a 挂载所有在/etc/fstab中定义的文件系统 -t 指定文件系统的类型 备注: 对于比较新的Linux系统来讲,一般不需要使用-t参数来指定文件系统的类型,Linux系统会自动进行判断。而mount 中的-a参数则厉害了,它会在执行后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。 2、/etc/fstab自动挂载文件