首页 > 其他分享 >学习笔记10

学习笔记10

时间:2023-11-19 11:55:48浏览次数:34  
标签:10 读取 缓冲 写入 笔记 学习 内存 缓冲区 设备

第12章 块设备I/O和缓冲区管理

1. 块设备I/O缓冲区

1. 缓冲区的作用:

缓冲区在内存中缓存数据,减少了直接磁盘操作的次数,从而提高了系统的吞吐量。

2. 缓冲区的类型:

在 Unix/Linux 中,有多种类型的缓冲区,例如:

  • 全缓冲:在这种缓冲区中,所有的 I/O 操作都在内存中完成,直到写入或读取一个完整的缓冲块后,才会与磁盘进行实际的交互。
    - 行缓冲:对于文本文件,某些应用程序可能会使用行缓冲。在这种情况下,缓冲区会缓存一行文本,直到遇到换行符或读取/写入完毕。
    - 无缓冲:在这种情况下,I/O 操作会直接与磁盘交互,不经过缓冲区。

3. 缓冲区的操作:

  • 刷新缓冲区:将缓冲区中的数据写入磁盘。
  • 清除缓冲区:从缓冲区中删除数据,以便可以重新使用。

4. 缓冲区的使用示例:

  • 读取文件:使用 read() 系统调用读取文件时,如果设置了缓冲区,则数据会先被读取到缓冲区,直到读取完毕或遇到 EOF。
  • 写入文件:使用 write() 系统调用写入文件时,如果设置了缓冲区,则数据会先被写入到缓冲区,直到缓冲区满或调用 flush()。

5. 注意事项:

  • 缓存区大小:需要根据实际情况设置合适的缓冲区大小。如果缓冲区太小,可能会频繁地进行磁盘操作,降低性能。如果缓冲区太大,可能会浪费大量内存。
  • 刷新问题:在使用缓冲区时,需要注意及时刷新缓冲区,以避免数据丢失。
  • 无缓冲 I/O:在某些情况下(例如,实时数据传输),可能需要禁用缓冲区。

2. I/O缓冲区管理算法

1. 全缓冲 (Full Buffering):

在这种模式下,所有的I/O操作都在内存中进行缓冲。当你向设备发送数据时,内核会先将其放入缓冲区,然后一次性将缓冲区的数据发送到设备。
同样,从设备读取数据时,也是先读入缓冲区,然后用户可以从缓冲区中读取数据。
这种模式下,用户程序不需要干预缓冲区的管理。

2. 行缓冲 (Line Buffering):

行缓冲是针对文本设备的。在标准输出(例如终端)上,行缓冲会确保每一行文本被完整地写入,或者读取。
虽然行缓冲也是全缓冲的一种形式,但它有特殊的要求:当读取或写入缓冲区时,只有当缓冲区中的数据量达到一定程度或者遇到换行符时,才会进行实际的I/O操作。

3. 无缓冲 (No Buffering):

在无缓冲模式下,所有的I/O操作都是立即执行的,没有缓冲区可言。
这种模式下,用户程序需要直接和设备进行交互,适合于那些需要精确控制数据传输的程序。

4. 标准I/O (Standard I/O):

Unix/Linux提供了一个标准I/O库,它使用上述缓冲区管理模式之一来处理I/O操作。例如,使用stdio.h库中的函数进行文件读写时,默认情况下是行缓冲的。

苏格拉底挑战
image
image
image
image

标签:10,读取,缓冲,写入,笔记,学习,内存,缓冲区,设备
From: https://www.cnblogs.com/1104dd/p/17841795.html

相关文章

  • Shell脚本的学习
    Shell脚本入门此笔记为学习Shell脚本所记录,学习视频为尚硅谷Shell脚本入门到实战目录Shell脚本入门脚本格式第一个Shell脚本helloworldShell中的变量系统变量常用系统变量案例实操自定义变量基本语法变量定义规则案例实操特殊变量$n基本语法案例实操特殊变量$#基本语法案例实操......
  • 《网络空间安全导论》第2周学习总结
    学期:2023-2024-1学号:20232402《网络空间安全导论》第2周学习总结教材学习内容总结教材学习中的问题和解决过程问题1:不理解欧几里得算法中的求乘法逆元问题1解决方案:1)向chatGPT提问≡是什么回答:≡是模运算的符号,在数学中常用于描述同余关系。同余符号“≡”表示两......
  • 第十一周Linux教材第十二章学习笔记——块设备I/O和缓冲区管理
    块设备I/O和缓冲区管理本章讨论了块设备1/O和缓冲区管理;解释了块设备1/O的原理和T/O缓冲的优点;论述了Unix的缓冲区管理算法,并指出了其不足之处;还利用信号量设计了新的缓冲区管理算法,以提高1/O缓冲区的缓存效率和性能;表明了简单的PV算法易于实现,缓存效果好,不存在死锁和饥饿问题;还......
  • jdk8 Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方
    jdk8Stream流中将集合转成map,重复key处理,统计最大值,获取某个属性集合等10种最常用方法......
  • 2023-2024-1 20232311 《网络空间安全导论》第二周学习
    教材学习内容总结思维导图教材学习中的问题和解决过程问题1:单钥密码体制加密的应用有哪些问题1解决方案:先看了看上届学长的笔记,接着去询问chatai问题2:学习抗量子密码是不了解其中提到的Hash函数问题2解决方案:在B站上看了看介绍它的视频基于AI的学习思考这一章有很......
  • 微信小程序开发笔记
    目录跳转视频号跳转视频号前提:小程序与视频号的为相同主体或为关联主体获取视频ID......
  • 信息安全系统设计与实现 学习笔记10
    《UnixLinux系统编程》10章学习笔记sh脚本一个包含sh语句的文本文件,命令解释程序sh要执行该语句。#!/bin/bash#commentlineechohello使用chmod+xmysh使其可执行以#!组合开始sh脚本与C程序sh:解释程序,逐行读取sh脚本文件并直接执行这些行.如果行是可执行命令且为......
  • java反序列化----CC4利用链学习笔记
    java反序列化----CC4利用链学习笔记目录java反序列化----CC4利用链学习笔记环境配置利用链环境配置jdk8upom.xml中写入<dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><ve......
  • oracle19cPDB数据库连不上,提示ORA-01109: database not open
    今天尝试创建了一个RAC环境的PDB数据库,在本地执行alterpluggabledatabasepdb01open成功了,但是使用上去了plus连接还是连接不上,提示错误如下:C:\Users\Administrator>sqlplussystem/[email protected]:1521/pdb01SQL*Plus:Release19.0.0.0.0-Productionon星期日1......
  • 算法竞赛进阶指南学习笔记(一)
    前言一共八章基本算法基本数据结构搜索数学知识数据结构进阶动态规划图论综合技巧与实践前置要求:简单熟悉C++这门语言。学习算法,算法的门槛不像AI门槛那么高,每个人皆可学习。正如谚语所说:熟读唐诗三百首,不会作诗也会吟。练习达到3000左右的题量,那你便可轻易Accepted......