输入输出系统

​ 输入输出系统是计算机系统中的主机与外部进行通信的系统。在计算机系统中,通常把处理机和主存储器之外的部分称为输入输出系统,输入输出系统的特点是异步性、实时性和设备无关性。

I/O系统简介

设备管理的对象:主要是I/O设备。
设备管理的基本任务:完成用户提出的I/O请求,提高I/O速率以及改善I/O设备的利用率。
设备管理的主要功能有:缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。

​ I/O设备类型繁多,按设备的共享属性分类,可以分为三类,独占设备,在一段时间内只允许一个用户(进程)访问的设备,即临界资源。共享设备,在一段时间内允许多个进程同时访问的设备,当然,每一时刻仍然只允许一个进程访问,如磁盘(可寻址和可随机访问)。虚拟设备,通过虚拟技术将一台设备变换为若干台逻辑设备,供若干个用户(进程)同时使用。

I/O 系统的基本功能

  1. 设备分配
  2. 设备映射
  3. 设备驱动
  4. I/O缓冲区的管理

通用设备管理分层模型

​ 通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应该含有与设备控制器之间的接口,在该接口有三种类型的信号,各对应一条信号线。

 ① 数据信号线,用于在设备控制器之间传送数据信号,对于输入设备而言,由外界输入的信号经转换器转换后所形成的数据,通常先送入缓冲器中,当数量达到一定的比特(字符)数后,再从缓冲器通过一组信号线传送给设备控制器。对输出设备而言,则先将从设备控制器经过数据信号线传送来的一批数据先暂存于缓冲器中,经转换器做适当转换后,再逐个字符地输出。

 ② 控制信号线,作为由设备控制器向I/O设备发送控制信号时的通路,该信号规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(由控制器接受数据),或执行磁头移动等操作。

 ③ 状态信号线,用于传送设备当前状态的信号,设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。

设备控制器是计算机中的一个实体,其主要职责控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换,它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理从繁杂的设备控制事务中解脱出来。它是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址,若控制器可连接多个设备时,则应该含有多个设备地址,并使每个设备地址对应一个设备。

在控制器中设置一状态寄存器,用其中的每一位来反映设备的某一种状态,当CPU将该寄存器的内存读入后,便可了解该设备的状态。I/O逻辑,用于实现对设备的控制,通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送I/O命令,I/O逻辑对收到的命令进行译码,每当CPU要启动一个设备时,一方面将启动命令发送给控制器另一方面又同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。

I/O通道

 虽然在CPU与I/O设备之间增加了设备控制器后,可以大大减少CPU对I/O的干预,但是当主机所配置的外设很多时,CPU的负担仍然很重,因此,在CPU和设备控制器之间又增设了通道。其主要目的使一些原来由CPU处理的I/O任务转由通道来承担,从而把CPU从繁杂的I/O任务中解脱出来。在设置了通道后,CPU只需要向通道发送一条I/O指令,通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发中断信号。I/O通道是一种特殊的处理机,具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作,但I/O通道与一般的处理机不同,因为其指令类型单一同时没有自己的内存,与CPU共享主内存

虚拟设备是指被多个用户或进程交替使用的设备,宏观上好象多个用户同时在使用。(×)

虚拟设备是指采用采用某种I/O技术,将某个独占设备改进为多用户共享的设备,以提高资源的利用率。(通过虚拟技术将一台独占设备虚拟成多台逻辑设备,供多个进程同时使用)
我感觉说法差不多,但是网上给的答案是❌。

通道技术根本上是从软件上解决操作系统对输入输出操作的 控制问题。(× )应该是硬件

逻辑设备是物理设备属性的表示,用来指定某一具体设备。(×)不特指某个具体设备,而是对应一类设备。

从设备的资源属性分类,可把设备分为独占设备、共享设备和虚拟设备。( √)

用户在使用I/O设备时,通常采用物理设备名,指明具体的设备。(×)用户在使用I/O设备时,通常采用逻辑设备名,指明设备类型。

中断处理

中断处理程序

对于为每一类设备设置一个I/O进程的设备处理方式,其中断处理程序的处理过程分成以下几个步骤
▪测定是否有未响应的中断信号
▪程序完成当前指令后测试是否有未响应的中断信号。
▪如果没有,继续执行下一条指令。
▪如果有,则停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权转交给中断处理程序做准备。

保护被中断进程的CPU 环境

通常由硬件自动将处理机状态字PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中,然后把被中断进程的CPU现场信息(即包括所有的CPU寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中。

转入相应的设备处理程序

由处理机对各个中断源进行测试,以确定引起本次中断的I/O 设备,并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号,然后将相应的设备中断处理程序的入口地址装入到程序计数器中,使处理机转向中断处理程序。

中断处理

该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断,还是异常结束中断。
▪ 若是前者,中断程序便进行结束处理;若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。
▪ 若是异常结束中断,则根据发生异常的原因做相应的处理。

恢复被中断进程的现场

当中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址N+1、处理机状态字
PSW,以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从N+1处开始,最终返回到被中断的程序。

I/O设备的控制方式

轮询的可编程I/O方式

​ 对I/O设备的控制采取程序I/O方式,或称为忙-等待方式,即在处理机向控制器发出一条I/O指令启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志busy设置为1,然后便不断地循环测试busy,只有当其为0时,表示输入完成,于是处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一次的I/O。在程序I/O方式中,由于CPU的高速性和I/O设备的低速性,致使CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成对CPU的极大浪费。

中断的可编程I/O方式

 当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务,设备控制器于是按照该命令的要求去控制指定I/O设备,此时,CPU与I/O设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一个中断信号,由CPU检查输入过程中是否出错,若无错,便由控制器发送取走数据的信号,再通过控制器及数据线将数据写入内存指定单元中。在I/O设备输入每个数据的过程中,由于无需CPU干预,因而可使CPU与I/O设备并行工作,仅当完成一个数据输入时,才需CPU花费极短的时间去做一些中断处理。

直接存储器访问方式

 虽然中断驱动I/O比程序I/O方式更有效,但是,它仍是以字(节)为单位进行I/O的,每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断,换言之,采用中断驱动I/O方式时的CPU是以字(节)为单位进行干预的,将这种方式用于块设备的I/O是非常低效的,例如,为了从磁盘读取1KB的数据块,需要中断CPU1K次,为了进一步减少CPU对I/O的干预而引入了直接存储器访问方式,该方式的特点如下:

 ① 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块。

 ② 所传送的数据是从设备直接送入内存的,或者相反。

 ③ 仅在传送一个或多个数据块的开始和结束时,需要CPU干预,整块数据的传送是在控制器的控制下完成的。

 DMA控制器由三部分组成,主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。

 ① 命令/状态寄存器(CR),用于接收从CPU发送来的I/O命令,或有关控制信息,或设备的状态。

 ② 内存地址寄存器(MAR),在输入时,它存放把数据从设备传送到内存的起始目标地址,在输出时,它存放由内存到设备的内存源地址。

 ③ 数据寄存器(DR),用于暂存从设备到内存,或从内存到设备的数据。

 ④ 数据计数器(DC),存放本次CPU要读或写的字(节)数。

 当CPU要从磁盘读入一个数据块时,便向磁盘控制器发送一条读命令,该命令被送到其中的命令寄存器(CR)中,同时,还需要发送本次要将数据读入的内存起始目标地址,该地址被送入内存地址寄存器(MAR)中,本次要读数据的字(节)数被送入数据寄存器(DC)中,还须将磁盘中的源地址直接送至DMA控制器的I/O控制逻辑上,然后,启动DMA控制器进行数据传送,以后,CPU便可去处理其他任务,此后,整个数据传送过程便由DMA控制器进行控制,当DMA控制器已从磁盘中读入一个字(节)的数据并送入数据寄存器(DR)后,再挪用一个存储器周期,将该字(节)传送到MAR所指示的内存单元中,接着便对MAR内容加1,将DC内存减1,若减后DC内存不为0,表示传送未完成,便继续传送下一个字(节),否则,由DMA控制发出中断请求。

 下图展示了三种不同方式的流程。

  

I/O通道控制方式

 虽然DMA方式比起中断方式已经显著地减少CPU的干预,即已由以字(节)为单位的干预减少到了以数据块为单位进行干预,但CPU每发出一条I/O指令,也只能去读(或写)一个连续的数据块,而当我们需要一次去读多个数据块且将他们分别传送到不同的内存区域,或者相反时,则须由CPU分别发出多条I/O指令及进行多次中断才能完成。I/O通道方式是DMA的发展,它可以进一步减少CPU的干预,即把一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。同时,可以实现CPU、通道、I/O设备的并行操作,提高资源利用率。

什么是中断?系统内部中断与外部中断有什么区别?

中断是指计算机在执行程序的过程中,由于某些事件的发生而暂时中止当前程序的执行,转而去执行相应的事件处理程序,处理完毕后再返回原来程序继续执行的过程

中断可以分为两类:系统内部中断和外部中断。系统内部中断是指由CPU内部产生的中断,例如除零错误、溢出错误等。外部中断是指由CPU外部产生的中断,例如来自外设的中断请求。外部中断可以进一步分为可屏蔽中断和不可屏蔽中断。可屏蔽中断是指可以被屏蔽或忽略的中断,例如来自硬盘、打印机、网卡等外设的中断请求。不可屏蔽中断是指不能被屏蔽或忽略的中断,例如电源掉电、硬件线路故障等。

缺页中断与一般中断的主要区别是什么?

缺页中断作为中断,同样需要经历保护CPU现场、分析中断原因、转缺页中断处理程序进行处理、恢复CPU现场等步骤。但缺页中断又是一种特殊的中断,它与一般中断的主要区别是:

(1) 在指令执行期间产生和处理中断信号。通常,CPU都是在一条指令执行完后去检查是否有中断请求到达。若有便去响应中断;否则继续执行下一条指令。而缺页中断是在指令执行期间,发现所要访问的指令或数据不在内存时产生和处理的。

(2) 一条指令在执行期间,可能产生多次缺页中断。例如,对于一条读取数据的多字节指令,指令本身跨越两个页面,假定指令后一部分所在页面和数据所在页面均不在内存,则该指令的执行至少产生两次缺页中断。

总之,缺页中断与一般中断的主要区别在于它们产生和处理的时间不同。缺页中断是在指令执行期间产生和处理的,而一般中断是在指令执行完后检查是否有中断请求再进行处理的。

什么是设备的独立性?

也称设备无关性,指应用程序独立于具体使用的物理设备。应用程序中使用逻辑设备名请求使用某类设备,系统实际执行时使用物理设备名,系统完成逻辑设备名到物理设备名的转换。

I/O控制方式中的中断控制方式和DMA方式有什么不同?

(1) 中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理,但它以字(节)为单位进行I/0,对块设备低效。;DMA方式则是在所要求传送的数据块全部传送结束时要求CPU进行中断处理,大大减少了CPU进行中断处理的次数。

(2) 中断方式的数据传送是由CPU控制完成的;而DMA方式则是在DMA控制器的控制下不经过CPU控制完成的。

缓冲管理

 在设备管理中,为了缓和CPU与I/O设备速度不匹配的矛盾,提高CPU与I/O设备的并行性,在I/O设备与处理机交换数据时都用到了缓冲区。

 ① 缓和CPU和I/O设备间速度不匹配的矛盾。

 ② 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。

 ③ 提高CPU和I/O设备之间的并行性。

单缓冲

 每当用户进程发出一个I/O请求时,操作系统便在主存中为之分配一个缓冲区,假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C,由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M+T,反之,为M+C,系统对每一块数据的处理时间为Max(C,T) + M

 在字符设备输入时,缓冲区用于暂存用户输入的一行数据,在输入期间,用户进程被挂起以等待数据输入完毕,在输出时,用户进程将一行数据输入到缓冲区后,继续进行处理,当用户进程已有第二行数据输出时,如果第一行数据尚未被提取完毕,则此时用户进程应该阻塞。

双缓冲

 为了加快输入和输出的速度,提高设备利用率,人们又引入了双缓冲区机制,称为缓冲对换,在设备输入时,先将数据送入第一个缓冲区,装满后便转向第二个缓冲区,此时操作系统可以从第一缓冲区中移出数据,并送入用户进程,接着由CPU对数据进行计算,在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T),如果C<T,可使块设备连续输入,如果C>T,则可使CPU不必等待设备输入。对于字符设备,若采用行输入方式,则采用双缓冲通常能消除用户的等待时间,即用户在输入完第一行后,在CPU执行第一行中的命令时,用户可继续向第二缓冲区输入下一行数据。

循环缓冲

 当输入与输出或生产者与消费者的速度基本相匹配时,采用双缓冲能获得较好的效果,可使生产者和消费者基本上能并行操作,但若两者速度相差甚远,双缓冲的效果则不够理想,因此,引入了多缓冲机制,可将多个缓冲组织成循环缓冲形式。对于用作输入的循环缓冲,通常是提供给输入进程或计算进程使用,输入进程不断向空缓冲去输入数据,而计算进程则从中提取数据进行计算。

 循环缓冲区的组成如下

 ① 多个缓冲区,在循环缓冲区中包括多个缓冲区,每个缓冲区的大小相同,作为输入的多缓冲区可分为三种类型,用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的先行工作缓冲区C

 ② 多个指针,作为输入的缓冲区可设置三个指针,用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti、以及用于指示计算进程正在使用的缓冲区C的指针Current。

 计算进程和输入进程可以利用下述两个过程来使用循环缓冲区(循环缓冲的使用)。

 ① Getbuf过程,当计算进程要使用缓冲区中的数据时,可调用Getbuf过程,该过程将由指针Nextg所指示的缓冲区提供给进程使用,相应的,须把它改为现行工作缓冲区,并将Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区,类似地,当输入进程要使用空缓冲区来装入数据时,调用Getbuf过程,由该过程将指针Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向下一个R缓冲区。

 ② Releasebuf过程,当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放,此时,把该缓冲区由当前(现行)工作缓冲区C改为空缓冲区R,类似地,当输入进程把缓冲区装满时,也应该调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。

 使用输入循环缓冲,可使输入进程和计算进程并行执行(进程同步),相应地,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就会出现如下两种情况。

 ① Nexti指针追赶上Nextg指针,这意味着输入进程的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用,此时,输入进程应该阻塞,直到计算进程把某个缓冲区中的数据全部提取完,使之成为空缓冲区R,并调用Releasebuf过程将它释放时,才将输入进程唤醒,这种情况称为系统受计算限制

 ② Nextg指针追赶上Nexti指针,这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据,这时,计算进程应该阻塞,直至输入进程又装满某个缓冲区,并调用Releasebuf过程将它释放时,才去唤醒计算进程,这种情况称为系统受I/O限制

缓冲池

​ 上述的缓冲区仅适用于某特定的I/O进程和计算进程,因而它们属于专用缓冲,当系统较大时,将会有许多这样的循环缓冲,这样会消耗大量的内存空间,而且利用率不高,为了提高缓冲区的利用率,引入缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。

对于既可以用于输出的共用缓冲池,其中至少包含有一下三种类型的缓冲区:

 ① 空(闲)缓冲区。

 ② 装满输入数据的缓冲区。

 ③ 装满输出数据的缓冲区。

 为了管理方便,将相同类型的缓冲区链成一个队列,形成了空缓冲队列emq、输入队列inq、输出队列outq。还具有四种工作缓冲区,用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区。

 缓冲区可以工作在收容输入、提取输入、收容输出、提取输出四种工作方式下。

 ① 收容输入,在输入进程需要输入数据时,便调用Getbuf(emp)过程,从空缓冲队列的队首取出一个空缓冲区,把它作为收容输入工作缓冲hin,然后,把数据输入其中,装满后再调用Putbuf(inq,hin)过程,将该缓冲区挂在输入队列上。

 ② 提取输入,当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列队首取出一个缓冲区,作为提取输入工作缓冲区sin,计算进程从中提取数据,计算进程用完该数据后,再调用Putbuf(emq,sin)过程,将该缓冲区挂到空缓冲队列emq上。

 ③ 收容输出,当计算进程需要输出时,调用Getbuf(emq)过程从空缓冲区队列emq的队首取出一个空缓冲区,作为收容输出工作缓冲区hout,当其中装满输出数据后,又调用Putbuf(outq,hout)过程,将该缓冲区挂在outq末尾。

 ④ 提取输出,由输出进程调用Getbuf(outq)过程,从输出队列队首取出一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout,在数据提取完后,再调用Putbuf(emq,sout)过程,将该缓冲区挂在空缓冲队列末尾。

与设备无关的I/O软件

设备独立性

 应用程序独立于具体使用的物理设备,为了实现设备独立性而引入了逻辑设备物理设备这两个概念,在应用程序中,使用逻辑设备名称来请求使用某类设备,而系统在实际执行时,还必须使用物理设备名称。因此,系统需具有将逻辑设备名称转换为某物理设备名称的功能,这类似于存储器管理所介绍的逻辑地址和物理地址的概念,在应用程序中使用的是逻辑地址,系统在分配和使用内存时,必须使用物理地址。

实现设备独立性后,可带来两方面的好处。

 ① 设备分配时的灵活性,进程能够以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备全部分配完毕时,进程才会阻塞。

 ② 易于实现I/O重定向,用于I/O操作的设备可以更换,而不必改变应用程序。  

驱动程序是一个与硬件(或设备)紧密相关的软件,为了实现设备独立性,必须再在驱动程序之上设置一层软件,称为设备独立性软件

设备独立性软件的主要功能可分为以下两个方面:
(1) 执行所有设备的公有操作。
① 对独立设备的分配与回收;
② 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序;
③ 对设备进行保护,禁止用户直接访问设备;
④ 缓冲管理
⑤ 差错控制
⑥ 提供独立于设备的逻辑块

(2) 向用户层(或文件层)软件提供统一接口
无论何种设备,它们向用户所提供的接口应该是相同的。例如,对各种设备的读操作,在应用程序中都使用read;而对各种设备的写操作,也都使用write。

磁盘系统及磁盘调度

现代计算机系统中,都配置了磁盘存储器,并以它为主来存放文件。对文件的操作,都将涉及到对磁盘的访问,磁盘I/O速度的高低和磁盘系统的可靠性,都将直接影响到系统性能。因此,设法改善磁盘系统的性能,已成为现代操作系统的重要任务之一 。

提高磁盘I/O速度的主要途径:
(1)选择性能好的磁盘
(2)采用好的磁盘调度算法
(3)设置磁盘高速缓存(Disk Cache)
(4)其它方法
(5)采用高度可靠、快速的容量磁盘系统——磁盘冗余阵列

数据的组织和格式
▪ 存储面(surface)
▪ 磁道(track)
▪ 柱面
▪ 扇区(sectors)

磁盘调度

 磁盘是多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳的调度算法,使各进程对磁盘的平均访问时间最小。由于在访问磁盘中,主要是寻道时间,因此,磁盘调度的目标是使磁盘的平均寻道时间最少

请求序列:55,58,39,18,90,160,150,38,184

 ① 先来先服务(FCFS, First Come First Service),这是一种最简单的磁盘调度算法,其根据进程请求访问磁盘的先后顺序进行调度,优点是公平、简单,每个进程的请求都能得到依次处理,不会出现某个进程的请求长期得不到满足的情况。

 ② 最短寻道时间优先(SSTF,Shortest Seek Time First),要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短。SSTF算法虽然能获得较好的寻道性能,但却可能导致某个进程发生“饥饿”现象。

 ③ 扫描(SCAN)算法,该算法不仅考虑到欲访问的磁盘与当前磁道之间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。直至再无更外的磁道需要访问时,才将磁臂换向自外向里移动。其类似电梯的运行,也称为电梯调度算法

  ④ 循环扫描(CSCAN)算法,SCAN算法既能够获得较好的寻道性能,又能防止饥饿现象,但是,当磁头刚从里向外移动而越过了某个磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。为了减少这种延迟,CSCAN算法规定磁头单向移动,例如,致使自里向外移动,当磁头移到最外的磁道访问后,磁头立即返回最里的欲访问的磁道,亦即将最小的磁道号紧接着最大的磁道号构成循环,进行循环扫描