- 博客(57)
- 收藏
- 关注
原创 H264汇总
http://www.rosoo.net/Files/UpFiles/RsProduct/avtools/2009-4/2009491562537854.txt
2023-08-15 08:48:51
155
原创 core分析
2、CORE分析经过上面的铺垫,步入正题:如何进行core文件分析。在这之前,还需要简单介绍一些相关的知识:2.1、CORE产生原理应用程序在运行过程中由于各种异常导致退出,在满足一定条件下产生一个core文件。通常core文件包含了程序运行时内存、寄存器状态、堆栈指针、内存信息以及函数调用堆栈信息。core就是程序当前工作转改存储生成的一个文件,通过工具分析这个文件,可以辅助定位异常。异常指针访问等异常会产生信号,内核在收到异常信号时产生core。core关注的信号列表各信号含义如下signal.
2022-06-13 20:20:32
5882
转载 DMA技术简介
https://www.jianshu.com/p/3a26e8c9f402DMA 技术是什么,在哪里用?看完绝对有收获https://mp.weixin.qq.com/s?__biz=MzU1Mzc2NzExMA==&mid=2247483936&idx=1&sn=c3894b9a47a2cf6f887fc5f4cb14e306&chksm=fbec9b89cc9b129fe3f66cad43fa37901dff9c7db5788373a733409e9a808b3da
2021-12-24 16:41:27
352
原创 CPU设置多少线程合适
https://www.sohu.com/a/390674293_753508https://blog.youkuaiyun.com/zhuhaoyu6666/article/details/106376480
2021-11-29 09:48:12
476
转载 为什么现在MTU最小帧
以太网中传输的数据帧的长度并不是一个常数,而是一个范围内的,以太网帧长度最大限制(MTU)是1518字节,最小长度是64字节。限制帧的最大长度是为了避免一台设备长时间占用信道,所以在传输过程中一定要有机制强制一个设备停止传输,让出信道的使用。那么为何要限制最小的帧长度呢?一个过小的数据会让以太网不能正常工作吗?首先,这是一个历史问题,今天确实没有必要限制最小帧长了。早期的以太网使用总线拓扑,网络中多台设备共享一个物理信道。这样就导致了多台设备同时发送信号的时候会发生碰撞,导致多台设备传输失败。然而,经过长
2021-11-27 09:38:00
890
原创 CPU 上下文切换理解
一、概念Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。系统事先帮它设置好 CPU 寄存器和程序计数器,它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转
2021-09-06 20:15:30
127
原创 平均负载理解
一、平均负载概念平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterrupti
2021-09-06 10:45:31
4653
转载 signal的声明理解
1.显示调用首地址为0的例程:((void()())0)()显示调用首地址为0的例程的表达式为:((void()())0)()分两步分析:假定变量fp是一个函数指针,调用方法如下:(fp)();因为fp是一个函数指针,那么fp就是该指针指向的函数,所以(fp)()就是调用该函数的方式。ANSI C标准允许程序员将上式简写为fp()。()的运算符高于。2.使用具体的函数指针替换fp,此处将0做类型强制转换,转换为函数指针,替换fp。对一个常数进行类型转换,只需在变量声明中将变量名去掉即可。如果fp
2021-06-22 14:28:47
294
原创 vmstat命令详解
一、概念vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如
2021-06-22 13:14:47
241
原创 约瑟夫问题
一、约瑟夫问题来源据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈
2021-06-03 16:20:56
308
2
转载 C++ vector
vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include;一、vector 的初始化:可以有五种方式,举例说明如下: (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。 (2)vector<int> a(10,1); //定义了10个整型元素的向
2021-06-02 14:36:10
215
转载 CPU性能问题分析
一、CPU性能指标查证性能的问题我们可以从下面几个指标来进行排查:1.CPU使用率2.平均负载3.进程上下文切换4.CPU 缓存的命中率用图表展示:二、性能工具针对上面的不同指标,使用不同的工具和命令进行查证。平均负载的案例。我们先用 uptime, 查看了系统的平均负载;而在平均负载升高后,又用 mpstat 和 pidstat ,分别观察了每个 CPU 和每个进程 CPU 的使用情况,进而找出了导致平均负载升高的进程,也就是我们的压测工具 stress。上下文切换的案例。我们
2021-05-06 20:02:39
360
原创 su、sudo、sudo su、sudo -i区别和用法
su root 输入root密码后切换之root用户但是pwd目录不变su - root 输入root密码后切换之root用户但是pwd目录/rootsudo 一般加的是命令sudo -i root与sudo - root、sudo -i ,sudo - ,sudo root效果相同 提示输入密码时该密码为当前账户的密码 要求执行该命令的用户必须在sudoers中才可以 su需要的是切换后账户的密 用法为“su 账户名称”sudo : 暂时切换到超级用户模式以执行超级用户权限,提示
2021-04-28 13:59:00
167
转载 用户线程和内核线程区别
1.用户级线程和内核级线程的区别用户级线程仅存于用户空间中,其创建、撤销、线程之间的同步与通信功能,都无须利用系统调用来实现。总之,它的实现是和操作系统无关的,用户进程只需要通过线程库来完成线程控制;相反,内核线程的建立和销毁都是由操作系统负责、通过系统调用完成的。从描述的区别上就可以看出,用户级别的线程不用经过内核空间,效率肯定很高,而内核线程是驻留在内核空间的,用户进程在创建使用内核线程时访问内核空间是必不可少的工作,效率上相对较低。既然内核线程效率低,那为什么还要引入他呐?我们知道在线程中经常会用到
2021-03-30 20:30:02
4052
原创 线程学习---自我修养
##一、什么是线程本文主要介绍linux下面的线程。在linux实际上没有线程的概念,实际是进程的变种,被称作轻量级进程(LWP)。线程通常由线程ID、指令指针、寄存器集合和堆栈组成。通常一个进程有多个线程组成,各个线程之间共享程序的内存空间和进程的资源(打开的文件和信号)。一个经典的进程和线程的关系。二、线程的权限线程可以访问进程内存里面的所有数据,甚至包括其他线程的堆栈,单实际线程也有自己的私有存储空间。三、线程的调度和优先级不论在多处理器还是单处理器上面,线程总数“并发”执行的。当线程数
2021-03-30 17:20:02
92
原创 gcc常用命令
一.介绍现在的IDE(集成开发环境)已经将编译和链接放在一起,一步就完成了,通常将编译和链接合并在一起的过程称为构建。实际上linux下简单的gcc test.c包含了复杂的过程。二.命令test.c范例:#include<stdio.h> int main(void){ int i; printf("hello world %d\n", i); return 0;}1.gcc test.c执行完上面这句命令,会在当前目录下输出一个名为a.out的可执行文
2021-03-11 13:37:37
377
转载 linux自旋锁
一、简介自旋锁是 SMP 架构中的一种 low-level 的同步机制。当线程A想要获取一把自旋锁而该锁又被其它线程锁持有时,线程A会在一个循环中自旋以检测锁是不是已经可用了。对于使用自选锁需要注意:由于自旋时不释放CPU,因而持有自旋锁的线程应该尽快释放自旋锁,否则等待该自旋锁的线程会一直在那里自旋,这就会浪费CPU时间。持有自旋锁的线程在sleep之前应该释放自旋锁以便其它线程可以获得自旋锁,或者拿到自旋锁之后不允许睡眠。参与自旋锁竞争的两个或多个线程如果绑定在同一个CPU核上,则其调度属
2021-02-24 10:11:34
858
原创 linux启动进程三种方法
一、system函数-调用shell进程,开启新进程system函数,是通过启动shell进程,然后执行shell命令进程。函数原型:int system(const char *string);string:shell命令字符串返回值:成功返回命令退出码,无法启动shell,返回127错误码,其他错误,返回-1。#include <stdlib.h>#include <stdio.h> int main(){ system("ls"); pri
2021-01-30 16:27:21
5762
原创 UDP校验和计算
一、UDP校验和计算UDP计算校验和的方法和IP数据报首部校验和的方法相似。不同的是:IP数据报校验和只校验IP数据报的首部,但UDP的校验和是把首部和数据部分一起都检验。UDP的校验和需要计算UDP首部加数据荷载部分,但也需要加上UDP伪首部。这个伪首部指,源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。伪首部+UDP首部+数据一起计算校验和。UDP检验和的计算方法是:按每16位求和得出一个32位的数;如果这个32位的数,高1
2021-01-25 15:14:54
15292
原创 IP头校验和计算
一、计算方法计算对IP首部检验和的算法如下: (1)把IP数据包的校验和字段置为0; (2)把首部看成以16位为单位的数字组成,依次进行二进制求和(注意:求和时应将最高位的进位保存,所以加法应采用32位加法); (3)将上述加法过程中产生的进位(最高位的进位)加到低16位(采用32位加法时,即为将高16位与低16位相加,之后还要把该次加法最高位产生的进位加到低16位) (4)将上述的和取反,即得到校验和。算法:unsigned short checksum(unsigned s
2021-01-25 14:02:28
3175
原创 RTP/RTCP协议
一、RTP协议相关概念1.概念引用百度:实时传输协议(Real-time Transport Protocol或简写RTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。国际电信联盟ITU-T也发布了自己的RTP文档,作为H.225.0,但是后来当IETF发布了关于它的稳定的标准RFC后就被取消了。它作为因特网标准在RFC 3550(该文档的旧版本是RFC 1889)有详细说明。RFC 3551(STD 65,旧版本是RFC 1890)详细描述了使用最小
2021-01-21 20:27:34
783
转载 pstack命令追踪进程的调用栈
pstack命令用来显示进程的栈(用户态)跟踪。 pstack 命令必须由相应进程的属主或root账号运行。可以使用pstack来确定进程挂起的位置。此命令只有一个参数,那就是 pid。这里的pid可以是进程pid也可以是线程的 tid,当参数为 tid 时,pstack会将当前线程的调用栈打印出来,当参数为pid时则会将当前进程下所有线程的调用栈全部打印出来。具体关于pstack的简要介绍可以查看man手册。简单...
2021-01-20 16:59:23
613
原创 wait获取子进程退出状态之判断
一、wait函数原型:#include <sys/types.h> /* 提供类型pid_t的定义 */#include <sys/wait.h> pid_t wait(int *status)进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。参数stat
2021-01-20 15:11:08
863
1
原创 ptrace应用
一、简介Ptrace 提供了一种父进程可以控制子进程运行,并可以检查和改变它的核心image。它主要用于实现断点调试。一个被跟踪的进程运行中,直到发生一个信号。则进程被中止,并且通知其父进程。在进程中止的状态下,进程的内存空间可以被读写。父进程还可以使子进程继续执行,并选择是否是否忽略引起中止的信号二、ptrace 的函数详解函数声明:long ptrace(enum __ptrace_request request,pid_t pid,void *addr, void *data);参数req
2021-01-20 12:08:18
273
转载 mmap接口应用
前言 存储映射I/O使一个磁盘文件与存储空间中的一个缓存相映射。于是当从缓存中取数据,就相当于读文件中的相应字节。与其类似,将数据存入缓存,则相应字节就自动地写入文件。这样,就可以在不使用read和write的情况下执行I/O。为了使用这种功能,应首先告诉内核将一个给定的文件映射到一个存储区域中。这是由mmap函数实现的,接口如下: #include <...
2021-01-19 13:57:47
477
转载 多线程的同步方法
一、同步与互斥的概念现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源;多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。【同步】:是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。【互斥】:是指
2021-01-19 10:34:50
830
转载 ARP协议简述
目录 1 ARP协议报文概述 1.1 ARP/RARP报文格式 1.2 ARP报文抓包 1.2.1 arp请求 1.2.2 arp应答 2 ARP映射表 2.1 动态ARP表项 2.2 静态ARP表项 2.3 短静态ARP表项 2.4 长静态ARP表项 3 ARP攻击(mac地址欺骗) 1 ARP协议报文概述 ARP(Address Resolution Protocal,地址解析协议)...
2021-01-18 14:58:51
1108
原创 ping基本原理
一、简介ping命令一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternet Grope),因特网包探索器,用于测试网络连接量的程序。ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。它是用来检查网络是否通畅或者网络连接速度的命令。原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。二、ping
2021-01-18 11:04:42
1368
原创 traceroute和tracert原理
一、Traceroutetraceroute 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。路由器收到TTL为1的包文减1后直接丢弃,然后回复 ICMP(type=11,code=0,TTL equals 0 during transit——传输期间生存时间为0)。目标主机收到traceroute 的UDP探测包回复ICMP(type=3,code = 3,端口不可达)。Linux上称之为 traceroute,Windos类似的功能为trace
2021-01-16 17:16:35
894
转载 strace命令
目录 1、strace是什么? 2、strace能做什么? 3、strace怎么用? 4、strace问题定位案例 4.1、定位进程异常退出 4.2、定位共享内存异常 4.3、 性能分析 5、总结 1、strace是什么? 按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变...
2021-01-16 15:53:06
110
原创 孤儿进程和僵尸进程(linux)
一、基本概念在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。**孤儿进程:**一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。**僵尸进程:**一
2021-01-16 13:05:34
150
原创 linux内存分配原理---malloc、brk、mmap
一、Linux 虚拟地址空间分布Linux的虚拟内存管理关键概念:Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢 ?1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址;3、如果虚拟地址对应物理地址不在物理内存中,则
2021-01-15 17:03:54
905
原创 linux下tcp socket编程
一、简介直接推荐此博文:https://blog.youkuaiyun.com/weixin_44923289/article/details/106614967?utm_medium=distribute.pc_category.none-task-blog-hot-20.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-20.nonecase&request_id=https://blog.csdn.ne
2021-01-15 10:46:01
83
原创 linux下udp socket编程
一、简介UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。正因为UDP无需建立类如三次握手的连接,而使得通信效率很高。#include <sys/types.h> #include <sys/socket.h>int socket(int domain, in
2021-01-15 10:41:21
159
原创 如何判断远端主机UDP端口是否开启
一、服务端TCP监听端口如果是tcp作为监听端口,很多人里面可以想到相应的方法,由于tcp三次握手协议,我们可以直接写一个客户端程序即可判断tcp端口是否监听。我们汇总几种方法:1.tcp socket客户端编程直接调用connect接口(unix),建链远端地址和端口,建链成功:在监听port;建链拒绝:表示未在监听2.telnet命令client:[root@Node_B build]# telnet 10.228.113.185 8000Trying 10.228.113.185...
2021-01-15 10:32:48
13677
原创 进程和线程简介
一、概述进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元二、计算机资源CPU + 存储器 + IO:计算资源存储资源CPU是计算单元,单纯从CPU的角度来说它是一个黑盒,它只对输入的指令和数据进行计算,然后输出结果,它不负责管理计算哪些”指令和数据“。 换句话说CPU只提供了计算能力,但是不负责分配计算资源。计算资源是操作系统来分配的,也就是常说的操作系统的调度模块,由操作系统按照一定的规则来分配什么时候由谁来获得CPU的计算资源,比如分时间片存储资源就是内存,磁盘这些存储设
2021-01-12 13:45:15
161
原创 df、dh、free命令简介
一、freefree命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。-b:以Byte为单位显示内存使用情况;-k:以KB为单位显示内存使用情况;-m:以MB为单位显示内存使用情况;-o:不显示缓冲区调节列;-s<间隔秒数>:持续观察内存使用状况;-t:显示内存总和列;-V:显示版本信息。实例:[root@localhost test]# free -m total used free
2021-01-11 20:55:42
3888
1
原创 寄存器、内存、cache简介
一、计算机的存储体系从上面两个图看出不同的介质存储空间和访问速度是不一样的。二、寄存器寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。寄存器是CPU的内部组成单元,是CPU运算时取指令和数据的地方,速度很快,寄存器
2021-01-11 10:59:47
2130
2
原创 linux errno简介之线程安全
一、概述errno是全局变量,Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。只有当系统调用或者调用lib函数时出错,才会置位errno!二、错误码1.Linux中,在头文件 /usr/include/asm-generic/errno-base.h 对基础常用errno进行了宏定义[root@Node_B build]# cat /usr/include/asm-generic/errno-base.h#if
2021-01-09 16:09:58
1244
1
原创 md5sum的使用
一、概念在网络传输、设备之间转存、版本升级等均会涉及大文件传输,因此,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。062d76d190aa6b7fb0bca71f29f9a10e stack.cm
2021-01-08 11:55:12
6039
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人