最新操作系统复习记忆.docx

上传人:b****3 文档编号:27208029 上传时间:2023-06-28 格式:DOCX 页数:21 大小:58.90KB
下载 相关 举报
最新操作系统复习记忆.docx_第1页
第1页 / 共21页
最新操作系统复习记忆.docx_第2页
第2页 / 共21页
最新操作系统复习记忆.docx_第3页
第3页 / 共21页
最新操作系统复习记忆.docx_第4页
第4页 / 共21页
最新操作系统复习记忆.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

最新操作系统复习记忆.docx

《最新操作系统复习记忆.docx》由会员分享,可在线阅读,更多相关《最新操作系统复习记忆.docx(21页珍藏版)》请在冰豆网上搜索。

最新操作系统复习记忆.docx

最新操作系统复习记忆

第1-2章导论和操作系统结构

1.明确操作系统的作用。

答:

操作系统提供了程序执行的环境。

它的职能是管理和控制计算机系统中的所有软硬件资源,合理的组织计算机工作流程,并为用户提供一个良好的工作环境与友好的接口。

2.明确操作系统包括哪些功能

答:

存储器管理功能,主要包括:

内存分配、地址映射、内存保护和内存扩充。

处理机管理功能,其功能包括:

作业和进程调度,进程控制和进程通信。

设备管理功能,主要包括:

缓冲区管理、设备分配、设备驱动和设备无关性(设备处理)。

文件管理功能,其功能包括:

文件存储空间的管理、文件操作的一般管理、目录管理、文件的读写管理,存取控制和保护。

用户接口:

命令接口、程序接口、图形接口

3.明确用户模式和内核模式的概念及作用。

答:

核心模式一般指操作系统管理程序运行的状态,具有较高的特权级别。

用户模式一般指用户程序运行时的状态,具有较低的特权级别。

当处理器处于管态时全部指令(包括特权指令)可以执行,可使用所有资源,并具有改变处理器状态的能力。

当处理器处于用户模式时,就只能执行非特权指令。

特权级别不同,可运行指令集合也不同。

特权级别越高,可以运行指令集合越大。

高特权级别对应的可运行指令集合包含低特权级的。

核心模式到用户模式的唯一途径是通过中断。

4.了解操作系统提供的服务有哪些

答:

程序执行、I/O操作、文件系统处理、通信、错误检测、资源分配、用户管理、保护

5.明确系统调用的工作机制。

用户在需要执行特权指令时,调用系统调用,陷入内核(不同的任务,所对应调用的系统调用号也不同,在调用系统调用陷入内核时,会同时向OS内核传入一个系统调用号i)进入内核后,根据i查找系统调用表,找到调用号为i的系统调用的处理代码内核执行完系统调用处理代码后,从核心态返回用户态

6.明确操作系统的结构有哪些,各自优缺点。

答:

1.简单结:

较小、简单且功能有限的系统2.层次化设计:

操作系统分成若干层,最底层为硬件,最高层为用户接口,每层都是利用较低层所提供的功能来实现的3.微内核:

将所有非基本部分从内核中移走,并将它们实现为系统程序或用户程序。

通常包括最小的进程和内存管理以及通信功能。

7.了解虚拟机及优点

答:

虚拟机技术主要有两个优点。

首先,通过完全的保护系统资源,虚拟机提供了一个健壮的安全保护层。

其次,虚拟机允许在不干扰正常的系统操作的情况下进行系统开发

第3章进程

1进程的概念及组成。

概念:

进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。

多个进程间可以并发执行和交换信息。

一个进程在运行时需要一定的资源,如CPU、存储空间及I/O设备等。

组成:

(1)进程标识符:

它是惟一的标志对应进程的一个标志符或数字;

(2)处理机状态:

包括是处理机的各种寄存器内容信息;

(3)进程调度信息:

表明该进程的执行状态;调度优先权:

表示进程获取CPU的优先级别;进程之间通信信息:

反映该进程与哪些进程有什么样的通信关系;

(4)进程控制信息:

被保护的信息有:

程序计数器程序状态字,各工作寄存器的内容等;资源需求、分配和控制方面的信息;进程实体信息:

指出该进程的程序和数据的存储情况,在内存或外存的地址、大小等;族系关系:

反映父子进程的隶属关系;其它信息:

如文件信息、工作单位等。

2进程的基本状态及转换条件

状态:

创建:

进程正被创建。

运行:

(进程的)指令正被执行。

等待:

进程正在等待发生一些事件(如I/O完成或接收一个信号)。

就绪:

进程正等待分配处理器。

终止:

进程结束运行

转换:

(1)就绪→运行:

进程具备运行条件,当进程调度程序选择了进程后,便将其转入运行状态。

(2)运行→阻塞:

进程需要等待某种事件的发生,如执行了输入输出指令,或者请求资源得不到满足时,进程转阻塞状态。

(3)阻塞→就绪:

进程等待的I/O已完成,或者请求的资源得到满足,进程转为就绪状态。

(4)创建→就绪:

进程尚不具备运行条件,所需的资源尚未得到满足。

当进程创建完成后,进程可转入就绪状态。

(5)运行→延迟:

进程运行过程中,因某种原因需要延迟运算,则设定好延迟时间后被转入延迟状态。

(6)运行→完成:

进程运行时遇到结束指令后,被转入完成状态。

3进程控制块(PCB)的作用

答:

进程控制块是进程组成中最关键的部分。

每个进程有惟一的进程控制块。

操作系统根据PCB对进程实施控制和管理。

进程的动态、并发等特征是利用PCB表现出来的。

PCB是进程存在的惟一标志。

4进程调度的类型(长,中,短)及调度的过程(上下文切换)

(1)高级调度(highLevelScheduling):

又称为作业调度或者长程调度(longTermScheduling),其主要功能是根据某种算法,把外存上处于后备队列中的那些作业调入内存,也就是说,它调度对象是作业。

P84

(2)低级调度(lowLevelScheduling)称为进程调度或短程调度(shortTermScheduling),它所调度的对象是进程(或内核级线程。

)进程调度是最基本的一种调度,在多道批处理、分时和实时三种类型的OS中,都必须配置这级调度。

P86

(3)中级调度(IntermediateLevelScheduling)又称中程调度(Medium-TermScheduling).引入中级调度的主要目的是为了提高内存利用率和系统吞吐量。

5进程的操作有哪些。

答:

包括进程的创建和进程的终止

6进程间通信的机制有哪些。

答:

消息传递系统、命名(包括直接通信和间接通信)、同步、缓冲

问答题:

1.试比较进程和程序的区别

答:

进程和程序是既有联系又有区别的两个概念,它们的主要区别如下:

(1)进程是程序在处理机上的一次执行过程,是一个动态概念;而程序是代码的有序集合,其本身没有任何运行的含义,是一个静态的概念。

(2)进程是一个状态变化的过程,是有生命期的,表现在它因创建而产生,因调度而执行,因得不到资源而暂停,因撤销而消亡;而程序是永久的,可以长久保存。

(3)进程和程序的组成不同。

进程由程序、数据和进程控制块组成,而程序仅是代码的有序集合。

(4)进程与程序之间不是一一对于的。

通过多次运行,同一个程序可以对应多个进程过调用关系,一个进程可以包含多个程序。

2.并行与并发的概念

并发(Concurrent):

多个事件在同一时间段内发生。

操作系统是一个并发系统,各进程间的并发,系统与应用间的并发。

操作系统要完成这些并发过程的管理。

并行(parallel)是指在同一时刻发生。

第4章线程

1线程的基本概念及组成

答:

线程,有时也被称为轻量级进程(LWP),是一个基本的CPU执行单元;它包含了一个线程ID、一个程序计数器、一个寄存器组和一个堆栈。

它与属于同一个进程的其它的线程共享代码段、数据段,以及其它的操作系统资源。

2引入线程的好处。

答:

提高了响应速度,资源共享,经济实惠,提高了多处理机体系结构的利用率,使OS具有更好的并发性

3用户级线程和内核级线程的区别

答:

对用户线程的支持通常处于内核之上,通过一个用户级线程库(threadlibrary)实现。

线程库提供了对线程的创建、调度和管理的支持,这无需来自内核的支持。

用户级线程的创建和管理通常很快;

内核线程由操作系统直接支持:

内核在内核空间内实现了线程的创建、调度和管理。

因为线程管理由操作系统完成,所以内核线程的创建和管理要比用户线程慢。

4多线程模型有哪些,各自优缺点

多对一模型:

优点:

效率比较高。

缺点:

如果一个线程调用了导致阻塞的系统调用的话,那么将阻塞整个进程。

在多处理机环境中多个线程不能够并发执行。

用户级线程库在那些采用了多对一模型不支持。

一对一模型:

优点:

更好的并发性;允许多个线程在多处理机环境中并行执行。

缺点:

在于创建一个用户线程就需要创建一个相应的内核线程。

多对多模型:

优点:

允许开发者随心所欲的创建用户线程。

允许更大的并行性。

缺点:

开发者能够创建所需的用户线程,而且相应的内核线程能够在多处理机环境中并行运行。

而且当一个线程执行导致阻塞的系统调用时,内核能够调度其它的线程执行。

5线程池的思想。

答:

线程池的思想是在进程开始时创建一定数量的线程并将它们置入一个池(pool)中,线程在这个池中等待工作。

当服务器接收到一个请求时,它就从池中唤醒一个线程(如果有可用的线程),由它来处理请求。

一旦线程服务完毕,它就返回线程池等待后面的工作。

如果池中没有可用的线程,那么服务器就等待,直到某个线程被释放。

问答题:

1.什么是线程?

描述线程和进程的区别?

答:

线程是在进程内用于调度和占有处理机的基本单位,它由线程控制表、存储线程上下文的用户栈以及核心栈组成。

调度:

传统操作系统中,拥有资源的基本单位和独立调度分派的基本单位都是进程;而引入线程的操作系统中,线程是调度和分派的基本单位,进程则是资源分配的基本单位。

并发性:

在引入线程的OS中,进程之间可以并发执行,同一进程的多个线程之间也可以并发执行,从而使得OS具有更好的并发性。

拥有资源:

在OS中,进程是拥有资源的一个独立单位,它拥有自己的资源,而线程一般不拥有系统资源,但是它可以访问其隶属进程的资源。

系统开销:

创建和撤销进程涉及资源的分配或回收,需要比线程创建和撤销大得多的系统开销,同样的,进程切换的开销也远远大于线程切换的开销。

第5章CPU调度

1抢占式和非抢占式区别

抢占式的:

当进程从运行状态转换到就绪状态时或者当进程从等待状态转换到就绪状态时。

非抢占式的:

当进程从运行状态转换到等待状态时或者当进程终止时。

在非抢占式调度下,一旦把CPU分配给一个进程,那么该进程就会保持CPU直到终止或转换到等待状态。

抢占式调度要付出一定的代价

2调度的准则有哪些

答:

先来先服务(FCFS)调度算法

短作业优先(SJF)或最短剩余时间优先调度算法

优先调度算法。

轮转(RR)调度算法:

专为分时系统设计。

定义一个时间片,将就绪队列作为循环队列。

CPU调度程序循环就绪队列,为每个进程分配不超过一个时间片的CPU。

多级队列调度算法:

将就绪队列分成多个独立队列,每个队列有自己的调度算法。

低调度开销,但不够灵活。

多级反馈队列调度算法:

根据不同CPU区间的特点以区分进程。

如果进程使用过多CPU时间,那么它会被转移到更低优先级队列,在较低优先级队列中等待时间过长的进程会被转移到更高优先级队列(进程老化防止饥饿发生)。

问答题:

1什么是常用调度算法的评价指标?

答:

CPU利用率,吞吐量,周转时间,就绪等待时间,响应时间。

吞吐量表示单位时间CPU完成作业量,周转时间指的是从作业提交到作业完结的时间间隔,就绪等待时间是每个作业在就绪队列所花的时间,响应时间是提交第一个请求到产生第一个响应的时间。

第6章进程同步

1临界区。

答:

考虑由n个进程{P0,P1,...,Pn-l}构成的系统。

每个进程有一个代码段,被称作临界区(criticalsection),进程在临界区内可能会修改公有变量、更新一个表、写一个文件等等。

该系统的一个重要的特征是当一个进程在其临界区内执行时就不允许其它进程在它的临界区内执行。

这样,进程对临界区的执行在时间上是互斥的。

临界区是指不允许多个并发进程交叉执行,一次最多允许一个进程进入的一段程序代码。

临界区是由于不同并发进程的程序段共享公用数据或公用数据变量而引起的。

这些需要互斥访问的资源称为临界区资源。

2解决临界区必须要满足的三项要求。

互斥(MutualExclusion):

如果进程Pi正在其临界区中执行,那么就不允许有其它进程在临界区中执行。

有空让进(Progress):

如果没有进程处于临界区而此时有进程希望进入临界区,那么只可以从这些不在剩余区执行的进程中挑选出下一个进入临界区的进程,而且这个选择不可以长时间的延缓。

有限等待(BoundedWaiting):

在一个进程请求进入临界区之后和获准之前,允许其它进程在有限的时间内进入临界区。

3信号量的定义。

答:

信号量是一种同步工具。

信号量S是一个整形数,除初始化以外,对它的访问只能通过两个标准原子操作:

wait和signal。

最初,这被称为P操作(forwait;fromtheDutchproberen,totest)和V操作(forsignal;fromverhogen,toincrement)。

第7章死锁

1.死锁的定义

答:

具备一个等待队列的信号量实现可能会导致这样的一个情况:

两个或多个进程无休止的等待发生一个事件,而这个事件只能由等待中的某个进程引发。

问题中的这个事件是指signal操作的执行。

当达到这样的一个状态时,我们称这些进程被死锁(deadlock)。

产生死锁的基本原因是:

系统资源不足、进程推进顺序不当。

2死锁产生的四个必要条件

互斥条件:

必须至少有一个资源以非共享的方式被进程持有;更确切的说,同时只有一个进程可以使用该资源。

如果另一个进程请求这个资源,那么该进程必须等待这个资源被释放。

持有并等待条件:

进程必须持有至少一个资源且等待获取另外的当前被其它进程持有的资源。

不可抢占条件:

不可以抢占资源;也就是说,资源的释放只可以是由持有它的进程完成工作后自动释放。

循环等待条件:

对一组等待进程{P0,P1,…,Pn}来说,必须:

P0等待P1持有的资源,P1等待P2持有的资源,…,Pn-1等待Pn持有的资源,而Pn等待P0持有的资源。

3死锁的处理方法

主要有三种方法可以处理死锁:

死锁预防和死锁避免:

采用某种协议预防或避免死锁,确保系统不会进入死锁状态。

死锁恢复:

允许系统进入死锁状态,然后检测并恢复。

完全忽视死锁并假设系统中不会发生死锁。

包括UNIX在内的大多数操作系统采用了这种方法。

第8章内存管理

}明确逻辑地址和物理地址

}明确动态加载和动态链接的各自作用

}明确连续内存分配方法和内存映射和保护方法。

}明确非连续内存分配方法(分页机制、保护方法、共享方法等)

}明确页表的结构有哪几种形式,各自的方法

}明确分段管理方法

1.页表的作用是实现从页号到物理块号的地址映射。

2.在页式管理系统中,用户程序中使用的地址称为逻辑地址,实际访问主存时由系统将它转化为物理地址。

3.分页管理是把内存分为大小相等的区,每个区称为页帧(或页框),而把程序的逻辑空间分为若干页,页的大小与页帧的大小相等。

4.在分页存储管理中,为了加快地址变换速度,页面大小的值常取2的整数次幂。

5.在请求式分页系统中,被调出的页面又立刻被调入,这种频繁的调页现象称为颠簸。

6.分段管理中,若逻辑地址中的段内地址大于段表中该段的段长,则发生地址越界中断。

7.段页式存储管理中,每道程序都有一个段表和若干个页表。

8.页式管理系统的逻辑地址结构由页号和页内位移组成。

9.分段管理中的地址映射过程是:

首先找到该作业段表的起始地址,然后根据逻辑地址中的段号去查找段表得到该段的内存起始地址,再与逻辑地址中的段内位移相加得到物理地址。

10.请求分页存储管理也称为动态页面管理,不是把一个进程映象的所有页面一次性全部装入内存,而只装入一部分,其余部分在执行中动态调入。

11.在段页式管理中,逻辑地址分解为段号、页号、页内位移三部分。

1.为什么要引入动态重定位?

如何实现?

答:

(1)系统在内存管理中经常需要将进程浮动,以整理出较大的存储空间。

为了适应进程的这种地址变化,需要对进程的地址进行变换,即动态重定位。

(2)硬件上设置“重定位寄存器”,专门存放进程的首地址。

程序执行时的内存物理地址是由重定位寄存器中的地址和相对地址相加得到的。

当进程从内存的某处移动到另一处时,不需对程序做任何修改,只要将进程的新地址替换原来的旧地址即可。

2.试比较分段式和分页式存储管理方式的主要差别。

答:

它们的差别主要表现在以下几个方面:

(1)页面是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要。

段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要。

(2)页面的大小固定且由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的。

而段的长度却不固定,它取决于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分。

(3)分页式存储管理的作业地址空间是一维的,分段式存储管理的作业地址空间是二维的。

第9章虚拟内存

}明确按需调页的机制和过程

}明确常用的页面置换算法及各自优缺点

}了解帧分配的方法及最小帧数目的决定因素

}明确系统颠簸的原因和现象

}明确系统颠簸解决方法(工作集模型和页错误频率)

}明确内存映射文件机制和内存映射I/O

}了解内核内存分配的方法

}了解虚拟内存管理中影响性能的其他因素(预调页、页大小、TLB范围、程序结构等)

1.什么是颠簸?

产生颠簸的原因是什么?

答:

(1)颠簸是由于内存空间竞争引起的。

当需要将一个新页面调入内存时,因内存空间紧张,不得不将一个旧页面置换出去,而刚刚置换出去的旧页面可能又要被使用,因此需要重新将它调入。

若一个进程频繁地进行页面调入调出,势必加大系统的开销,使系统运行效率降低。

通常称这种现象为该进程发生了颠簸。

(2)产生颠簸的原因主要有:

系统内的进程数量太多,致使一个进程分得的存储块过少;系统采取的置换算法不够合理。

2.常见的页面置换算法

答:

最佳页面置换算法(OPTIMAL)、先进先出页面置换算法(FIFO)、最近最久未用置换算法(LRU)、LFU置换算法

}最佳页面置换算法(OPTIMAL):

所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

采用最佳置换算法,通常可保证获得最低的缺页率。

}先进先出页面置换算法(FIFO):

总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

}最近最久未用置换算法(LRU):

选择最近最久未使用的页面予以淘汰。

}LFU置换算法:

选择在最近时期使用最少的页面作为淘汰页。

3.缺页的概念,页表的含义

}缺页:

要访问的页面不在主存,需要操作系统将其调入主存后再进行访问。

}页表:

用来将虚拟地址空间映射到物理地址空间的数据结构称为页表。

4.实现虚拟存储器需要哪些硬件支持

}a.对于为实现请求分页存储管理方式的系统,除了需要一台具有一定容量的内存及外存的计算机外,还需要有页表机制,缺页中断机构以及地址变换机构;

}b.对于为实现请求分段存储管理方式的系统,除了需要一台具有一定容量的内存及外存的计算机外,还需要有段表机制,缺段中断机构以及地址变换机构;

第10章文件系统接口

}明确文件系统提供的功能

}明确文件的访问方法:

顺序访问,直接访问。

}明确目录的作用及常用目录结构及各自优缺点

}明确符号链接和硬链接的区别

目录逻辑结构的组织方法

}有效:

迅速定位文件

}命名:

方便用户

}两个不同的用户的文件名称可以相同

}同一文件可以有不同的名称

}分组:

按文件的属性逻辑分组(如所有java程序,所有游戏等)

常用目录结构

1.单层目录

所有文件都包含在同一目录中,便于支持和理解。

但存在命名问题与分组问题。

2.两层目录

为不同的用户建立不同的目录

1.不同用户的文件允许同名2.不支持分组3.方便查找

3.树型目录

1.有效搜索2.分组3.当前目录(工作目录)4.绝对路径与相对路径名

4.无环图目录

1.具有共享子目录和文件2.无环图可能的问题:

}1.不同文件名可能表示同一文件。

对于查找与统计来说可能会带来一定的问题

}2.另一问题是删除问题

5.通用图目录

}如何确保无环?

}只允许链接发生在文件,而非子目录上

}垃圾收集

}自我引用的文件,其引用计数不等于0

}垃圾收集涉及遍历整个文件系统,并标记所有可访问的空间。

然后,第二次将所有没有标记的部分收集到空闲空间链表上。

}每当新链接建立的时候,就采用相应的算法进行检测,以避免环的出现。

1.文件管理有哪些主要功能?

其主要任务是什么?

答:

文件管理的主要功能和主要任务有以下四个方面:

(1)外存空间管理。

其主要任务是为每个文件分配必要的外存空间,提高外存的利用率,并能有助于提高文件系统的效率。

(2)目录管理。

其主要任务是为每个文件建立目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取操作。

(3)文件读写操作。

其主要任务是根据用户请求从外存中读取数据,或将数据写入外存。

(4)存取权限控制。

其主要任务是防止未经核准的用户访问文件;防止冒名顶替存取文件;防止以不正确的方式访问文件。

在树形目录结构中,同一目录下的文件不可重名,不同目录下的文件可以重名。

实现文件共享有多种方法,其中的一种方法是由系统实现对文件的共享,即当用户知道要共享文件的路径时,可以通过提供从根目录出发的路径名来共享访问这些文件;另一种方法是对需要共享的文件进行链接,即一个目录中的表目直接指向另一个文件的表目。

所谓文件保护是指避免文件拥有者或其他用户因有意或无意的错误操作使文件收到破坏,对文件的保护可以采用对文件进行存取控制的任何一种方法。

第11章文件系统实现

分层设计的文件系统

}I/O控制

}由设备驱动程序和中断处理程序组成,实现内存与磁盘之间的信息转移

}基本文件系统

}向合适的设备驱动程序发送一般命令就可对磁盘上的物理块进行读写

}文件组织模块

}知道文件及其逻辑块和物理块。

}空闲空间管理器

}逻辑文件系统

}管理元数据:

文件系统的所有结构数据,而不包括实际数据(或文件内容)

}根据给定符号文件名来管理目录结构

}逻辑文件系统通过文件控制块(FCB)来维护文件结构

虚拟文件系统作用

}虚拟文件系统(VFS)提供了一种面向对象的方法来实现文件系统

}VFS允许在不同类型的文件系统上采用同样的系统调用接口(API)

}API是针对VFS的接口,而非对任何特定类型的文件系统

目录的实现方法

}最为简单的目录实现方法是使用存储文件名和数据块指针的线性列表(数组、链表等)

}容易实现

}但运行费时

}采用线性搜索来查找特定条目(缺点)

}许多操作系统采用软件缓存来存储最近访问过的目录信息

}Hash表:

采用Hash数据结构的线性表

}减少了目录搜索时间

}碰撞:

两个文件名哈希到相同的位置

}哈希表的最大困难是其通常固定的大小和哈希函数对大小的依赖性

文件磁盘空间分配方法

分配方法指的是如何为文件分配磁盘块,常用的分配方法有以下三类

}连续分配:

每个文件占据磁盘上的一组连续的块

特点:

1简单-只需要记录文件的起始位置(块号)及长度。

2访问文件很容易,所需的寻道时间也最少

存在的问题:

1为新文件找空间比较困难(类似于内存分配中的连续内存分配方式)文件很难增长

}链接分配:

每个文件是磁盘块的链表;磁盘块分布在磁盘的任何地方。

优点:

1简单-只需起始位置2.文件创建与增长容易。

缺点:

1.不能随机访问2.块与块之间的链接指针需要占用空间3.存在可靠性问题

}簇:

将多个连续块组成簇,磁盘以簇为单位进行分配

}索引分配:

将所有的数据块指针集中到索引块中。

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1