物理内存

进程的相关概念

∥☆過路亽.° 提交于 2020-02-13 21:02:58
进程:程序的一个执行实例。担当分配系统资源的实体。 1. 进程的创造 当一个程序执行时,首先操作系统会创建一个 PCB ,将 所要执行的数据和代码和PCB一起构成进程 。还会为这个进程创造虚拟地址空间(虚拟内存),并创建与物理内存(真实内存)有映射关系的页表。当有多个进程时,会按照双向链表的方式连接起来。 值哪个 数据转移到物理内存中 首先所要执行的代码和数据经过PCB分配到虚拟地址空间的各个区域, 然后通过页表的映射规则将虚拟地址空间的数据和代码映射到物理内存上。 虚拟内存的相关知识: linux下的虚拟内存,页表,虚拟内存和物理内存的转换 2. 进程的执行 如果进程要执行,操作系统会将执行的进程另取出来作为队列中的一个,并将进程设置为 R (运行)状态,然后根据优先级和时间片来让队列中的每一个进程都放到CPU上执行,并将运算数据加载到CPU的寄存器上,如果一个进程的时间片到了,操作系统会将CPU的寄存器里的数据放到PCB中,同时PCB中还会保存CPU的PC指针所指向的地址,下次再执行该进程时,操作系统会将在PCB保存的数据再恢复到CPU的寄存器和PC指针,进而保证从上次结束的地方继续运行。 3. 进程的结束 进程执行完,操作系统会将进程设置为 Z (僵尸)状态并采集进程的相关信息, 采集完毕后,进程被设为 X (死亡)状态,继而进程结束。 来源: CSDN 作者: 森抛 链接:

如何确定默认的Java堆大小?

…衆ロ難τιáo~ 提交于 2020-02-13 03:44:29
如果我从Java命令行中省略了 -Xmxn 选项,那么将使用默认值。 根据 Java文档 “根据系统配置在运行时选择默认值” 哪些系统配置设置会影响默认值? #1楼 Java 6更新18中 对此进行了更改。 假设我们拥有超过 1 GB 的物理内存(如今非常普遍),则它始终是您物理内存的1/4。 #2楼 埃内斯托是对的。 根据他发布的链接[1]: 更新了客户端JVM堆配置 在客户端JVM中... 默认的最大堆大小是物理内存的一半,最大物理内存大小为192 MB,否则为四分之一,最大物理内存大小为1 GB。 例如,如果您的计算机具有128兆字节的物理内存,则最大堆大小为64兆字节,并且大于或等于1千兆字节的物理内存将导致最大堆大小为256兆字节。 除非您的程序创建了足够多的对象来要求它,否则JVM实际上并没有使用最大堆大小。 在JVM初始化期间分配了一个较小的值,称为初始堆大小。 ... ... 服务器JVM堆配置的人机工程学与客户端相同,不同之处在于 32位JVM的默认最大堆大小为1 GB ,对应于4 GB的物理内存大小,而 64位JVM 的默认最大堆大小为32 GB ,对应于到128 GB的物理内存大小。 [1] http://www.oracle.com/technetwork/java/javase/6u18-142093.html #3楼 在Windows上

myeclipse优化配置

烂漫一生 提交于 2020-02-09 17:48:30
很多人都感觉myeclipse机子启动速度太慢,那是因为里面集成了太多的功能,但对于大多数人来说是不必要的,只需要根据自己正在用的项目加载相应的工具就行了。等到用到其他的时候再加载需要的。 <1> Myeclipse的安装目录下面有个名为eclipse.ini的文件, 用记事本打开后, 修改参数: 把-Xms128m改成-Xms256m 把-Xmx256m改成-Xmx512m <2> 去除不需要加载的模块Windows - Preferences --> General--> Startup and Shutdown 这时右侧就 显示出了Eclipse启动时加载的模块,根据需要去除一些模块。 <3>取消启动时自动验证项目配置文件 Window -> Preferences -> MyEclipse Enterprise Workbench-> Run Validation 在右侧的Validator列表中只保留 Manual 项就可以了 如果需要验证的时候只需要选中 文件,然后右键选择 MyEclipse - Run Validation就可以了 我机子的优化修改 1. Windows - Preferences --> General--> Startup and Shutdown原来自己机子上面启动很慢,但是现 在很快,因为几乎去掉了这里面所有不该启动地项目加载。 2

【操作系统】第五章虚存技术

匆匆过客 提交于 2020-02-07 05:02:34
5.1虚拟内存的起因 理想中的存储器: 更大,更快,更便宜的非易性存储器 硬盘的速度远远的慢于内存的执行。 磁带比硬盘的存储容量更加的庞大。 现有的物理内存掉电之后数据还是会丢失的。 以上设计了三种技术: 1)手动覆盖技术:只把指令和数据保存在内存中 2)自动交换技术:将程序导出内存到硬盘上 3)虚拟内存技术(前两种是虚拟内存还没出现的情况下诞生的):以更小的力度把数据导出导入到内存中来,充分的利用了内存空间的手段 5.2覆盖技术 一、覆盖技术的基础 目标: 是在较小的可用内存中运行较大(相对而言的)的程序。常用与多道程序系统,与分区存储管理配合使用。 原理: 把程序按照其自身的逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。 必要部分(常用功能)的代码和数据常驻内存; 可选部分(不常用内存)在其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存; 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,既这些模块共有一个分区。 二、应用例子 例子一: 1)bc是对等的,相互之间不会调用,所以分在一个区;A调用b的时候,c是不会执行的,所以只需要将b放在内存中即可。 2)def也是对等的,相互之间也不会调用,所以也分在一个区;当C调用e的时候,df通用是不会被调用的,所以也只需要将e放在内存中即可。 例子二:

操作系统:虚拟内存

一个人想着一个人 提交于 2020-02-07 00:12:28
覆盖技术 目标 在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。 原理 把程序按照其自身的逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。 必要部分(常用功能)的代码和数据常驻内存。---固定区:调入后就不再调出(除非运行结束)。 可选部分(不常用功能)存放在外存中,在需要用到时才装入内存。 ---覆盖区:需要用到时调入内存,用不到时调出内存。 缺点 由程序员声明覆盖结果,费时费力,增加了编程的难度。 覆盖模块,从外存装入内存,实际上是以时间换空间。 交换技术 目标 多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的资源。 原理 可将暂时不运行的程序送到外存,从而获得空间内存空间。 操作系统把一个进程的整个地址空间的内存保存到外存中(换出),而将外存中的某个进程的地址空间读入到内存中(换入)。换入换出的内容的大小为整个程序的地址空间。 交换时机的确定:只有当内存空间不够或有不够的危险时换出。 换出的进程存放在什么位置:文件区(离散分配方式) + 对换区(连续分配方式)---被换出的进程存放在对换区。 覆盖与交换的区别 覆盖在同一个进程或程序中,交换是在不同进程之间作业的。 交换发生在内存中程序与管理程序或操作系统之间,覆盖发生在运行程序的内部。 虚拟内存技术 目标 像覆盖技术那样

cpu和内存的相关小知识

China☆狼群 提交于 2020-02-06 14:27:39
电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。 1.中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。简言之,CPU是负责运算和处理的,进行信息处理、程序运行。 2.在 计算机 的组成结构中,有一个很重要的部分,就是 存储器 。 存储器 是用来 存储程序 和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。存储器的 种类 很多,按其 用途 可分为 主存储器 和 辅助存储器 ,主存储器又称 内存储器 (简称内存)。 内存 又称主存,是 CPU 能 直接寻址 的 存储空间 ,由半导体器件制成。 内存 的特点是存取速率快。简言之,内存是交换数据的。 3.两者的关系: 当操作者对CPU发出指令(执行一个程序)时,由输入设备向cpu发出操作指令,CPU接受到指令之后,这些指令和数据暂存在内存里,在CPU空闲时cpu对内存进行寻址操作,将内存中的指令翻译出来,处理后把结果输出到输出设备上,输出设备就是显示器,打印机等-这一过程就实现了程序的运行或者数据的处理。在没有显示完之前,这些数据也保存在内存里,如果内存不足,那么系统自动从硬盘上划分一部分空间作为 虚拟内存 来用。但写入和读取的速度 跟物理内存差的很远很远

Linux内存管理(上)

天大地大妈咪最大 提交于 2020-02-04 04:00:08
摘要 : 本章首先以应用程序开发者的角度审视 Linux 的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析 Linux 地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭 Linux 内存管理。 前言 内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料。因此我们这里所要写的 Linux 内存管理采取必重就轻的策略,从理论层面就不去板门弄斧,贻笑大方了。我们最想做的和可能做到的是以开发者的角度谈谈对内存管理的理解,最终目的是把我们在内核开发中使用内存的经验和对 Linux 内存管理的认识与大家共享。 当然这其中我们也会设计一些诸如段页等内存管理的基本理论,但我们目的不是为了强调理论,而是为了指导理解开发中的实践,所以仅仅点到为止,不做深究。 遵循“理论来源于实践”的“教条”,我们先不必一下子就钻入内核里去看系统内存到底是如何管理,那样往往会让你陷入似懂非懂的窘境(我当年就犯了这个错误!)。所以最好的方式是先从外部(用户编程范畴)来观察进程如何使用内存,等到对大家内存使用有了较直观的认识后,再深入到内核中去学习内存如何被管理等理论知识。最后再通过一个实例编程将所讲内容融会贯通。

32位Linux系统虚拟地址映射

不羁岁月 提交于 2020-02-02 12:37:02
IA32体系即Intel32位体系架构,也被称为i386、X86-32或X86。在Intel公司1985年推出的80386微处理器中首先使用。用以取代之前的X86-16位架构,包括8086、80186、80286芯片。谈到这儿,就不得不说说X86架构的发展历史。 Intel 8086是由Intel于1978年所设计的16位微处理器芯片,是x86架构的鼻祖。8086是16位CPU,数据总线16条,地址总线20条,能保存的地址的大小是2^20=1M。 8086增加了4个段寄存器用来保存各内存段的起始地址,这4个段寄存器分别为CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)、ES(扩展段寄存器)。 由于地址总线共20条,段地址有20位,但是段寄存器只有16位,不能保存20位的地址。 因此,将内存的大小划分为16的倍数(此时还没有操作系统,直接操作的是物理内存)。每块内存起始地址的后四位都为0,段寄存器只保存地址的高16位。正如前面所讲,8086时,地址总线最多只能保存1M的地址空间。 此时,物理内存=段基址+逻辑地址/偏移量。 此时若要取数据,就需要找到物理内存,方法为从DS寄存器中取值,左移4位,就得到了真正的起始地址(DS<<4),再加上变量在该内存段上的偏移量(IP寄存器保存了当前数据在内存段上的偏移量),就得到了数据的物理内存。 DS<<4 + IP =

虚拟存储

浪子不回头ぞ 提交于 2020-01-31 21:30:54
前面的物理内存管理是关于如何给进程分配一块物理内存空间。非连续内存分配是在内存里找存储空间,虚拟存储是在非连续内存存储的基础上,把一部分内容放到外存里的做法,可以让应用程序可使用更大的空间。 用户看到的只是抽象的地址空间,操作系统自动做抽象地址空间映射到存储介质的使用。 内存空间不足,有三种解决方法。 覆盖:一个程序在所有内存空间里内存不够,程序员将一个进程分成多个模块。操作系统不知道进程内模块的逻辑关系 下图展示了覆盖技术实例。物理内存不够190k,就将这个程序分成3组,A自己一组;B、C互相无调用关系,为一组;D、E、F相互无调用关系(不会同时执行),为一组。分配存储空间:A给20k,B、C分50k,D、E、F给40k。B或C(D或E或F)调用谁就把谁放入内存,把其他的挪出去。 交换:是以进程为单位的交换技术。一个程序在内存空间里够用,但多道程序运行过程中其他程序占用了内存空间使这个程序内存空间不够。可以让操作系统完成 交换和覆盖的比较 虚拟存储技术 (1)目标 上面是虚拟的抽象的进程地址空间,下面是实际的物理内存和外存,中间由操作系统完成相应转换。只把部分进程放入内存,不像交换是以整个进程为单位;同时不需要程序员参与。 (2)局部性原理 (3)概念 (4)虚拟页式存储 之前的页式存储是把程序的所有页都加载到内存中,存储可以不连续。 虚拟页表

Linux free 命令

核能气质少年 提交于 2020-01-31 08:26:57
新的free命令执行结果如下: free -h :以比较友好的方式 显示 free -m: 以M显示内存使用情况 同理还有: free -g 以G显示,free -b 以以字节显示,free -k:以K显示 行解释: Mem:物理内存 Swap:交换区 列解释 : total:系统总的物理内存(Mem行)和总的交换空间(Swap行)大小 used:已经被使用的物理内存和交换空间 free:没有被使用的物理内存和交换空间 shared:被共享使用的物理内存 buff/cache:被 buffer(buffer cache)和cache(page cache)使用的物理内存 available:可以被应用程序使用的内存空间,理论上可以这么理解:available = free + buff/cache ,但是buff/cache有部分是无法释放出来的,所以实际情况 是 available < free + buff/cache total - used = free + shared +buff+cache buff和cache在2.4以前是分开的,各自独立存在的,2.4以后是合并在一块了。故旧版本中 free命令中的 buff和cache是分开的. 参考: http://www.cnblogs.com/sparkdev/p/7994666.html https://blog.csdn