首页 >> 手游攻略

writeas上层玩具

各位老铁们好,相信很多人对writeas上层玩具都不是特别的了解,因此呢,今天就来为大家分享下关于writeas上层玩具以及应用程序read和write到设备的过程的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

在程序开发过程经常会读写设备的数据,例如从磁盘文件中读数据,写数据到磁盘文件中,发送数据到网络中,从网络中读取数据等,这些都属于IO设备的读写,都涉及到两个重要的方法即read和write。

这篇文章阐述的是read和write从应用程序调用后,都发生了什么,最终是怎么发送给设备的,设备又是怎么响应这些请求的过程,下图为整体调用过程涉及到的模块,我会对从应用程序到设备,逐个讲解各个模块的细节。

应用程序写数据(write)的过程

第一步:应用程序调用IO库

为了方便应用程序写入设备,通常操作系统都提供IO库,在IO库中进行系统调用,同时为了减少系统调用的次数,通常IO库会增加缓冲,每当缓冲满了,就进行一次系统调用,IO库会提供write方法,一般为如下格式

/***nwriteDatas就是要写入的数据,写入的数据一般不直接系统调用写入设备,而是等待IO库中缓冲满了,n才进行系统调用,进行系统调用后才写入设备。n***/nwrite(byte[]writeDatas,intoffset,intlen)

第二步:IO库进行系统调用

IO库在缓冲满了后,或者调用flush或者close时,都会进行系统调用,系统调用开始执行操作系统代码,进入内核模式,操作系统会根据系统调用号(应用程序编译后,会将系统调用号链接好)定位到不同的设备驱动程序,不同的设备,系统调用号不同,系统调用号也可以认为是设备编号,它是操作系统分配给设备的唯一标识,找到了驱动程序后,就将数据交给设备驱动程序去处理。

第三部:执行设备驱动程序

计算机在启动时,会安装设备驱动程序到操作系统中,同时根据设备驱动程序生成系统调用号即设备编号,另外也会根据设备驱动程序初始化中断向量表,建立设备编号跟中断向量的映射关系,如下图所示为中断信号向量表

中断设备向量表

设备驱动程序既可以直接操作硬件,给硬件发送各种指令(通过设备控制寄存器),也可以提供上层接口供操作系统调用,如下图上部分提供上层接口,下部分就是中断处理程序,用于响应CPU中断。

设备驱动程序架构图

正如上图所示,设备驱动程序分为上部分,写队列,读队列和下部分,下边阐述一下对于写操作来说,上部分,写队列,下部分的具体逻辑

上部分:提供上层接口,操作系统根据系统调用号,调用该接口。

设备驱动程序-上部分流程

该部分的主要逻辑是:

1.将应用程序写的数据(用户内存空间)拷贝到设备驱动程序的写队列(内核内存空间)中。

2.设置设备控制寄存器的中断信号,如果设备正在操作,则忽略该信号。

3.系统调用完成,返回到应用程序,剩下的事情交给驱动程序的下半部分执行。

数据流如下图所示

写队列:用于存放应用程序写入的数据

下部分:CPU接受到中断信号后,会查找中端向量表,执行中断处理程序,中断处理程序就是设备驱动程序的下部分逻辑,整体流程如下图所示

下部分即中断处理程序执行流程

该部分的主要逻辑:

1.从写队列中获取一项要写入的数据,设置设备控制寄存器写命令,控制设备将这一项数据写到设备中

2.写队列中如果为空的话,设置设备状态为空闲状态,清除设备中断状态。

第四步:设备执行写入指令和发出中断信号

设备通过控制寄存器和状态寄存器来接受命令,控制寄存器用于接受来自设备驱动程序设置的指令,例如中断,启动设备,关闭设备,写入数据到设备等。

设备发现控制寄存器中有中断信号后,会向CPU发出中断信号,CPU在下一次执行指令时,检查到有中断信号,根据中断信号找到中断向量表,定位到设备驱动程序的下部分,执行中断处理程序。

设备在接受到写命令后,会开启设备,执行写设备操作,写入完成后,会向CPU发出中断信号,CPU在下一次执行指令时,检查到有中断信号,根据中断信号找到中断向量表,定位到设备驱动程序的下部分,执行中断处理程序,从而执行下一次写入数据。

设备执行流程图

应用程序读数据(read)的过程

应用程序读数据的整体过程与写比较类似,下面讲述不同的部分

第一步:应用程序调用IO库

为了方便应用程序读入设备数据,通常操作系统都提供IO库,在IO库中进行系统调用,同时为了减少系统调用的次数,通常IO库会一次性读取一批数据,IO库会提供read方法,一般为如下格式

read(byte[]readDatas,intoffset,intlen)

第二步:IO库进行系统调用

IO库会进行系统调用,系统调用开始执行操作系统代码,进入内核模式,操作系统会根据系统调用号(应用程序编译后,会将系统调用号链接好),不同的系统调用号即设备编号,根据不同的设备编号定位到不同的设备驱动程序,然后将交给设备驱动程序去读取数据。

第三部:执行设备驱动程序

上部分:会检查读队列有没有数据,如果没有数据,则操作系统将应用程序加入到阻塞队列,应用程序阻塞,否则获取读队列中的数据,从内核空间拷贝到用户空间,读系统调用返回。

读队列:从设备读入的数据,加入到读队列中

下部分:CPU接受到中断信号后,会查找中断向量表,执行中断处理程序即该部分的逻辑,整体流程如下

1.检查读队列是否满了,如果没有满,则设置设备控制器读指令,控制设备读入下一批数据

2.如果队列满了,则通过操作系统将应用程序从阻塞队列移出,加入到就绪队列,操作系统调度应用程序继续读入数据。

第四步:设备执行读指令和发出中断信号

设备通过控制寄存器和状态寄存器来接受命令,控制寄存器用于接受来自设备驱动程序设置的指令,例如中断,启动设备,关闭设备,读设备数据等。

设备在接受到读命令后,会开启设备,执行读操作,读入完成后,将读入的数据加入到读队列中,向cpu发出中断信号,cpu接受到中断信号后,会根据中断向量表定位到设备驱动程序,执行设备驱动程序下半部分逻辑。

文章分享结束,writeas上层玩具和应用程序read和write到设备的过程的答案你都知道了吗?欢迎再次光临本站哦!



本文由欣欣吧手游攻略栏目发布,感谢您对欣欣吧的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“writeas上层玩具

标签:
writeas上层玩具(下)
« 上一篇 2023-10-17