Linux
文章平均质量分 68
总结一遍笔记,练个手熟。
城北programmer
*
展开
-
高性能服务器程序框架(二)
四、两种高效的事件处理模式服务器程序通常需要处理三类事件:I/O事件、信号、定时事件。原创 2021-06-16 17:12:59 · 180 阅读 · 0 评论 -
高性能服务器程序框架(一)
我们按照服务器程序的一般原理,将服务器解构为如下三个主要模块:口I/O处理单元。本章将介绍I/O处理单元的四种I/O模型和两种高效事件处理模式。口逻辑单元。本章将介绍逻辑单元的两种高效并发模式,以及高效的逻辑处理方式一有限状态机。口存储单元。本书不讨论存储单元,因为它只是服务器程序的可选模块,而且其内容与网络编程本身无关。最后,本章还介绍了提高服务器性能的其他建议。...原创 2021-06-15 17:37:38 · 425 阅读 · 1 评论 -
守护进程简介
守护进程的g守护进程也叫精灵进程,一般在后台运行,不与任何控制终端相关联。守护进程通常在 系统启动时就运行,它们以 root 用户运行或者其他特殊的用户(例如 apache),并处理一些 系统级的任务。习惯上守护进程的名字通常以 d 结尾(如 httpd, sshd),但这不是强制要求的。 简单讲有两个特点: ◼ 后台运行,不与终端关联 ◼ 运行周期长...原创 2021-06-14 01:30:53 · 5107 阅读 · 0 评论 -
Linux三剑客之grep、sed、awk 个人简介
剑客一:grep擅长查找、匹配文本。剑客二:sed擅长编辑匹配到的文本,取行、替换。剑客三:awk擅长处理格式化文本、取列。awkawk是linux中的一个报告生成器,它拥有强大的文本格式化的能力,或者说是一种专门处理字符串的语言,它有自己的编码格式。1. 基本语法:[-F 域分隔符] 是可选的,如果分隔符是空格可以不用写,awk默认的分隔符就是空格。 Commands 指定操作命令,一般使用print 进行输出打印。 Input-file 是要...原创 2021-06-10 17:08:52 · 141 阅读 · 0 评论 -
epoll 的接口介绍
epoll 是 Linux 特有的 I/O 复用函数。它在实现和使用上与 select、poll 有很大差异。首先,epoll 使用一组函数来完成任务,而不是单个函数。其次,epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中。从而无需像 select 和 poll 那样每次调用都要重复传入文件描述符或事件集。但 epoll 需要使用一个额外的文件描述符,来唯一标识内核中的这个事件表。epoll 相关的函数如下:◼ epoll_create()用于创建内核事件表◼ epol.原创 2021-04-01 17:32:29 · 813 阅读 · 0 评论 -
Linux 内核的文件 cache 管理机制
Linux 内核的文件 cache 管理机制。文件 cache 是文件数据在内存中的副本,这里涉及两方面的内容内存的管理,和文件系统。文件 cache 就将两者联系起来,要回答该题目就需要了解这两块内容。在 linux系统中,某个程序需要读取文件中的数据时,操作系统先在内存中分配一些空间,然后再将数据从磁盘读入到这块空间,应用程序实际从这块内存空间读数据。当程序向文件中写入数据时也是先将数据写到内存,再从内存更新到磁盘上。文件的cache管理就指的是对这些由操作系统分配,并用来存储文件数据的内存原创 2021-03-31 22:05:56 · 365 阅读 · 1 评论 -
Epoll 的 ET 模式和 LT 模式区别,及内核实现上的不同
LT 模式下:描述符上事件就绪后,如果没有把数据处理完成,或者没有处理,下一次 epoll 会继续提醒应用程序,直到把数据读完。ET 模式下:描述符上事件就绪后,如果没有把数据处理完成,或者没有处理,下一次 epoll 不会提醒应用层序,所以要求应用程序在收到一次提醒时,必须当下将所有数据处理完成。内核实现:epoll_wait 每次将收集到的就绪事件和描述符返回给应用程序,过程是这样,当检测到 rdlist 不为空时,就说明有事件就绪,使用 ep_collect_ready_items 方法将原创 2021-03-31 21:22:15 · 317 阅读 · 0 评论 -
系统调用执行的过程,库函数与系统调用的区别
首先说一下,用户态和内核态。执行用户代码时,处于用户态,执行内核代码时处于内核态。库函数的实现在函数库里面,而系统调用的实现在内核中。系统调用执行后会产生中断陷入内核。系统调用执行过程:产生 0x80 号中断,保存当前进程现场信息,将该系统调用的系统调用号写入eax 寄存器中。中断处理程序执行,也即切换到了内核态,此处也就是执行系统调用的程序,从 eax寄存器中读出系统调用号,查系统调用表,找到对应的内核函数执行,将结果继续写入 eax 寄存器中。中断处理程序执行完成,恢复原程序的执行原创 2021-03-31 20:26:00 · 176 阅读 · 0 评论 -
同步与异步,阻塞与非阻塞
同步和异步关注的是消息通信机制所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是等被调用者准备好数据后反过来通知调用者。阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞是指方法(函数)执行后,在结果返回之前,当前线程(进程)会被挂起。调用线程(原创 2021-03-15 21:03:12 · 45 阅读 · 0 评论 -
x86 体系,32 位 linux 内核支持的进程的虚拟地址空间布局
x86 体系,32 位 linux 内核支持的进程的虚拟地址空间布局1.局部变量存在哪里(栈上)?x86体系, 32位linux内核给每一-个进程都分配4G大小的虚拟地址空间,有3G的用户态和1G的内核态,用户态主要存放我们应用程序定义的指令或者数据,局部变量存在于栈上,随着函数的运行,栈上开辟了内存,函数运行完成,栈上内存自动被系统回收!局部变量都在栈上存储全局变量或static全局变量都在.data或者.bss段存储malloc或者new的内存都在堆上开辟指令都存放在.text段上常量.原创 2021-03-15 16:25:49 · 606 阅读 · 0 评论 -
Linux下 socket 网络编程接口
#include <sys/types.h>#include <sys/socket.h>头文件#include <arpa/inet.h>in_addr_t inet_addr(const char *cp); //字符串表示的 IPV4 地址转化为网络字节序char* inet_ntoa(struct in_addr in); // IPV4 地址的网络字节序转化为字符串表示IP 地址转换函数通常,人们习惯用点分十进制字符串表示 IPV4 地址原创 2021-03-15 10:59:50 · 237 阅读 · 0 评论 -
Linux重点知识复习
1.g++与 gcc的区别,g++能编译.c文件吗? gcc能编译.cpp文件吗?gcc 现在是gnu提供的- -些编译器工具的集合(Gnu Compiler Collection),以前是gnu组织提供的C编译器(GnuCCompiler)。g++是C++编译器编译器。gcc可以编译.c和.cpp的源文件对*.C按C语言语法规则处理,*.cpp 自动按C++语法规则处理,但默认不链接相应的c++库,需要手动指定链接的库名"-Istdc+ +"g+ +可以编译.c和.cpp的源文件,但是原创 2021-03-06 21:33:33 · 100 阅读 · 1 评论 -
IO复用——epoll(Linux下C语言实现服务器端)
#define _FNU_SOURCE#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<assert.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>原创 2020-10-08 21:57:17 · 203 阅读 · 0 评论 -
IO复用——select
服务器#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<assert.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#include<sy原创 2020-10-08 17:23:04 · 166 阅读 · 0 评论 -
进程基础
进程的概念进程就是执行中的程序,在内存中。进程就是操作系统的描述,这个描述叫PCB(进程控制块),Linux下PCB有自己的名字叫task_struct.而操作系统就是使用task_struct结构体描述进程,使用双向链表来将这些结构体组织起来进行管理。每一个进程有自己唯一的PID(操作系统对进程的标识)Linux进程管理命令ps(查看进程)-e(显示所有进程) -f(显示进程详细信息) -L(显示LWP,线程号)pstree (以树状图的方式 显示进程的创建关系)t原创 2020-10-07 22:36:29 · 43 阅读 · 0 评论 -
Web服务器——C语言实现
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<assert.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>#include<fcntl.原创 2020-10-07 22:09:35 · 301 阅读 · 0 评论 -
socket多线程实现tcp server
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<assert.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<pthread.h>int InitSocket(){原创 2020-10-05 22:34:21 · 151 阅读 · 0 评论 -
socket网络编程——TCP servers & TCP client
**servers**#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<assert.h>#include<sys/socket.h> //网络编程接口#include<sys/types.h>#include<arpa/inet.h> //IP地址转换#include<n原创 2020-10-04 15:08:12 · 133 阅读 · 0 评论 -
Linux基础命令
基础命令cd 路径 (切换到目标路径)cd … 返回上级路径,cd ~ 直接进入当前用户家目录pwd (显示当前路径)ls (查看当前目录下的文件)-l 显示文件和目录的详细资料,-a 显示隐藏文件clear 清屏可找回re原创 2020-08-29 16:39:44 · 67 阅读 · 0 评论 -
编译链接原理
1.预编译 .ilinux 命令:gcc -E main.c -o main.i删除#define,并做文本替换#include递归展开头文件处理预编译指令 #if #endif删除注释添加行号 文件标识保留#pragma2.编译 .slinux 命令:gcc -S main.i -o main.s词法分析语法分析语义分析代码优化生成汇编指令3.汇编 .olinux 命令:gcc -c main.s -o main.o将原创 2020-08-27 20:25:12 · 97 阅读 · 0 评论 -
线程基础
线程基础一.线程概念线程是进程内部的一个执行分支(执行流),一个进程至少有一条main线(第一个PCB),也可以包含多条线程。多个线程在同一个地址空间运行,共用同一虚拟空间,共用部分资源。linux下并没有真正意义上的线程存在,linux中使用进程来模拟实现线程,父进程创建子进程,子进程执行父进程的一部分代码,并且与父进程共享同一个地址空间。这些一个一个被创建出来的子进程可看到为线程,这种线程也称之为轻量级进程。每个线程只有一个独自的栈结构,栈区空间。.data .bss .原创 2020-08-15 18:00:14 · 120 阅读 · 0 评论