输入输出管理_第1页
输入输出管理_第2页
输入输出管理_第3页
输入输出管理_第4页
输入输出管理_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

输入∕输出管理输入∕输出管理设备管理概述缓冲技术设备分配I/O控制Linux系统的设备驱动1输入∕输出管理——主要内容21.设备分类存储设备又称块设备,是存储信息的设备,如:磁盘、磁鼓。(以块为单位传输信息)输入输出设备又称字符设备,能将信息从计算机外部输入到机内,或反之,如:键盘、显示器、打印机。(以字符为单位传输信息)通信设备负责计算机之间的信息传输,如调制解调器、网卡等输入∕输出管理——设备管理概述32.设备管理的目标提高设备利用率合理分配设备提高设备与CPU、各外部设备之间的并行性方便用户的使用提供使用方便且独立于设备的界面统一:对各种不同的设备提供一致的界面独立于设备:用户使用的设备与物理设备无关输入∕输出管理——设备管理概述43.设备管理功能状态跟踪动态地记录各种设备的状态设备分配与回收作业级——静态分配

作业进入系统时进行分配,退出系统时收回全部资源。进程级——动态分配

进程提出设备申请时进行分配,使用完毕后立即收回。设备控制实施设备驱动和中断处理的工作输入∕输出管理——设备管理概述54.设备独立性设备独立性概念什么是设备独立性 所谓设备独立性是指,用户在编制程序时所使用的设备与实际使用的设备无关,也就是在用户程序中仅使用逻辑设备名。逻辑设备名逻辑设备名,是用户自己指定的设备名(或设备号),它是暂时的、可更改的。物理设备名物理设备名,是系统提供的设备的标准名称,它是永久的、不可更改的。输入∕输出管理——设备管理概述6两种类型的设备独立性一个程序独立于分配给它的某种类型的具体设备

系统可以根据设备的使用情况,动态地分配给程序某类设备中的任一台物理设备,程序都能正确地执行。程序应尽可能与它所使用的I/O设备类型无关

在输入(或输出)信息时,信息可以从不同类型的输入

(或输出)设备上输入(或输出),若要改变输入(或输出)设备的类型,程序只需进行最少的修改。输入∕输出管理——设备管理概述7设备独立性的实现在高级语言中用软通道实现 使用高级语言提供的指派语句,通过指派一个逻辑设备名(通道号)来定义一个设备或文件。如:fd=open(“/dev/lp”,mode)在批处理系统中,用联接说明语句来定义如:OUTPUT1=LPT在交互系统中,用指派命令来定义如:PDP系列机上的RT11系统

ASSIGN设备物理名设备逻辑名输入∕输出管理——设备管理概述8设备独立性的优点方便用户改善设备利用率提高系统的可扩展性和可适应性4.设备控制块什么是设备控制块(DCB)系统为每一台设备都配置了一个用来记录设备的硬件特性、连接和使用情况的一组数据,称为设备控制块。输入∕输出管理——设备管理概述9设备控制块的内容设备名设备属性指向命令转换表的指针在I/O总线上的设备地址设备状态当前用户进程指针I/O请求队列指针设备名设备的系统名,即设备的物理名。设备属性是描述设备现行状态的一组属性命令转换表转换表包含设备特定的I/O例程地址,不具备相应功能的设备在其例程地址上可以填“-1”输入∕输出管理——设备管理概述101.缓冲概念什么是缓冲缓冲是两种不同速度的设备之间传输信息时平滑传输过程的常用手段。缓冲类别缓冲器缓冲器是用来暂时存放数据的一种存储装置,它容量较小,存取速度快。软件缓冲在I/O操作期间用来临时存放I/O数据的一块存储区域。输入∕输出管理——缓冲技术11为什么要引入缓冲处理数据流的生产者与消费者间的速度差异如:从调制解调器收到一个文件,并保存到硬盘上。协调传输数据大小不一致的设备如:在计算机网络中用来处理消息的分段和重组。应用程序的拷贝语义如:操作系统为保证系统调用write的正确语义(应用程序要写入磁盘的数据就是write系统调用发生时的版本)。

方法:在系统调用返回前将应用程序缓冲区复制到内核缓冲区。输入∕输出管理——缓冲技术122.利用缓冲技术如何进行I/O操作进程活动期间,请求从某字符设备读入数据进程请求从输入设备进行读操作的图示输入∕输出管理——缓冲技术输入设备BUF进程①②③

②与③需要同步

13进程请求从输入设备进行读操作的步骤

当用户要求在某个设备上进行读操作时,首先从系统中获得一个空的缓冲区①;将一个物理记录送到缓冲区中②;当用户请求这些数据时,系统将依据逻辑记录特性从缓冲区中提取并发送到用户进程存储区中③;当缓冲区空而进程又要从中取用数据时该进程被迫等待。此时,操作系统需要重新送数据填满缓冲区,进程才能从中取数据继续运行。要注意操作②与操作③的同步关系输入∕输出管理——缓冲技术14进程活动期间,请求从输出设备输出数据进程请求从输出设备进行写操作的图示输入∕输出管理——缓冲技术

②与③需要同步

①②③输出设备BUF进程15进程请求从输出设备进行写操作的步骤

当用户要求进行写操作时,首先从系统中获得一个空的缓冲区①;将一个逻辑记录从进程存储区传送到缓冲区中②;当缓冲区写满时,系统将缓冲区的内容作为物理记录文件写到设备上,使缓冲区再次为空

③;只有在系统还来不及腾空缓冲区之前,进程又企图输出信息时,它才需要等待。要注意操作②与操作③的同步关系输入∕输出管理——缓冲技术163.常用的缓冲技术

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

在双缓冲方案下,为输入或输出分配两个缓冲区buf1

buf2

。输入数据时,如何利用双缓冲输出数据时,如何利用双缓冲缓冲区既用于输入,也用于输出数据时,如何利用双缓冲输入∕输出管理——缓冲技术17输入数据时,如何利用双缓冲输入∕输出管理——缓冲技术输入设备BUF1进程①②③BUF2②③18输出数据时,如何利用双缓冲输入∕输出管理——缓冲技术输出设备BUF1进程①②③BUF2②③19缓冲区既用于输入,也用于输出数据时,如何利用双缓冲输入∕输出管理——缓冲技术输入设备BUF1①②③BUF2②③输出设备20输入∕输出管理——缓冲技术4.UNIX系统的缓冲区管理UNIX系统缓冲管理的目的加快系统响应、增强系统吞吐量减少对磁盘的I/O操作次数UNIX系统缓冲管理的思路当进程要从磁盘读数据时,首先考虑从高速缓冲中读预先缓存当进程要写数据到磁盘时,先写入高速缓冲中延迟发送21缓冲管理数据结构缓冲区的组成缓存数组

——含有磁盘上的数据的存储器数组缓存首部

——描述缓冲区特性的数据结构缓存首部结构输入∕输出管理——缓冲技术22

缓存首部结构设备号dev块号blkno状态flag指向数据区域的指针传送字节数返回的I/O出错信息b_forw

设备缓冲区队列前向指针b_back

设备缓冲区队列后向指针av_forw

空闲缓冲区队列前向指针

av_back

空闲缓冲区队列后向指针设备号dev缓冲区所包含的信息所属设备的设备号块号blkno由设备号指出的设备上相对于第0块的块号状态flag——描述了缓冲区当前的状态忙标志BUSY:缓冲区当前正“忙”有效位AVE:缓冲包含的数据有效延迟写DELWR:核心在某缓冲区重新分配出去之前必须把缓冲区内容写到磁盘上写标志WRITE:核心当前正把缓冲区的内容写到磁盘读标志READ:核心当前正从磁盘往缓冲区写信息等待位

WAIT:一个进程当前正在等候缓冲区变为空闲输入∕输出管理——缓冲技术23缓冲区队列结构设备缓冲区队列

与某类设备有关的所有缓冲区组成的队列称为设备缓冲区队列,简称b链。空闲缓冲区队列

可供重新分配使用的缓冲区组成的队列称为空闲缓冲区队列,简称av链。av_forwav_backav_forwav_backav_forwav_backav_forwav_back空闲缓冲区队列输入∕输出管理——缓冲技术24缓冲区队列指针b链指针

b_forw

:指向设备缓冲区队列上的下一个缓冲区的指针b_back

:指向设备缓冲区队列上的上一个缓冲区的指针av

链指针

av_forw

:指向空闲缓冲区队列上的下一个缓冲区的指针av_back

:指向空闲缓冲区队列上的上一个缓冲区的指针

b_forw

b_back

b_forw

b_back

b_forw

b_back

b_forw

b_back设备缓冲区队列输入∕输出管理——缓冲技术25UNIX缓冲管理算法缓冲读、写示意图缓冲读高速缓冲

用户数据区用户进程磁盘预先缓存缓冲写高速缓冲

用户数据区用户进程磁盘延迟发送输入∕输出管理——缓冲技术26UNIX缓冲管理算法缓冲管理算法一个buf被分配用于读/写某设备上的块时

置B_BUSY=1,位于b链上,不在av链上;当读/写操作结束时

释放该buf,置B_BUSY=0,仍留在b链上,并送入

av链尾;若进程需要的信息在buf中时

在该设备的b链上找到,置B_BUSY=1;从av链上摘除,使用完后,又送入av链,链入队尾。输入∕输出管理——缓冲技术27

对空闲buf空队列的处理

当需要一个空闲buf时,总是取空闲buf队列(av链)的首元素;一个使用过的buf释放时,插入到空闲buf队列(av链)

的队尾。

实现了精确的最久未使用淘汰算法(LRU算法)

对延迟写的处理

当一个具有延迟写标记的buf移到av链头,要用于分配时,立即进行写操作。从av链上摘除,使用完后又送入av头部。输入∕输出管理——缓冲技术281.独享分配常用的设备分配技术:独享分配、共享分配和虚拟分配

独享设备让一个作业在整个运行期间独占使用的设备。特点临界资源费时的I/O操作或需人工干预独享分配

在一个作业执行前,将它所要使用的设备分配给它;当它结束撤离时,将分配给它的这类设备收回。输入∕输出管理——设备分配292.共享分配

共享设备由多个作业、进程共同使用的设备称为共享设备。特点旋转设备,可直接或随机访问便于共享,转接简单,耗费较少独享分配

在一个作业执行前,将它所要使用的设备分配给它;当它结束撤离时,将分配给它的这类设备收回。

输入∕输出管理——设备分配303.虚拟分配虚拟技术

所谓虚拟技术,是在一类物理设备上模拟另一类物理设备的技术,是将独占设备转化为共享设备的技术。虚拟设备

通常把用来代替独占型设备的那部分外存空间(包括有关的控制表格)称为虚拟设备。输入∕输出管理——设备分配31虚拟分配

当进程需要与独占型设备交换信息时,系统将分配磁盘空间,并建立相应的数据结构,这种分配方法称为设备的虚拟分配。输入∕输出管理——设备分配虚宽行1虚宽行2进程A进程B进程C进程D输入井输出井输入机打印机虚输入机1虚输入机2324.SPOOLING系统

SPOOLING系统提供外围设备同时联机操作的功能。设计思想预输入在作业需要数据前,OS已将所需数据预先输入到辅存输入井存放。当作业(或进程)需要数据时,可直接从辅存中读入主存。缓输出在在作业执行时,将输出数据写入辅存输出井中。当作业(或进程)

执行完毕(或需要数据时),由操作系统将数据输出。输入∕输出管理——设备分配33什么是SPOOLING系统

利用通道和中断技术,在主机控制之下,由通道完成输入输出工作。系统提供一个软件系统(包括预输入程序、缓输出程序、井管理程序、预输入表、缓输出表)。它提供输入收存和输出发送的功能,使外部设备可以并行操作。这一软件系统称为SPOOLING系统。SPOOLING系统的优点提供虚拟设备外围设备同时联机操作加快作业处理速度

输入∕输出管理——设备分配34实现SPOOLING系统的基础大容量的辅存空间在辅存上需开辟两个较大的输入井和输出井,用以存放多作业的 输入信息和输出信息。硬件基础通道装置、中断系统数据结构 预输入表、缓输出表:描述辅存输入井和输出井的状态变化。如:输入信息从哪台设备输入,存放在辅存输入井什么位置;输出信息存放在辅存输出井什么位置,从哪台输出设备输出。输入∕输出管理——设备分配35所需的软件程序

输入程序控制信息从独占设备输入到辅存缓输出程序控制信息从辅存输出到独占设备井管理程序

控制用户程序和辅存之间的信息交换输入∕输出管理——设备分配输入机1输入机2作业1作业2打印机磁盘输入井磁盘输出井主存361.输入/输出控制方式

CPU一般通过I/O控制器与物理设备打交道。按照I/O控制器智能化程度的高低,将I/O设备的控制方式分为四类循环测试I/O方式I/O中断方式DMA方式通道方式

输入∕输出管理——设备控制372.I/O子系统输入∕输出管理——设备控制内核内核I/O子系统SCSI设备驱动器键盘设备驱动器鼠标设备驱动器PCI总线设备驱动器软盘设备驱动器…SCSI设备控制器键盘设备控制器鼠标设备控制器PCI总线设备控制器软盘设备控制器…SCSI设备键盘鼠标PCI总线软盘驱动器…软件硬件38I/O子系统的特点在应用层为用户提供I/O应用接口对设备的控制和操作则由内核I/O子系统来实施。每个通用设备类型都通过一组标准函数(及接口)来访问具体的差别被I/O子系统中的内核模块(称为设备驱动程序)所封装,这些设备驱动程序一方面可以定制以适合各种设备,另一方面也提供了一组标准的接口。设备驱动程序层的作用是为内核I/O子系统隐藏设备控制器之间的差异。将I/O子系统与硬讲分离,简化了操作系统开发人员的任务,也有利于设备的设计与制造。

输入∕输出管理——设备控制39I/O控制的功能解释用户的I/O系统调用

设备驱动中断处理设备处理程序

设备处理程序是能直接控制设备运转的程序,它根据各类设备的特点和性能来编写。每一类设备有一个相应的设备处理程序,能控制同类中多台物理设备同时工作。输入∕输出管理——设备控制40控制I/O核心模块的方式以设备处理进程的方式为每一类设备设置一个设备处理进程(对应的程序就是设备处理程序);当有I/O请求来到时,该进程被唤醒,进行设备驱动工作;当没有I/O请求时,该进程睡眠。

由I/O控制模块的接口程序负责解释用户的I/O系统调用,将其转换成I/O控制模块认识的命令形式后,将I/O请求发给对应的设备处理进程。将设备与文件一样对待将设备与文件一样对待,使用文件系统的系统调用命令进行设备的读、写。

输入∕输出管理——设备控制413.输入/输出控制的例用户进程请求I/O的系统功能调用

系统功能调用的形式为:

doio(ldev,mode,amount,addr);

ldev:逻辑设备名

mode:操作模式

amount:传输数据的数目

addr:传送地址

输入∕输出管理——设备控制42I/O接口程序(I/O过程)

将逻辑设备转换为物理设备获得I/O系统调用中给出的逻辑设备名(ldev)根据逻辑设备描述器,将逻辑设备名转换为物理设备名合法性检查获得I/O系统调用中给出的操作模式mode根据DCB中命令转换表中允许的操作,检查操作的合法性形成I/O请求块,发消息给对应的设备处理进程根据请求的参数形成I/O请求块(IORB)将I/O请求块(IORB)挂到对应的设备请求队列输入∕输出管理——设备控制43I/O接口程序的描述算法doio

输入:设备的逻辑名ldev

操作类型mode

传送数据数目amount

传数数据地址addr

输出:如果传送出错,则带错误码返回,否则正确返回输入∕输出管理——设备控制44{while(该进程的逻辑设备描述器队列不空){if(与ldev相联结的物理设备找到)break;/*找到*/}if(该进程的逻辑设备描述器队列为空)return(错误码);/*设备逻辑名错*/

检查参数与该设备特性是否一致;if(不一致)return(错误码);/*传送参数错*/

构造iorb;把iorb插入到该设备的请求队列中;唤醒因等待I/O请求块而睡眠的进程;

}输入∕输出管理——设备控制45设备处理进程

processio{l:while(设备请求队列不空){取一个iorb;提取请求的详细信息;启动I/O操作;

sleep(事件:I/O完成)/*I/O操作*//*等I/O完成后,进入中断处理程序,并在那里唤醒设备处理进程*/if(出错)将错误信息写在该设备的dcb中;传送数据到目的地;唤醒请求此I/O操作的进程;删除iorb;

}sleep(事件:因无I/O请求);

gotol;

}输入∕输出管理——设备控制4.请求I/O的进程、I/O过程、设备处理进程、中断处理程序之间的同步关系输入∕输出管理——设备控制中断处理程序46

doio(ldev,mode,amount,addr);/*等I/O完成*/

标识设备;执行出错检查;构成iocb;将iocb送入设备请求队列;唤醒因等待I/O请求块而睡眠的I/O进程;取iocb;如无iocb则等待;启动I/O操作;/*等I/O完成*/执行出错检查;

唤醒等待I/O的进程;I/O设备

中断服务;唤醒I/O处理进程;

用户进程I/O过程I/O处理进程启动设备中断信号控制关系同步关系471.Linux系统设备的分类字符设备字符设备是能够像字符流的方式被有序访问的设备。这类设备以字节为单位进行数据处理。

块设备块设备是能随机访问固定大小数据(又称为块)的设备。常见的块设备有硬盘、软盘驱动器、CD-ROM驱动器和闪存等。块设备以块为单位进行处理,大多数块设备采用缓冲技术。输入∕输出管理——Linux系统的设备驱动482.设备文件及标识设备文件Linux系统将设备称为设备特殊文件,是文件类型的一种。主、次设备号在Linux系统中描述文件的数据结构称为文件索引节点。设备特殊文件的索引节点包含硬件设备的一个标识符,该标识符对应字符设备或块设备。输入∕输出管理——Linux系统的设备驱动49主设备号主设备号标识设备的类型。具有相同主设备号(即类型一样)的所有设备共享相同的文件操作集合。次设备号次设备号标识主设备号相同的一组设备中的一个特定的设备。如由相同的磁盘控制器管理的一组磁盘具有相同的主设备号和不同的次设备号。输入∕输出管理——Linux系统的设备驱动50VFS对设备文件的处理

虚拟文件系统VFS(Virtual

Filesystem)负责处理与UNIX标准文件系统相关的所有系统调用,为各种文件系统提供一个通用的接口。VFS在打开设备文件时改变缺省的文件操作。它将缺省的文件操作(f_op)字段改变为块设备(或字符设备)的文件操作表(def_bik_fops)的地址。对设备文件的每次系统调用都将转换成与设备相关的操作函数调用。当与设备相关的操作函数被调用后,就可以对硬件设备进行操作,以完成进程所请求的I/O传输。输入∕输出管理——Linux系统的设备驱动51缺省的块设备文件操作表def_bik_fops表输入∕输出管理——Linux系统的设备驱动方法用于块设备文件的函数openblkdev_open()releaseblkdev_close()llseekblkdev_llseek()readgeneric_file_read()writeblkdev_file_write()523.Linux块设备的处理块设备处理中内核组件之间的关系输入∕输出管理——Linux系统的设备驱动虚拟文件系统VFS磁盘高速缓存

文件系统映射层通用块层

I/O调度程序块设备驱动程序块设备驱动程序磁盘磁盘53以进程的read()系统调用为例,分析内核组件的调用过程在读操作之前,相应的设备文件已打开;VFS通过块设备文件操作表调用适当的VFS函数,传递的参数是:文件描述符、文件的偏移量;VFS相应的函数首先访问磁盘高速缓存,若所需数据在高速缓存中,不必启动磁盘读操作;否则启动磁盘读操作。假定为后者;在磁盘文件系统映射层,计算请求数据的逻辑块号,根据该文件的索引节点中的索引结构确定该逻辑块号对应的磁盘物理块号。然后,对块设备发出读请求;输入∕输出管理——Linux系统的设备驱动54通用块层接收到所需数据所在的磁盘块号、操作类型,给I/O调度程序发出启动磁盘读操作的命令;I/O调度程序根据预先定义好的I/O调度策略,将待处理的I/O数据传送请求进行归类。其目的是尽量将在磁盘上物理介质相邻的数据请求聚集在一起,以使I/O处理的效率最高;最后,块设备驱动程序向磁盘控制器的硬件接口发出设备启动命令,从而进行实际的数据传送。输入∕输出管理——Linux系统的设备驱动554.用于块设备处理的数据结构设备驱动程序涉及的数据结构有设备请求队列和bio请求块。bio结构bio是描述块设备I/O操作的描述符包括一个磁盘存储区标识符(存储区的起始扇区号和扇区总数);一个或多个描述与I/O操作相关的主存区的段。bio结构以片段为单位的链表形式来组织块I/O操作一个片段是一小块连续的主存。当缓冲区分散在主存的多个位置上时,bio结构体也能对内核保证I/O操作的执行。在bio结构体中有几个相关的域bi_io_vec、bi_vcnt和bi_idx。

输入∕输出管理——Linux系统的设备驱动56bi_io_vec、bi_vcnt和bi_idxbi_io_vec域指向一个bio_vec数组该数组包含了提供特定I/O操作所需要使用到的所有片段。在指定的I/O操作中,bi_vcnt域用来描述bi_io_vec所指向的bio_vec数组中的向量数目。当块I/O操作执行完毕后,bi_idx域指向数组的当前索引。

输入∕输出管理——Linux系统的设备驱动57bio结构、bio_vec结构数组和page结构之间的关系输入∕输出管理——Linux系统的设备驱动bio_vec结构数组总数为bi_vcntbio_idxbio_io_vecbio_vecbio_vecbio_vecbio_vec页面页面页面页面I/O操作的第一个片段由bio结构中的bio_io_vec字段所指向,其他的片段在其后依次存放,共有bi_vcnt个片段;当I/O操作开始执行时,使用着各个片段,这时,bi_idx域会不断地更新,它总是指向正在操作的当前片段。58设备队列和请求描述符设备请求队列设备请求队列是一个双向链表,包含待处理的请求,由

request_queue结构描述。请求描述符请求描述符request描述每个块设备待处理的请求。输入∕输出管理——Linux系统的设备驱动59输入∕输出管理——Linux系统的设备驱动字段说明queue_head待处理请求的链表request_fn实现驱动程序的策略例程入口点的方法back_marge_fn检查是否可能将bio合并到请求队列的最后一个请求中的方法front_marge_fn检查是否可能将bio合并到请求队列的第一个请求中的方法marge_requests_fn合并请求队列中两个相邻请求的方法make_request_fn将一个新请求插入到请求队列时调用的方法prep_rq_fn将处理请求的命令发送给硬件设备的方法queue_flags描述请求队列状态的标志request_queue结构的字段60输入∕输出管理——Linux系统的设备驱动structrequest结构的字段字段说明queuelist请求队列链表的指针flags请求标志nr_sectors整个请求中要传送的扇区数current_nr_sectors当前bio的当前段中要传送的扇区数hard_sector要传送的下一个扇区号hard_nr_sectors整个请求中要传送的扇区数(由通用块层更新)hard_cur_sectors当前bio的当前段中要传送的扇区数(由通用块层更新)bio请求中第一个没有完成传送操作的biobiotail请求链表中末尾的bioelevator_private指向I/O调度程序私有数据的指针615.I/O调度程序

I/O调度程序的工作

管理块设备请求队列,延迟激活块设备驱动程序;对队列中的请求进行排序,以减少磁盘寻址时间。合并与排序

合并将两个或多个I/O请求结合成一个新请求称为合并;通过合并处理可以显著地减少系统开销和磁盘的寻址时间。排序将设备请求队列按磁盘扇区增长的方向排序,使磁头可以按其前进方向上移动。输入∕输出管理——Linux系统的设备驱动62电梯调度

电梯调度算法从当前I/O请求的磁盘位置开始,沿着臂的移动方向将请求按磁盘扇区的顺序排序;总是选择离当前位置最近的那个I/O请求;如果在磁盘移动方向上无请求访问时,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论