![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 71
Linux专栏的内容大多是本人学习或者复习之后的笔记,代码是老师讲解的,大多数代码都是本人将老师讲解的代码再自己写一遍,然后发表出来。目的在于总结学过的知识,同时发表出来供大家学习
仟各
较劲
展开
-
关于死锁问题的基本概念总结
1、死锁产生的原因:是由进程请求和占有资源引起的2、死锁产生的必要条件:(1)互斥条件:指的是某一个临界资源只能被一个进程占有,如果其他进程想要使用该资源必须等待该临界资源被释放才能使用(2)请求和保持条件:指的是进程在请求其他资源的时候并不释放自身所拥有的资源(3)不可剥夺条件:指的是该进程自身所拥有的资源只能是程序用完之后进行释放,其他进程不可以剥夺该进程的资源,即使该进程此时可能并不运行(4)环路条件:一组进程{P1,P2……Pn}的资源占有情况与请求资源的情况构成了一个环形链原创 2022-04-17 19:46:16 · 759 阅读 · 0 评论 -
Linux线程学习笔记
1.线程的相关概念1.1线程的概念线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。1.2线程的实现方式Linux把所有的线程都当作进程来实现。线程有自己的进程描述符以及堆栈空间,只是与其他一些进程共享某些资源,比如:地址空间,数据段。所以线程的创建和普通进程类似。线程的实现方式有三种:①内核级线程②用户级线程③组合级线程1.3进程与线程的区别摘自:线程和进程的区别(面试必备)区别主要概括为四点:①内存空间层面:进程有独立的堆栈空间和数据段,启动新的进程就会分配原创 2022-02-10 21:33:37 · 836 阅读 · 0 评论 -
进程间通信
1.管道管道用来在两个进程之间传递数据。1.1有名管道有名管道可以在任意两个进程之间通信利用mkfifo + 文件名 来促使系统调用创建管道文件#include <sys/types.h>#include <sys/stat.h>//filename 是管道名 mode 是创建的文件访问权限int mkfifo(const char *filename, mode_t mode)**示例1:**进程 a 将从键盘获取的数据循环传递给另一个进程 b//a.c 从屏原创 2022-02-08 19:28:24 · 781 阅读 · 1 评论 -
Linux中信号的使用
1、信号的基本概念信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。2、修改信号的相应方式——signal()利用signal()可以将指定的信号修改为以下三种忽略信号:SIG_IGN默认处理:SIG_DFL自定义的:自己写的信号处理函数示例1:例如下面这段程序表明将SIGINT(键盘按下ctrl+c时,产生该信号)信号修改为自定义的fun处理函数#include<stdio.h>#include<stdlib.h>#include<un原创 2022-02-05 15:01:26 · 1484 阅读 · 0 评论 -
linux进程管理
——本篇文章参考《LINUX内核设计与实现 第三版》完成进程是正在执行的程序以及它所包含的资源的总称。这里的资源不仅包括代码,还包括:打开的文件、挂起的信号、内核内部数据、处理器状态、地址空间、一个或者多个执行线程、存放全局变量的数据段等其他资源。(需要注意:程序本身并不是进程,实际上可能存在两个或者多个不同的进程执行同一个程序)线程是进程中活动的对象,也是内核调度的对象。对于linux而言,线程是一种特殊的进程。1、进程描述符及任务结构进程存放在名为任务队列(task list)的双向循环链表原创 2022-02-02 14:58:33 · 1897 阅读 · 2 评论 -
编译和连接
编译和连接1、预编译2、编译2.1词法分析2.2语法分析2.3语义分析2.4中间代码2.5目标代码生成与优化3.汇编4、静态链接4.1基本概念4.2静态链接的基本过程和作用:摘自《程序员的自我修养》,有所改动—————————————————————————————————————————————————————————————在我们平时编译程序的时候,比如下面的代码,当我们在windows系统下使用编译软件,比如VS2022进行调试的时候,看似简单,我们只需要点击“本地windows调试器”,我们的原创 2022-01-28 15:51:12 · 1630 阅读 · 0 评论 -
Libevent库的介绍以及使用示例
Libevent是一个I/O框架库,具有如下特点:跨平台支持。统一事件源,Libevent对I/O事件,信号和定时事件提供统一的处理线程安全。Libevent使用libevent_pthreads库来提供线程安全支持。基于Reactor模式实现(即主线程负责事件的产生,其余线程负责对事件的处理)原创 2021-12-02 21:25:47 · 2314 阅读 · 1 评论 -
I_O复用(3)——epoll(ET模式,LT模式)
文章目录1、 select、poll、epoll之间的区别;1、 select、poll、epoll之间的区别;(1)、select的事件类型比较少——读、写、异常poll,epoll的事件类型比较多(2)、select和poll是由用户管理事件,每次要将事件传递给内核,让内核去监测,所以select和poll每一轮都需要将描述符从用户空间传到内核空间,如果描述符的数目比较多,开销就很大。(3)、内核实现方面:select和poll是轮询检查,时间复杂度为O(n)epoll采用回调方式来检测就原创 2021-11-30 23:38:08 · 290 阅读 · 0 评论 -
Linux——生产者和消费者模型
生产者消费者问题概述:多个线程同时从一块缓冲区中读取数据,并且有一个或者多个线程同时向这块缓冲区中写入数据。读取(取走)数据的线程成为“消费者”写入(添加)数据的线程称为“生产者”生产者消费者模型的优点:①解耦生产者和消费者的代码发生变化都不会对对方产生影响,变成生产者、缓冲区、消费者这种低耦合的②支持并发生产者产生的数据添加到缓冲区,就可以再去产生下一个数据了,消费者也是一样,从缓冲区中读取数据之后无需等待生产者。可以使得生产者和消费者并发执行③支持忙闲不均生产者只需要负责向缓冲区中添原创 2021-11-27 22:18:40 · 459 阅读 · 0 评论 -
利用C语言如何创建一个守护进程
守护进程1、守护进程的特点:运行周期长,在后台执行,一般不需要和用户进行交互2、相关概念:会话:一个终端的打开会伴随着一个会话的建立,当退出终端,会话结束会话首进程:终端运行的第一个进程会话首进程的id就是会话的id进程组:终端中执行的命令,比如执行ls,就会创建一个进程组,如果ls结束,进程组就会结束组长进程:进程组中的第一个进程组长进程的id就是进程组的id3、自己编写一个守护进程:3.1获取各种id的方法:会话id——getsid组id(就是组长id)——getpgrp当前原创 2021-11-27 19:32:33 · 1358 阅读 · 0 评论 -
I_O复用(2)——poll
一、 poll基本概念poll系统调用和select类似,也是在指定事件内轮询一定数量的文件描述符,以测试其中是否有就绪者。在我的学习中我认为poll和select的区别在于1、poll可以处理的事件比select的事件更多2、poll将这些事件放在pollfd结构类型的数组中,不会直接将事件写在调用poll函数的形参中poll的原型如下:int poll(struct pollfd* fds,nfds_t nfds,int timeout)其中第一个参数fds是一个pollfd结构类型的数组,原创 2021-11-26 20:40:28 · 109 阅读 · 0 评论 -
I_O复用(1)——select
select的接口介绍:select 系统调用的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符的可读、可写和异常等事件select使用案例:使用select处理多个TCP的客户端,完成TCP服务端的并发处理服务器端:#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include <unistd.h>#include &原创 2021-11-22 13:05:27 · 1628 阅读 · 0 评论