精华内容
下载资源
问答
  • 在9i后,SGA内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小时候,分配的基本单位是粒度(granule) granule是一段连续虚拟内存,大小区域决SGA_MAX_SIZE大小SGA_MAX_SIZE小于128M,...

    在9i后,SGA的内部组件大小可以动态调整,也可以由数据库自动管理,在设置内存大小的时候,分配的基本单位是粒度(granule

    • granule是一段连续的虚拟内存,大小区域决SGA_MAX_SIZE大小
    • SGA_MAX_SIZE小于128MGranule4M,否则Granule16M
    • 每个内存组件分配大小必须为Granule的整数倍
    • 整个SGA最小不小于3Granule大小
    • 查看granule大小:v$sgainfo
    • 如下,因为sga_max_size大小大于128M,所以granule大小为16M

    SQL> select name,bytes/1024/1024 MB,resizeable from v$sgainfo;

     

    NAME                                     MB RES

    -------------------------------- ---------- ---

    Fixed SGA Size                   2.14937592 No

    Redo Buffers                       6.765625 No

    Buffer Cache Size                       608 Yes

    Shared Pool Size                        272 Yes

    Large Pool Size                          32 Yes

    Java Pool Size                           16 Yes

    Streams Pool Size                         0 Yes

    Shared IO Pool Size                       0 Yes

    Granule Size                             16 No

    Maximum SGA Size                 1576.91797 No

    Startup overhead in Shared Pool   189.55072 No

    Free SGA Memory Available               640

     

    12 rows selected.

     

    SQL> show parameter sga_max_size

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    sga_max_size                         big integer 1584M

     

    再看如下例子:

    虽然设置shared_pool_size大小为10M,但是查看是确实16M,那是因为分配内存的基本单位是粒度granule.每个内存组件分配大小必须为granule的整数倍.

    SQL> show parameter shared_p;

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    shared_pool_reserved_size            big integer 10066329

    shared_pool_size                     big integer 0

     

    SQL> alter system set shared_pool_size=10M;

     

    System altered.

     

    SQL> show parameter shared_p;

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    shared_pool_reserved_size            big integer 10066329

    shared_pool_size                     big integer 16M

     

    转载于:https://www.cnblogs.com/thescentedpath/p/granule.html

    展开全文
  • 把程序按逻辑结构分段,每段再划分为固定大小页,主存空间也划分为大小相等页,程序对主存调入、调出仍以页为基本传送单位每个程序对应一个段表,每段对应一个页表。 虚拟地址:段号+段内页号+页内地址 ....

    一、传统存储管理方式的特征、缺点


    在这里插入图片描述

    二、虚拟存储器的定义


    主存和辅存共同构成了虚拟存储器。对于应用程序员来说,虚拟存储器是透明的。虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。因此,虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。
    在这里插入图片描述
    在这里插入图片描述

    三、访问过程的步骤

    (1)CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已装入主存。

    (2)若已在主存中(装入位为1),则通过地址变换,得到一个主存地址,CPU通过该主存地址访问主存指示的实际单元(CPU访问:即以主存地址访问“Cache-主存"体系,如果该主存地址在Cache中,则访问Cache;如果不在Cache中,则访问主存,并把该字所在的块一次性地从主存调入Cache。)

    (3)若不在主存中(装入位为0),则把包含这个字的一页或一段调入主存后再由CPU访问。若主存已满,则才采用替换算法置换主存中的一页或一段。

    四、虚拟内存的特征


    在这里插入图片描述

    五、虚拟存储技术的实现


    在这里插入图片描述

    (1)请求分页存储管理


    虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页。

    • 虚拟地址:分为两个字段,分别是虚页号和页内地址

    • 页表:是一张存放在主存中的虚页号和实页号的对照表,用来实现虚地址和实地址之间的转换。

    • 页表基址寄存器:存放当前运行程序的页表的起始地址,它和虚页号拼接成页表项地址,可以找到对应的页表项。

    • 页表项:分为三个字段,分别是虚页号、实页号和装入位。(装入位为1,表示该页面已在主存中将对应的实页号和虚地址中的页内地址拼接,得到完整的实地址;装入位为0,表示该页面不在主存中,此时要启动 I/O 系统,将该页从辅存调入主存后再供 CPU使用)

    虚地址到实地址的变换过程:

    1. 虚页号和页表起始地址拼接 = 页表项地址
    2. 页表项地址 → 页表 → 实页号
    3. 实页号和页内地址拼接 = 主存实地址

    优点:页面的长度固定,页表简单,调入方便。

    缺点:由于程序不可能是页面的整数倍,最后一页的零头将无法利用而造成浪费。

    在这里插入图片描述

    (2)请求分段存储管理


    段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。

    • 虚拟地址:分为两个字段,分别是虚页号和页内地址

    • 段表:是一张存放在主存中的段号和段起点的对照表,用来实现虚地址和实地址之间的转换。

    • 段表基址寄存器:存放当前运行程序的段表的起始地址,它和段号拼接成段表地址,可以找到对应的段表项。

    • 段表项:分为四个字段,分别是段号、段起点、段长和装入位。(装入位为1,表示该段已在主存中将对应的段起点和虚地址中的段内地址相加,得到完整的实地址;装入位为0,表示该段不在主存中,此时要启动 I/O 系统,将该段从辅存调入主存后再供 CPU使用)

    虚地址到实地址的变换过程:

    1. 段号和段表起始地址拼接 = 段表项地址
    2. 段表地址 → 段表 → 段起点
    3. 段起点+段内地址 = 主存实地址

    优点:段的分界和程序的自然分界相对应,具有逻辑独立性

    缺点:段长度可变,容易在段间留下碎片,不好利用,造成浪费
    在这里插入图片描述

    (3)请求段页式存储管理


    把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
    每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。

    • 虚拟地址:分为三个字段,段号+段内页号+页内地址

    虚地址到实地址的变换过程:

    1. 段号和段表起始地址拼接 = 段表地址
    2. 段表地址 → 段表 → 页表起始地址
    3. 页表起始地址和段内页号拼接 = 页表项地址
    4. 页表项地址 → 页表 → 实页号
    5. 实页号和页内地址拼接 = 主存实地址

    优点:兼具页式和段式存储器的优点,可以按段实现共享和保护

    缺点:在地址变换过程中需要两次查表,系统开销大

    六、快表(TLB)


    查找时,快表和慢表同时进行,块表由于根据内容指定地址,一般使用相联存储器。若快表中有此逻辑页号,则能很快地找到对应的物理页号,送入实主存地址寄存器,并使慢表的查找作废,从而就能做到虽采用虚拟存储器但访问主存速度几乎没有下降。
    在这里插入图片描述

    七、虚拟存储器和Cache的比较


    (1)相同之处

    1. 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度
    2. 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大
    3. 都有地址的映射、替换算法、更新策略等问题
    4. 依据程序访问的局部性原理应用“快速缓存的思想”,将相对活跃的数据放在相对高速的部件中

    (2)不同之处

    1. Cache主要解决系统速度、而虚拟存储器却是为了解决主存容量
    2. Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
    3. 对于不命中性能影响,虚拟存储器胸痛不命中时对系统性能影响更大
    4. CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路。也就是说,在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache,而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信。

    八、虚拟存储器与覆盖技术的比较


    (1)不同之处

    1. 覆盖程序段的最大长度要受内存容量大小的限制,而虚拟存储器中程序的最大长度不受内存容量的限制,只受计算机地址结构的限制。
    2. 覆盖技术中的覆盖段由程序员设计,且要求覆盖段中的各个覆盖具有相对独立性,不存在直接联系或相互交叉访问;而虚拟存储技术对用户的程序段没有这种要求。

    九、虚拟存储器与交换技术的比较


    (1)不同之处

    1. 都要在内存与外存之间交换信息。

    (2)相同之处

    1. 交换技术调入/调出整个进程,因此一个进程的大小要受内存容量大小的限制:而虚存中使用的调入/调出技术在内存和外存之间来回传递的是页面或分段,而不是整个进程,从而使得进程的地址映射具有更大的灵活性
    2. 虚拟存储器允许进程的大小比可用的内存空间大。
    展开全文
  • C语言内存基本知识

    2020-04-09 20:08:41
    内存条上有很多很多元器件,而每个元器件只能表示两种状态,就是通电或者断电。 通电就是1,断电就是0。所以一个元器件有两种状态,0或者1 一个元器件能表示一个0或1,那么8个元器件就能表示28次方个可能 一般...

    内存条上有很多很多元器件,而每个元器件只能表示两种状态,就是通电或者断电。

    通电就是1,断电就是0。所以一个元器件有两种状态,0或者1

    一个元器件能表示一个0或1,那么8个元器件就能表示2的8次方个可能

    一般情况下我们不使用一个元器件当单位,而是使用8个元器件来作为一个单位,将字节作为最小的单位

     

    即使是表示很小的数。例如:1             我们也要这样来表示:00000001

     

    1个元器件的单位是1位(bit)

    8个元器件的单位是1字节(byte)

    所以  8位=1字节

    8bit=1B

    1024B=1KB

    1024KB=1MB

    1024MB=1GB

    1024GB=1TB

     

    二、我们运行一个程序比如qq,我们点开它的图标,操作系统就知道你要使用这个软件,然后

    去硬盘里找到这个软件,在把数据复制到内存,qq就是在动态内存中运行的

    只有先将数据复制到内存上,才能让cpu来处理数据,将数据复制到内存上的过程叫载入内存,

    载入内存这个过程我们需要用到一个软件,这个软件叫做加载器

    三、虚拟内存

    当我们运行内存只有2G,但是我们运行的程序有3G,那么该怎么办呢

    当程序需要的空间大于内存时,就会把暂时用不到的数据先写入硬盘当中,当

    要使用这个数据的时候就去硬盘中把这个数据读取到内存中,那么这个时候硬盘就会

    腾出一部分空间来存储这个数据,这个我叫做虚拟内存

    所以3G-2G=1G  这个时候我们就需要1个G的虚拟内存了

     

     

     

     

     

     

     

     

     

    展开全文
  • 页式 设计思想: 将用户进程地址空间划分为大小相等的页、页面(一般为4K,也有4M的),并从0开始编号 将物理内存地址空间划分为大小相等的区域,...页表项:页表的每一行称为页表项,记录逻辑页号和物理页号的对应关系

    页式

    设计思想:

    • 将用户进程地址空间划分为大小相等的页、页面(一般为4K,也有4M的),并从0开始编号
    • 将物理内存地址空间划分为大小相等的区域,称为页框,也从0开始编号,也叫做物理页面,页帧,内存块
    • 以页为单位进行分配,按照进程所需要的页数来分配,进程地址空间上相邻的页,映射到物理内存上,页不一定相邻。

    **逻辑地址:**页号(20,页面的编号) + 页内地址(也叫页内偏移,12位)

    页表:记录了逻辑空间某页面对应在物理地址空间上是哪一页
    页表项:页表的每一行称为页表项,记录逻辑页号和物理页号的对应关系

    内存分配的过程:
    在这里插入图片描述

    地址转换过程:由硬件支持
    当CPU获取到逻辑地址后,自动的将该逻辑地址分为两部分,分别是页号和页内地址(页内偏移),用页号根据页表查对应物理页面,然后与页内偏移地址拼接起来,就得到了物理地址,然后就可以对此地址进行读写操作。

    缺点:
    假设一个进程需要5页+1条指令的空间,那么该进程最少需要6页的内存,就产生了内碎片,碎片大小为一页的大小减去一条指令所占的大小。

    段式

    设计思想:
    用户进程地址空间:根据程序自身的逻辑关系将程序划分成若干个程序段,每一个段都有一个段名
    内存空间:也被动态划分为若干长度不同的区域,称为物理段,每个物理段由开始地址和长度确定。

    内存分配规则:
    以段为单位进行分配,每个段在内存中占据连续空间,但各个段之间可以不相邻。

    段表:记录了程序各个段与物理内存上的段的映射关系
    段表项:段表的一项称为段表项,记录程序某个段(段号)在物理内存上的段长度以及段的起始地址等信息。和页表项相似
    每个进程的段表存放在内存中。

    逻辑地址: 段号 + 段内地址
    在这里插入图片描述
    地址转换:依赖硬件
    CPU取到逻辑地址,用段号查段表,得到该段在内存的起始地址,与段内偏移计算出物理地址。

    段页式:

    产生背景:
    综合页式和段式方案的优点,克服二者的缺点

    设计思想:
    用户进程空间划分:
    先按逻辑将进程空间划分成段,然后将这些段再按页去划分

    逻辑地址:
    原来的段内地址,此时是页号 + 页内地址
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021050522111

    内存划分:同页式存储管理方案
    内存分配:以页为单位进行分配

    相关数据结构
    段表:记录了每一段的页表的起始地址以及页表的长度
    页表:记录了逻辑页号与物理页号的对应关系
    每一段都有一张页表,此时的一个进程有多个页表

    空闲区管理:同页式管理
    内存分配,回收:同页式管理

    根据段号查段表,得到对应页表起始地址,再将段内地址划分为2部分,页号和页内地址

    本文图片与思想来自网络公开课,有兴趣的读者可以查看一下:https://www.bilibili.com/video/BV1Gx411Q7ro?p=50&spm_id_from=pageDriver

    展开全文
  • linux内核空间内存管理基本架构

    千次阅读 2017-04-27 00:26:27
    内存管理,不用多说,言简意赅。在内核里分配内存还真不是件容易的事情,根本上是因为内核不能想用户空间那样奢侈的使用内存。  先来说说内存管理。...内核用struct page(linux/mm.h)结构表示系统中的每个物理页
  • 详细到每个区都放什么。 jvm内存模型按照线程分可分为线程独占和线程共享两种. 线程独占 本地方法栈,虚拟机方法栈,程序计数器. 线程共享 堆,方法区 首先本地方法栈: 本地方法栈放就是本地方法栈针,这种方法一般...
  • 一、基本思想 按照程序自身逻辑关系...以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。 二、逻辑地址结构 三、段表 四、逻辑地址 → 物理地址 五、分段、分页管理对比 ...
  • Linux内存管理之基本概念介绍(一) 我们知道,在linux操作系统中,cpu在执行一进程时候,都会访问到内存。但是CPU并不是直接访问物理内存...通过将虚拟地址空间以512Byte~8K大小作为一个单位,这个单位就被称
  • 操作系统把内存划分为大小一样的若干(其实多得多)个块,每个块相对较小,作为内存的基本单位,进程在申请内存时,也是以块为单位逐个申请空间。 二、分页管理的特点 ① 分页管理不会出现外部碎片。 ② 由于进程...
  • 字节是内存编址最小单位,因为语言必须支持对一单元(基本数据类型或混合数据类型变量或对象)进行地址运算,而这地址必须是有效的内存单元地址,所以最小对象(包括空对象)都会占用一字节的内存
  • 了解块设备原理,需要先了解磁盘的基本结构,如下为一个盘面,磁盘最小单位为扇区,在内核力通常默认512B,每个盘面有一道道环形,为磁道。 多个盘面一起构成一块磁盘,如下每个盘面上相同为主磁道组成一个柱面,...
  • Linux 为每个进程维持了一段单独虚拟地址空间。什么是进程:操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。什么是资源:内存,文件,socket等物理资源分配资源...
  • malloc内存分配原理

    2020-09-08 10:58:05
    为了减少内存碎片和系统调用开销,malloc其采用内存方式,先申请大块内存作为堆区,然后将堆区分为多个内存块,以块作为内存管理的基本单位。当用户申请内存时,直接从堆区分配一块合适空闲块。Malloc采用...
  • 内核空间的内存管理

    2019-03-13 21:25:34
    (1)内核把物理页作为内存管理的基本单位内存管理单元通常以页为单位进行处理,所以,从虚拟内存角度来看,页就是最小单位。 大多数32位系统支持4kb页,64位系统支持8kb页。 (2)内核用这结构体表示并...
  • 内存颗粒理解

    千次阅读 2016-12-22 21:51:38
    芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列 (Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这个阵列...
  • 不过,即使是在这样一个简单的计算机中,您也会有问题,尤其是当您不知道程序的每个部分将需要多少内存时。如果您的空间有限,而内存需求是变化的,那么您需要一些方法来满足这些需求: 确定您是否有足够的内存...
  • 内存的变量占用

    2016-06-14 15:39:23
    正如你在2.1课中所学到--基本的寻址和变量定义,现代机器上记忆通常被组织成字节大小的单位每个单元都有一个独特地址。在这一点上,它是有用认为记忆是一束分支或邮箱,我们可以把和检索信息,和变量...
  • 内存分配

    2019-09-20 23:44:34
    1、 内存内存单元为基本单位每个内存单元用一个固定整数作为标识,称为地址。地址从0开始连续排列,地址相邻的内存单元被认为是逻辑上连续。我们把从地址i开始s个连续的内存单元称为首地址为i长度为s...
  • 有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立任务。 进程是程序执行时一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计系统中...
  • 页和区内核把物理页作为内存管理的基本单位。MMU(管理内存并把虚拟地址转换为物理地址的硬件)以页(page)...struct page表示系统中的每个物理页struct page { page_flags_t flags; //存放页的状态,定义在 atomic
  • 内存也起着同样作用,不论是一部两个小时电影、写着两个单词文本或是执行把两者都打开指令,所有在计算机内存东西,都采以基本单位“比特”这一形式出现,我们也称之为二进制数字。每个二进制数被存放...
  • 内存地址,内存分配

    2017-04-14 12:02:19
    不同类型变量再内存中占据不同字节数 ... 每个字节都有一个独一无二的内存地址,是一个十六进制数,  并且在相邻字节地址,一定是连续   3. 声明一个变量,就是在内存中分配连续制定字节数
  • YARN的内存和CPU配置

    2018-11-01 16:40:09
    Hadoop YARN同时支持内存和CPU两种资源调度,本文介绍如何配置...Container是YARN里面资源分配的基本单位,具有一定的内存以及CPU资源。 在YARN集群中,平衡内存、CPU、磁盘资源很重要,根据经验,...
  • 内存也起着同样作用,不论是一部两个小时电影、写着两个单词文本或是执行把两者都打开指令,所有在计算机内存东西,都采以基本单位“比特”这一形式出现,我们也称之为二进制数字。每个二进制数被存放...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,341
精华内容 936
关键字:

内存的每个基本单位