Linux系统
文章平均质量分 90
熙曦Sakura
985大连理工大学计算机专业本科生,分享我的学习心得,欢迎大家批评指正
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Linux系统】进程间关系与守护进程
本文介绍了进程间关系与守护进程的相关概念,主要包括进程组、会话、控制终端和作业控制。进程组是一个或多个进程的集合,每个进程组有一个组长进程,其ID等于进程ID。会话是一个或多个进程组的集合,每个会话有一个会话ID。控制终端是用户通过终端登录系统后得到的Shell进程的终端,进程的标准输入、输出和错误都指向控制终端。作业控制涉及前台和后台作业的管理,用户可以通过命令将作业挂起或切回,并查看后台执行或挂起的作业状态。这些概念对于理解和管理UNIX系统中的进程和作业至关重要。原创 2025-05-11 15:38:32 · 1387 阅读 · 0 评论 -
【Linux系统】自旋锁
自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即进入休眠状态等待锁的释放。这种机制减少了线程切换的开销,适用于短时间内锁的竞争情况。但是不合理的使用,可能会造成 CPU 的浪费。原创 2025-05-06 19:01:09 · 591 阅读 · 0 评论 -
【Linux系统】读写锁
写者优先策略可以减少写者等待的时间,但可能会导致读者饥饿(即读者长时间无法获得读取权限),特别是当写者频繁到达时。这意味着当有读者正在读取时,新到达的读者会立即被允许进入,而写者会被阻塞。当写者请求写入权限时,系统会尽快地让写者获得机会,但会导致写者饥饿(即写者长时间无法获得写入权限),特别是当读者频繁到达时。在编写多线程的时候,有一种情况是十分常见的。读者写者问题是并发编程中的经典问题,主要研究多个进程或线程对共享数据进行读和写操作时如何实现同步和互斥,以保证数据的一致性和操作的正确性。原创 2025-05-06 18:09:15 · 515 阅读 · 0 评论 -
【Linux系统】线程安全
原因是,STL 的设计初衷是将性能挖掘到极致,而一旦涉及到加锁保证线程安全,会对性能造成巨大的影响。如果需要在多线程环境下使用,往往需要调用者自行保证线程安全。对于 shared_ptr,多个对象需要共用一个引用计数变量,所以会存在线程安全问题。对于 unique_ptr,由于只是在当前代码块范围内生效,因此不涉及线程安全问题。而且对于不同的容器,加锁方式的不同,性能可能也不同(例如hash表的锁表和锁桶)。不要被上面绕口令式的话语唬住,你只要仔细观察,其实对应概念说的都是一回事。原创 2025-05-06 15:55:12 · 1026 阅读 · 0 评论 -
【Linux系统】线程池
线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。中获取任务对象,获取到任务对象后,执行任务对象中的任务接口。此处,我们选择固定线程个数的线程池。a. 创建固定数量线程池,循环从。b. 浮动线程池,其他同上。原创 2025-05-05 19:28:25 · 426 阅读 · 0 评论 -
【Linux系统】生产者消费者模型
生产者和消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。原创 2025-05-05 17:04:04 · 899 阅读 · 0 评论 -
【Linux系统】条件变量
条件变量是用来进行线程同步的特性,内部要维护调度队列。原创 2025-05-04 20:54:19 · 425 阅读 · 0 评论 -
【Linux系统】互斥量mutex
要做到这三点,本质上就是需要一把锁。Linux上提供的这把锁叫。线程在访问临界区代码时,可以切换至其他线程吗?锁本身就是一个全局变量,那谁来确保锁的安全?若申请锁的时候,都被别的线程拿走,怎么办?原创 2025-05-04 20:04:17 · 884 阅读 · 0 评论 -
【Linux系统】线程
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的一个控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。原创 2025-05-02 19:37:49 · 1194 阅读 · 0 评论 -
【Linux系统】进程间信号(捕捉信号)
系统调用也是通过中断完成的。原创 2025-05-02 14:49:09 · 823 阅读 · 0 评论 -
【Linux系统】Linux进程信号(产生,保存信号)
sigset_t类型对于每种信号用一个bit表示“有效”或“无效”状态,至于这个类型内部如何存储这些bit则依赖于系统实现,从使用者的角度是不必关心的,使用者只能调用以下函数来操作sigset_t变量,而不应该对它的内部数据做任何解释,比如用printf直接打印sigset_t变量是没有意义的。称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。原创 2025-05-01 16:32:20 · 1060 阅读 · 0 评论 -
【Linux系统】System V 信号量
System V信号量是Linux系统中一种重要的进程间通信(IPC)机制。主要用于协调各个进程对共享资源的访问,以避免竞争条件(多个进程同时访问和修改共享资源导致数据不一致的情况)。信号量本质上是一个非负整数计数器,用于记录可用资源的数量。进程在访问共享数据之前,需要对信号量进行操作,以获取对资源的访问权。原创 2025-05-01 12:25:57 · 331 阅读 · 0 评论 -
【Linux系统】System消息队列
在Linux系统中,System V消息队列是一种进程间通信(IPC)机制。它允许不同的进程通过发送和接收消息来进行通信,这种通信方式是的,消息是一个有类型的数据块,进程可以。消息队列提供了一种异步通信的方式,发送进程将消息发送到消息队列后可继续执行,而接收进程可以在合适的时候从消息队列中获取消息。原创 2025-05-01 12:07:57 · 451 阅读 · 0 评论 -
【Linux系统】systemV共享内存
在Linux系统中,共享内存是一种高效的进程间通信(IPC)机制,它允许两个或者多个进程共享同一块,这些进程可以将这块区域映射到自己的虚拟地址空间中。共享内存区是最快的IPC形式。一旦这样的,这些进程间数据传递不再涉及到内核,换句话说进程不再通过执行进入内核的系统调用来传递彼此的数据。原创 2025-04-29 23:38:03 · 985 阅读 · 0 评论 -
【Linux系统】进程间通信(管道)
让各个进程看到同一份资源。原创 2025-04-28 16:34:17 · 661 阅读 · 0 评论 -
【Linux系统】ELF文件
静态链接的出现,提高了程序的模块化水平。对于一个大的项目,不同的人可以独立地测试和开发自己的模块。通过静态链接,生成最终的可执行文件。我们知道静态链接会将编译产生的所有目标文件,和用到的各种库合并成一个独立的可执行文件,其中我们会去修正模块间函数的跳转地址,也被叫做编译重定位(也叫做静态重定位)。而动态链接实际上将链接的整个过程推迟到了程序加载的时候。原创 2025-04-27 15:38:24 · 1080 阅读 · 0 评论 -
【Linux系统】静态库与动态库
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。预备工作1024012。原创 2025-04-27 12:55:42 · 610 阅读 · 0 评论 -
【Linux系统】Ext系列文件系统
在Linux内核中,fs_struct作用它记录了进程当前工作目录(current working directory)和根目录(root directory)的信息。通过这些信息,内核能够确定进程在文件系统中的位置,使得进程在执行文件操作(如打开、创建文件等)时,能准确找到相应文件路径。关键成员root:指向进程根目录对应的vfsmount和dentry结构体。vfsmount用于描述文件系统的挂载信息,dentry用于表示目录项。原创 2025-04-26 20:07:19 · 905 阅读 · 0 评论 -
【Linux系统】IO
openman openpathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR: 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT: 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写返回值成功: 新打开的文件描述符失败: -1mode_t理解: 当使用。原创 2025-04-26 16:34:07 · 922 阅读 · 0 评论 -
【Linux系统】进程程序替换
创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。头文件中,作用是用磁盘上的新程序替换当前进程的用户空间代码和数据,并从新程序的启动例程开始执行。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。程序替换是通过特定的接口,加载磁盘上的一个全新的程序(代码和数据),加载到调用进程的地址空间中!然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序并等待这个进程结束。原创 2025-04-19 20:21:04 · 987 阅读 · 0 评论 -
【Linux系统】进程控制
执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当做exit的参数。**当一个进程调用fork之后,就有两个二进制代码相同的进程。写时拷贝,是一种延时申请技术,可以提高整机内存的使用率。所以,fork之前父进程独立执行,fork之后,父子两个执行流分别执行。在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以。原创 2025-04-15 17:32:08 · 635 阅读 · 0 评论 -
【Linux系统】进程地址空间
在终端输入一个命令时,系统会。原创 2025-04-15 15:00:31 · 780 阅读 · 0 评论 -
【Linux系统】进程概念
fork函数的主要功能是创建一个新进程,该新进程被称作子进程,而调用fork函数的进程则是父进程。子进程基本是父进程的副本,会复制父进程的大部分内容,像内存空间、文件描述符等。在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本环境变量称之为进程调度O(1)算法。原创 2025-04-14 16:44:14 · 1057 阅读 · 0 评论 -
【Linux】基础开发工具
在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便地获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器,就好比“App”和“应用商店”这样的关系。yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器。主要应用在Fedora、RedHat、Centos等发行版上。原创 2025-04-13 20:03:44 · 1135 阅读 · 0 评论 -
【Linux】Linux基础指令
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux 只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于 Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。使计算机更好用!这是操作系统的根本要义!!。原创 2025-04-12 16:11:44 · 1063 阅读 · 0 评论
分享