Linux
文章平均质量分 77
奄奄不息
加油
展开
-
accept和epoll惊群问题剖析
文章目录惊群问题1. 不使用epoll/select的情况下多进程是如何共享端口监听的?2. epoll下共享监听端口的行为3. 内核对惊群效应的解决惊群问题1. 不使用epoll/select的情况下多进程是如何共享端口监听的?不使用多路复用的情况,进程要接收TCP连接必然要调用accept并且被阻塞,直到有一条连接到达。单进程:一次只能处理一个连接,业务处理完毕之后close掉客户端连接,然后再调用accept。多进程一:一个主进程accept连接,来了一个连接再fork一个子进程,把来的连原创 2021-09-17 16:38:58 · 1632 阅读 · 0 评论 -
muduo总结
文章目录baseSingletonThreadLocalThreadLocalSingletonnetSocketSocketOpsInetAddressPollerPollPollerselect和poll在内核态的遍历:EPollPollerepoll水平触发和边缘触发的区别:epoll优点epoll机制:Channel定时器TimerIdTimerTimerQueueBufferreadFd函数的优点:前方添加(prepend)AcceptorEventLoopEventLoopThreadEvent原创 2021-09-03 11:55:49 · 778 阅读 · 0 评论 -
vim简要配置
set numberset noswapfileset autoindentset colorcolumn=80set cursorline详细配置可见本人Github(共有400多行)原创 2021-03-31 10:55:51 · 152 阅读 · 0 评论 -
Linux关闭防火墙的命令
1:查看防火状态systemctl status firewalldservice iptables status2:暂时关闭防火墙systemctl stop firewalldservice iptables stop3:永久关闭防火墙systemctl disable firewalldchkconfig iptables off4:重启防火墙system...原创 2019-11-29 14:52:23 · 124 阅读 · 0 评论 -
Linux修改栈空间的大小
有时候写程序处理大量的数据,需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现断错误。这种情况可能是分配的数组大小超过了linux系统的默认栈空间的大小了,导致栈空间不够分配,出现错误。(1)查看linux默认栈空间的大小 通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下为8192 KB 即8M。(2)临时改变...转载 2019-04-22 20:41:35 · 10328 阅读 · 3 评论 -
文件基础IO
文件描述符Linux进程默认打开三个文件描述符,标准输入0,标准输出1,标准错误2;对应的外设一般是:键盘,显示器,显示器。文件描述符:文件描述符就是从0开始的小整数,当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件。于是就有了file结构体。表示一个已经打开的文件对象。而进程执行open系统调用调用,所以必须让进程和文件关联起来。每个进程都有一个指针file*,指向一...原创 2019-06-23 11:34:07 · 119 阅读 · 0 评论 -
生成动态库和静态库
一、静态库//////////////////////////////add.h#ifndef __ADD_H__#define __ADD_H__int add(int a, int b);#endif //__ADD_H__/////////////////////////////add.c#include"add.h"int add(int a, int b){...原创 2019-06-24 15:56:02 · 363 阅读 · 0 评论 -
多线程和多进程的使用场景
多进程的优点编程相对容易;通常不需要考虑锁和同步资源的问题。更强的容错性:比起多线程的一个好处是一个进程崩溃了不会影响其他进程。有内核保证的隔离:数据和错误隔离。对于使用如C/C++这些语言编写的本地代码,错误隔离是非常有用的:采用多进程架构的程序一般可以做到一定程度的自恢复;(master守护进程监控所有worker进程,发现进程挂掉后将其重启)。多线程的优点创建速度快,方便高...原创 2019-07-24 10:58:32 · 780 阅读 · 0 评论 -
信号处理函数的编写规则
具体的与Linux信号相关的知识,可以参考我另外一篇博客:Linux信号博客这里只讨论关于编写安全的信号处理函数主要有以下一些规则:信号处理函数尽量只执行简单的操作,譬如只是设置一个外部变量,其它复杂的操作留在信号处理函数之外执行;errno 是线程安全,即每个线程有自己的 errno,但不是异步信号安全。如果信号处理函数比较复杂,且调用了可能会改变 errno 值的库函数,必须考虑在信号...原创 2019-07-24 20:08:56 · 1303 阅读 · 0 评论 -
虚拟内存、分页机制
目录1. 虚拟内存1.1 linux进程内存布局内核空间(kernel space)(1G)用户空间(3G)1.2 分页1.3 页表页表项的结构1.4 加速分页过程转换检测缓冲区软件TLB管理1.5 针对大内存的页表多级页表倒排页表1. 虚拟内存虚拟内存的基本思想:每个程序都有自己的地址空间,这个空间被分割成多个块,每一个块被称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并...原创 2019-08-10 21:21:50 · 12399 阅读 · 1 评论 -
页面置换算法详解(10种)
文章目录最优页面置换算法最近未使用页面置换算法 如果对于虚拟内存,页表,分页等技术还是一知半解的道友可以参考我之前写的一篇博客:虚拟内存、分页以及页表 当发生缺页中断时,操作系统必须在内存中选择一个页面将其换出内存,以便为即将调入的...原创 2019-08-15 18:00:09 · 27105 阅读 · 4 评论 -
malloc原理和模拟实现
malloc原理malloc它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足 用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传 给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。...原创 2019-04-20 17:52:24 · 484 阅读 · 0 评论 -
线程【三】
服务器设置成单例模式fork子进程数据写时拷贝,懒汉模式,优势:需要内存的时候才用,速度比饿汉快malloc只给虚拟内存,使用的时候才去内存中申请。STL默认不是线程安全的unique_ptr只是在当前代码块范围内生效,因此不涉及线程安全问题shared_ptr,多个对象需要共同引用一个计数变量,所以会存在线程安全问题。但是标准库实现的时候考虑到了这个问题,基于原子操作(CAS...原创 2019-01-14 10:44:20 · 87 阅读 · 0 评论 -
线程【二】同步与互斥,死锁
Linux线程互斥临界资源:多线程执行流共享的资源临界区:访问临界资源的代码互斥:任何时刻,有且只有一个执行流进入临界区,访问临界资源,对临界资源起保护作用原子性:不会被任何调度机制打断的操作互斥量mutex互斥量初始化静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER 动态分配:int pthread_mut...原创 2019-01-14 09:32:01 · 146 阅读 · 0 评论 -
进程的调度算法
进程调度:无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程的基本状态及状态间的转换: 1.等待态:等待某个事件的完成; 2.就绪态:等待系统分配处理器以便运行; 3.运行态:占有处理器正在运行。...原创 2018-09-27 17:12:35 · 1199 阅读 · 0 评论 -
浅析task_struct结构体
task_struct结构体是Linux下的进程控制块PCB,PCB里包含着一个进程的所有信息。要了解task_struct结构体,就必须要知道什么是进程。进程可以有以下几个定义: 一个正在执行的程序。 一个正在计算机上执行的程序实例。 能分配给处理器并由处理器执行的实体。 一个具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集合。...原创 2018-09-27 19:52:00 · 15760 阅读 · 0 评论 -
getenv,putenv,setenv,export函数
getenv通常环境变量是通过 name=value 的形式给出的,使用 environ 指针打印出的所有的环境变量的形式就是如此。使用 getenv 函数可以通过给出 name 来获得 value 的值。函数原型:char * getenv(const char *name);函数参数:name:想要获取的环境变量名返回值:调用成功返回指向 value 的指针 调...原创 2018-10-12 17:25:30 · 1121 阅读 · 0 评论 -
僵尸进程和孤儿进程
僵尸进程:僵尸状态是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程的返回代码就会产生僵死(尸)进程 僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取状态代码。 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程就会进入Z状态。模拟僵尸进程也比较简单,只是要求子进程退出,而父进程还在执行,并且父进程没有读取子进程退出状态码。下面我们来模拟一个僵尸...原创 2018-09-27 22:44:51 · 192 阅读 · 0 评论 -
除了vim, 还有哪些常用的牛逼的编辑器,除了gcc, 还有哪些常用的牛逼的编译器,为什么调试的时候需要编译选项中添加 -g,调研readelf命令,Linux下实现进度条程序.
除了vim, 还有哪些常用的牛逼的编辑器BracketsBrackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。Brackets也是一款为Linu...原创 2018-09-28 14:29:08 · 586 阅读 · 0 评论 -
进程创建、等待、终止;编写自己的shell;封装fork/wait等操作, 编写函数 process_create;调研popen/system, 理解这两个函数和fork的区别.
进程创建进程创建比较简单。有两个函数可以调用:fork()和vfork()。fork()pid_t id = fork();fork()函数测试代码:#include<stdlib.h> #include<stdio.h>...原创 2018-10-18 15:32:15 · 387 阅读 · 0 评论 -
基础IO,练习open/read/write/close,,纵向对比fd与FILE结构体,自主shell升级,add/sub/mul/div函数,并打包成动/静态库,并分别使用
open()函数int open (count char* pathname, int flags)int open (count char* pathname, int flags,mode_t made);pathname:要打开或创建的目标文件flags:打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags 参数: ...原创 2018-10-21 22:01:56 · 205 阅读 · 0 评论 -
进程间通信
目录进程间通信的目的:进程间通信分类管道System V IPCPOSIX IPC管道匿名管道管道特点命名管道创建一个命名管道1.用mkfifo命令创建一个管道:2.用mkfifo命令创建一个管道:匿名管道与命名管道的区别总结:消息队列消息队列函数测试实例:共享内存共享内存函数信号量生产者和消费者问题信号量...原创 2018-10-24 22:34:55 · 857 阅读 · 0 评论 -
信号
前言:1.进程要处理信号,首先要认识信号。2.信号一旦产生,进程可能不会立即处理,而是在合适的时候处理。3.信号事件的产生对进程而言是异步的,就是信号不知道会什么时候产生。4.处理信号的三个方法5.信号无法立即处理时,就先记录下来。放在该进程的pcb中。有一个位图(32位),只有操作系统能修改这个位图目录前言:1.认识信号2.信号的产生方式3.信号的处理方式...原创 2018-11-17 19:52:59 · 302 阅读 · 0 评论 -
线程【一】线程优缺点,资源情况,线程异常,线程ID,线程控制
【前言】进程是独占系统资源的,进程与进程之间是互相独立的,彼此之间是竞争关系。进程的独立性:进程的地址空间。共享:共享内存,共享库(动态库)比进程更轻量化,在进程内部运行的执行流称之为线程,Linux下的进程,也叫做轻量级进程,CPu在调度的时候,只看PCB,是进程的,也可能是线程的。Linux不知道什么进程线程,它看到的都是轻量级进程线程是轻量级进程(把线程形容的粗了...原创 2018-12-24 20:47:04 · 261 阅读 · 0 评论 -
linux权限与部分指令所需权限
一、进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.1、文件访问者分类文件拥有者(u-user)文件所属组(g-group)其他用户(o-other) 2、权限分类r 读权限w 写权限x 可执行权限三种文件访问者类型就有三组权限,但某种访问者没有其中一种权限时用 - 表示,例如r...原创 2018-07-06 22:38:52 · 638 阅读 · 0 评论