首页 > 其他分享 >20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结 块设备I/O和缓冲区处理

20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结 块设备I/O和缓冲区处理

时间:2023-11-18 11:22:52浏览次数:36  
标签:缓存 dev 算法 bp 郭佳昊 blk 缓冲区 20211316

一、任务要求

[ 1 ] 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)
我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题

核心是要求GPT:请你以苏格拉底的方式对我进行提问

然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:你的理解(回答)是什么?

如果你觉得差不多了,可以先问问GPT:针对我XXX知识点,我理解了吗?

GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:我的回答结束了,请对我的回答进行评价总结,让它帮你总结一下。

[ 2 ] 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)

[ 3 ] 实践过程截图,代码链接(2分)

[ 4 ] 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二、知识点总结

块设备I/O缓存区

  • I/O缓冲原理

image

  • 术语

BUFFER是缓冲区的结构类型,getblk(dev,blk)从缓冲区缓存中分配一个指定给(dev,blk)的缓冲区。定义一个bread(dev,blk)函数,它会返回一个包含有效数据的缓冲区(指针)。

BUFFER *bread(dev,blk)
{
   BUFFER *bp = getblk(dev,blk);
   if (bp data valid)
       return bp;
   bp->opcode = READ;
   start_io(bp);
   wait for I/O completion;
   return bp;
}

从缓冲区读取数据后进程通过brelse(bp)将缓冲区释放回缓冲区缓存,定义一个write_block(dev,blk,data)函数

write_block(dev,blk,data)
{
   BUFFER *bp = bread(dev,blk);
   write data to bp;
   (synchronous write)? bwrite(bp) : dwrite(bp);
}

其中bwrite(bp)表示同步写入,dwrite(bp)表示延迟写入
image

  • 物理块设备I/O

每个设备都有一个I/O队列,其中包含等待I/O操作的缓冲区,缓冲区上的start_io:

start_io(BUFFER *bp)
{
    enter bp into device I/O queue;
	if (bp is first buffer in I/O quene)
	   issue I/O command for bp to device;
}

中断处理程序算法:

InterruptHandler()
{
   bp = dequeue(device I/0 queue); 
   (bp->opcode == ASYNC)? brelse(bp) : unblock process on bp;
   if (!empty(device I/0 queue))
      issue I/0 command for first bp in I/0 queue;
}

Unix I/O缓冲区管理算法

系统构成

  • I/O缓冲区

内核中的一系列NBUF缓冲区用作缓冲区缓存,每个缓冲区用一个结构体表示。
image

  • 设备表

每个块设备用一个设备表结构表示,每个设备表都有一个dev_list,包含当前分配给该设备的I/O缓冲区,还有一个io_queue,包含设备上等待I/O操作的缓冲区,Unix使用FIFO I/O队列。
image

  • 缓冲区初始化
  • 缓冲区列表
  • Unix getblk/brelse算法

image

Unix算法缺点

  1. 效率低下,算法依赖重试循环。
  2. 缓存效果不可预知。
  3. 可能出现进程饥饿。
  4. 只适用于单处理器系统的休眠/唤醒操作。

I/O缓冲区管理新算法

信号量的优点

  1. 计数信号量可用来表示可用资源的数量
  2. 多个进程等待一个资源时,信号量上的V操作只会释放一个等待进程,该进程不会重试。

PV算法

image
image
该算法满足以下需求:

  1. 缓冲区唯一性
  2. 无重试循环
  3. 无不必要唤醒
  4. 缓存效果
  5. 无死锁和饥饿

三、苏格拉底挑战


标签:缓存,dev,算法,bp,郭佳昊,blk,缓冲区,20211316
From: https://www.cnblogs.com/GJH6/p/17838286.html

相关文章

  • chapter 12: 块设备 I/O 和缓冲区管理
    学习笔记摘要本章深入研究了区块设备I/O和缓冲管理,重点介绍了原则、I/O缓冲的优势以及Unix缓冲管理算法的不足之处。提出使用信号量设计更高效的缓冲管理算法,介绍了PV算法作为示例。还提供了一个编程项目,用于比较Unix的缓冲管理算法和PV算法,有助于理解文件系统的I/O......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第十周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第九周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • c#移动控制台的缓冲区
    使用C#中的Console.MoveBufferArea方法来移动控制台的缓冲区。控制台缓冲区是一个用于存储控制台输出的内存区域。通过移动缓冲区,我们可以在控制台上创建自定义的输出布局控制台缓冲区:控制台缓冲区是一个二维字符数组,用于存储控制台输出的字符。它的大小由控制台的宽度和高度决......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • Canvas的缓冲区
    Canvas的缓冲区canvas的绘制缓冲区和显示缓冲区理解为两个容器,它们用于存储绘制结果。绘制缓冲区是用于存储渲染管线生成的像素数据,而显示缓冲区是绘制缓冲区最终的存储位置。绘制缓冲区(DrawingBuffer):它是在canvas元素上进行绘制的内存区域。当你使用canvas绘图API绘制......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第七周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 在Postgresql中,为表中的所有点提供100m缓冲区,其中有50M个条目
    我有一个表,有50米的纬度和经度条目,geom是我从QGIS导入时创建的。我试图通过调用jupyter笔记本中的表来为表中的所有点创建一个100m的缓冲区。我还尝试使用SRID:25832转换坐标系,以米为单位表示缓冲区,但在postgresql视图中看不到投影到正确位置的点。SELECT*FROMpublic."opera......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第五周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 双缓冲区
       ......