操作系统教程1简介

这篇具有很好参考价值的文章主要介绍了操作系统教程1简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0简介

教程简介

这个操作系统教程提供了操作系统的所有基本和高级概念。这个操作系统课程是为初学者、专业人士和GATE考生准备考试而设计的。本教程将为你提供关于每个操作系统概念的深刻知识。

什么是操作系统?

操作系统(OS Operating System)是一种软件,作为最终用户和计算机硬件之间的接口。每台计算机必须至少有一个操作系统来运行其他软件程序和应用程序,如MS Word、Chrome、游戏等。

操作系统教程1简介

教学大纲

👉 第1课 什么是操作系统?- 解释操作系统的类型、特点和例子
👉 第2课 什么是semaphore--二进制、计数类型及实例
👉 第3课 操作系统的组成部分 - 解释操作系统的组成部分
👉 第4课 操作系统中的微内核--结构、优势
👉 第5课 操作系统中的系统调用--类型和例子
👉 第6课 操作系统中的文件系统--结构、属性、类型
👉 第7课 实时操作系统(RTOS)--组件、类型、例子
👉 第8课 远程过程调用(RPC)协议--什么是、类型、特点、优点
👉 第9课 CPU调度--操作系统中的CPU调度算法
👉 第10课 操作系统中的进程管理--操作系统中的PCB
👉 第11课 操作系统中的死锁 - 操作系统中的死锁介绍
👉 第12课 FCFS调度算法--什么是,程序实例
👉 第13课 操作系统中的分页--操作系统中的分页与实例
👉 第14课 活锁--什么是活锁,实例,与死锁的区别
👉 第15课 进程间通信(IPC)--什么是进程间通信?
👉 第16课 圆周率调度算法--通过实例学习
👉 第17课 进程同步--操作系统的关键部分问题
👉 第18课 进程调度--长期、中期、短期调度器
👉 第19课 优先级调度算法--抢占式、非抢占式 例子
👉 第20课 操作系统中的内存管理--连续的、交换的、碎片的
👉 第21课 最短作业优先(SJF)--抢占式、非抢占式示例
👉 第22课 操作系统中的虚拟内存--什么是,需求分页,优势
👉 第23课 操作系统中的班克算法 - 什么是班克算法?
👉 第24课 Mutex vs Semaphore - 有什么区别?
👉 第25课 进程与线程--有什么区别?
👉 第16课 RAM(随机存取存储器)的类型--解释不同类型的RAM
👉 第27课 RAM与ROM--有什么区别?
👉 第28课 DDR3与DDR4--必须知道的区别
👉 第29课 多线程与多处理 - 有什么区别?
👉 第30课 微处理器和微控制器--有什么区别?
👉 第31课 先发制人与非先发制人的调度--主要区别
👉 第32课 分页与分段--主要区别
👉 第33课 Zip文件软件--20个最佳Zip文件软件|解压程序|文件压缩
👉 第34课 Winzip替代品 - 15个最好的免费Winzip替代品(ZIP文件软件)。
👉 第35课 最好的操作系统 - 8个最好的操作系统
👉 第课36 Operating System PDF - Operating System Tutorial PDF for Beginners
👉 第37课 操作系统面试题--60大操作系统面试题及答案
👉 第38课 操作系统测试 - 操作系统MCQ(多选题)。

为什么要学习操作系统?

  • 通过创建一个抽象来隐藏硬件的细节
  • 通过图形用户界面,易于使用
  • 提供一个环境,用户可以在其中执行程序和应用
  • 操作系统作为应用程序和硬件组件之间的中间人
  • 易于使用的形式提供计算机系统资源

操作系统的应用有哪些?

  • 安全性: 操作系统可以防止对程序和数据的未经授权的访问。
  • 控制系统的性能: 记录对服务的请求和系统的响应之间的延迟。
  • job核算: 你可以跟踪时间和资源。
  • 错误检测的辅助工具: 操作系统有助于跟踪错误信息和其他调试和错误检测的辅助工具。
  • 帮助协调其他软件之间的关系: 协调和分配编译器、解释器、汇编器和其他软件。

操作系统的特点:

下面是常见的操作系统的重要特征清单:

  • 受保护的和监督的模式
  • 允许磁盘访问和文件系统设备驱动网络安全
  • 程序执行
  • 内存管理
  • 处理I/O操作
  • 操纵文件系统
  • 错误检测和处理
  • 资源分配
  • 信息和资源保护

1操作系统简介

操作系统教程1简介

操作系统的历史

  • 操作系统最早是在20世纪50年代末开发的,用于管理磁带存储。
  • 通用汽车研究实验室在20世纪50年代初为他们的IBM 701实现了第一个操作系统。
  • 在1960年代中期,操作系统开始使用磁盘
  • 20世纪60年代末,Unix操作系统的第一个版本被开发出来。
  • 微软建立的第一个操作系统是DOS。它是在1981年通过购买西雅图一家公司的86-DOS软件而建立的。
  • 当今流- 行的操作系统Windows于1985年首次出现,当时创建了GUI并与MS-DOS搭配使用。

操作系统的市场占有率

操作系统教程1简介

操作系统教程1简介

注意Android实际也使用了Linux。

OS(操作系统)的类型:

  • 批量操作系统

有些计算机程序非常冗长和耗时。为了加快同一进程,具有类似类型需求的工作被分批在一起,作为一个组运行。

批量操作系统的用户从不与计算机直接互动。在这种类型的操作系统中,每个用户都在打卡机等离线设备上准备他或她的工作,并将其提交给计算机操作员。

  • 多任务/时- 间共享操作系统

时间共享操作系统使位于不同终端(shell)的人可以同时使用一个计算机系统。多个用户之间共享的处理器时间(CPU)被称为时间共享。

  • 实时操作系统

实时操作系统处理和响应输入的时间间隔非常小。例子: 军事软件系统、空间软件系统是实时操作系统的例子。

  • 分布式操作系统

分布式系统使用位于不同机器上的许多处理器,为其用户提供非常快速的计算。

  • 网络操作系统

网络操作系统运行在一个服务器上。它提供了管理数据、用户、组、安全、应用和其他网络功能的能力。

  • 移动操作系统

移动操作系统是那些专门为智能手机、平板电脑和可穿戴设备设计的操作系统。

一些最有名的移动操作系统是安卓和iOS,但其他包括黑莓、Web和watchOS。

操作系统的功能

一些典型的操作系统功能可能包括管理内存、文件、进程、I/O系统和设备、安全等。

以下是操作系统的主要功能:

操作系统教程1简介

  • 进程管理: 进程管理帮助操作系统创建和删除进程。它还为进程之间的同步和通信提供机制。
  • 内存管理: 内存管理模块执行向需要该资源的程序分配和取消分配内存空间的任务。
  • 文件管理: 它管理所有与文件有关的活动,如组织存储、检索、命名、共享和保护文件。
  • 设备管理: 设备管理保持对所有设备的跟踪。这个模块也负责这项任务,被称为I/O控制器。它还执行设备的分配和取消分配的任务。
  • I/O系统管理: 任何操作系统的主要目标之一是向用户隐藏该硬件设备的特殊性。
  • 二级存储管理: 系统有几个层次的存储,包括主存储、二级存储和缓存存储。指令和数据必须存储在主存储或缓存中,以便运行中的程序可以参考。
  • 安全性: 安全模块保护计算机系统的数据和信息免受恶意软件的威胁和授权访问。
  • 命令解释: 该模块解释由用户给出的命令,并操作系统资源来处理这些命令。
  • 联网: 分布式系统是一组不共享内存、硬件设备或时钟的处理器。这些处理器通过网络相互通信。
  • Job统计: 追踪不同工作和用户使用的时间和资源。
  • 通信管理: 协调和分配编译器、解释器和计算机系统各用户的其他软件资源。

操作系统(OS)的特点

这里列出了操作系统的重要特征:

  • 受保护的和监督者模式
  • 磁盘访问和文件系统
  • 程序执行
  • 内存管理 虚拟内存 多任务处理
  • 处理I/O操作
  • 文件系统的操作
  • 错误检测和处理
  • 资源分配
  • 信息和资源保护

操作系统教程1简介

操作系统的优势

  • 允许你通过创建抽象来隐藏硬件的细节
  • 通过GUI易于使用
  • 提供一个环境,用户可以在其中执行程序/应用
  • 操作系统必须确保计算机系统方便使用
  • 操作系统作为应用程序和硬件组件之间的中间人
  • 它以易于使用的形式提供计算机系统资源
  • 作为系统中所有硬件和软件之间的中介

操作系统的劣势

  • 如果操作系统出现任何问题,你可能会失去所有存储在系统中的内容。
  • 操作系统的软件对于小规模的组织来说是相当昂贵的,这增加了他们的负担。例如Windows
  • 它从来不是完全安全的,因为威胁可能在任何时候发生。

什么是操作系统的内核?

内核是计算机操作系统的核心部分。内核执行的唯一工作是管理软件和硬件之间的通信。内核是计算机的核心。它使硬件和软件之间的通信成为可能。内核是操作系统的最里面的部分,而外壳是最外面的部分。

操作系统教程1简介

内核的特点

  • 进程的低层次调度
  • 进程间通信
  • 进程同步
  • 上下文切换

内核的类型

有许多类型的内核存在,但其中最流行的两个内核是:

  • 单片式(Monolithic)

单片式内核是一个单一的代码或程序块。它提供操作系统所提供的所有必要服务。它是一个简单的设计,在硬件和软件之间创建了一个独特的通信层。

  • 微内核

微内核管理着所有的系统资源。在这种类型的内核中,服务被实现在不同的地址空间。用户服务存储在用户地址空间,而内核服务则存储在内核地址空间。因此,它有助于减少内核和操作系统的大小。

固件和操作系统的区别

固件是一种嵌入在设备的芯片上的程序,它控制着该特定的设备。操作系统提供高于固件所提供的功能。

固件是由集成电路或其他东西的制造者编码的程序,不能被改变。操作系统是可以由用户安装并可以改变的程序。
固件存储在非易失性存储器上。操作系统存储在硬盘上。

32位和64位操作系统的区别

32位允许同时进行32位的数据处理;64位允许同时进行64位的数据处理

32位应用程序需要32位操作系统和CPU。64位应用需要64位操作系统和CPU。

32位有所有版本的Windows 8、Windows 7、Windows Vista和Windows XP、Linux等。64位有Windows XP专业版、Vista、7、Mac OS X和Linux等。

32位系统被限制在3.2GB的内存。64位系统允许最大17亿GB的内存。

2信号量(Semaphore)

什么是Semaphore?

Semaphore简单来说就是一个非负数的变量,在线程之间共享。信号灯是一种信号机制,一个正在等待信号灯的线程可收到另一个线程发出信号。它使用两个原子操作,1)等待,和2)信号 来实现进程同步。

信号允许或不允许对资源的访问,这取决于它是如何设置的。

信号量的特点:

  • 提供任务同步的机制。
  • 低级别的同步机制。
  • Semaphore总是持有一个非负的整数值。
  • 触发器可以使用测试操作和中断来实现,应该使用文件描述符来执行。

信号量的类型

两种常见的emaphores是

  • 计数信号
  • 二进制信号灯。

计数信号(Counting Semaphores)

这种类型的Semaphore使用一个计数,可以帮助任务被多次获取或释放。如果初始计数=0,计数信号灯应该在不可用状态下创建。

操作系统教程1简介

但是,如果计数大于0,那么该信号就会在可用状态下被创建。

二进制信号

二进制信号与计数信号非常相似,但是它们的值被限制为0和1。在这种类型的信号灯中,只有当信号灯=1时,等待操作才有效,而当信号灯=0时,信号操作才会成功。

操作系统教程1简介

实例

下面给出的程序是一个逐步实现的过程,它涉及到semaphore的使用和声明。

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

等待和信号操作

等待操作

这种类型的信号操作可以帮助你控制一个任务进入关键部分的时间。但是,如果wait的值是正的,那么wait参数X的值会被递减。在负值或零值的情况下,不执行任何操作。这也被称为P(S)操作。

在信号值减少后,变成了负值,命令被搁置,直到所需条件得到满足。

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

信号操作

这种类型的Semaphore操作是用来控制一个任务从关键部分退出的。它有助于将参数的值增加1,表示为V(S)。

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

计数信号寄托与二进制信号的区别

C没有相互排斥,B相互排斥
C任何整数值,B只有0和1的值
C多于一个槽, B只有一个槽
C提供一组进程, B有一个相互排斥机制。

Semaphore与Mutex之间的区别

S是一种信令机制。M是一种锁定机制。
S是一个整数变量。M只是一个对象。
等待和信号操作可以修改一个semaphore。M只被可能请求或释放资源的进程所修改。
如果没有资源是空闲的,那么进程需要一个资源,应该执行等待操作。它应该等待,直到semaphore的计数大于0。如果它被锁定,则该进程必须等待。进程应该被保存在一个队列中。只有当mutex被解锁时,才需要访问这个队列。
S可以有多个程序线程。在mutex中拥有多个程序线程,但不能同时进行。
S值可以被任何进程释放或获得资源而改变。对象锁只能由获得该锁的进程释放。
触发器的类型有计数触发器和二进制触发器,Mutex没有子类型。
使用wait ()和signal ()操作可以修改Semaphore的值。 Mutex对象被锁定或解锁。
如果所有的资源都被使用,并且请求资源的进程执行wait()操作并阻止自己,直到semaphore计数大于1,则资源被占用。如果对象已经被锁定,请求资源的进程就会等待,并在锁被释放之前被系统排队。

Semaphore的优点

  • 一个以上的线程访问关键部分。
  • 独立于机器的。
  • 在独立于机器的微内核代码中实现的。
  • 不允许多个进程进入临界区。
  • 由于在semaphore中存在繁忙的等待,因此永远不会有进程时间和资源的浪费。
  • 独立于机器的,应该在微内核的独立于机器的代码中运行。
  • 允许对资源进行灵活的管理。

Semaphore的缺点

  • 最大的限制之一是优先级倒置。
  • 操作系统必须跟踪所有调用等待和信号的semaphore。
  • 使用从未被强制执行过,只是按照惯例。
  • 为了避免semaphore的死锁,Wait和Signal操作需要以正确的顺序执行。
  • Semaphore编程是一个复杂的过程,所以有可能无法实现互斥。
  • 它也不是一种大规模使用的实用方法,因为它们的使用会导致模块化的损失。

3操作系统组件?

操作系统是一个庞大而复杂的系统,只能通过分割成小块来创建。这些小块应该是系统中定义明确的部分,它仔细定义了输入、输出和功能。

尽管Mac、Unix、Linux、Windows和其他操作系统没有相同的结构,但大多数操作系统共享类似的操作系统组件,如文件、进程、内存、I/O设备管理。

文件管理

文件是一组相关的信息,应该由其创建者定义。它通常代表程序,包括源和对象形式,以及数据。数据文件可以是数字的,字母的,或字母数字的。

操作系统中文件管理的功能:

  • 文件和目录的创建和删除。
  • 操作文件和目录。
  • 将文件映射到二级存储上。
  • 在稳定的存储介质上备份文件。

进程管理

进程管理组件是一个管理在操作系统上同时运行的许多进程的程序。每个软件应用程序在运行时都有一个或多个与之相关的进程。

例如,当你使用谷歌浏览器这样的浏览器时,有一个进程在为该浏览器程序运行。操作系统也有许多进程在运行,它们执行各种功能。

所有这些进程都应该由进程管理来管理,它保持进程的有效运行。它还使用分配给它们的内存,并在需要时将它们关闭。

进程的执行必须是连续的,因此,至少应该有一条指令代表该进程执行。

操作系统中进程管理的功能:

  • 进程的创建和删除。
  • 暂停和恢复。
  • 同步
  • 通信

I/O设备管理

操作系统的重要用途之一,帮助你向用户隐藏特定硬件设备的变化。

操作系统中I/O管理的功能:

  • 提供缓冲区缓存系统
  • 提供一般的设备驱动代码
  • 为特定的硬件设备提供驱动。
  • I/O帮助你了解特定设备的个性。

网络管理

网络管理是对计算机网络进行管理的过程。它包括性能管理、故障分析、网络供应和维护服务质量。

分布式系统是一个计算机/处理器的集合,它们从不分享自己的内存或时钟。在这种类型的系统中,所有的处理器都有自己的本地内存,处理器之间使用不同的通信线路,如光纤或电话线进行通信。

网络中的计算机通过通信网络连接,可以用多种不同方式进行配置。在网络管理的帮助下,网络可以完全或部分连接,这有助于用户设计路由和连接策略,克服连接和安全问题。

网络管理的功能:

  • 分布式系统帮助你各种计算资源的规模和功能。它们可能涉及微处理器、微型计算机和许多通用计算机系统。
  • 分布式系统还为用户提供对网络共享的各种资源的访问。
  • 它有助于访问共享资源,帮助计算加速或提供数据可用性和可靠性。

主存储器管理

主存储器是一个大的存储阵列或字节,它有一个地址。内存管理过程是通过使用特定内存地址的读或写序列进行的。

为了执行一个程序,它应该被映射到绝对地址并加载到内存中。内存管理方法的选择取决于几个因素。

然而,它主要是基于系统的硬件设计。每种算法都需要相应的硬件支持。主存储器提供快速存储,可由CPU直接访问。它的成本很高,因此存储容量较低。然而,对于一个程序的执行,它必须在主内存中。

操作系统为内存管理执行以下功能:

  • 它帮助你跟踪主内存。
  • 确定哪些部分被谁使用了,哪些部分没有被使用。
  • 在一个多程序的系统中,操作系统决定哪个进程将获得内存和多少。
  • 当进程请求时,分配内存。
  • 当进程不再需要或被终止时,它也会取消分配内存。

二级存储管理

计算机系统最重要的任务是执行程序。这些程序和数据一起,帮助你在执行过程中访问主存储器中的内容。

计算机的这个内存非常小,无法永久地存储所有的数据和程序。计算机系统提供二级存储来备份主内存。今天,现代计算机使用硬盘/SSD作为程序和数据的主要存储。然而,二级存储管理也适用于存储设备,如USB闪存驱动器,以及CD/DVD驱动器。

像汇编程序、编译器这样的程序,存储在磁盘上,直到它被加载到内存中,然后将磁盘作为处理的源头和目的地。

操作系统中二级存储管理的功能:

  • 存储分配
  • 空闲空间管理
  • 磁盘调度

安全管理

操作系统中的各种进程需要确保彼此的活动不受影响。为此,可以使用各种机制来确保那些想要操作文件、内存CPU和其他硬件资源的进程应该得到操作系统的适当授权。

例如,内存寻址硬件帮助你确认一个进程可以在它自己的地址空间内执行。时间确保任何进程在没有放弃CPU的控制权的情况下,都不能对其进行控制。

最后,不允许任何进程做自己的I/O,以保护,这有助于你保持各种外围设备的完整性。

其他重要活动

这里,是操作系统的一些其他重要活动:文章来源地址https://www.toymoban.com/news/detail-467354.html

  • 用户的程序不能直接执行I/O操作。操作系统应该提供一些媒介来执行这些操作。
  • 操作系统检查程序读取、写入、创建和删除文件的能力。
  • 操作系统促进了在同一或不同系统上执行的进程之间的信息交流。
  • 操作系统组件帮助你确保通过检测CPU和内存硬件的错误来获得正确的计算。

到了这里,关于操作系统教程1简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网实时操作系统1RTOS简介(上)

    在大型计算机的世界里,操作系统(OS operating systems)已经存在了相当长的一段时间。最基本的操作系统可以追溯到20世纪50年代。到20世纪70年代中期,操作系统的概念、结构、功能和界面已经非常成熟。 微型系统大约在 1970年出现。在基于微处理器的设备中迅速应用操作系统

    2024年02月16日
    浏览(56)
  • Linux操作系统安装Nodejs配置淘宝加速教程教程

    从https://nodejs.cn/download/下载所需软件包,也可以复制链接地址在Linux终端中使用 wget 命令下载,X86设备使用**Linux 二进制文件 (x64)**版本 使用wget命令下载node二进制文件包并解压到 /usr/local/ 目录中 个人建议把解压之后的文件夹重命名一下,太长了不太方便。。 编辑 /etc/profil

    2024年02月13日
    浏览(52)
  • Linux操作系统基础教程 第一章 绪论

    第一章 绪论 一、 Unix 家族中的一员 ① UNIX , 1971 年由 ATT 发布, 73 年重写, 70 年代末, ATT 成立了 Unix 系统实验室( Unix System Lab , USL ),宣布对 Unix 产品拥有所有权, 1983 年发布了 SYSTEM V 。在 UNIX7 之前, UNIX 是免费或收取少量费 用开放源码的。 UNIX 的研发诞生了 C 语言

    2024年02月04日
    浏览(60)
  • Sealos 云操作系统私有化部署教程

    Sealos 私有云已经正式发布了,它为企业用云提供了一种革命性的新方案。Sealos 的核心优势在于,它允许企业 在自己的机房中一键构建一个功能与 Sealos 公有云完全相同的私有云 。这意味着企业可以在自己的控制和安全范围内,享受到公有云所提供的灵活性和扩展性。这对于

    2024年02月05日
    浏览(66)
  • Linux网络操作系统项目实用教程题目汇总

    目录 单选汇总 项目一 认识Linux网络操作系统与安装 (1)简述 Linux 的版本以及特性? (2)如何安装 Centos 7 操作系统? (3)用户如何进行图形化与文本模式登录、重启、关机与注销?“ (4)如何进行终端界面切换? 项目二 Linux基础操作命令-使用Shell命令 (1)什么是Shell?它的功能是

    2024年02月11日
    浏览(40)
  • 1-Linux操作系统 的介绍和安装教程

    一、Linux 的介绍 1)常见的操作系统 Windows,它微软公司开发的一款桌面操作系统(闭源系统)。版本有dos、win98、win NT、win XP、win 7、win vista、win 8、win 10。服务器操作系统:win server 2003、win server 2008、win server 2012。 Mac,苹果公司开发的一款操作系统(闭源系统),目前最新

    2024年02月08日
    浏览(46)
  • Stable Diffusion WebUI 各操作系统安装教程

    最近几天在 2 台 Mac、2 台 PC、一台云无 GPU 的 Linux 安装了 Stable Diffusion WebUI,这里记录下如何安装,以及一些注意点和坑。 以下内容针对 Windows(N 卡)、MacOS(m 系列芯片)、Linux(Ubuntu、无 GPU)。 Windows 安装算是比较简单的,首先直接到 https://www.python.org/downloads/release/pyth

    2024年02月08日
    浏览(40)
  • 在不同操作系统上安装Python的详细教程

    打开Python官方网站(https://www.python.org/downloads/)并下载最新版本的Python。 选择适合您操作系统的版本。如果您使用的是64位的Windows系统,请下载64位版本。如果您不确定自己的系统是32位还是64位,请按下Win+R键,在运行对话框中输入cmd,然后按下回车键。输入systeminfo命令并按

    2023年04月08日
    浏览(36)
  • 【Linux操作系统安装配置GO环境的详细教程】

    Go官方环境地址 官方建议放在 /home/go 下,创建三个目录:bin(编译后可的执行文件的存放路径)、pkg(编译包时,生成的.a文件的存放路径)、src(源码路径,一般我们的工程就创建在src下面) 编辑文件 文件最下方添加如下的配置: 出现的问题:bash: /usr/local/jdk/bin/java: /lib/l

    2023年04月15日
    浏览(56)
  • 物联网操作系统Zephyr入门教程4调度(scheduling)

    调度器决定哪个线程被允许在任何时间点上执行;这个线程被称为当前线程。 在不同的时间点有机会改变当前线程的身份。这些点被称为重新安排点。一些潜在的重排点是: 从运行状态过渡到暂停或等待状态,例如通过k_sem_take()或k_sleep()。 过渡到准备状态,例如通过k_sem_

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包