您好,欢迎来到聚文网。 登录 免费注册
现代操作系统(原书第5版)

现代操作系统(原书第5版)

  • 字数: 1283
  • 出版社: 机械工业
  • 作者: [荷] 安德鲁·S. 塔嫩鲍姆(Andrew S. Tanenbaum) [荷]赫伯特·博斯(Herbert Bos)
  • 商品条码: 9787111776895
  • 适读年龄: 12+
  • 版次: 1
  • 开本: 16开
  • 页数: 790
  • 出版年份: 2025
  • 印次: 1
定价:¥149 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书是操作系统领域的经典教材,涵盖操作系统设计师需要掌握的所有核心概念,并深入探讨了进程与线程、内存管理、文件系统、输入/输出、死锁、虚拟化和云、多处理机系统、操作系统设计等主题。案例研究部分详细分析了Windows、Android和Linux等流行的操作系统。第5版对知识点做了与时俱进的更新,更加关注现代存储方案、新的安全防御方法等,同时优化篇章结构,全面反映了当代操作系统的技术动向与发展趋势。本书适合作为高等院校计算机专业的操作系统课程教材,也适合相关技术人员参考。
作者简介
安德鲁·S.塔嫩鲍姆(Andrew S. Tanenbaum)拥有麻省理工学院理学学士学位和加州大学伯克利分校哲学博士学位,现为荷兰阿姆斯特丹自由大学计算机科学方向的荣休教授。他曾担任计算与图像高级学院院长,这是一个主要研究高级并行、分布式以及图像系统的跨学科研究生院。同时,他也是荷兰皇家艺术与科学院的学院教授。此外,他还赢得过享有盛名的欧洲研究理事会卓越贡献奖。<br />过去一段时间里,他的主要研究方向是编译器、操作系统、网络以及分布式系统。在这个研究方向上,他已经发表了200多篇期刊论文。塔嫩鲍姆教授还撰写或参与撰写了5本教材,已经被翻译成20多种语言,其中包括巴斯克语和泰语。这些教材被全球的大学生使用,总计有163个版本。<br />塔嫩鲍姆教授还编写了大量的软件,特别是MINIX,它是一个小型的UNIX,并为Linux以及Linux最初开发的平台提供了宝贵的灵感。如今的MINIX版本是MINIX 3,其开发目标是成为一个非常可靠和安全的操作系统。只有当任何用户都不会遇到操作系统崩溃的情况时,塔嫩鲍姆教授才认为他完成了自己的工作。MINIX 3是一个欢迎所有人来完善的开放源代码项目,可以访问www.minix3.org下载MINIX 3的免费版本,并试着运行它。x86和ARM版本都可用。<br />塔嫩鲍姆教授的博士生在毕业后都有很好的前途,他们当中有些人成为教授,有些人则在政府组织和行业中发挥了领导作用。对此,教授本人感到非常自豪。在培养学生方面,他可以说是桃李满天下。<br />塔嫩鲍姆教授是ACM会士、IEEE会士,也是荷兰皇家艺术与科学院院士。他荣获了相当多的ACM、IEEE和USENIX奖项。如果你对此感到好奇,可以去他的Wikipedia主页查看。他还拥有两个荣誉博士学位。<br /><br />赫伯特·博斯(Herbert Bos)拥有荷兰特温特大学硕士学位和英国剑桥大学博士学位。此后,他为Linux类操作系统的可信I/O架构做了大量工作,同时也基于MINIX 3研究操作系统。他现在是荷兰阿姆斯特丹自由大学计算机科学学院系统安全研究小组的教授,主要研究方向是系统安全。<br />他的研究小组发现并分析了硬件和软件中的许多漏洞。从有缺陷的内存芯片到易受攻击的CPU,从操作系统中的缺陷到新奇的开发技术,他的研究已经修复了大多数主流操作系统、流行的浏览器和所有现代Intel处理器所遇到的问题。在赫伯特教授看来,攻击性研究是有价值的,因为导致当今安全问题的主要原因是系统变得如此复杂,以至于我们不再理解它们。通过研究如何使系统以意想不到的方式运行,我们可以更多地了解它们的(真实)本质。而有了这个知识库,开发人员就可以在未来改进他们的设计。事实上,虽然复杂的新漏洞攻击更容易得到关注,但赫伯特把大部分时间都花在开发防御技术上,从而提高安全性。<br />赫伯特教授的学生(包括已毕业的)都很优秀。由于学生的优异表现,赫伯特教授在拉斯维加斯的黑帽会议上获得了5次Pwnie奖。此外,他的5名学生获得了ACM SIGOPS EuroSys Roger Needham奖,该奖颁发给系统领域欧洲最佳博士论文;两名学生获得了ACM SIGSAC博士论文奖,该奖项颁发给安全领域最佳博士论文;另外两名学生则因可靠性方面的研究获得了William C. Carter博士论文奖。<br />
目录
目 录<br /><br /><br />译者序<br />前言<br />作者简介<br />第1章 引论1<br />1.1 什么是操作系统2<br />1.1.1 作为扩展机器的操作系统3<br />1.1.2 作为资源管理器的操作系统4<br />1.2 操作系统的历史5<br />1.2.1 第一代计算机(1945~<br />   1955年):真空管和穿<br />   孔卡片5<br />1.2.2 第二代计算机(1955~<br />   1965年):晶体管和批<br />   处理系统5<br />1.2.3 第三代计算机(1965~<br />   1980年):集成电路芯<br />   片和多道程序设计7<br />1.2.4 第四代计算机(1980年<br />   至今):个人计算机11<br />1.2.5 第五代计算机(1990年<br />   至今):移动计算机13<br />1.3 计算机硬件简介14<br />1.3.1 处理器15<br />1.3.2 存储器17<br />1.3.3 非易失性存储器20<br />1.3.4 I/O设备21<br />1.3.5 总线23<br />1.3.6 启动计算机 24<br />1.4 操作系统大观园25<br />1.4.1 大型机操作系统25<br />1.4.2 服务器操作系统26<br />1.4.3 个人计算机操作系统26<br />1.4.4 智能手机和掌上计算机操作<br />   系统26<br />1.4.5 物联网和嵌入式操作系统26<br />1.4.6 实时操作系统27<br />1.4.7 智能卡操作系统27<br />1.5 操作系统概念28<br />1.5.1 进程28<br />1.5.2 地址空间29<br />1.5.3 文件30<br />1.5.4 输入/输出32<br />1.5.5 保护32<br />1.5.6 shell32<br />1.5.7 个体重复系统发育33<br />1.6 系统调用35<br />1.6.1 用于进程管理的系统调用38<br />1.6.2 用于文件管理的系统调用40<br />1.6.3 用于目录管理的系统调用41<br />1.6.4 各种系统调用42<br />1.6.5 Windows API43<br />1.7 操作系统结构45<br />1.7.1 单体系统45<br />1.7.2 层次式系统46<br />1.7.3 微内核46<br />1.7.4 客户端-服务器模式48<br />1.7.5 虚拟机49<br />1.7.6 外核和unikernel52<br />1.8 依靠C的世界52<br />1.8.1 C语言53<br />1.8.2 头文件53<br />1.8.3 大型编程项目54<br />1.8.4 运行模型55<br />1.9 有关操作系统的研究55<br />1.10 本书其他部分概要56<br />1.11 公制单位56<br />1.12 小结57<br />习题57<br />第2章 进程与线程60<br />2.1 进程60<br />2.1.1 进程模型60<br />2.1.2 进程的创建62<br />2.1.3 进程的终止63<br />2.1.4 进程的层次结构64<br />2.1.5 进程的状态65<br />2.1.6 进程的实现66<br />2.1.7 多道程序设计模型67<br />2.2 线程68<br />2.2.1 线程的使用68<br />2.2.2 经典的线程模型71<br />2.2.3 POSIX线程74<br />2.2.4 在用户空间中实现线程75<br />2.2.5 在内核中实现线程78<br />2.2.6 混合实现79<br />2.2.7 使单线程代码多线程化79<br />2.3 事件驱动服务器82<br />2.4 同步和进程间通信84<br />2.4.1 竞争条件84<br />2.4.2 临界区85<br />2.4.3 忙等待的互斥86<br />2.4.4 睡眠与唤醒90<br />2.4.5 信号量92<br />2.4.6 互斥量95<br />2.4.7 管程98<br />2.4.8 消息传递103<br />2.4.9 屏障105<br />2.4.10 优先级反转106<br />2.4.11 避免锁:读-复制-更新107<br />2.5 调度108<br />2.5.1 调度简介108<br />2.5.2 批处理系统中的调度113<br />2.5.3 交互式系统中的调度114<br />2.5.4 实时系统中的调度118<br />2.5.5 策略和机制119<br />2.5.6 线程调度119<br />2.6 有关进程与线程的研究121<br />2.7 小结121<br />习题122<br />第3章 内存管理127<br />3.1 无内存抽象127<br />3.2  一种内存抽象:地址空间130<br />3.2.1 地址空间的概念130<br />3.2.2 交换技术132<br />3.2.3 空闲内存管理134<br />3.3 虚拟内存136<br />3.3.1 分页137<br />3.3.2 页表139<br />3.3.3 加速分页过程142<br />3.3.4 针对大内存的页表144<br />3.4 页面置换算法147<br />3.4.1 最优页面置换算法148<br />3.4.2 最近未使用页面置换算法148<br />3.4.3 先进先出页面置换算法149<br />3.4.4 第二次机会页面置换算法149<br />3.4.5 时钟页面置换算法150<br />3.4.6 最近最少使用页面置换算法151<br />3.4.7 用软件模拟LRU151<br />3.4.8 工作集页面置换算法 152<br />3.4.9 工作集时钟页面置换算法155<br />3.4.10 页面置换算法小结157<br />3.5 分页系统中的设计问题157<br />3.5.1 局部分配策略与全局分配<br />   策略158<br />3.5.2 负载控制159<br />3.5.3 清除策略160<br />3.5.4 页面大小161<br />3.5.5 分离的指令空间和数据空间162<br />3.5.6 共享页面163<br />3.5.7 共享库164<br />3.5.8 内存映射文件165<br />3.6 有关实现的问题166<br />3.6.1 与分页有关的操作系统工作166<br />3.6.2 缺页中断处理166<br />3.6.3 指令备份167<br />3.6.4 锁定内存中的页面168<br />3.6.5 后备存储168<br />3.6.6 策略和机制的分离169<br />3.7 分段171<br />3.7.1 纯分段的实现172<br />3.7.2 分段和分页结合:MULTICS173<br />3.7.3 分段和分页结合:Intel x86176<br />3.8 有关内存管理的研究176<br />3.9 小结177<br />习题178<br />第4章 文件系统184<br />4.1 文件185<br />4.1.1 文件命名185<br />4.1.2 文件结构186<br />4.1.3 文件类型187<br />4.1.4 文件访问189<br />4.1.5 文件属性189<br />4.1.6 文件操作190<br />4.1.7 使用文件系统调用的一个<br />   示例程序191<br />4.2 目录概述193<br />4.2.1 一级目录系统193<br />4.2.2 层次目录系统194<br />4.2.3 路径名194<br />4.2.4 目录操作195<br />4.3 文件系统的实现196<br />4.3.1 文件系统布局196<br />4.3.2 文件的实现198<br />4.3.3 目录的实现201<br />4.3.4 共享文件203<br />4.3.5 日志结构文件系统205<br />4.3.6 日志文件系统206<br />4.3.7 闪存文件系统207<br />4.3.8 虚拟文件系统 210<br />4.4 文件系统管理和优化213<br />4.4.1 磁盘空间管理213<br />4.4.2 文件系统备份217<br />4.4.3 文件系统的一致性221<br />4.4.4 文件系统性能223<br />4.4.5 磁盘碎片整理227<br />4.4.6 压缩和重复数据删除227<br />4.4.7 文件安全删除和磁盘加密228<br />4.5 文件系统实例229<br />4.5.1 MS-DOS文件系统229<br />4.5.2 UNIX V7 文件系统231<br />4.6 有关文件系统的研究233<br />4.7 小结234<br />习题234<br />第5章 输入/输出238<br />5.1 I/O硬件原理238<br />5.1.1 I/O设备238<br />5.1.2 设备控制器239<br />5.1.3 内存映射I/O240<br />5.1.4 直接存储器存取243<br />5.1.5 重温中断245<br />5.2 I/O软件原理248<br />5.2.1 I/O软件的目标249<br />5.2.2 程序控制I/O250<br />5.2.3 中断驱动I/O251<br />5.2.4 使用DMA的I/O252<br />5.3 I/O软件层次252<br />5.3.1 中断处理程序252<br />5.3.2 设备驱动程序253<br />5.3.3 与设备无关的I/O软件256<br />5.3.4 用户空间的I/O软件260<br />5.4 大容量存储:磁盘和固态硬盘261<br />5.4.1 磁盘262<br />5.4.2 固态硬盘270<br />5.4.3 RAID273<br />5.5 时钟277<br />5.5.1 时钟硬件277<br />5.5.2 时钟软件278<br />5.5.3 软定时器280<br />5.6 用户界面:键盘、鼠标和显示器281<br />5.6.1 输入软件281<br />5.6.2 输出软件286<br />5.7 瘦客户机298<br />5.8 电源管理299<br />5.8.1 硬件问题300<br />5.8.2 操作系统问题301<br />5.8.3 应用程序问题305<br />5.9 有关输入/输出的研究305<br />5.10 小结306<br />习题307<br />第6章 死锁312<br />6.1 资源312<br />6.1.1 可抢占资源和不可抢占资源312<br />6.1.2 资源获取313<br />6.1.3 哲学家进餐问题314<br />6.2 死锁概述317<br />6.2.1 资源死锁的条件317<br />6.2.2 死锁模型317<br />6.3 鸵鸟算法319<br />6.4 死锁检测和死锁恢复320<br />6.4.1 每种类型一个资源的死锁<br />   检测320<br />6.4.2 每种类型多个资源的死锁<br />   检测322<br />6.4.3 从死锁中恢复323<br />6.5 死锁避免324<br /&t;6.5.1 资源轨迹图325<br />6.5.2 安全状态和不安全状态326<br />6.5.3 单个资源的银行家算法327<br />6.5.4 多个资源的银行家算法327<br />6.6 死锁预防328<br />6.6.1 破坏互斥条件329<br />6.6.2 破坏占有并等待条件329<br />6.6.3 破坏不可抢占条件329<br />6.6.4 破坏循环等待条件330<br />6.7 其他问题330<br />6.7.1 两阶段加锁330<br />6.7.2 通信死锁331<br />6.7.3 活锁332<br />6.7.4 饥饿333<br />6.8 有关死锁的研究334<br />6.9 小结334<br />习题335<br />第7章 虚拟化和云339<br />7.1 历史340<br />7.2 虚拟化的必要条件342<br />7.3 第一类和第二类虚拟机管理程序344<br />7.4 高效虚拟化的技术345<br />7.4.1 在不支持虚拟化的平台上<br />   实现虚拟化345<br />7.4.2 虚拟化的开销347<br />7.5 虚拟机管理程序是正确的<br />   微内核吗348<br />7.6 内存虚拟化350<br />7.7 I/O虚拟化353<br />7.8 多核CPU上的虚拟机355<br />7.9 云355<br />7.9.1 云即服务356<br />7.9.2 虚拟机迁移356<br />7.9.3 检查点357<br />7.10 操作系统级虚拟化357<br />7.11 案例研究:VMware359<br />7.11.1 VMware的早期历史359<br />7.11.2 VMware Workstation360<br />7.11.3 将虚拟化引入x86的挑战361<br />7.11.4 VMware Workstation解决<br />    方案概览362<br />7.11.5 VMware Workstation的演变367<br />7.11.6 VMware的第一类虚拟机<br />    管理程序ESX Server368<br />7.12 有关虚拟化和云的研究369<br />7.13 小结370<br />习题370<br />第8章 多处理机系统372<br />8.1 多处理机373<br />8.1.1  多处理机硬件374<br />8.1.2 多处理机操作系统类型382<br />8.1.3 多处理机同步385<br />8.1.4 多处理机调度388<br />8.2  多计算机394<br />8.2.1 多计算机硬件394<br />8.2.2 低层通信软件398<br />8.2.3 用户层通信软件399<br />8.2.4 远程过程调用402<br />8.2.5 分布式共享存储器404<br />8.2.6 多计算机调度407<br />8.2.7 负载平衡407<br />8.3 分布式系统410<br />8.3.1 网络硬件411<br />8.3.2 网络服务和协议414<br />8.3.3 基于文档的中间件416<br />8.3.4 基于文件系统的中间件417<br />8.3.5 基于对象的中间件421<br />8.3.6 基于协作的中间件422<br />8.4  有关多处理机系统的研究424<br />8.5 小结425<br />习题426<br />第9章 安全429<br />9.1 操作系统安全基础430<br />9.1.1  CIA安全三要素431<br />9.1.2 安全原则431<br />9.1.3 操作系统结构的安全性433<br />9.1.4 可信计算基434<br />9.1.5 攻击者435<br />9.1.6 可信系统437<br />9.2 保护机制438<br />9.2.1 保护域438<br />9.2.2 访问控制列表440<br />9.2.3 权能字442<br />9.3 安全系统的形式化模型445<br />9.3.1 多级安全446<br />9.3.2 密码学447<br />9.3.3 可信平台模块450<br />9.4 认证451<br />9.4.1 密码451<br />9.4.2 使用物理识别的认证方式456<br />9.4.3 使用生物识别的认证方式457<br />9.5 软件漏洞458<br />9.5.1 缓冲区溢出攻击459<br />9.5.2 格式化字符串攻击465<br />9.5.3 UAF攻击468<br />9.5.4 类型混淆漏洞468<br />9.5.5 空指针间接引用攻击470<br />9.5.6 整数溢出攻击470<br />9.5.7 命令注入攻击471<br />9.5.8 检查时间/使用时间攻击472<br />9.5.9 双重获取漏洞472<br />9.6 利用硬件漏洞473<br />9.6.1 隐蔽信道473<br />9.6.2 侧信道475<br />9.6.3 瞬态执行攻击477<br />9.7 内部攻击481<br />9.7.1 逻辑炸弹481<br />9.7.2 后门陷阱481<br />9.7.3  登录欺骗482<br />9.8 操作系统加固482<br />9.8.1 细粒度随机化483<br />9.8.2 控制流限制484<br />9.8.3 准入限制485<br />9.8.4 代码和数据完整性检查488<br />9.8.5 使用可信平台模块的远程<br />      认证488<br />9.8.6 封装不受信任的代码490<br />9.9 有关安全的研究491<br />9.10 小结492<br />习题493<br />第10章 实例研究1:UNIX、Linux<br />     和Android498<br />10.1 UNIX与Linux的历史498<br />10.1.1 UNICS498<br />10.1.2 PDP-11 UNIX499<br />10.1.3 可移植的UNIX500<br />10.1.4 伯克利UNIX501<br />10.1.5 标准UNIX501<br />10.1.6 MINIX502<br />10.1.7 Linux503<br />10.2 Linux概述505<br />10.2.1 Linux的设计目标505<br />10.2.2 到Linux的接口506<br />10.2.3 shell507<br />10.2.4 Linux应用程序509<br />10.2.5 内核结构511<br />10.3 Linux中的进程513<br />10.3.1 基本概念513<br />10.3.2 Linux中进程管理相关的系统<br />    调用515<br />10.3.3 Linux中进程与线程的实现518<br />10.3.4 Linux中的调度523<br />10.3.5 Linux中的同步526<br />10.3.6 启动Linux系统526<br />10.4 Linux中的内存管理528<br />10.4.1 基本概念529<br />10.4.2 Linux中的内存管理系统<br />    调用531<br />10.4.3 Linux中内存管理的实现532<br />10.4.4 Linux中的分页536<br />10.5 Linux中的I/O系统538<br />10.5.1 基本概念538<br />10.5.2 网络539<br />10.5.3 Linux中的I/O系统调用541<br />10.5.4 I/O在Linux中的实现541<br />10.5.5 Linux中的模块544<br />10.6 Linux文件系统544<br />10.6.1 基本概念544<br />10.6.2 Linux中的文件系统调用548<br />10.6.3 Linux文件系统的实现551<br />10.6.4 网络文件系统557<br />10.7 Linux的安全性561<br />10.7.1 基本概念561<br />10.7.2 Linux中安全相关的系统<br />    调用563<br />10.7.3 Linux中的安全实现564<br />10.8 Android564<br />10.8.1 Android与Google565<br />10.8.2 Android的历史565<br />10.8.3 设计目标569<br />10.8.4 Android体系结构569<br />10.8.5 Linux扩展571<br />10.8.6 ART574<br />10.8.7 Binder IPC575<br />10.8.8 Android应用581<br />10.8.9 意图589<br />10.8.10 进程模型590<br />10.8.11 安全和隐私594<br />10.8.12 后台执行和社会工程606<br />10.9 小结610<br />习题611<br />第11章 实例研究2:Windows 11616<br />11.1 通过Windows11简述Windows的<br />   历史616<br />11.1.1 20世纪80年代:MS-DOS617<br />11.1.2 20世纪90年代:基于MS-<br />    DOS的Windows617<br />11.1.3 21世纪最初十年:基于NT<br />    的Windows618<br />11.1.4 Windows Vista620<br />11.1.5 Windows 8620<br />11.1.6 Windows 10621<br />11.1.7 Windows 11 622<br />11.2 Windows编程622<br />11.2.1 通用Windows平台623<br />11.2.2 Windows子系统624<br />11.2.3 本地NT API625<br />11.2.4 Win32 API627<br />11.2.5 Windows 注册表630<br />11.3 系统结构631<br />11.3.1 操作系统结构632<br />11.3.2 启动Windows643<br />11.3.3 对象管理器的实现645<br />11.3.4 子系统、DLL和用户态服务654<br />11.4 Windows中的进程和线程655<br />11.4.1 基本概念656<br />11.4.2 作业、进程、线程和纤程<br />    管理API调用659<br />11.4.3 进程和线程的实现663<br />11.4.4 WoW64和模拟670<br />11.5 内存管理673<br />11.5.1 基本概念673<br />11.5.2 内存管理系统调用677<br />11.5.3 内存管理的实现678<br />11.5.4 内存压缩685<br />11.5.5 内存分区687<br />11.6 Windows的高速缓存689<br />11.7 Windows的I/O690<br />11.7.1 基本概念690<br />11.7.2 I/O的API调用691<br />11.7.3 I/O实现693<br />11.8 Windows NT 文件系统697<br />11.8.1 基本概念697<br />11.8.2 NTFS的实现698<br />11.9 Windows电源管理705<br />11.10 Windows虚拟化707<br />11.10.1 Hyper-V707<br />11.10.2 容器712<br />11.10.3 基于虚拟化的安全716<br />11.11 Windows的安全717<br />11.11.1 基本概念718<br />11.11.2 安全相关的API调用720<br />11.11.3 安全性的实现720<br />11.11.4 安全修复722<br />11.12 小结728<br />习题729<br />第12章 操作系统设计733<br />12.1 设计问题的本质733<br />12.1.1 目标733<br />12.1.2 设计操作系统为什么困难734<br />12.2 接口设计736<br />12.2.1 指导原则736<br />12.2.2 范型737<br />12.2.3 系统调用接口740<br />12.3 实现742<br />12.3.1 系统结构742<br />12.3.2 机制与策略744<br />12.3.3 正交性745<br />12.3.4 命名746<br />12.3.5 绑定的时机747<br />12.3.6 静态与动态结构747<br />12.3.7 自顶向下与自底向上的<br />     实现748<br />12.3.8 同步通信与异步通信749<br />12.3.9 实用技术750<br />12.4 性能754<br />12.4.1 操作系统为什么运行缓慢754<br />12.4.2 什么应该优化754<br />12.4.3 空间-时间的权衡755<br />12.4.4 缓存757<br />12.4.5 线索758<br />12.4.6 利用局部性758<br />12.4.7 优化常见的情况758<br />12.5 项目管理759<br />12.5.1 人月神话759<br />12.5.2 团队结构760<br />12.5.3 经验的作用761<br />12.5.4 没有银弹762<br />习题762<br />第13章 参考书目与文献765<br />13.1 进行深入阅读的建议765<br />13.1.1 引论765<br />13.1.2 进程与线程765<br />13.1.3 内存管理766<br />13.1.4 文件系统766<br />13.1.5 输入/输出767<br />13.1.6 死锁768<br />13.1.7 虚拟化和云768<br />13.1.8 多处理机系统768<br />13.1.9 安全769<br />13.1.10 实例研究1:UNIX、Linux<br />     和Android770<br />13.1.11 实例研究2:Windows 11770<br />13.1.12 操作系统设计770<br />13.2 按字母顺序排列的参考文献771

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网