精华内容
下载资源
问答
  • LED与LCD相比较最突出的特点是亮度高、成本低且屏幕尺寸可根据现场情况用标准LED单元板拼制。按安装位置可分为:室外、半室外室内;按颜色可分为:单色、双基色彩色;按发光二极管点距可分为:φ5.0,φ3.75及φ...
  • 386相比较之前的cpu 增强了中断处理能力 并且引入了 异常概念 一 80386的中断异常 为了支持多任务虚拟存储器等功能,386把外部中断称为中断 把内部中断称为异常 最多支持256中断或异常 1.中断 中断是由异步...

    x86保护模式-七中断和异常

    386相比较之前的cpu   增强了中断处理能力   并且引入了 异常概念
    一 80386的中断和异常
    为了支持多任务和虚拟存储器等功能,386把外部中断称为中断    把内部中断称为异常
    最多支持256中断或异常
    1.中断
    中断是由异步的外部事件引起的。外部事件及中断响应与正执行的指令没有关系。
    通常中断对应i/o操作的完成,cpu中intr引脚接受外部的可屏蔽的中断请求,NMI引脚接受外部不可屏蔽的中断请求。
    EFLAGS标志寄存器中的IF标志决定是否屏蔽可屏蔽的中断请求
    intr发出中断请求的同时还有一个8位的中断向量。cpu根据向量号来决定下一步的操作。8059a能够设置向cpu提供向量号,处理中断请求的优先级。
    8259级联,最多可用 1片主帖+8片从片, 每片从片有8个外部中断请求IR0~IR7,
    主片的IR0~IR7引脚分别连接8个从片的INT引脚。最多可有 8x8=64个外部中断请求。
     
    x86保护模式-七中断和异常 - 骡子 - stupidmule@126 的博客
    cpu不屏蔽来自NMI的中断请求,响应NMI中断时,不从外部硬件接收中断向量号。固定的向量号为2   。为了不可屏蔽的嵌套,每当接受一个NMI中断,cpu就在内部屏蔽了再次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束。
    所以NMI处理程序应该以IRET指令结束。
    2.异常
    异常时80386在执行指令期间检测到不正常的或非法的条件所引起的。与正在执行的指令有直接的联系。
    例如  除法指令   除数等于0时。特权级不正确,指令不能成功完成。
    软中断指令“INT n”和“INTO”也归类于异常而不称为中断,是因为执行这些指令产生异常事件。
    386识别多种不同类别的异常,并且赋予每一种类别以不同的中断向量号。异常发生后,cpu响应异常,根据向量号转到相应的异常处理程序。
    根据引起异常的程序是否可被恢复和恢复点不同,把异常分类为故障fault,陷阱trap和中止abort。我们把对应的异常处理程序分别称为故障处理程序、陷阱处理程序和中止处理程序。
    故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。故障是可以排除的。当控制转移到故障处理程序时,所保存的断点cs及eip的值指向引起故障的指令。这样,在故障处理程序把故障排除后,执行IRET返回到引起故障的程序继续执行时,刚才引起故障的指令可重新得到执行。
    这种重新执行,不需要操作系统软件的额外参与。故障的发先可能在指令执行之前,也可能在指令执行期间。
    如果在指令执行期间检测到故障,那么中止故障指令,并把指令的操作数恢复为指令开始执行之前的值。这可保证故障指令的重新执行得到正确的结果。   
    例如,一条指令执行期间,发现段不存在,那么就停止该指令的执行,并通知系统产生段故障,对应的段故障处理程序可通过加载该段的方法来排除故障,之后,原指令就可以成功执行,至少不再发生段不存在的故障。
    陷阱是在引起异常的指令后,把异常情况通知给系统的一种异常。当控制转移到异常处理程序时,所保存的断点cs及eip的值指向引起陷阱的指令的下一条要执行的指令。下一条要执行的指令,不一定就是下一条指令(例如call 指令)。因此陷阱处理程序并不能总根据保存的断点,反推确定出产生异常的指令。在转入陷阱处理程序时,引起陷阱的指令应正常完成,它有可能改变了寄存器或存储单元。
    软中断指令、单步异常是陷阱的例子。
    中止是在系统出现严重情况时,通知系统的一种异常。引起中止的指令是无法确定的。产生中止时,正执行的程序不能被恢复执行。系统接收中止后,处理程序要重新建立各种系统表格,并可能重新启动操作系统。硬件故障和系统表中出现非法值或不一致的值是中止的例子
     3.优先级
    在一条指令执行期间,入检测到不只一个中断或异常,那么按下边所列优先级通知系统。把优先级最高的中断或异常通知系统,其他优先级较低的异常被废弃,而优先级较高的中断则保持悬挂
    x86保护模式-七中断和异常 - 骡子 - stupidmule@126 的博客

     

     
    二  异常的类型
    中断和异常一样都分为多种类型
    1.386识别的异常
    多种不同类别的异常及赋予的对应中断向量号如下表所示。
    某些异常还可以出错码的形式提供一些附加信息传递给异常处理程序,出错代码列表中的“无”表示没有出错代码,“有”表示有出错代码。
    x86保护模式-七中断和异常 - 骡子 - stupidmule@126 的博客
     保护模式下的某些中断向量号的分配与实模式的中断向量号发生冲突。实模式下的中断向量号的分配基于pc微机系统的8086/8088cpu,上表中的中断向量号的分配是80386所规定的。实际上8086/8088   保留了这些发生冲突的中断向量号。尽管有冲突,80386需要向下兼容,原因是80386的实模式下,几乎不发生哪些中断向量号与外部硬件中断请求时所提供的中断向量号存在冲突的异常。需要注意的是,在保护模式下必须重新设置8259a中断控制器,以产生不予异常相冲突的硬件中断向量。
    2.故障类异常
    当发生故障,控制转移到故障处理程序时,所保存的断点cs及eip的值指向引起故障的指令,以便在排除故障后恢复执行
    a 除法出错故障   异常0
    除法出错时一种故障。当执行DIV指令或IDIV指令时,如果除数等于0或者商太大,以至于存放商的操作数容纳不下
    此故障没有出错码
        b 边界检查故障  异常5
    如果BOUND指令发现被测试的值超过了指令中给定的范围,那么就发生边界检查故障。无出错码
    c 非法操作码故障 异常6
    如果386不能把cs和eip所指向存储单元的位模式识别为某条指令的部分,那么就发生非法操作码故障。当出现如下情况时   发生这样的故障    cs:ip指向的位置不是指令
    (1)操作码字段的内容不是一个合法的386指令代码
    (2)要求使用存储器操作数的场合,使用了寄存器操作数
    (3)不能被加锁的指令前使用了LOCK前缀。

      非法操作码故障不提供错误码

    d 设备不可用故障(异常7)
    不支持387协处理器,可用该异常的处理程序代替协处理器的软件模拟器。发生任务切换时,使得只有在新任务使用浮点指令时,才进行387寄存器状态的切换。设备不可用故障不提供出错码。
    (1)执行浮点指令时,cr0中em位或ts位为1。
    (2)执行wait指令时,cr0中的ts位及em位都为1。
    (3)异常的处理程序必须是一个程序而不是任务,否则当处理程序发布一条IRET指令时,80386就设置ts位。然后协处理器再次执行这个发生故障的指令,发现ts是置位的。因此再次发生异常7,结果就是死循环。处理程序能通过陷阱门被调用,因为执行期间可以允许中断
    e 无效tss故障  (异常0ah)
    当正从任务状态段tss装入选择子时,如果发生了除了段不存在外的段异常时,就发生此故障。
    1进入故障处理程序时,保存的cs及eip指向发生故障的指令
    2或者该故障作为任务切换的一部分发生时,指向任务的第一条指令
    3提供出错码   
    x86保护模式-七中断和异常 - 骡子 - stupidmule@126 的博客
    其中选择子部分指向引起故障的tss的选择子。16位的出错码的主要成分是选择子,指向引起故障的tss的选择子。高13位是选择子的索引部分,TI位是描述符表指示位。
    上图为异常出错码的一般格式。从途中可见出错码不含选择子的rpl  而由IDT位和EXT位代替。当处理某一异常或外部中断时,又发生了某种异常,那么EXT位置1.当从中断描述符表IDT中读出表项并产生异常时,IDT位置1,这只在中断或异常的处理期间才会发生。当没有选择子时,构成出错码选择子部分的值为0。
    4.引起无效tss故障的原因如下
    a tss描述符中的段限长小于103
    b 无效的LDT描述符,或者LDT未出现
    c 堆栈段不是一个可写段
    d 堆栈段选择子索引的描述符超出描述符表界限
    e 堆栈段DPL与新的cpl不匹配;
    f 堆栈段选择子的rpl不等于cpl
    g 代码段选择子索引的描述符超出描述符表界限
    h 代码段选择子不指向代码段
    i 非一致代码段的dpl不等于新的cpl
    j 一致代码段的dpl大于新的cpl
    k 对应ds   es   fs 或gs的选择子指向一个不可读的段,例如系统段
    l 对应ds   es   fs 或gs的选择子索引的描述符超出描述符表的界限
    f 段不存在的故障(异常0bh)
    处理器在把描述符装入非ss寄存器的高速缓冲时,如果发现描述符其他方面有效,而p位为0表示(对应段不存在),那么在引用此描述符时就发生段不存在故障。有关ss段的情形纳入堆栈段故障。在进入故障处理程序时,保存的cs及eip执行发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。
    段不存在故障提供了一个包含引起该故障的段选择子的出错代码。出错码的格式如上图所示。选择子索引部分为引起段不存在故障的段描述符选择子的索引。
    g 堆栈段故障(异常0ch)
    cpu检测到用ss寄存器进行寻址的段有关的某种问题时,就发生堆栈段故障。在进入故障处理程序时,保存的cs级eip指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。堆栈段故障提供一个出错码,出错码的格式也如上如所示
    引起堆栈段故障的原因
    (1)堆栈操作时,偏移超出段界限所规定的范围。这种情况下的出错码是0.例如PUSH操作时,堆栈溢出。
    (2)在由特权级变换所引起的对内层堆栈操作时,偏移超出段界限所规定的范围。这种情况下的出错码包含有内层堆栈的选择子。
    (3)装入到ss寄存器(高速缓冲寄存器)的描述符中的存在位为0.这种情况下的出错码包含有对应的选择子。
    第一中情况容易辨别。第2和3中情况的辨别需要通过判断出错码所含的选择子所指示的描述符中的存在位进行,如果存在位为1,那么是第二种情况,否则是第三种情况。
    h 通用保护故障(异常0dh)
    除了明确列出的段异常外,其他的段异常都被视为通用保护故障。在进入故障处理程序时,保存的cs及eip指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。通用保护故障提供一个出错码,出错码的格式也如上图所示。
    根据处理程序可能作出的响应,通用保护故障可分为如下两类:
    (1)违反保护方式,但程序无须中止的异常。此类故障的出错码为0.这种异常在应用程序执行特权指令或I/O访问呢时发生,支持虚拟8086程序的系统或支持虚拟i/o访问的系统需要模拟这些指令,并在模拟完成产生故障的指令后,重新执行被中断的程序。
    (2)违反保护方式,并导致程序终止的异常。这类故障提供的出错码可能为0  ,也可能不是0(能确定选择子时)。引起此类的故障原因
    a 向某个只读数据段或代码段写;
    b 从某个智能执行的代码段读出;
    c 将某个系统段描述符装入到数据段寄存器ds、es、fs、gs或ss;
    d 将控制转移到一个不可执行的段;
    e 在通过段寄存器cs、ds、es、fs或gs访问内存时,偏移超出段界限
    f 当访问某个描述符表时,超过描述符表段界限;
    把pg位为1但pe位为0的控制信息装入到cr0寄存器;
    切换到一个正忙的任务。
     
    对上述两类通用保护故障的辨别,可通过检查引起故障的指令和出错码进行。如果出错码非0,那么肯定是第二类通用保护故障。如果
    出错码是0,那么需要进一步检查引起故障的指令,以确定它是否是系统支持的可以模拟的指令。
    i 页故障 异常0eh 略
    j 协处理器出错 异常10h  
    协处理器出错故障指示协处理器发生了未被屏蔽的数字错误,如上溢或下溢。在引起故障的浮点指令之后的下一条浮点指令
    或WAIT指令,把协处理器出错作为一个故障通知给系统。协处理器出错故障不提供出错码。
    3.陷阱类异常
    a 调试陷阱  异常1
    调试异常有故障类型,也有陷阱类型。调试程序可以访问调试寄存器dr6  以确定调试异常的原因和类型。调试异常不提供出错码。
    b 单字节 INT3  异常3
    INT3是一条特别的单字节 INT n 指令 ,调试程序可利用该指令支持程序断点。INT3指令被看成是一种陷阱。而不是一个中断。当由于执行INT3指令进入异常3处理程序时,被保存的cs和eip指向紧跟INT3的指令,即INT3后面的字节。INT3陷阱不提供出错码。
    c 溢出  异常4
    INTO指令提供条件陷阱。如果OF标志为1,那么INTO指令产生陷阱;否则不产生陷阱,继续执行INTO后面的指令。在进入溢出处理程序时,被保存的cs和eip指向INTO指令的下一条指令。溢出陷阱不提供出错码。
    4.中止类异常
    a 双重故障异常 异常8
    当系统正在处理一个异常时,如果又检测到一个异常,处理器试图向系统通知一个双重故障,而不是通知第二个异常。双重故障属于中止类异常,所以在转入双重故障处理程序时,被保存的cs和eip可能不指向引起双重故障的指令,而且指令的重新启动不支持双重故障。  出错码为0
    当正处理一个段故障异常时,有可能又产生一个页故障。在这种情况下,通知给系统的是一个页故障异常而不是双重故障异常。但是,如果正处理一个段故障或页故障时,又一个段故障被检测到;或者如果正处理一个页故障时,又一个页故障被检测到,那么就引起双重故障。
    当正处理一个页故障时,又一个段或页故障被检测到,那么处理器暂停执行指令,并进入关机方式。关机方式类似于处理器指令一条HLT指令后的状态:处理器空转,并维持到处理器接收到一个NMI中断请求或者被重新启动为止。在关机方式下,处理器不响应INTR中断请求。
    双重故障通常指示系统表出现严重的问题,例如段描述符表、页表或中断描述符表出现问题。双重故障处理程序在重建系统表后,可能不得不重新启动操作系统。
    b 协处理器段越界  异常9
    协处理器段越界异常属于中止类异常,这是因为引起该异常的指令不能被重新启动。但更浮点指令操作数超出段界限时,产生该中止异常。协处理器段越界异常不提供出错码。在异常处理程序入口保存的cs及eip指向被中止的指令。这种中止不是系统的中止,而是只影响到这种异常时正执行的指令所在的程序。
     
    三  中断和异常的转移方法

    转载于:https://www.cnblogs.com/dongguolei/p/7896458.html

    展开全文
  • 计算机系统中的存储器可以分成两类:内存储器(简称内存)和外存储器(简称外存)。 处理器可以直接访冋内存,但不能直接访冋外存。处理器要通过启动相应的输人/输 出设备后才能使外存与内存交换信息。 与早期的...

    计算机系统中的存储器可以分成两类:内存储器(简称内存)和外存储器(简称外存)。 处理器可以直接访冋内存,但不能直接访冋外存。处理器要通过启动相应的输人/输 出设备后才能使外存与内存交换信息。

    与早期的计算机相比较,现在的计算机的内存容量已经是非常之大了,但是程序大小的增长速度与内存容量的增长几乎一样快。正如帕金森定律所说的那样:“存储器有多大,程序就会有多大”。使用计算机的人们总在抱怨机器的内存太小,总是不够用。

    在操作系统中,管理内存的部分称为存储管理,是操作系统的重要部分之一。对内存管理的好坏直接影响到计算机系统工作性能的高低。本章将介绍存储管理的基本思想。

    第一节存储管理概述

    计算机系统中的存储部件,有其自有的体系结构特点,这是理解存储管理的基础。有关存储管理具体需要完成的任务,是本小节的主要内容。

    一、存储体系

    在计算机系统中,存储器是处理器处理的信息的来源与归宿,占据着重要地位。到目前为止,最先进的计算机科学技术能够提供的存储设备的速度,仍然明显地慢于同级别的中央处理器的速度。而且由于成本等方面的原因,任何一种存储设备都无法在速度与容量两个方面同时满足用户的需求。为解决这些矛盾,计算机存储采用图6-1所示的存储体系。

    在上述存储体系中包含:少量的、非常快速、昂贵、内容易变的高速缓存Cache,通常是MB的数量级;若干兆字节、中等速度、中等价格、内容易变的内存RAM,通常是GB的数量级;低速、价廉、内容不易变的磁盘,通常是TB的数量级;如果配有光盘、磁带机或 云存储,总容量可以增大至TB或PB

    快速存储设备和大容量存储设备必须构成为统一的整体,由操作系统协调这些存储器的 使用。对于内存速度和容量的要求是,内存的直接存取速度尽量快到与处理器存取速度相匹 配,其容量大到能装下当前运行的程序与数据,否则处理器执行速度就会受到内存速度和容 量的影响而得不到充分发挥。各种速度和容量的存储器硬件,在操作系统协调之下形成了一 种存储器层次结构,或称存储体系。

    二、存储管理的任务

    任何程序和数据以及各种控制用的数据结构都必须占用一定的存储空间,因此,存储管理直接影响系统性能。存储器由内存(主存)和外存组成所谓内存空间,是由存储单元 (字节或字)组成的一维连续的地址空间,简称内存空间。用来存储当前正在运行程序的代 码及数据,是程序中指令本身地址所指的也就是程序计数器所指的存储器。

    内存空间一般分为两部分:一部分是系统区,用以存储操作系统常驻内存部分,用户不 能占用这部分空间;另一部分是用户区,分配给用户使用,用于装人并存储用户程序和数据,这部分的信息随时都在发生变化。存储管理实质上就是管理供用户使用的那部分空间。

    内存管理问题主要包括:内存管理方法、内存的分配和释放算法、虚拟存储器的管理、 控制内存和外存之间的数据流动方法、地址变换技术和内存数据保护与共享技术等

    为了对内存进行有效的管理,一般把内存分成若干个区域。即使在最简单的单道、单用 户系统中,至少也要把它分成两个区域:在一个区域内存放系统软件,如操作系统本身;而 另外一个区域则用于安置用户程序。显然,在多道、多用户系统中,为了提高系统的利用 率,需要将内存划分成更多的区域,以便支持多道程序。用户对内存管理提出了许多要求。

    (1) 充分利用内存,为多道程序并发执行提供存储基础。

    (2) 尽可能方便用户使用。

    ①操作系统自动装人用户程序。

    ②用户程序中不必考虑硬件细节。

    (3)系统能够解决程序空间比实际内存空间大的问题。

    (4)程序的长度在执行时可以动态伸缩

    (5)内存存取速度快

    (6)存储保护与安全

    (7)共享与通信

    (8)及时了解有关资源的使用状况

    (9)实现的性能和代价合理

    这就引起了存储器分配以及随之而产生的一系列问题。通过对用户需求的分析,得到在 操作系统中存储管理的主要任务。

    1、内存的分配和回收

    一个有效的存储分配机制,应对用户提出的需求予以快速响应,为之分配相应的存储空 间;在用户程序不再需要它时及时回收,以供其他用户使用。为此,应该具有以下功能。

    (1)记住每个存储区域的状态。内存空间哪些是分配了的,哪些是空闲的?这就需要设 置相应的分配表格,记录内存空间使用状态。

    (2)实施分配。当用户提出申请时,按需要进行分配,并修改相应的分配表格。分配方 式有静态分配和动态分配两种。

    (3)回收。接收用户释放的区域,并修改相应的分配表格。

    为实现上述功能,必须引入分配表格,统称为内存分配表,其组织方式包括的内容如下。

    ①位示图表示法:用一位(bit)表示一个空闲页面(0表示空闲,1表示占用)。

    ②空闲页面表:包括首页面号和空闲页面个数,连续若干的页面作为一组登记在表中。

    ③空闲块表:空闲块首址和空闲块长度,没有记录的区域即为进程所占用。

    内存分配有两种方式:

    (1)静态分配:程序要求的内存空间是在目标模块连接装入内存时确定并分配的,并且在程 序运行过程中不允许再申请或在内存中“搬家”,即分配工作是在程序运行前一次性完成。

    (2)动态分配:程序要求的基本内存空间是在目标模块装人时确定并分配的,但是在程 序运行过程中允许申请附加的内存空间或在内存中“搬家”,即分配工作可以在程序运行前 及运行过程中逐步完成。

    显然,动态存储分配具有较大的灵活性,它不需要一个程序的全部信息进人内存后才可以运行,而是在程序运行中需要时,系统自动将其调人内存。程序当前暂不使用的信息可以 不进人内存,这对提高内存的利用率大有好处。动态存储分配反映了程序的动态性,较之静 态存储分配更为合理。

    2、存储共享

    所谓存储共享是指两个或多个进程共用内存中相同区域,这样不仅能使多道程序动态地 共享内存,提髙内存利用率,而且还能共享内存中某个区域的信息。共享的内容包括代码共 享和数据共享,特别是代码共享要求代码必须是纯代码。

    存储共享的一个目的是通过代码共享节省内存空间,提高内存利用率;另一个目的是通数据共享实现进程通信

    3、存储保护

    在多道程序系统中,内存中既有操作系统,又有许多用户程序。为使系统正常运行,避免内存中各程序相互干扰,必须对内存中的程序和数据进行保护。

    存储保护目的在于为多个程序共享内存提供保障,使在内存中的各道程序,只能访问它自己的区域,避免各道程序间相互干扰。特别是当一道程序发生错误时,不至于影响其他程 序的运行,更要防止破坏系统程序。存储保护通常需要有硬件支持,并由软件配合实现。

    存储保护的内容包括:保护系统程序区不被用户有意或无意的侵犯;不允许用户程序读 写不属于自己地址空间的数据,如系统区地址空间、其他用户程序的地址空间。

    (1)地址越界保护

    每个进程都具有其相对独立的进程空间,如果进程在运行时所产生的地址超出其地址空 间,则发生地址越界。地址越界可能侵犯其他进程的空间,影响其他进程的正常运行;也可 能侵犯操作系统空间,导致系统混乱。因此,对进程所产生的地址必须加以检查,发生越界 时产生中断,由操作系统进行相应处理。

    (2)权限保护

    对于允许多个进程共享的公共区域,每个进程都有自己的访问权限。例如,有些进程可以执 行写操作,而其他进程只能执行读操作等。因此,必须对公共区域的访问加以限制和检查。

    ①对属于自己区域的信息,可读可写。

    ②对公共区域中允许共享的信息或获得授权可使用的信息,可读而不可修改。

    ③对未获授权使用的信息,不可读、不可写。

    存储保护一般以硬件保护机制为主,软件为辅,因为完全用软件实现系统开销太大,速 度成倍降低。所以,当发生地址越界或非法操作时,由硬件产生中断,进入操作系统处理。

    4、“扩充”内存容量

    用户在编制程序时,不应该受内存容量限制,所以要采用一定技术来“扩充”内存的 容量,使用户得到比实际内存容量大得多的内存空间。

    具体实现是在硬件支持下,软件、硬件相互协作,将内存和外存结合起来统一使用。通过这种方法扩充内存,使用户在编制程序时不受内存限制。借助虚拟存储技术或其他交换技 术,达到在逻辑上扩充内存容量的目的,即为用户提供比内存物理空间大得多的地址空间, 以至使得用户感觉他的程序是在一个大的存储器中运行。

    展开全文
  • 信息技术基础

    2018-01-06 11:47:19
    由于存储手段在容量、速度、价格三者之间存在尖锐矛盾,存储器不得不采取分级的体系,形成存储器的层次结构,自上至下可分为超高速缓冲存储器、高速主存储器(又称内存储器)大容量外存储器等。主存储器是存储体系的...
  • 在Unix/Linux环境下,Swap是比较重要的空间配置内容。Swap出现的背景源于对物理内存的...对于外存储器(硬盘)而言,内存速度具有很强的优势。但是,出于经济方面技术方面的一些原因,物理存在过去一个时期...

    Unix/Linux环境下,Swap是比较重要的空间配置内容。Swap出现的背景源于对物理内存的使用特性。相对于外存储器(硬盘)而言,内存速度具有很强的优势。但是,出于经济方面和技术方面的一些原因,物理内存在过去一个时期内,一直是比较“稀缺”的资源。

     

    对操作系统而言,如果存在物理内存不足的情况,通常使用硬盘空间进行弥补,这也就是我们常看到的虚拟内存技术。Window环境中,我们称为虚拟内存。在Unix/Linux环境中,也就是Swap空间。

     

    我们非常熟悉一个经典的Swap设置规则:如果物理内存大小小于2G,设置的Swap分区大小为物理内存的两倍。如果物理内存大小大于等于2G,可以考虑设置Swap分区等于物理内存或者1.5倍内存大小。

     

    从性能上看,Swap是不能和物理内存相比的,临时性充当分页职能其实也是无奈之举。很多时候的性能问题,都是由于Swap设置不足或者错误设置有关。

     

    本篇主要介绍如何在系统中动态调整Swap空间大小。

     

    1、环境介绍

     

    当前我们采用Linux内核版本2.6Swap空间情况如下。

     

     

    [root@SimpleLinux ~]# uname -r

    2.6.18-128.el5

     

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     292904     625476          0      47108     192936

    -/+ buffers/cache:      52860     865520

    Swap:      1534196          0    1534196

     

     

    查看系统中Swap可以使用free命令或者查看/proc/swaps文件。

     

     

    [root@SimpleLinux ~]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/sda2                               partition       1534196 0       -1

     

     

    此时的Swap是通过分区/dev/sda2来进行支持。目前很多时候,我们存储都是使用LVMLogical Volume Manager)来进行管理,当前系统中lv情况如下。

     

     

    [root@SimpleLinux ~]# lvs

      LV   VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert

      lv1  VolGrp01 -wi-ao 192.00M                                     

      lv2  VolGrp01 -wi-a- 600.00M 

     

     

    Red Hat官方提供的Swap设置方式看,有三种可选择的策略,分别为LVM空间调整、LVM空间设置和Swap文件。下面笔者从两大类LVMSwapfile来介绍。

     

    2LVM Swap设置

     

    默认的Linux分区策略中,LVM已经成为标准分区方案。使用LVM的优点是可以进行灵活的空间配置使用和动态调节。对于Swap空间而言,使用LVM也是同样有好处的。

     

    Swap空间认可的一个专门的磁盘分区,使用LVMLogical Volume对象,恰恰可以帮助实现这个功能。

     

    我们首先创建出专门用于SwapLogical Volume

     

     

    [root@SimpleLinux ~]# lvcreate VolGrp02 -n lvswap01 -L 1000M

      Logical volume "lvswap01" created

    [root@SimpleLinux ~]# lvs

      LV       VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert

      lv1      VolGrp01 -wi-ao  192.00M                                     

      lv2      VolGrp01 -wi-a-  600.00M                                     

      lvswap01 VolGrp02 -wi-a- 1000.00M

     

     

    同格式化一样,我们需要对新生成的lv进行swap“格式化”处理。

     

     

    [root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01

    Setting up swapspace version 1, size = 1048571 kB

     

     

    /etc/fstab中添加上对swap空间的设置。

     

     

    [root@SimpleLinux ~]# cat /etc/fstab

    LABEL=/                 /                       ext3    defaults        1 1

    tmpfs                   /dev/shm                tmpfs   defaults        0 0

    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

    sysfs                   /sys                    sysfs   defaults        0 0

    proc                    /proc                   proc    defaults        0 0

    UUID="5e007a89-326d-4a71-9744-8cd7d36a90a7"       /voltest01              ext3    defaults        1 1

    /dev/VolGrp02/lvswap01  swap                    swap    defaults        0 0

    LABEL=SWAP-sda2         swap                    swap    defaults        0 0

     

     

    加载上swapon空间。

     

     

    [root@SimpleLinux ~]# swapon -va

    swapon on /dev/VolGrp02/lvswap01

    [root@SimpleLinux ~]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/sda2                               partition       1534196 0       -1

    /dev/mapper/VolGrp02-lvswap01           partition       1023992 0       -2

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     294152     624228          0      47424     193544

    -/+ buffers/cache:      53184     865196

    Swap:      2558188          0    2558188

     

     

    注意,系统的swap空间已经添加上,容量已经增加。重启之后,我们依然可以看到对应空间的存在。

     

     

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     204772     713608          0      14620     152980

    -/+ buffers/cache:      37172     881208

    Swap:      2558188          0    2558188

     

     

    3LVM Swap情况下,空间调整

     

    进行Swap调整时非常常见的动作,我们平时可能根据系统运行情况进行动态调整。基于LVM的调整要注意一个问题,就是需要先swapoff空间,之后调整,最后再加载上。

     

    我们先试验下如何进行swap缩小。先进行swap关闭。

     

     

    [root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

    swapoff on /dev/VolGrp02/lvswap01

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     204856     713524          0      14724     153064

    -/+ buffers/cache:      37068     881312

    Swap:      1534196          0    1534196 (已经缩小)

    [root@SimpleLinux ~]# lvs

      LV       VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert

      lv1      VolGrp01 -wi-ao  192.00M                                     

      lv2      VolGrp01 -wi-a-  600.00M                                     

      lvswap01 VolGrp02 -wi-a- 1000.00M         

     

     

    缩小lv对象。

     

     

    [root@SimpleLinux ~]# lvreduce /dev/VolGrp02/lvswap01 -L -400M

      WARNING: Reducing active logical volume to 600.00 MB

      THIS MAY DESTROY YOUR DATA (filesystem etc.)

    Do you really want to reduce lvswap01? [y/n]: y

      Reducing logical volume lvswap01 to 600.00 MB

      Logical volume lvswap01 successfully resized

    [root@SimpleLinux ~]# lvs

      LV       VG       Attr   LSize   Origin Snap%  Move Log Copy%  Convert

      lv1      VolGrp01 -wi-ao 192.00M                                     

      lv2      VolGrp01 -wi-a- 600.00M                                     

      lvswap01 VolGrp02 -wi-a- 600.00M          

     

     

    之后再使用swapon进行启动。

     

     

    [root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01 (重新格式化,通知下File System

    Setting up swapspace version 1, size = 629141 kB

    [root@SimpleLinux ~]# swapon -va

    swapon on /dev/VolGrp02/lvswap01

    swapon on /dev/sda2

    swapon: /dev/sda2: Device or resource busy

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     205340     713040          0      14852     153244

    -/+ buffers/cache:      37244     881136

    Swap:      2148588          0    2148588

    [root@SimpleLinux ~]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/mapper/VolGrp02-lvswap01           partition       614392  0       -3

    /dev/sda2                               partition       1534196 0       -2

    [root@SimpleLinux ~]#

     

     

    下面实验拓展lv动作。

     

     

    [root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

    swapoff on /dev/VolGrp02/lvswap01

    [root@SimpleLinux ~]# lvresize /dev/VolGrp02/lvswap01 -L 900M

      Extending logical volume lvswap01 to 900.00 MB

      Logical volume lvswap01 successfully resized

    [root@SimpleLinux ~]# mkswap /dev/VolGrp02/lvswap01

    Setting up swapspace version 1, size = 943714 kB

    [root@SimpleLinux ~]# swapon -va

    swapon on /dev/VolGrp02/lvswap01

    swapon on /dev/sda2

    swapon: /dev/sda2: Device or resource busy

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     205336     713044          0      14928     153248

    -/+ buffers/cache:      37160     881220

    Swap:      2455788          0    2455788

    [root@SimpleLinux ~]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/mapper/VolGrp02-lvswap01           partition       921592  0       -4

    /dev/sda2                               partition       1534196 0       -2

     

     

    删除swap lv比较简单,就是进行卸载之后从/etc/fstab中删除行信息即可。

     

     

    [root@SimpleLinux ~]# swapoff -v /dev/VolGrp02/lvswap01

    swapoff on /dev/VolGrp02/lvswap01

     

    [root@SimpleLinux ~]# cat /etc/fstab

    LABEL=/                 /                       ext3    defaults        1 1

    tmpfs                   /dev/shm                tmpfs   defaults        0 0

    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

    sysfs                   /sys                    sysfs   defaults        0 0

    proc                    /proc                   proc    defaults        0 0

    /dev/VolGrp01/lv1       /voltest01              ext3    defaults        0 0

    LABEL=SWAP-sda2         swap                    swap    defaults        0 0

     

     

    4、使用文件拓展swap空间

     

    windows下,虚拟内存表现为系统目录中的一个文件。Swap也可以这样实现。首先,swap空间如下:

     

     

    [root@SimpleLinux ~]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     204436     713944          0      14680     153000

    -/+ buffers/cache:      36756     881624

    Swap:      1534196          0    1534196

     

     

    使用dd创建一个空文件,在文件系统上。

     

     

    [root@SimpleLinux ~]# dd if=/dev/zero f=/swapfile bs=1024 count=65536

    65536+0 records in

    65536+0 records out

    67108864 bytes (67 MB) copied, 0.305277 seconds, 220 MB/s

    [root@SimpleLinux ~]# mkswap /swapfile

    Setting up swapspace version 1, size = 67104 kB

    [root@SimpleLinux ~]# cd /

    [root@SimpleLinux /]# ls -l | grep swapfile

    -rw-r--r--  1 root   root     67108864 Oct 10 17:02 swapfile

     

     

    再通过swapon命令进行加载动作。

     

     

    [root@SimpleLinux /]# swapon /swapfile

    [root@SimpleLinux /]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     271580     646800          0      14884     218564

    -/+ buffers/cache:      38132     880248

    Swap:      1599724          0    1599724

    [root@SimpleLinux /]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/sda2                               partition       1534196 0       -1

    /swapfile                               file            65528   0       -2

     

     

    删除swap文件,就可以实现卸载动作。不过要注意首先需要进行swapoff

     

     

    [root@SimpleLinux /]# swapoff /swapfile

    [root@SimpleLinux /]# free

                 total       used       free     shared    buffers     cached

    Mem:        918380     271580     646800          0      14920     218564

    -/+ buffers/cache:      38096     880284

    Swap:      1534196          0    1534196

    [root@SimpleLinux /]# rm -r swapfile

    rm: remove regular file `swapfile'? y

    [root@SimpleLinux /]# cat /proc/swaps

    Filename                                Type            Size    Used    Priority

    /dev/sda2                               partition       1534196 0       -1

     

     

    5、结论

     

    Swap是我们进行性能调优过程中,经常使用的手段方法。掌握Swap的设置手段,对日常工作很有帮助。

     

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-774174/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/17203031/viewspace-774174/

    展开全文
  • 在严格的哈佛结构中,程序存储器和数据存储器分别设在两个存储空间,这样,就允许取址和执行操作完全重叠。修正的哈佛结构中,允许在程序和数据空间之间传送数据,从而使处理器具有在单个周期同时执行算术运算、...
  • 单片机期末考试题目及答案详解

    热门讨论 2009-06-23 10:30:30
    有区分存储器和I/O的控制信号 I/O和存储器的地址可以重叠 20.把8155的A2、A1、A0分别与80C51的P0.2、P0.1、P0.0连接,则8155的PA、PB、PC口的地址可能是 A.××00H~××03H B.00××H~03××H C.××01H~××...
  • 而内存用于存储当前的指令数据,是对于硬盘、软盘而言的,内存的容量一般比较小,但存储速度快,断电后不保存; 硬盘是指外部存储器,容量较大,存储速度比内存慢; 指令是控制计算机执行的命令,它由操作码...

    CPU是计算机的大脑,负责解释、执行程序的内容,在其内部可对数据执行运算并控制内存和I/O;

    而内存用于存储当前的指令和数据,是相对于硬盘、软盘而言的,内存的容量一般比较小,但存储速度快,断电后不保存;

    硬盘是指外部存储器,容量较大,存储速度比内存慢;

    指令是控制计算机执行的命令,它由操作码和地址码组成。

    CPU只能直接访问内存,外存的数据要先到内存,才能被CPU访问。可以说,硬盘解决了我们存储大容量数据的需求,内存则是解决了CPU需要高速处理数据的需求。

    这四者之间的关系:硬盘中存放的大量数据无法直接参与计算,需要通过内存暂存当前数据,CPU根据指令来访问内存中的数据。


    展开全文
  • 会计理论考试题

    2012-03-07 21:04:40
    A、显示器 B、内存储器 C、外存储器 D、微处理器 2.用高级语言来编写的程序 ___D___ 。 A、称为编译软件 B、经编译后,才称为源程序 C、其运行速度远比机器语言编写的程序要快 D、需要转换成机器语言后,计算机中的...
  • 在教材方面,申请人准备在调研国内教学内容的基础上,结合当前最新技术的发展情况,提出适合我校学生的教学内容,并在教学过程中采用自编教材引进教材结合的方式,以最快的速度达到培养目标。 创新点: ...
  • 2.存储器的技术指标有A______、B______、C______和存储器带宽。 3.寻址方式根据操作数的A______位置不同,多使用B______型C______型。 4.当今的CPU芯片,除了包括定点运算器控制器,还包括A______,B______...
  • 5.5比较模拟存储器(采样保持,峰值保持) 电平比较(比较器)/让它记忆(模拟存储器) 5.6需要大功率时 一个人具有一百个人的力量(功率提升器) 本章小结 Ⅵ由集成运算放大器构成的电路实例 6.1滤波电路 由单个运算...
  • 19.2.4 利用Configuration WizardTCP/IP Configuration Wizard获得C8051F120 单片机 关程序代码 单片机原理及接口(C 语言版)——北京交通大学计算机与信息技术学院,陈连坤,2009v001 8 19.3.4 程序解析 ...
  • 如果频率比较低,在待测信号的一个周期对单片机的工作频率进行计数。 将得到的频率值通过显示译码后直接送入显示电路,显示给用户 ( 2 ) 电路需要解决的问题 单片机最小系统板电路的组建,单片机程序下载接口...
  • 二十、 排序(又称分类,分为排序和外排序) 二十一、 插入法:将新数据比较插入到已经排序好的部分中。 二十二、 选择法:每次产生一最小数据《不稳定的排序方法》 二十三、 冒泡法:每次产生一最大数据 二十四、...
  • 复旦nois教材01.rar

    2009-08-05 20:08:37
    3.1.3 缓冲存储器...........................................................................................................38 3.1.4 移位单元...............................................................
  • C#数据结构

    2013-12-10 11:49:54
    二是如何在计算机存储器(内存和外存)中存储数据;三是如何对存 储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何对 同一问题的不同操作方法进行评价;四是必须理解每种数据结构的性能特征,...
  • 汇编语言是具体的微处理器联系的,每一种微处理器的汇编语言都不一样,我们只能通过一种常用的.结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解...
  •  (1)与NAS相比较,安装费用较高,随着网络环的深度,方案的规模复杂度而增加。  (2)由于远距离光纤通道价格昂贵,所以SAN通常情况下局限于局域网。  (3)由于SAN考虑的是集中存储,而不是共享存储,所以SAN环境...
  • 电缆故障测试仪

    2015-05-29 12:48:40
    选“存盘”可将测试的波形数据存储于电脑的硬盘或外存储器(如U盘等)中,作为资料保存;选“读盘”可调出以前测试时存储的波形,以供事后分析;选“结束”可退出该控制面板。 2、状态栏 状态栏里显示四个方面...
  • 从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...
  • 从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 12、...
  • java 面试题 总结

    2009-09-16 08:45:34
    从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。 9、...
  • msp430书稿开发板

    2011-03-17 21:46:39
    1.2 片主要模块介绍 - 12 - 1.2.1时钟模块 - 13 - 1.2.1.1 MSP430F449的三个时钟源可以提供四种时钟信号 - 13 - 1.2.1.2 MSP430F449时钟模块寄存器 - 14 - 1.2.1.3 FLL+模块应用举例 - 16 - 1.2.2 低功耗结构 - 17...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    35.java除了8种基本类型,在虚拟机里还有哪一种,有什么作用? 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有...
  • 1.3.2 异值类型引用类型 1.3.3 强数据类型 1.3.4 通过异常处理错误 1.3.5 特性的使用 1.4 程序集 1.4.1 私有程序集 1.4.2 共享程序集 1.4.3 反射 1.5 .NET Framework类 1.6 命名空间 1.7 用C#创建.NET应用程序 ...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

内存储器和外存储器相比较