自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 MySQL知识点详解

MySQL1. 对数据库的常用操作查看所有的数据库show databases;创建数据create database [if not exists] mydatabase [charset=utf8];却换(选择要操作的数据库)use mydatabase;删除数据库drop database [if exists] mydatabase;修改数据库编码alter database mydatabase character set utf8’2.

2022-01-05 17:07:12 2499 1

原创 Redis知识点详解

NoSQL问题现象海量用户高平发关系型数据库性能瓶颈:磁盘IO性能低下扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群解决思路降低磁盘IO次数,越低越好 —— 内存存储去除数据间关系,越简单越好 —— 不存储关系,仅存储数据NosqlNoSQL:即Not-Only-SQL(泛指沸关系型数据库),作为关系型数据库的补充。作用:应对基于海量用户和数据前提下的数据处理问题。特征:可扩容,可伸缩大数据量下高性能灵活的数据模型高可用解决方案(电商场景)1.商品基

2021-12-25 11:38:14 1632 3

原创 JVM知识点学习

什么是JVM定义:Java Virtual Machine -java 程序的运行环境(Java二进制字节码的运行环境)好处:一次编写 到处运行自动内存管理,垃圾回收功能数组下标越界检查多态比较:JVM JRE JDK[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cc6sPU80-1640008611699)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-2021121522

2021-12-20 21:59:22 1251 1

原创 请求分页管理方式

请求分页存储管理与基本分页存储管理的主要区别:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后在继续执行程序。这就要求操作系统提供请求调页功能,将缺失页面从外存调入内存。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存。这就要求操作系统提供页面置换功能,将咱暂时用不到的页面换出外存。页表机制与基本分页管理相比,请求分页管理中,为了实现"请求调页",操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外

2021-12-08 10:42:09 597 7

原创 虚拟内存的基本概念

传统存储管理方式的特征、缺点一次性:作业必须一次性全部装入内存后才能开始运行。这会造成两个问题:①作业很大时,不能全部装入内存,导致大作业无法运行;②当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降。驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。这些问题都可以用虚拟技术解决问题,而虚拟...

2021-12-08 09:09:27 810

原创 基本分段存储管理

与"分页"最大的区别就是——离散分配时所分配地址空间的基本单位不同分段进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程)。每段从0开始编址。内存分配规则:以段为单位进行分配,每个段在内存中占据连续空间,但各段之间可以不相邻。由于是按逻辑功能模块划分,用户编程更方便,程序的可读性更高。分段系统的逻辑地址结构由段号(段名)和段内地址(段内偏移量)所组成。如:段号的位数决定了每个进程最多可以分几个段段内地址位数决定了每..

2021-12-07 21:50:35 1417 1

原创 操作系统 :两级页表

单级页表存在的问题某计算机系统按字节寻址,支持32位的逻辑地址,采用分页存储管理,页面大小为4KB,页表项长度为4B.4KB =B,因此页内地址要用12位标识,剩余12位表示页号。因此,该系统中用户进程最多有页。相应的,一个进程的页表中,最多会有,共需要个页框存储该页表。根据页号查询页表的方法:K号页对应的页表项存放位置 = 页表始址 + K * 4要在所有的页表项都连续存放的基础上才能用这种方法找到页表项。根据局部性原理可知,很多时候,进程在一段时间内只需要访问某几个页面就可以...

2021-12-07 20:26:57 3946 2

原创 块表的地址变换机构

时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据结构在内存中都是连续存放的)在基本地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表。由于局部性原理,可能连续很多次查到的都是同一个页表项。既然如此,能否利用这个特性减少访问页表的次数呢?什么是块表(TLB)块表,又称联想..

2021-12-07 19:36:04 1036

原创 基本地址变换机构

基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F和页表长度M。进程未执行时,页表的起始地址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。注意:页面大小是2的整数幂设页面大小为L,逻辑地址A到物理地址E的变换过程如下:1.计算页号P和页内偏移量W(如果用十进制数手算。则P=A/L,W=A%L;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可

2021-12-07 17:24:39 234 1

原创 基本分页存储管理的基本概念

考虑支持多道程序的两种连续分配方式:1.固定分区分配分配缺乏灵活性,会产生大量的内部碎片,内存的利用率很低。2.动态分区分配会产出很多外部碎片,虽然可以用"紧凑"技术来处理,但是"紧凑"的时间代价很高。如果允许将一个进程分散地装入到许多不相邻的分区中,便可充分地利用内存,而无需再进行"紧凑"。基于这种思想,产生了"非连续分配方式",或者称为"离散分配方式"。连续分配:为用户进程分配的必须是一个连续的内存空间。非连续分配:为用户进程分配的可以是一些分散的内存空间。把"固

2021-12-07 16:27:37 1056

原创 动态分配算法

动态分配算法:在动态分区分配方式中,当有很多个空闲分区都能满足需求时,应该选择哪一个分区进行分配?首次适应算法算法思想每次都从低地址开始查找,找到第一个能满足大小的空闲分区。如何实现空闲分区以地址递增的次序排列。每次分配内存时顺序查找空闲分区链(或空闲分区表),找到大小能满足要求的第一个空闲分区。最佳适应算法算法思想由于动态分区是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当"大进程"到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即

2021-12-07 11:15:09 1286

原创 连续分配管理方式

连续分配:指为用户进程分配的必须是一个连续的内存空间。单一连续分配在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的PC操作系统MS-DOS)。缺点:只能用于单用户、单任务的操作系统;有内部碎片;存储器利用率极低。内部碎片:分配给某进程的内...

2021-12-07 10:28:11 658

原创 覆盖与交换

内存保护可采用两种方法方法一:在CPU中设置一对上、下限寄存器,存放进程的上、下限地址。进程的指令要访问某个地址时,CPU检查是否越界。方法二:采用重定位寄存器(又称基址寄存器)和界地址寄存器(又称限长寄存器)进行越界检查。重定位寄存器中存放的是进程的起始物理地址。界地址寄存器中存放的是进程的最大逻辑地址。覆盖技术早期的计算机内存很小,比如IBM推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。后来人们引入了覆盖技术,用来解决"程序大...

2021-12-07 09:11:04 246

原创 内存的基础知识

什么是内存?有何作用?内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。问题:在多道程序环境下,系统中会有多个程序并发执行,也就是说会有多个程序的数据需要同时放到内存中。那么,如何区分各个程序的数据是放在什么地方的呢?给内存的存储单元编地址几个常用的数量单位 (千) (兆,百万) ...

2021-12-06 22:08:29 1040

原创 死锁的处理策略——检测和解除

如果系统中即不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,系统应当提供两个算法:1.死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁。2.死锁解除算法:当认定系统中已经发生了死锁,利用该算法可将系统从死锁状态中解脱出来。死锁的检测为了能对系统是否已发生了死锁进行检测,必须1.用某种数据结构来保存资源的请求和分配信息;2.提供一种算法,利用上述信息来检测系统是否已进入死锁状态。如果系统中剩余的可用资源数足够满足进程的需求,那么...

2021-12-06 20:14:10 7518 4

原创 死锁的处理策略——避免死锁

什么是安全序列所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也就有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。如果系统处于安全状态,就一定不会发生死锁。如果系统进入了不安全状态,就可能发生死锁(处于不安全状态未必..

2021-12-06 17:00:25 2066

原创 死锁的处理策略——预防死锁

死锁的产生必须满足四个必要条件,只要其中一个或者几个条件不满足,死锁就不会发生。破坏互斥条件互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。如果把只能互斥使用的资源改造伪允许共享使用,则系统不会进入死锁状态。比如:SPOOLing技术。操作系统可以采用SPOOLing技术把独占设备在逻辑上改造成共享设备。比如:用SPOOLing技术将打印机改造为共享设备该策略的缺点:并不是所有的资源都可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时...

2021-12-06 10:25:27 431

原创 死锁的概念

什么是死锁每个人都占用一个资源,同时又在等待另一个人手里的资源,于是乎就发生了"死锁"。在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致进程都阻塞,都无法向前推进的现象,就是"死锁"。发生"死锁"后若无外力干啥,这些进程都将无法向前推进。死锁、饥饿、死循环的区别死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到...

2021-12-06 09:31:12 212

原创 管程Monitor

为什么要引入管程在引入管程之前,人们依靠信号量来实现进程的同步和互斥。但是信号量存在编写程序困难、易出错等问题。producer() { while(1) { 生产一个产品; P(mutex); 1 P(empty); 2 把产品放入缓冲区; V(mutex); V(full); }}consumer() { while(1) { ..

2021-12-05 20:49:03 494

原创 读者—写者问题

问题描述有读者和写着两组并发进程,共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。因此要求:1.允许多个读者可以同时对文件执行读操作;2.只允许一个写者往文件中写信息;3.任一写者在完成写操作之前不允许其他读者或写者工作;4.写者执行写操作前,应让已有的读者和写者全部退出。1.关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。2.整理思路。根据各进程

2021-12-05 17:05:19 690 1

原创 生产者—消费者问题

问题描述系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区取出一个产品并使用。(这里的"产品"理解为某种数据)生产者、消费者共享一个初始为空、大小为n的缓冲区。只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。只有缓冲去是临界资源,各进程必须互斥地访问。semaphore mutex = 1; //互斥信号量,实现对缓冲区的互斥访问semaphore empty = n; //同步信号量,表示空闲缓冲区的数量s

2021-12-05 12:06:42 342 1

原创 用信号量实现进程互斥、同步、前驱关系

信号量机制实现进程互斥1.分析并发进程的关键活动,划分临界区(如:对临界资源打印机的访问就应放在临界区)2.设置互斥信号量mutex,初值为13.在临界区之前执行P(mutex)4.在临界区之后执行V(mutex)注意:对不同的临界资源需要设置不同的互斥信号量P、V操作必须成对出现。缺失P(mutex)就不能保证临界资源的互斥访问。缺失V(mutex)会导致资源永不被释放,等待进程永不被唤醒。// 信号量机制实现互斥semphore mutex = 1; //.

2021-12-05 11:21:48 2789

原创 信号量机制

进程互斥的四种软件实现方式:单标志法、双标志先检查、双标志后检查、Peterson算法进程互斥的三种硬件实现方式:中断屏蔽方法、TS/TSL指令、Swap/XCHG指令1.双标志先检查法中,进入区的"检查"、"上锁"操作无法一气呵成,从而导致两个进程有可能同时进入临界区的问题;2.所有的解决方案都无法实现"让权等待";1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法 —— 信号量机制信号量机制用户进程可以通过使用操作系统提供的一对原语来对信号量..

2021-12-04 22:44:47 640 2

原创 进程互斥的硬件实现方法

中断屏蔽方法利用"开/关中断指令"实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问位置都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)优点:简单、高效缺点:不适用于多处理机;只适用于操作系统内核进程,不适合于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)TestAndSet指令简称TS指令,也有地方称为TestAndSetLock指令,或TSL指令TSL指令是用硬件实现的,执行的过程不允许..

2021-12-04 20:42:27 1295 1

原创 进程互斥的软件实现方法

进程互斥遵守的原则空闲让进:临界区空闲时,应允许一个进程访问。忙则等待:临界区正在被访问时,其他试图访问的进程需要等待。有限等待:要在有限时间内进入临界区,包装不会饥饿。让权等待:进不来临界区的进程,要释放处理机,防止忙等单标志法算法思想两个进程在访问完临界区后会把使用临界区的权限交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。int turn = 0; // turn 表示当前允许进入临界区的进程号P0进程:while(turn !=...

2021-12-04 18:59:13 755 1

原创 时间片轮转、优先级、多级反馈队列调度算法

Tips:各种调度算法的学习思路1.算法思想2.算法规则3.这种调度算法是用于 作业调度 还是 进程调度?4.抢占式?非抢占式?5.优点和缺点6.是否会导致饥饿(某进程/作业长期得不到服务)时间片轮转(RR,Round-Robin)算法思想公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。算法规则按照各进程到达就绪队列地顺序,轮流让各个进程执行一个时间片(比如 50ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放...

2021-12-04 12:14:44 2515

原创 FCFS、SJF、HRRN调度算法

Tips:各种调度算法的学习思路1.算法思想2.算法规则3.这种调度算法是用于 作业调度 还是 进程调度?4.抢占式?非抢占式?5.优点和缺点6.是否会导致饥饿(某进程/作业长期得不到服务)先来先服务(FCFS,First Come First Serve)短作业优先(SJF,Shortest Job First)高响应比优先算法(HRRN,Highest Response Ratio Next)注意这几种算法主要关心对用户的公平性、平均...

2021-12-04 10:45:54 500 1

原创 进程调度的时机、切换与过程、方式

进程调度的时机进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。临界区:访问临界资源的那段代码。内核程序临界区一般是用来访问某种内核数据结构的,比如进程的就绪队列(由各就绪进程的PCB组成)。进程调度的方式非剥夺调度方式,又称非抢占方式。即,只允许进程主动放弃处理机。在运行过程中即便有更紧急的任务到达,当前进程仍然会继续使用处理机,直到该进程终止或主动要求进入阻塞态...

2021-12-03 16:30:14 709

原创 处理机调度的概念、层次

处理机是计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。程序是描述处理机完成某项任务的指令序列。指令则是处理机能直接解释、执行的信息单位。处理机包括中央处理器(CPU),主存储器,输入---输出接口。处理机加接外围设备就构成完整的计算机系统。调度的基本概念当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是"调度"研究的问题。在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。.

2021-12-03 15:23:27 779

原创 线程的概念和多线程模型

什么是线程,为什么要引入线程举个例子我们一边听网易云音乐,一边翻着网易云的评论。进程是程序的一次执行。但这些功能显然不可能是由一个程序顺序处理就能实现的。有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。在没有引入线程之前引入线程之后可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,进程内的各线...

2021-12-03 10:39:49 142

原创 进程之间的通信

什么是进程通信顾名思义,进程通信就是指进程之间的信息交互。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立为了保证安全,一个进程不能直接访问另一个进程的地址空间...

2021-12-02 21:52:47 445

原创 进程的控制

什么是进程控制进程控制的主要功能是对操作系统中的所有进程实施有效的管理,它具有创建新的进程、撤销已有进程、实现进程状态转换等功能。简化理解:进程控制就是要实现进程状态转换。如图中箭头所标志的具体过程的。如何实现进程控制用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。原语采用“关中断指令”和“开中断指令”实现...

2021-12-02 17:19:51 413

原创 进程的状态与转换

进程的三种基本状态进程是程序的一次执行。在这个执行过程中,有时进程正在被CPU处理,有时又需要等待CPU服务,可见,进程的状态是会有各种变化。为了方便对各个进程的管理,操作系统需要将进程合理地划分为几种状态。另外两种状态操作系统需要完成创建进程。操作系统为该进程分配所需要的内存空间等系统资源,并为其创建、初始化PCB(如:为进程分配PID)进程运行结束(或者由于bug导致进程无法继续执行下去,比如数据越界错误),需要撤销进程。进程的转换注意:不能由...

2021-12-02 10:24:09 530

原创 进程的定义、组成、组织和特征

目录????进程的定义????进程的组成????进程的组织????进程的特征进程的定义程序的代码放在程序段内,程序运行过程处理的数据放在数据段内(如变量)系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放的位置)由程序段、数据段、进程控制块(Process Control Bloc)PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实体就简称为进程。例如创建进程,实质上是创建进程实体中的进程控制块PCB。

2021-12-01 22:53:01 1267

原创 计算机操作系统之系统调用

目录????什么是系统调用,有何作用?????系统调用与库函数的区别????系统调用背后的过程????总结我们将带着以下问题去学习什么是系统调用什么是系统调用,有何作用?操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。

2021-12-01 20:42:42 4114 4

原创 操作系统的运行机制、体系结构、内核

什么是指令简单来说,“指令”就是处理器(CPU)能识别、执行的最基本命令。比如:加法指令就是让CPU进行加法运算由于计算机只能识别二进制,一条高级语言的代码翻译过来可能对应多条指令。两种指令有的指令“人畜无害”,比如:加、减、乘、除这些普通的运算指令有的指令有很高的权限。比如:内存清零指令。如果用户程序可以使用这个指令,就意味着一个用户可以将其他用户的内存数据随意清零,这样做显然是很危险的特权指令:如内存清零指令(不允许用户程序使用)非特权指令:如普...

2021-12-01 11:55:24 412 2

原创 计算机操作系统的四个特征

操作系统的特征:并发共享虚拟异步并发和共享是两个最基本的特征,二者互为存在条件并发概念:并发是指两个或多个事件在同一时间间隔内发生。这些事件在宏观上是同时发生的,但在微观上是交替发生的。并行概念:指两个或多个事件在同一时刻同时发生,无论在微观还是宏观上都是同时发生的。举个例子并行就相当于我们一边敲着代码,一边听着歌,这两件事情在微观和宏观上都是同时发生的。并发就相当于我们敲一会代码,听一会歌,再敲一会代码......这样来回切换。只要来回切换的速度足够

2021-12-01 09:36:29 1089

原创 Linux执行MySQL命令出现: -bash: mysql: command not found

阿里云服务器自带MySQL但是在输入启动MySQL的命令后,却出现:[root@Hansap /]# mysql -uroot -p-bash:mysql:command not found解决办法:输入命令 :ln -s /usr/local/mysql/bin/mysql /usr/bin 就可以解决问题/usr/local/mysql/bin/mysql :为MySQL的完整路径可以通过 whereis mysql 命令查找出席问题的原因:CentOS 7...

2021-11-27 16:29:11 3179

原创 确认应答、Nagle算法和延时确认应答

确认应答TCP在传输数据的时候,每次接受方收到来自发送方的数据包后,接受方对都会发送一个确认应答(ACK)报文作为回应,发送方收到来自接受方的确认应答(ACK)报文,就表明发送的数据已经被对方收到。但是网络传输存在拥堵的情况,是很有可能出现"后来者居上"的情况,这个时候就不能只通过收到数据的顺序来的确定发送数据的情况。那有没有好的办法来解决这个问题? 通过序列号seq和确认序列号ack由于TCP是面向字节流传输的数据,所以序列号seq和确认序列号ack是以字节为单位进行编号的。针对每个字节分

2021-11-24 23:01:26 624 5

原创 Linux基础入门

Linux入门学习,基本Linux命令

2021-11-18 18:20:51 991 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除