精华内容
下载资源
问答
  • 常用缓冲技术哪几种?
    千次阅读
    2015-07-23 10:14:00

    双缓冲、环形缓冲、缓冲池

    转载于:https://www.cnblogs.com/luo841997665/p/4669628.html

    更多相关内容
  • 操作系统缓冲技术的相关介绍

    千次阅读 2020-12-15 00:25:06
    对于引入缓冲的原因,缓冲的类型,缓冲的组成,缓冲池的操作及工作流程进行了介绍!

    凡数据到达速度和离去速度不匹配的地方都可以采用缓冲技术!

    一、操作系统中引入缓冲的主要原因:

    ——缓和CPU与I/O设备间速度不匹配的矛盾。

    ——减少对CPU的中断频率,放宽对中断响应时间的限制。

    ——提高CPU和I/O设备的并行性。


    二、缓冲的类型:

    按照缓冲区存在的位置分类:

    按照缓冲区的个数以及缓冲区的组织形式分类:


    三、缓冲池的组成及操作:

    ——在缓冲池中存在由三类缓冲区组成的三条队列:空缓冲队列emq 、输入队列inq 、输出队列outq。

    ——系统(或者用户进程)可以从这三种队列中申请和取出缓冲区,用得到的缓冲区进行存数、取数操作,在存数、取数操作完成之后,再将缓冲区挂到相应的队列,这些缓冲区被称为工作缓冲区

    ——缓冲池中有四种工作缓冲区

    • 用于收容设备输入数据的收容输入缓冲区hin。
    • 用于提取设备输入数据的提取输入缓冲区sin。
    • 用于收容CPU输出数据的收容输出缓冲区hout。
    • 用于提取CPU输出数据的提取输出缓冲区sout。
    缓冲区的工作缓冲区

    缓冲池的操作:

    • 从指定缓冲区队列中取出一个缓冲区的过程:Take_buf(type)
    • 把缓冲区插入到相应的缓冲区队列的过程:Add_buf(type,  buf)
    • 进程申请一个指定类型缓冲区的过程:Get_buf(type)
    • 进程将工作缓冲区插入到相应缓冲区队列的过程:Put_buf(type, work_buf)

    ——type表示缓冲队列的类型。

    ——work_buf表示工作缓冲区类型。

     

    在看到这里的时候,可能会奇怪,上面的几个函数的功能有些许重叠!这是为什么呢?

     

    因为缓冲池中的队列本身是一种临界资源,当多个进程在访问同一个队列时,既应当互斥,又需同步。所以不能直接使用Take_buf和Add_buf对缓冲池中的队列进行操作,而是使用对这两个过程改造加工之后的Get_buf和Put_buf。

     

    Get_buf和Put_buf的构建:

    为了使得各个进程能互斥的访问缓冲池队列,可以为每一队列设置一个互斥信号量MS(type),初始值为1。此时,为了保证各个进程同步地使用缓冲区,为每一个缓冲队列设置一个资源信号量RS(type)初始值为 n (n为type队列长度)。

    缓冲池的工作过程:

    ——收容输入:

    • 在输入进程需要输入数据时,调用Get_buf(emq)过程,从空缓冲队列emq的队首摘下一空缓冲,把它作为收容输入工作缓冲区hin,把数据输入其中,装满后再调用Put_buf(inq, hin)过程,将该缓冲区挂在输入队列inq上。

    ——提取输入:

    • 当计算进程需要输入数据时,调用Get_buf(inq)过程,从输入队列inq的队首取得一缓冲区作为提取输入工作缓冲区sin,计算进程从中提取数据。计算进程用完该数据后,再调用Put_buf(emq, sin)过程,将该缓冲区挂到空缓冲队列emq上。

    ——收容输出:

    • 当计算进程需要输出时,调用Get_buf(emq)过程,从空缓冲队列emq的队首取得一空缓冲作为收容输出工作缓冲区hout。当其中装满输出数据后,又调用Put_buf(outq, hout)过程,将该缓冲区挂在输出队列outq末尾。

    ——提取输出:

    • 输出进程调用Get_buf(outq)过程,从输出队列的队首取得一装满输出数据的缓冲区作为提取输出工作缓冲区sout。在数据提取完后,再调用Put_buf(emq, sout)过程,将该缓冲区挂在空缓冲队列末尾

     

    Ending... ...

    展开全文
  • 【操作系统】IO 缓冲技术

    千次阅读 2017-12-10 20:33:18
    或者说缓冲技术什么用?下面我来简单给大家介绍一下。​ 一、导图分析​ 二、图解​ 单缓冲:操作系统在主存储器中只设置一个缓冲区。​ 双缓冲:操作系统在主存储器中设置两个缓冲区。​ 缓冲池:操作系统在主...

    缓冲技术大致分为三种:单缓冲、双缓冲、缓冲池。下面我来简单介绍一下计算机中的缓冲技术。操作系统为什么采用缓冲技术?或者说缓冲技术有什么用?下面我来简单给大家介绍一下。

    ​ 一、导图分析

    img

    ​ 二、图解

    ​ 单缓冲:操作系统在主存储器中只设置一个缓冲区。

    ​ 双缓冲:操作系统在主存储器中设置两个缓冲区。

    ​ 缓冲池:操作系统在主存储器中设置一组缓冲区。

    ​ 单缓冲与双缓冲的区别:当CPU在读双缓冲区中的1号缓冲区的信息时,另外的信息可以读入2号缓冲区当中去。而单缓冲只有在CPU读完缓冲区的的信息,缓冲区才可以读取另一块信息。

    ​ 缓冲技术的作用:1、实现记录的成组与分解操作,协调了记录的逻辑记录的大小与物理块大小不一致问题。(因为当逻辑文件转换成物理文件时是通过主存储器来实现的,块是主存储器与存储设备进行信息交换的物理单位)2、缓解处理器与外围设备之间速度不匹配的矛盾,提高了文件信息的传送速度。

    ​ 下面我用一张图来简单描述一下处理器(CPU)是怎样在辅助存储介质中读取信息并做处理的。

    img

    ​ 处理器(CPU)的组成:控制单元、逻辑单元、存储单元。

    ​ 当处理器读取一个文件时,处理器先发布一条命令找到该文件,然后将文件读入主存储器(电脑的内存条)当中的缓冲区中,然后在读入高速缓冲存储器中然(适用于页式虚拟存储管理),再读入寄存器中,处理器当中的控制单元和逻辑单元再进行相关的操作,最后逻辑单元将处理的结果存放到处理器的存储单元当中。

    ​ 大家应该知道、处理器的运行速度是远远地大于处理器在外围设备读取信息的速度的,采用缓冲技术就是为了解决这一个矛盾的。

    ​ 主存储器中开辟的缓冲区与高速缓冲存储器相当于处理器与辅助存储器的一个桥梁,只不过在主存储器中的缓冲区读取的速度要小于高速缓冲,这就好比主存储器中的缓冲区是一条普通的公路,而高速缓冲存储器是一条高速公路一样。

    ​ 三、小结

    ​ 由于在计算机系统中大量的文件信息是存储在磁盘上的,系统在运行期间要不断的执行读或写操作,采用了缓冲技术能减少处理器对磁盘的访问次数,从而提高系统的工作效率。

    原文链接:http://blog.csdn.net/zhoukun1008/article/details/44999447

    展开全文
  • 操作系统——缓冲区溢出

    千次阅读 2019-05-12 22:46:18
    一、缓冲区溢出介绍 1988年,世界上第一个缓冲区溢出攻击–Morris蠕虫在互联网上泛滥,短短一夜的时间全世界6000多台网络服务器瘫痪或半瘫痪,不计其数的数据和资料被毁。造成一场损失近亿美元的空前大劫难! 那么,...

    一、缓冲区溢出介绍

    1988年,世界上第一个缓冲区溢出攻击–Morris蠕虫在互联网上泛滥,短短一夜的时间全世界6000多台网络服务器瘫痪或半瘫痪,不计其数的数据和资料被毁。造成一场损失近亿美元的空前大劫难!

    那么,缓冲区溢出到底是怎么一回事呢?

    缓冲区溢出就好比一个杯子倒太多的水,洒出来,这叫溢出。它是一种非常普遍、非常危险的漏洞,最常出现在C/C++编写的程序中。

    早期,人们还不那么重视安全的时候,往往会使用像strcpy这类不安全函数,这种函数对用户的输入不作任何检查,总之,来自不拒,那么,分配的内存空间是有限的,如果输入超长的字符串,必然会导致溢出。

    在这里插入图片描述

    讲了这么多,小伙伴会不会有点晕吗?其实,缓冲区溢出很容易理解的。下面我们看一个具体的例子:

    #include<stdio.h>
    
    #include<string.h>
    
    int main()
    
    {
    
    char str[8];
    
    char input[256];
    
    gets(input);
    
    strcpy(str,input);
    
    return 0;
    
    }
    

    这段代码存在一个经典的缓冲区溢出漏洞strcpy,为str变量分配了8个字节的空间,输入小于等于8个字符,那没问题:

    在这里插入图片描述

    但是当我们输入超长的数据时,问题出现了

    在这里插入图片描述

    2、缓冲区溢出带来的危害

    上面是我们自己写的程序,存在漏洞这没什么大惊小怪并不会造成什么恶劣的影响。但是,如果问题出现在我们常用的一些软件,比如操作系统,浏览器,QQ,那后果不堪想象。

    缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到系统权限,然后为所欲为。

    利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,它可被利用来执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。

    有可能小伙伴你会对病毒/蠕虫没有概念,那我们来举一个简单的例子吧。平时玩电脑的时候,你正在听歌,突然间收到未知的“朋友”发给你的一个m3u音频文件,并引导你进行电击——“这首歌很好听呢,你也听听”。

    凑巧的是,你电脑刚好了就装了VUPlayer.exe 这个播放器,不多想,就打开这个音乐想听听看,奇怪的是,软件闪了一下就退出了,你以为是文件损坏了了吧。其实,这个时候,你已经被黑了,没错!这就是那个播放器。

    在这里插入图片描述

    很普通的播放器,但是它存在致命缓冲区溢出漏洞。我们构造10000个A的m3u文件,然后用调试器附加VUPlayer.exe,打开文件:

    在这里插入图片描述

    我们看到下面的内存全部被字符A覆盖了,其实就是使用了不安全的lstrcpyA函数导致溢出,这个是栈溢出,还有一种是堆溢出,但本质是一样的。

    证明有溢出漏洞之后,往往需要进一步分析写利用代码,不同的人目的不竟相同,类似我的很多安全爱好者之时弹弹计算器(在桌面上不停地弹出计算器工具),可是黑市上的人就会攻击你的系统,盗取机密文件等等。当然,这只是一个简单的实验。

    3、目前常见的保护措施

    缓冲区攻击的日渐泛滥,微软并未任其张扬,陆陆续续推出了各种保存措施。其中重要的有GS,SafeSeh,ASLR,DEP等,接下来我们针对这些措施进行原理分析:

    ①.GS保护原理:

    通过VC++编译器在函数前后添加额外的处理代码,前部分用于由伪随机数生成的cookie并放入.data节段,当本地变量初始化,就会向栈中插入cookie,它位于局部变量和返回地址之间在缓冲区溢出利用时,如果将恶意代码从局部变量覆盖到返回地址,那么自然就会覆写cookie,当检测到与原始cookie不同时,就会触发异常,最后终止进程。

    ②.SafeSeh保护

    为了防止SEH节点被攻击者恶意利用,微软在.net编译器中加入/sdeseh编译选项引入SafeSEH技术。编译器在编译时将PE文件所有合法的异常处理例程的地址解析出来制成一张表,放在PE文件的数据块(LQAJ)一C0N—FIG)中,并使用shareuser内存中的一个随机数加密,用于匹配检查。

    如果该PE文件不支持safesEH,则表的地址为0。当PE文件被系统加载后,表中的内容被加密保存到ntdl1.dll模块的某个数据区。在PE文件运行期间,如果发生异常需要调用异常处理例程,系统会逐个检查该例程在表中是否有记录:如果没有则说明该例程非法,进而不执行该异常例程。

    ③.ASLR保护

    ASLR(地址空间布局随机化)技术的主要功能是通过对系统关键地址的随机化,防止攻击者在堆栈溢出后利用固定的地址定位到恶意代码并加以运行。

    ④.DEP保护

    数据执行保护 (DEP) 是一套软硬件技术,能够在内存上执行额外检查以防止在不可运行的内存区域上执行代码

    这些保护机制的出现,一度使得攻击难度大大增加,但攻击者们也不是吃素的,他们也在研究绕过这些保护的办法。所谓千里之堤溃于蚁穴,对于上面的保护,攻击者只要找到了它们的一个弱点,便可以突破所有防线,实现攻击。攻击与防护,不断在对抗,可以预见,在未来一段时间,这种游戏还将持续上演。

    但是,现在的漏洞门槛比十年前高了N倍,笔者在实际中也常常遇到有漏洞却不能利用的情况。但是也不要灰心,老的技术被淘汰,新的技术又会出来,本属正常,但像缓冲区溢出这种经典的东西,无论什么时候,都值得我们学习。

    注:

    本文来自:https://zhuanlan.zhihu.com/p/21924662

    溢出实例见:
    https://www.cnblogs.com/clover-toeic/p/3737011.html

    展开全文
  • 缓冲区溢出攻击是网络攻击事件中最常用的一种攻击方式,成为系统和网络安全中亟待解决的重要问题。在分析缓冲区溢出攻击原理的基础上,说明了攻击的成因,然后描述了目前常见的攻击类型,最后给出了现有的防范措施,...
  • 向下则以系统缓冲区的存储器接口作为实现基础。接口关系如下: 数据存储层所涉及的主要数据结构为逻辑数据记录、逻辑块、逻辑存取路径。 存取层的任务主要包括: 提供一次一个元组的查找、插入、删除、修改的等...
  • 【Java基础-3】吃透Java IO:字节流、字符流、缓冲

    万次阅读 多人点赞 2020-09-23 20:12:33
    什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。
  • 缓冲区溢出原理及其防范,孙魁,,缓冲区溢出攻击是网络攻击事件中最常用的一种攻击方式,成为系统和网络安全中亟待解决的重要问题。论文在分析缓冲区溢出攻击原理
  • 《操作系统》——缓冲技术

    万次阅读 多人点赞 2015-04-11 21:32:35
    缓冲技术大致分为三种:单缓冲、双缓冲缓冲池。下面我来简单介绍一下计算机中的缓冲技术。
  • 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ、微信、淘宝。那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最...
  • Java - 常用的Web服务器有哪些

    万次阅读 2019-03-16 15:55:16
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!...选择Web服务器应考虑的因素:性能、安全性、日志和统计、虚拟主机、代理服务器、缓冲服务和集成应用程序等。下面...
  • 三态缓冲器可以处于以下三种状态之一:逻辑0,逻辑1和Z(高阻抗)。它们的使用允许多个驱动程序共享一条公共线路。这使得它们在半双工通信中特别有用。让我们首先讨论半双工和全双工通信之间的区别。
  • 浅谈缓冲的理论与实践

    千次阅读 多人点赞 2022-03-23 15:53:30
    本文介绍了缓冲(Buffer)在Java开发中的常见用法和注意事项。
  • sync命令 – 刷新文件系统缓冲

    千次阅读 2021-05-10 07:35:24
    sync命令用于强制被改变的内容立刻写入磁盘,更新信息速度非常快, 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。sync命令则可用来强制将...
  • 缓冲区的三种模式

    千次阅读 2019-05-14 19:13:32
    缓冲区分三种mode 分别是_IOFBF全缓冲区是指缓冲系统默认4k的方式设定的缓冲区大小 除非缓冲区满 或者调用fflush(stdout)才可以将标准输入的数据全部读取 如printf _IOLBF行缓冲区:是指当输入一行的时候 通过\n...
  • Linux系统常用命令,指令详解及案例

    万次阅读 多人点赞 2021-09-21 20:01:01
    现在的企业90%甚至更过是使用Linux操作系统, 所以不管是开发还是运维, 不会点Linux知识肯定是无法进入到企业里工作. 而且, 全球500强超级计算机几乎都是使用Linux操作系统, 这也是Linux操作系统实力的见证, 接下来...
  • 什么是缓冲区溢出?说明危害?

    千次阅读 2019-04-19 20:40:04
     缓存溢出(或译为缓冲溢出)为黑客最为常用的攻击手段之-一,蠕虫病毒对操作系统高危漏洞的溢出高速与大规模传播均是利用此技术。  缓存溢出攻击从理论上来讲可以用于攻击任何缺陷不完美的程序,包括对杀毒软件...
  • linux系列之常用运维命令整理笔录

    万次阅读 多人点赞 2019-10-28 17:33:21
    比较常用: df -a 查看全部的文件系统 df -h查看磁盘使用情况 df -i 查看inode使用情况 df -h 5、ps命令使用 ps命令用于查看进程统计信息 常用参数: a:显示当前终端下的所有进程信息,包括其他用户的进程。...
  • C++输出缓冲

    千次阅读 2022-03-30 09:37:43
    输出函数的缓冲区输出到对应设备三种方式: 一:不缓冲,也就是说每次输入一个字符,就立即输出,stderr就是这种; 二:行缓冲:输入一行时,刷新缓冲; 三:全缓冲缓冲区满了才输出,一般文件缓冲区用这种; ...
  • 缓冲区溢出攻击

    千次阅读 2020-05-12 23:44:35
    简单介绍缓冲区溢出攻击原理; 关闭防护措施,进行缓冲器溢出攻击实验; 最后从不同层次简单提及缓冲区溢出的防御措施;
  • 缓冲区是一块特定的内存区域,其目的是通过缓解应用程序上下层之间的性能差异,减少上层对下层的等待时间,以此提高系统性能。漏斗是生活中常见的缓冲例子,下层如瓶口等工作效率低,但是上层注水口如水桶工作效率较...
  • 【Linux系列】Linux实践(一):linux常用命令 【Linux系列】Linux实践(二):CentOS系统中搭建java开发环境与部署web项目 【Linux系列】Linux实践(三):CentOS中安装(卸载)Mysql以及数据库的导入...
  • 常用的17个运维监控系统(必备知识)

    万次阅读 多人点赞 2018-08-16 10:58:31
    而专业版用户将获得所有社区版本的功能并且还将获得实时软件更新和修复功能,基于规则的自动分组功能,网络阈值和状态警报系统以及流量统计系统。 7. NetXMS NetXMS 提供了企业级开源网络管理和监控程序,...
  • } OK,这下应该明明白白了,用大白话总结如下(我们把BufferedInpuStream称之为缓冲流): 我们调用缓冲流来读取数据,系统会先看一下缓冲区中没有可用数据,的话直接从缓冲区中复制数据给用户 如果缓冲区中...
  • 那么就可以将非阻塞I/O方式下的数据传输比做数据传输的集装箱方式(在字节和低层数据传输之间,多了一层缓冲区,因此,可以将缓冲区看做是装载字节的集装箱)。  如果将同步I/O方式下的数据传输比做数据...
  • JAVA NIO缓冲区(Buffer)------ByteBuffer常用方法详解

    万次阅读 多人点赞 2018-07-14 16:27:11
    缓冲区(Buffer)缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲这么两个好处:1、减少实际的物理读写次数2、缓冲区在创建...
  • Unity3d 获取当前系统时间.txt Unity3d 鼠标拾取.txt Unity3d 雨滴落水脚本.txt Unity3D单击物体弹出GUI窗口.txt unity3d的动力学汽车脚本.txt Unity3D读取保存XML文件.txt unity3d小地图代码.txt Unity3d中...
  • Linux系统终端常用指令命令汇总

    万次阅读 多人点赞 2018-07-20 17:37:39
    查看命令帮助,命令的词典,更复杂的还有info,但不常用。 help 查看Linux内置命令的帮助,比如cd命令。 文件和目录操作命令 ls 全拼list,功能...
  • 操作系统课程设计报告(文件系统)

    千次阅读 多人点赞 2020-01-11 10:13:52
    通过一个简单多用户文件系统设计,加深对文件系统的理解及内部实现。运用多线程的调度尽可能的优化其效率,解决实际问题。 1.1任务要求 B类:用java语言模仿“生产者——消费者”问题 1.通过Java语言中的wait()和...
  • 性能测试常见指标有哪些

    万次阅读 多人点赞 2020-03-10 17:50:44
    系统性能指标 资源性能指标 中间件指标 数据库指标 稳定性指标 可扩展性指标 可靠性指标 2、系统性能指标 响应时间 系统处理能力 吞吐量 并发用户数 错误率 2.1 响应时间 Response Time 简称RT,是指系统对请求作出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,370
精华内容 94,148
关键字:

常用的缓冲系统有哪些