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

学习笔记10——20211303

时间:2023-11-16 20:35:49浏览次数:38  
标签:10 blk 12.5 笔记 bp dev 20211303 缓冲区 磁盘

一、学习任务

自学教材第12章,提交学习笔记(10分),评分标准如下

1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)

“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

核心是要求GPT:“请你以苏格拉底的方式对我进行提问” 然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”

如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?” GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

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

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

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

二、知识总结

12.1块设备I/O缓冲区

基本原理

I/O 缓冲的基本原理非常简单。文件系统使用一系列I/O缓冲区作为块设备的缓存内存。当进程试图读取(dev,blk) 标识的磁盘块时,它首先在缓冲区缓存中搜索分配给磁盘块的缓冲区。如果该缓冲区存在并且包含有效数据,那么它只需从缓冲区中读取数据,而无须再次从磁盘中读取数据块。如果该缓冲区不存在,它会为磁盘块分配一个缓冲区,将数据从磁盘读人缓冲区,然后从缓冲区读取数据。当某个块被读入时,该缓冲区将被保存在缓冲区缓存中,以供任意进程对同一个块的下一次读/写请求使用。同样,当进程写入磁盘块时,它首先会获取一个分配给该块的缓冲区。然后,它将数据写入缓冲区,将缓冲区标记为脏,以延迟写入,并将其释放到缓冲区缓存中。由于脏缓冲区包含有效的数据,因此可以使用它来满足对同一块的后续读/写请求,而不会引起实际磁盘I/O。脏缓冲区只有在被重新分配到不同的块时才会写入磁盘。

算法

bread(dev,blk) 函数:它会返回一个包含有效数据的缓冲区(指针)

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

write_block(dev,blk,data)函数:其中bwrite(bp)表示同步写入, dwrite(bp)表示延迟写入

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

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

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

12.2Unix I/O缓冲区管理算法

Unix 缓冲区管理子系 统由以下几部分组成:

(1)I/O缓冲区:内核中的一系列NBUF缓冲区用作缓冲区缓存。每个缓冲区用一个结构体表示。

(2)设备表:每个块设备用一个设备表结构表示。

(3)缓冲区初始化:当系统启动时,所有I/O 缓冲区都在空闲列表中,所有设备列表和 I/O队列均为空。

(4)缓冲区列表:当缓冲区分配给 (dey,blk)时,它会被插入设备表的dev_list 中。

(5)Unix  getblk/brelse 算法。

关于Unix算法的具体说明:

(1)数据一致性:为了确保数据一致性,getblk一定不能给同一个(dey,blk)   分配多个 缓冲区。

(2)缓存效果

(3)临界区:设备中断处理程序可操作缓冲区列表。

Unix 算法的缺点

(1)效率低下

(2)缓存效果不可预知

(3)可能会出现饥饿

(4)该算法使用只适用于单处理器系统的休眠/唤醒操作

12.3  新的I/O缓冲区管理算法

使用信号量的缓冲区管理算法

假设有一个单处理器内核(一次运行一个进程)。使用计数信号量上的P/V来设计满足 以下要求的新的缓冲区管理算法:
(1)保证数据一致性。
(2)良好的缓存效果。
(3)高效率:没有重试循环,没有不必要的进程“唤醒”。
(4)无死锁和饥饿。

12.4 PV算法

BUFFER                       *getblk(dev,blk)
(
while(1)(
(1). P(free);                   //get   a   free   buffer   first
(3).           if(bp     not     BusY){
remove bp from freelist;
P(bp);        /1 lock bp but does not wait
return bpi
)
//bp in cache but BusY
V(free)i           //give  up  the  free  buffer
(4).          P(bp);               //wait  in  bp  queue
return bp;
  not  in   cache,try  to   create  a  bp=(dev,blk)
(5).     bp =frist buffer taken out of freelist;
P(bp);                     //lock   bp,no   wait
(6).     if(bp     dirty)(
awrite(bp);       //write  bp  out  AsrNc,no  wait
continue;          //continue    from(1)
}
(7) ·    reassign   bp   to(dev,blk);//mark   bp   data   invalid,not   dirty
return bp;
)                            //end  of  while(1)
)
brelse(BUFFER *bp)
{
(8).if(bp    queue    has    waiter)(V(bp);return;)
(9).it(bp   dirty   &&free   queue   has   waiter)(awrite(bp);return;) 
(10).enter bp into (tail of)freelist;V(bp);V(free);
}

12.5 编程项目:I/O 缓冲区管理算法比较

该编程项目将会实现一个模拟系统。

12.5.1  系统组织

 

12.5.2  多任务处理系统

多任务处理系统的CPU端,模拟单处理器(单CPU)文件系统的内核模式。 当系统启动时,它会创建并运行一个优先级最低的主任务,但它会创建 ntask 工作任务,所有任务的优先级都是1,并将它们输人readyQueue。然后,主任务执行以下代码,该代码将  任务切换为从readyQueue运行工作任务。

while(1){
    while(task  &k  readyQ  ==0); 
    if(readyQ)
        kswitch();
    else
        end_task();
}
#define CMDLEN 10
int   cmdfile[NTASK];//opened   command   file   descriptors
int    task    =ntask;     //number           of           active           tasks
int  body()
{
int      dev,blk;
char opcode,cmd[CMDLEN]
while(1){
if(read(cmdfile[running->pid],cmd,CMDLEN)==0){
running->status  =DEAD;  //task      ends
task--;                             //dec  task  count  by   1
tswtich();
}
sscanf(cmd,"%c%4d%5d",&opcode,&dev,&blk);
if(opcode=='r')                    //read(dev,blk)
readBlk(dev,blk);
if(opcode=='w')
writeBlk(dev,blk); //write(dev,blk)
}

12.5.3  缓冲区管理器

缓冲区管理器实现各缓冲区管理函数。

12.5.4  磁盘驱动程序

(1)start_io():维护设备I/O队列,并对I/O队列中的缓冲区执行1/0操作。

(2)中断处理程序:在每次IO  操作结束时,磁盘控制器会中断CPU。当接收到中断 后,中断处理程序首先从IntStatus中读取中断状态。

12.5.5  磁盘控制器

12.5.6  磁盘中断

12.5.7  虚拟磁盘

三、苏格拉底问答

 

 

 

 

 

 

标签:10,blk,12.5,笔记,bp,dev,20211303,缓冲区,磁盘
From: https://www.cnblogs.com/liTCabcAbc/p/17837196.html

相关文章

  • 深度学习笔记:搭建基于Python的tensorflow运行环境1
    使用python3命令创建tensorflow虚拟运行环境首先,在系统下创建python虚拟环境目录Venvs,本文我们设置的虚拟环境目录如下:C:\Users\wuchh\venvs,接下来打开cmd命令窗口进入创建的目录(C:\Users\wuchh\venvs)。在命令行窗口中,执行创建虚拟环境的python3命令,我们将创建一个名为......
  • 10、弹性布局(Flex Expanded)
    自定义的IconContainerclassIconContainerextendsStatelessWidget{Colorcolor;IconDataicon;//IconContainer(this.icon,{super.key,requiredthis.color});//与下方效果一样//IconContainer(this.icon,{Key?key,requiredthis.color}):super(k......
  • 面向对象笔记—设计模式
    设计模式一、概念设计模式是一系列在实践中总结出来的可复用的面向对象的软件设计方式设计模式就是描述一个反复出现的问题,以及解决这个问题的方案。可以重复使用这个解决方案而无须再做重复劳动。解决设计问题的固定套路重用,避免代码重复冗余优化体系结构提升系统的可维......
  • 一键整合,万用万灵,Python3.10项目嵌入式一键整合包的制作(Embed)
    我们知道Python是一门解释型语言,项目运行时需要依赖Python解释器,并且有时候需要安装项目中对应的三方依赖库。对于专业的Python开发者来说,可以直接通过pip命令进行安装即可。但是如果是分发给其他的Windows用户,特别是不熟悉Python的人来说,这样过于繁琐。因此最好的办法是连同Pytho......
  • 【Android】学习笔记
    目录准备界面:view控件LayoutCreator事件监听OnClickListener转跳页面IntentIntent传递数据Toast和AlertDialogGson使用OKhttp3的基本使用post方法get方法轻量级存储SharedPreferenceListView基本使用1、SimpleAdapter2、较复杂的数据绑定3、ListView的事件监听准备开发软件&配置......
  • 【Linux笔记】find
    #在当前目录下查找find"file.txt"#查找当前目录下是否有file.txtfind"*.txt"#查找当前目录下是否有以.txt结尾的文件#在指定目录下递归地查找find./-name"file*"#在当前目录下,递归地进入所有文件夹中查找以file开头的文件或文件夹find./bin/-name"file*"......
  • Windows10+VisualStudio2022+CMake+Qt开发环境搭建
    一、概述之前一直使用QtCreator当做QT的开发工具,也没觉得有啥问题。最近使用了VisualStudio+Cmake写了一些SDL2和FFmpeg的东西感觉这个VisualStudio这个工具挺好用的。就萌生了要使用VisualStudio开发Qt的想法。有了这个想法之后就想着需要搭建一个开发环境。百度搜索了......
  • DOM对象(pink老师课程笔记)
    letorconstconst优先对于引用数据类型,const存储的是地址数组和对象使用const声明作用和分类作用:使用JS去操作html和浏览器分类:DOM(文档对象模型)和BOM(浏览器对象模型)DOM操作网页内容(标签)DOM树将HTML文档以树状结构表现出来,直观体现标签与标签之间的关系DOM对象浏览......
  • 【操作系统MIT 6.1810(2022版)笔记】Lab实验:环境搭建——以Ubuntu20.04为例
    感觉环境搭建没有别人说的那么难。我是双系统用户(Win+Ubuntu20.04),所以直接在Ubuntu上搭建了。听别人说不要用Ubuntu18.04搭建,不知道为什么参考链接:官网环境搭建教程环境搭建打开终端,输入以下命令并回车运行sudoapt-getinstallgitbuild-essentialgdb-multiarchqemu-s......
  • Java获取笔记本的wifi地址
    几个方法说明(来源网络,没有验证)isAnyLocalAddress方法当IP地址是通配符地址时返回true,否则返回false.这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有。使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接。IPv4的通配符地址是0.0.0.0.IPv6的通......