
Linux系统篇
文章平均质量分 94
Linux系统篇
c无序
励志成为一名云原生大佬.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux-多线程】-线程安全单例模式+可重入vs线程安全+死锁等
单例模式是一种“经典的,常用的,常考的”设计模式IT行业这么火,涌入的人很多.俗话说林子大了啥鸟都有。大佬和菜鸡们两极分化的越来越严重,为了让菜鸡们不太拖大佬的后腿,于是大佬们针对一些经典的常见的场景,给定了一些对应的解决方案,这个就是设计模式。原创 2025-01-10 15:05:23 · 1353 阅读 · 0 评论 -
【Linux系统-加餐】读者写者问题与读写锁+自旋锁
自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即进入休眠状态等待锁的释放。这种机制减少了线程切换的开销,适用于短时间内锁的竞争情况。但是不合理的使用,可能会造成CPU的浪费。原创 2025-01-12 12:08:08 · 833 阅读 · 0 评论 -
【Linux-多线程】基础知识回顾+日志的实现+线程池代码实现
枚举类型用于定义一组具有特定名字的整型常量。这些常量通常代表一组相关的选项或状态。◉。原创 2025-01-07 06:00:00 · 1057 阅读 · 0 评论 -
【Linux-多线程】POSIX信号量-基于环形队列生产消费模型
POSIX信号量和System V信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源的目的。:未命名信号量通常用于同一进程内的线程同步,因为它们没有名字,只能通过传递它们在内存中的地址来进行共享。在消费者这里:需要P(space_sem) (--数据资源) V(space_sem)(++空间资源)如果信号量的值为0,则调用线程会被阻塞,直到信号量变为正值。:命名信号量可以在多个进程之间共享,因为它们通过一个名字来标识,这个名字在文件系统中可见。:尝试等待信号量,如果信号量的值为0,则立即返回。原创 2025-01-05 06:30:00 · 840 阅读 · 0 评论 -
【Linux-多线程】生产消费模型
来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。但是我们也知道,供应商不止一家,消费者也不止一个,这样一家供应商倒闭,不影响超市能不能进货,一个消费者不购买产品,也不影响超市出售。◉ 三种关系(生产和生产,消费和消费,生产和消费)其中生产和生产,消费和消费的关系是互斥的,生产和消费的关系即是互斥又是同步。有了超市,当没有用户购买的时候,不影响生产者生产;原创 2025-01-03 06:00:00 · 686 阅读 · 0 评论 -
【Linux-多线程】线程同步
到午饭时间了,张三要去吃午饭,准备把钥匙挂在墙上,张三后面又想,等我再次过来的时候,我就要排到最后一个队伍了,正准备将钥匙挂在墙上,后面又拿回去,再进自习室学一会,在自习室里面又饿的不行,又把钥匙放回门口,后面又立马拿回来进自习室反反复复,张三由于饥饿,来回在自习室与门口挣扎,在自习室里也没有干什么,造成了时间浪费,也让后面的人着急。如果没有规则,那么会造成A同学不停的拿苹果,无论在与不在,B呢想放就放,不想放就一直不放,但是A确傻傻的一直去拿,浪费时间,占用资源效率低;在线程场景下,这种问题也不难理解。原创 2025-01-01 00:30:00 · 2167 阅读 · 0 评论 -
【Linux-多线程】线程互斥(锁和它的接口等)
注意,原创 2024-12-31 23:30:00 · 1131 阅读 · 0 评论 -
【Linux-多线程】封装线程 + tid + 理解库
通常指的是线程 ID,这是由 pthread 库提供的,并且对于每个线程来说是唯一的。支持有限,或者需要特定的编译器标志来启用TLS。其实每个线程都有自己独立的栈,本质上每个线程在自己控制块内部给自己开辟一段大小合适的内存空间,那么这个空间作为我们新线程的栈,此时彼此之间相互独立。线程局部存储是一种机制,允许每个线程都有自己的变量副本,即使这些变量在多个线程中是共享的。具有线程局部性,但它仍然具有全局作用域,这意味着你可以在函数外部声明它,并在任何函数内部通过简单的变量名引用它,无需使用任何特殊的限定符。原创 2024-12-13 06:00:00 · 1527 阅读 · 0 评论 -
【Linux-多线程】线程控制
有一天你与父母吵架了,你呢要闹独立,和爸爸妈妈说:“以后你们不用管我了”,但是你回头一想,我呢还在上学,我这样独立那不就完蛋了吗?没有吃的住的,以后娶老婆可怎么办呀?刚好你爸爸妈妈也担心这个,于是你爸爸说:“这样吧,我们还住在一个屋檐下,我们分个厨房卧室厕所给你,你以后的事我就不管了;这就是你与爸爸妈妈分离了,但是你们还在一个屋檐下,互相不管了;于是你爸爸妈妈以后不用放学等你吃饭了,晚上等你睡觉了。原创 2024-12-12 06:00:00 · 907 阅读 · 0 评论 -
【Linux-多线程】-线程的概念+Linux下的线程与进程
一个处理器每个时刻可以跑一个进程,但由于线程的存在,一个进程中会包含多个线程,即多个执行流。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不同的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出。原创 2024-12-04 06:00:00 · 828 阅读 · 0 评论 -
【Linux-多线程】重谈地址空间+内存管理方式
利用逻辑地址中的外层页号P1作为外层页表的索引,从中找到指定页表分页的始址,利用 P2 作为指定页表分页的索引,找到指定的页表项,其中即含有该页在内存的物理块号P,该块号 P 和页内地址 d 即可构成访问的内存物理地址。对于要求连续的内存空间来存放页表的问题,可利用将页表进行分页,并离散地将各个页面分别存放在不同的物理块中的办法来加以解决,同样也要为离散分配的页表再建立一张页表,称为外层页表,在每个页表项中记录了页表页面的物理块号。我们之前已经说过,CPU内部见的地址,以及我们打印出来的地址都是虚拟地址;原创 2024-12-01 06:00:00 · 1654 阅读 · 0 评论 -
【Linux-进程信号】可重入函数+volatile关键字+SIGCHLD信号+重谈系统调用
main函数调用insert函数向一个链表head中插入节点A,插入操作分为两步,刚做完第一步的时候,因为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换到sighandler函数,sighandler也调用insert函数向同一个链表head中插入节点B,插入操作的 两步都做完之后从sighandler返回内核态,再次回到用户态就从main函数调用的insert函数中继续 往下执行,先前做第一步之后被打断,现在继续做完第二步。采用第一种方式,父进程阻塞了就不能处理自己的工作了;原创 2024-11-30 10:03:56 · 1066 阅读 · 0 评论 -
【Linux-进程信号】详谈信号捕捉
在中断处理完毕后要返回用户态的main函数之前检测到有信号SIGQUIT递达,内核决定返回用户态后不是恢复main函数的上下文继续执行,而是执行SigHandler函数,SigHandler函数使用户态的堆栈空间,它们之间不存在调用和被调用的关系,是两个独立的控制流程。当某个信号的处理函数被调用时,内核自动将当前信号加入进程的信号屏蔽字,当信号处理函数返回时自动恢复原来的信号屏蔽字,这样就保证了在处理某个信号时,如果这种信号再次产生.,那么它会被阻塞到当前处理结束为止。:指向信号处理函数的指针。原创 2024-11-19 11:28:31 · 1228 阅读 · 0 评论 -
【Linux-进程信号】信号阻塞
由于上述的1到8号信号均被屏蔽,即使pending位图记录了它们,但在这些信号被解除屏蔽前,这些信号并不会被递达,故收到1到8号信号后,1到8号信号对应的pending位图比特位被置1。,这个类型可以表示每个信号的“有效”或”无效”状态,在阻塞信号集中“有效”和”无效"的含义是该信号是否被阻塞,而在未決信号集中“有效“和“无效”的含义是该信号是否处于未决状态。系统中的信号是发给进程的,对于进程来说,信号是发给PCB的,PCB通过位图结构记录收到的信号,这样进程执行的时候就知道自己收到的是什么信号了。原创 2024-11-19 06:00:00 · 1062 阅读 · 0 评论 -
【Linux-进程信号】信号产生的5种方式 + CPU是如何知道运算是正常的还是异常的
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。如果在执行指令过程中发生了严重错误,例如,控制器出现问题,访问DRAM或SRAM时发生校验错等,则程序将无法继续执行,只好终止发生问题的进程,在有些严重的情况下,甚至要重启系统。◆ 管态:处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令。原创 2024-11-16 06:00:00 · 930 阅读 · 0 评论 -
【Linux-进程信号】信号入门介绍
进程可以通过设置信号处理函数,改变系统默认的处理方式。例如接收到SIGINT时,程序可以捕获信号并进行清理操作后再退出。原创 2024-11-13 06:00:00 · 1039 阅读 · 0 评论 -
【Linux-进程间通信】了解信号量 + 共享内存 + 消息队列的应用
信号量(Semaphore)是操作系统和并发编程中一种用于协调不同进程或线程对共享资源访问的同步机制。信号量的核心思想是通过计数的方式来控制资源的使用。它可以保证多个进程或线程不会在同一时间对同一共享资源进行访问,从而避免竞争条件(race condition)和资源冲突。原创 2024-11-10 06:00:00 · 1315 阅读 · 0 评论 -
【Linux-进程间通信】消息队列
消息队列的核心思想是将消息存储在一个有序队列中,发送进程将消息放入队列,接收进程从队列中读取消息。通过引入消息队列,模块A可以将消息放入队列,不需要知道B是如何处理的,B也可以独立地从队列中消费消息并处理。:消息中介(Broker)是负责管理消息的传递与存储的服务,它在生产者和消费者之间充当中间层,接收消息并确保它们被正确发送到目标消费者。消息队列允许生产者将消息发送到队列中,然后立即返回,由消费者在后台异步处理消息,极大提升了系统的响应速度。:通过msgrcv()从队列中读取消息,并指定需要的消息类型。原创 2024-11-07 06:00:00 · 1286 阅读 · 0 评论 -
【Linux-进程间通信】共享内存
ipcs是一个用于查看 POSIX 系统中进程间通信 (IPC) 资源信息的命令行工具。使用-m选项可以专门查看共享内存 (shared memory) 的相关信息。常用选项描述-m显示共享内存段的信息-q显示消息队列的信息(不与-m一起使用)-s显示信号量的信息(不与-m一起使用-t显示创建时间-p显示创建者的 PID-c显示核心映像的创建者-l显示更详细的列表字段含义key用于访问共享内存段的键值。这个键是由ftok。原创 2024-11-04 06:00:00 · 1875 阅读 · 0 评论 -
【Linux-进程间通信】匿名管道的应用-进程池实现+命名管道的应用Client&Server通信
为减少这种开销,可以采取预先创建一组子进程的策略(以避免在任务分配时进行即时创建),并在子进程空闲时让它们处于阻塞状态(以防止子进程完成任务后被立即终止,从而在下一次任务分配时无需重新创建进程)。所以,如果我们关闭一个文件描述符,仅仅只是关闭了父进程的一个,但子进程继承的写端都没有关闭;因为我们关闭是从上往下的,最后一个管道先释放,最后一个管道释放了,那么它曾经对应指向上一个写端也就自动关闭了,类似于递归,从上往下关,然后从下往上不断读到0的。的过程中我们是先把所有的管道关闭结束后,再进行等待;原创 2024-11-01 06:00:00 · 729 阅读 · 0 评论 -
【Linux-进程间通信】命名管道
为减少这种开销,可以采取预先创建一组子进程的策略(以避免在任务分配时进行即时创建),并在子进程空闲时让它们处于阻塞状态(以防止子进程完成任务后被立即终止,从而在下一次任务分配时无需重新创建进程)。所以,如果我们关闭一个文件描述符,仅仅只是关闭了父进程的一个,但子进程继承的写端都没有关闭;因为我们关闭是从上往下的,最后一个管道先释放,最后一个管道释放了,那么它曾经对应指向上一个写端也就自动关闭了,类似于递归,从上往下关,然后从下往上不断读到0的。的过程中我们是先把所有的管道关闭结束后,再进行等待;原创 2024-10-24 06:00:00 · 1701 阅读 · 0 评论 -
【Linux-进程间通信】匿名管道+4种情况+5种特征
观察到的现象就是,每隔5秒打印一次,也就是父进程读取要和子进程一致,子进程慢了,父进程就要读慢点,子进程写一条,父进程读一条;这意味着,写入端可能已经写入了多个字节,而读取端还没有开始读取,或者读取端已经读取了部分数据,而写入端还在继续写入。现象就是子进程写到第65536就一直卡在哪里,我们父进程一直在,但是不读,这里我们也就可以计算出管道文件的大小65536/1024 = 64kb,也就是。此外,一旦管道中的数据被读取,管道就会被关闭,不能再次使用。写入端写入的数据最终会被读取端读取,反之亦然。原创 2024-10-20 06:00:00 · 1500 阅读 · 0 评论 -
【Linux-进程间通信】vscode使用&&通信引入&&匿名管道引入
管道是Unix中最古老的进程间的通信形式我们把一个进程连接到另一个进程的一个数据流称为一个“管道”原创 2024-10-16 18:23:37 · 950 阅读 · 0 评论 -
【Linux-基础IO】软硬链接+动静态库
也就是我们可以通过cat软连接,就能够打印文件的内容,软连接也就类似于windows中的快捷键,比如桌面看到的软件保存的是其它的路径,在系统中可能你要运行的可执行程序在一个很深的目录下,就可以在较上层的目录中建立软链接。这意味着,对于硬连接文件,只有原始文件(即创建硬连接的文件)的inode会被删除或重命名,其他硬连接文件仍然有效。此时又报错了,这是因为我们指明了库的路径,但是没有指明是哪一个库,万一这里面有几百上千的库总不能让编译器一个一个去找吧,于是后面还需要加上是哪个库,加上-原创 2024-10-12 16:59:15 · 1091 阅读 · 0 评论 -
【Linux-基础IO】磁盘的存储管理详解
位置:引导块位于磁盘的最开始部分,通常是第一个扇区(Sector),也就是 Cylinder 0, Head 0, Sector 1(CHS地址)或逻辑块地址(LBA)0。大小:在传统的硬盘上,一个扇区通常是512字节,但现代硬盘可能使用4KB的扇区大小。功能:引导块包含了启动计算机所需的最基本的代码,这些代码负责加载操作系统的核心(Kernel)到内存中,并开始执行。内容:原创 2024-10-07 12:24:58 · 1410 阅读 · 0 评论 -
【Linux-基础IO】如何理解Linux下一切皆文件&&磁盘的介绍
如果某个进程需要访问外设,就会先创建一个struct file,该struct file中存储对于的opration_func,当某个进程需要操作该外设时,则只需要访问存储该外设的operation_func的struct file并找到它的对应方法,即可对外设做操作。很早以前的计算机的存储设备是磁盘,现在为了轻便,大部分计算机采用固态硬盘(SSD)替代了磁盘,我们这里只讨论磁盘;【示例】假设有一个磁盘,它的每个盘面有50个磁道,每个磁道有400个扇区(即每个盘面有20,000个扇区)。原创 2024-09-30 10:19:51 · 1375 阅读 · 0 评论 -
【Linux-基础IO】文件描述符&&重定向原理&&缓冲区
但printf等是stdout对应的缓冲区是用户级别的缓冲区,用户级别是全缓冲,此时缓冲区没有写满,不会加载到操作系统内核,而调用fork()后,进程结束时,父子进程会都把缓冲区刷新一遍,刷新就是读取,就是写时拷贝,所以出现了父进程打印一遍内容,子进程打印一遍内容。时,实际上是将标准错误输出重定向到文件描述符 1,即先将标准错误输出重定向到标准输出,然后再将标准输出重定向到指定的文件。如果标准错误被重定向,而标准输出没有,那么标准输出仍然会默认输出到显示器(如果之前没有重定向过)。原创 2024-09-25 06:00:00 · 1757 阅读 · 0 评论 -
【Linux-基础IO】C语言文件接口回顾 && 系统文件概念及接口
当我们没有指明文件路径,open一个文件时,则open将在当前路径下创建文件那为什么会这个样子呢?sleep(200);return 0;当程序运行起来后,我们可以使用查看运行该程序的进程pid,进入/proc/进程pid目录,可以看到两个链接文件cwd和exe。其中,cwd是程序的工作路径,也就是我们常说的当前路径,而exe是可执行程序的保存位置。原创 2024-09-22 01:50:41 · 962 阅读 · 0 评论 -
【Linux进程控制】自主Shell
函数的行为会根据不同的操作系统和文件系统有所不同,但它通常用于更改进程的当前工作目录。更改当前工作目录后,所有相对路径的文件操作都将相对于新的工作目录进行。我们需要让父进程执行CD命令,我们打印的命令行是父进程打印的,如果子进程执行cd命令是无法进行路径切换的。环境变量是影响程序运行的外部参数,它们通常用于配置程序的行为。头文件中,它返回一个指向字符串的指针,该字符串包含了当前工作目录的绝对路径。会从上次替换的 null 字符之后开始查找,重复同样的过程。:指向用于存储当前工作目录路径的缓冲区的指针。原创 2024-09-21 18:37:57 · 815 阅读 · 0 评论 -
【Linux进程控制】进程程序替换
函数名参数格式PATH中可执行程序是否需要带绝对路径是否使用当前环境变量execl列表是是execlp列表不是是execle列表是不是,需自己组装环境变量execv数组是是execvp数组不是是execvpe数组不是不是,需自己组装环境变量execve数组是不是,需自己组装环境变量上面各个接口统称为加载器,它们为即将替换进来的可执行程序加载入参数列表、环境变量等信息。原创 2024-09-19 06:30:00 · 943 阅读 · 0 评论 -
【Linux进程控制】进程等待
张三在大学是个学渣,上课时间天天出去玩,以致于明天就要期末考试了,于是找到学霸李四,要求李四帮忙辅导一下。于是张三打电话告诉李四“李四,你帮我辅导一下明天操作系统期末考试呗,顺便请你吃个饭,就当报答你了”,李四一听,说“可以,但是你要先等我一小时,我先把计算机组成原理看完”,于是张三就来到李四家楼下,等待着李四。张三什么事也不做,就在干巴巴的等着,每过一分钟就给李四打电话,问李四好了没,直到李四说好了,下楼了,他才停止这种循环等待,其他事也不做,就在干巴巴等着等反馈,原创 2024-09-16 09:46:20 · 948 阅读 · 0 评论 -
【Linux进程控制】进程创建|终止
在操作系统中,对于程序正常终止我们并不关心(正常程序终止返回状态码0),但程序一旦出现错误(返回码非0),我们就需要知道程序出错的原因。对于其他进程,原内存页保持不变。新进程为子进程,原进程为父进程,其中返回值:子进程中返回0,父进程返回子进程id,出错返回-1;:尽管子进程是父进程的一个副本,但是它们之间还是有所区别的,例如,它们有不同的进程ID(PID)、不同的父进程ID(PPID)以及一些独立的资源,如虚拟内存等。之后,每个进程都会有自己的内存页副本,对其中一个进程的修改不会影响到另一个进程。原创 2024-09-15 12:59:44 · 1423 阅读 · 0 评论 -
【Linux进程概念】进程地址空间
同时,如果因为内存资源紧张,可能会将某个进程挂起,即将它的代码和数据先保存到磁盘中,待内存资源不紧张时再重新加载,但重新加载后的物理地址可能与之前的物理地址不再相同。我们在回到刚刚代码示例那里,当子进程修改g_val的值时,为了保证进程之间的独立性(也即是说,子进程的数值修改不应该影响父进程),此时就会发生写时拷贝,会给子进程的g_val开辟独立的物理地址空间,而不是与父进程共享同一块空间,通过观察我们发现,代码依旧共享同一块空间,只是数据区不同了而已。个不同的地址,也就是4GB;原创 2024-09-10 21:25:57 · 1312 阅读 · 0 评论 -
【Linux进程概念】命令行参数|环境变量
下面我们自定义一个命令cdd,这个命令允许用户带1个选项,如果这个选项是-a就输出“Hello,I am cdd”,-b选项就输出“cdd is cool”原创 2024-09-06 16:16:24 · 1253 阅读 · 0 评论 -
【Linux进程概念】进程优先级|进程切换
在操作系统中,进程优先级(Process Priority)是指操作系统对进程进行调度时所赋予的优先级值,用于决定进程何时获得处理器时间。进程优先级是一种实现多任务操作系统中任务调度的重要机制,它允许操作系统根据进程的重要性和紧迫性来分配处理器资源。原创 2024-09-06 16:02:38 · 1350 阅读 · 0 评论 -
【Linux进程概念】进程状态(RSDT 阻塞 僵尸 孤儿)
可是我们无法保证每次打印的时候,显示器的状态都是就绪的,因为程序是CPU跑的,CPU的运算速度要比显示器本身的速度要快的多,这种快慢人是无法感知的,所以进程在被调度的时候,要访问显示器的资源,因为资源要一直在显示器上打,所以大部分时间,我们的进程一直在等待我们的设备资源是否准备就绪。在这个让尸体原地待着的过程,,然后操作系统把A进程杀掉,但是此时B进程要给硬盘写入数据,硬盘需要去照顾B进程,导致A进程写入数据失败了,1GB的数据丢失了,如果这个数据是银行的转账记录,那么可能造成很大的影响。原创 2024-09-03 13:05:51 · 1199 阅读 · 0 评论 -
【Linux】倒计时|进度条|git|gdb的实现
缓冲区是提高系统数据读写效率的重要机制。理解和有效利用缓冲区及其刷新策略,可以显著提升程序性能和资源利用效率。原创 2024-08-30 09:57:39 · 1417 阅读 · 0 评论 -
【Linux进程概念】进程|进程的查看与管理|创建进程
❍ 课本概念:程序的一个执行实例,正在执行的程序等❍ 内核观点:担当分配系统资源(CPU时间,内存的实体)简单来说:进程 == PCB(进程控制块) + 进程对应的代码和数据;一个进程对应一个PCB操作系统对进程的管理,最终变成了对链表的增删查改。注意:可执行程序加载到内存不是进程,只是进程对应的代码和数据。原创 2024-08-27 09:54:07 · 1984 阅读 · 0 评论 -
【Linux】自动化构建工具makefile
◉ make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。◉ 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 。❍ Modify: 最近的内容修改时间,比如你修改了文件的内容,这个时间就会改变.原创 2024-08-24 10:51:09 · 847 阅读 · 0 评论 -
【Linux进程概念】冯诺依曼体系|操作系统概念
❍ 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。❍ 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由系统提供的接口,叫做系统调用。:内存的制造成本低于 CPU 寄存器,但性能却能满足大部分数据存储需求,从而实现性价比的优化。◉ 数据是要在计算机的体系结构中进行流动的,流动的过程中,进行数据的加工处理。原创 2024-08-21 15:14:59 · 1064 阅读 · 1 评论