Linux系统编程
文章平均质量分 92
系统编程
凤 曦
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux系统:生产消费模型 & 读者写者模型
当不满足条件,或者线程被唤醒,此时就可以_blockQueue.push(in)来投放任务了,当投放完任务,此时通过pthread_cond_signal(&_consum_cond)唤醒一个消费者来执行任务。以上代码中, pthread_mutex_lock(&_mutex)先加锁,随后while语句判断当前阻塞队列是否满,如果满了就执行pthread_cond_wait(&_product_cond, &_mutex)去阻塞等待。是空闲的,它们却不能执行这个任务,这就出现了很明显的资源分配不合理问题。转载 2024-09-08 21:40:45 · 1166 阅读 · 0 评论 -
Linux系统:线程池(重要)
时,已经不算访问临界资源了,而调度函数的时间可能很长,此时先把锁释放掉,让其他线程拿任务,而不是自己执行完任务后才让别的线程拿任务,这样和单线程就没有区别了。目前为止我们还没有真正创建一个线程,而是通过类成员保存了线程的相关信息,那么我们就要通过这些线程的相关信息,来创建线程了。毫无疑问的是:只有任务队列里面有任务时,线程才能去任务队列中拿任务。线程池内部维护多个线程和一个任务队列,主线程往任务队列中放任务,线程池内部的线程则执行任务队列中的任务。我们的任务是:主线程往队列放任务,其它线程从队列拿任务。转载 2024-09-08 19:23:17 · 922 阅读 · 0 评论 -
Linux系统:线程同步
线程在占用锁的时候,是不受控制的,这就有可能导致一个竞争能力强的线程,从头到尾都占用一个锁。因为在进入等待队列前,线程是持有锁的状态,此处传入锁的指针,就是为了帮助这个线程释放该锁,从而让其他线程也可以申请锁,进入等待队列。此时所有被唤醒的线程再次竞争同一把锁,竞争到锁的线程才访问临界资源。当前一个线程访问完毕后,剩下的线程继续竞争,再访问临界资源。用于指明一个条件变量,说明要唤醒哪一个条件变量下等待的线程。用于指明一个条件变量,说明要唤醒哪一个条件变量下等待的线程。,这三个线程争夺一个临界资源。原创 2024-09-08 18:16:06 · 884 阅读 · 0 评论 -
Linux系统:线程互斥
如图所示,现在有两个线程thread-1和thread-2,它们共同征用内存中的锁mutex。指的是在多线程环境中,多个线程访问同一个共享资源时,只允许一个线程访问,其他线程必须等待,直到当前线程访问完成才能继续访问。死锁:指在一组进程中的各个进程均占有不会释放的资源,但因互相申请其它进程不会释放的资源而处于的一种。当线程没有申请到锁,一段时间后再次检测这个锁有没有被释放,一直反复申请这个锁,这个过程叫做。这一种锁,还有非常多的锁,接下来我们看看其它的锁。,谁就先抢到锁,而是谁先执行该函数内部的。原创 2024-09-08 17:07:18 · 1397 阅读 · 0 评论 -
Linux系统:线程概念和线程控制
而且从上方的struct page源码中可以发现,它是不存储页框的起始地址和终止地址的,因为可以通过下标计算出起始地址,起始地址 + 4kb就可以求出终止地址。可以看到,确实是有两个叫做test.exe的线程的,它们的PID都是141776,但是它们的LWP不同。另外的,你会发现第一个线程的PID = LWP = 141776,说明这个线程是主线程,其余的所有线程都是这个主线程创造的。在CPU调度进程的时候,本质是在调度进程的PCB,把进程的PCB放到运行队列中,然后CPU依次执行队列中的进程。原创 2024-09-08 16:06:12 · 978 阅读 · 0 评论 -
Linux系统:信号的阻塞与捕捉
此处我们用(2) SIGINT做检测,先通过sigaddset(&set, 2)把set中的第二位变为1,随后通过sigprocmask(SIG_BLOCK, &set, nullptr)将set添加到block中,由于我们并不想知道旧的block是什么样,所以第三个参数设为nullptr。,获取当前的block,存到block_set中。此处要注意,第一次old_set提取到的,不是设置后的block而是设置前的block,也就是说现在old_set拿到的是block的默认值。从宏观上看,你可以理解为。原创 2024-07-15 19:38:49 · 851 阅读 · 0 评论 -
Linux系统:信号的概念与产生
CPU 接收这个信号后,会暂停当前执行的任务,转而去处理硬件设备的请求。由于现在的操作系统基本都是分时操作系统,因此实时信号其实是不符合设计理念的,几乎用不到实时信号,本博客只讲解。在handler中,会先输出get sig: 2,表示自己收到了信号,然后exit退出进程。进程中,而被终止的进程,是在前台运行的另外一个进程。来终止一个前台运行的进程,其实这就是一个发送信号的行为。信号,本质也是硬件中断,当我们从键盘输入了数据后,键盘向。通过键盘发送信号是最简单的信号发送方式,最常用的有。原创 2024-07-14 23:50:43 · 1140 阅读 · 0 评论 -
Linux系统:System V IPC
共享内存 shm消息队列 msg信号量 semSystem V。原创 2024-07-14 22:43:48 · 921 阅读 · 0 评论 -
Linux系统:管道
进程间通信的目的,是为了让两个进程看到同一份资源,在Linux中,主要的进程间通信有管道system VPOSIX,本博客讲解管道。原创 2024-07-14 20:47:27 · 889 阅读 · 0 评论 -
Linux系统:基础IO
ELF格式的可执行程序,二进制是有自己的固定格式的(elf可执行程序的头部,可执行程序的属性)原创 2024-04-20 23:59:45 · 942 阅读 · 1 评论 -
Linux系统:进程控制
WNOHANG: 若 pid 指定的子进程没有结束,则 waitpid() 函数返回 0 ,不予以等待。然后 shell 读取新的一行输入,建立一个新的进程,在这个进程中运行程序 并等待这个进程束。options==WNOHANG,非阻塞等待:对子进程进行检测,子进程没退出,直接返回0。参数: status 定义了进程的终止状态,父进程通过 wait 来获取该值。参数:status 定义了进程的终止状态,父进程通过wait来获取该值。当正常返回的时候 waitpid 返回收集到的子进程的进程 ID;原创 2024-04-20 20:19:46 · 2327 阅读 · 0 评论 -
Linux系统:进程概念认识
进程的信息可以通过 /proc 系统文件夹查看进程id(PID) 父进程id(PPID) 通过系统调用创建进程 -fork 初识进程状态cpu资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利.配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能查看系统进程用 top 命令更改已存在进程的 nice :原创 2024-03-25 11:19:20 · 987 阅读 · 0 评论 -
Linux系统: GDB 调试工具
使用 i b 或者 info b 对 断点进行查看,且需要注意的是,如图上图所示,在每一个断点的最前端,都有一个编号,这个编号一但被某个断点占用,那么其他断点就不会使用这个编号!使用 n 或者 next 进行调试的逐过程,相当于VS中的F10进行代码的调试,使用的步骤是先使用 r 命令 进入运行阶段后,因为断点的原因,在使用n 进行代码的调试。它可以帮助开发人员定位和修复程序中的错误。进入 gdb 的工作模式后,可以使用命令 quit 或者 q 即可退出gdb 的工作模式,也就是退出调试。原创 2024-02-27 23:20:59 · 836 阅读 · 0 评论 -
Linux系统:进度条的实现
在创建进度条之前,首先要明白两个工具,fflush和\r。原创 2024-02-27 23:00:17 · 1013 阅读 · 0 评论 -
Linux系统:Makefile的相关知识
左侧是变量名,右侧是变量的内容,也就说变量的值,同时可以用变量名代替替换的内容可以在依赖方法前加上@就可以在使用make时不显示依赖方法。原创 2024-02-27 22:37:36 · 891 阅读 · 0 评论 -
Linux系统:gcc的基本知识
链接是库和程序的结合,当一个语言被发明的时候是有一套标准的,而这个库也就表示着语言的标准库。当然,库也分类,在Linux中分为两种,第一种是动态库,通常以.so为后缀,且链接一般默认使用的库就是动态库,而另一种是静态库,是以.a为后缀的,并且在Linux中默认是没有静态库的存在,所以需要自己安装。原创 2024-02-24 21:32:15 · 2070 阅读 · 0 评论 -
Linux系统:vim的相关知识
配置文件的位置 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。当然,对于vim的配置,建议是每一个用户都在自己的用户目录下建立一个.vimarc的文件,进行属于自己的vim的配置而进行配置也十分的简单,在用户目录下建立好.vimrc文件后,直接使用vim 进入该文件,随后在文件中输入vim配置的常用命令。例如:设置语法高亮: syntax on。原创 2024-02-24 21:14:58 · 866 阅读 · 0 评论 -
Linux系统:权限
当文件的拥有者和所属组是同一个时,这就会产生一共疑问,我是拥有者,但拥有者没有这些权限,但我也是所属组,所属组有这些权限,但为什么还是不能使用这些权限呢?必要参数,下面参数是tar运行时必须要有的,有且仅有一个。在了解Linux的权限之前,我们需要知道Linux的构成,Linux分为三个部分,内核、外部程序、以及用户。权限 = 角色 + 事物的属性,而角色则是使用操作系统的用户,而事物的属性则是文件的权限和功能。,外部程序通常是使用一种子进程来进行传达用户输入的指令的,这是外部程序的一种保护自我的机制。原创 2024-02-24 20:43:11 · 2141 阅读 · 0 评论 -
Linux系统:文件操作
linux的理念在linux中的一切皆为文件!!!在上一篇博客中提到过,Linux中的桌面本质上也是一种文件,而现在,在本篇博客中要对这种理念进行进一步的提升,也就是在Linux系统中的一切皆为文件!这些文件中最为典型也是最经常使用的就是系统的显示器部分。换一句话来说,一、echoecho "字符串"原创 2024-02-15 10:50:03 · 1283 阅读 · 1 评论 -
Linux系统:指令小记(二)
1. mv剪切功能:mv [文件/目录] [剪切到的路径]如图,将 long.txt 文件 剪切到它的上一级目录中剪切并重命名:mv [文件/目录] [剪切到的路径] / [新名字]如图,将long.txt文件剪切到它的上一级目录中,并且进行重命名为111.txt记事本:nanonano是一个记事本,可以用来进行编辑,摁下ctrl+x,弹出询问,摁下y进行保存编辑内容,摁下n进行不保存编辑内容,最后回车退出nano的编辑状态cp [文件路径] [拷贝到的路径]原创 2024-02-13 21:24:01 · 359 阅读 · 1 评论 -
Linux系统:指令小记(一)
F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;-a 或--time=atime或--time=access或--time=use只更改存取时间。功能:touch命令参数可更改文档或目录的日期时间,存取时间和更改时间,或者新建一个不存在的文件。-m 或--time=mtime或--time=modify 只更改变动时间。-d 将目录象文件一样显示,而不是显示其下的文件。-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。原创 2023-11-28 14:24:26 · 952 阅读 · 0 评论
分享