- 博客(33)
- 资源 (6)
- 收藏
- 关注
转载 waitpid()函数详解
在这两种情况中,waitpid返回导致 waitpid 返回的已终止子进程的PID此时,已终止的子进程已经被回收,内核会从系统中删除掉它的所有痕迹。当父进程回收已终止的子进程时,内核将子进程的退出状态传递给父进程,然后抛弃已终止的进程,从此时开始,该进程就不存在了。如果一个进程在回收他的子进程之前就终止了,那他的子进程被称为孤儿进程。例如:WNOHANG | WUNTRACED: 立即返回,如果等待集合中的子进程都没有被停止或终止,则返回值为0: 如果有一个停止或终止,则返回值为该子进程的 PID。
2023-10-13 16:33:14
329
转载 【转】linux 下 alarm(), setitimer 定时器与 POSIX 定时器 timer_settime()对比总结 (下)
timer
2022-06-15 19:06:12
989
转载 Linux下实现定时器Timer的几种方法
定时器Timer应用场景非常广泛,在Linux下,有以下几种方法:1,使用sleep()和usleep()其中sleep精度是1秒,usleep精度是1微妙,具体代码就不写了。使用这种方法缺点比较明显,在Linux系统中,sleep类函数不能保证精度,尤其在系统负载比较大时,sleep一般都会有超时现象。2,使用信号量SIGALRM + alarm()这种方式的精度能达到1秒,其中利用了*nix系统的信号量机制,首先注册信号量SIGALRM处理函数,调用alarm(),设置定时长度,代码如下
2021-11-20 17:57:45
2659
1
转载 __read_mostly的使用
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read_mostly形容的数据别放入到了段.data.read_mostly中那这个段的作用是什么...
2021-05-26 09:25:59
167
转载 linux内核list链表操作
参考文章:https://blog.csdn.net/qqliyunpeng/article/details/537890821.简介(1)通常它都组织成双向循环链表.(2)不同于数据结构书上的链表,这里的节点只有链表指针,没有链表的数据。链表元素为数据结构中的一个成员,和要存放的数据并列存放。2. 声明和初始化:有两种方法①声明的时候初始化一个链表 LIST_HEAD 宏:#define LIST_HEAD_INIT(name) { &(name), &...
2021-05-24 10:22:51
1009
转载 skb操作
套接字缓存之skb_put、skb_push、skb_pull、skb_reserve skb操作中的预留和对齐操作主要由skb_put、skb_push、skb_pull、skb_reserve完成;这几个函数的区别通过下面图(图片来自:深入理解linux网络技术内幕)可以清晰的区分;另外,需要注意的是skb_reserve只能操作空skb,即在分配了空间,尚未填充数据时调用;以下为四个函数的源码分析; 1 /** 2 * skb_put - add data to a bu.
2020-12-14 15:42:29
1562
转载 skb_copy和skb_clone对比
skb_copy是一个深拷贝,skb_clone只是一个浅拷贝1、skb_clone()Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1。特别说明,skb_clone()函数复制的只是skb描述符,而复制后的skb与原始skb指向的是同一数据缓
2020-12-11 14:35:31
1326
转载 list_for_each_entry解析
list_for_each_entry解析 双向链表及链表头:建立一个双向链表通常有一个独立的用于管理链表的链表头,链表头一般是不含有实体数据的,必须用INIT_LIST_HEAD()进行初始化,表头建立以后,就可以将带有数据结构的实体链表成员加入到链。INIT_LIST_HEAD (&nphy_dev_list);定义:#define list_for_each_entry(pos, head, member) \ for (po.
2020-07-27 10:25:44
2423
原创 网络设备mtu的设定
1.mtu一般基于出口限定,forward报文通过acl中的mtu值来限定,trap报文根据网络设备的mtu来限定,直通报文通过寄存器限定。2.修改win7本地连接MTU值的具体操作方法netsh interface ipv4 show subinterfacenetsh interface ipv4 set subinterface "以太网 2" mtu=9600 store=persistent网卡的phy也需要设置mtu值,在网卡的高级设置里面...
2020-07-24 21:47:35
1093
转载 netdev->name eth0, eth1, ..., eth%d 的生成
两个基本的数据结构之一:net_devicenet_device注册int register_netdev(struct net_device *dev) rtnl_lock(); if (strchr(dev->name, '%')) dev_alloc_name(dev, dev->name); register_netdevice(dev); =>int register_netdevice(struct net_device *dev)...
2020-07-18 17:10:43
534
转载 netlink_kernel_create
Netlink在2.6版本的内核中变化也是很大的,在最新的2.6.37内核中,其定义已经改成下面这种形式,传递的参数已经达到6个。其中第一个参数和mutex参数都是最新添加的。Mutex也可以为空。这里主要是关于内核空间中的netlink函数的使用。extern struct sock *netlink_kernel_create(struct net *net, int unit,unsigned int groups, ...
2020-06-30 10:50:29
4158
转载 vfs_fsync
在Linux系统中,对文件系统上文件的读写一般是通过页缓存(page cache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行同步,但是在一些极端的情况下还是免不了掉电数据丢失。因此内核提供了sync、fsync、fdatasync和msync系统调用用于同步,其中sync会同步整个系统下的所有文件系统以及块设备,而fsync和fdatasync只针
2020-06-20 12:26:59
1021
转载 Cannot assign requested address
ipv4和ipv6配置网络设备失败,会报错SIOCSIFFLAGS: Cannot assign requested address比较特殊的情况,使用的内核和内核模块编译用的内核不是同一个,导致ipv4和ipv6 entry结构体没有定义,网络设备配置失败。[root@localhost ~]# ifconfig eth0:1 upSIOCSIFFLAGS: Cannot assign requested address出现以上错误的原因是把eth0:1的信息写在了ifcfg-eth0.
2020-06-05 11:04:21
1443
转载 __read_mostly
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read_most...
2020-05-08 11:43:05
247
转载 结构体中最后一个成员数组定义0个元素的意义
struct MyData { int nLen; char data[0]; }; 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现...
2020-04-28 09:38:54
328
转载 NLMSG_ALIGN
宏NLMSG_ALIGN(len)用于得到不小于len且字节对齐的最小数值。#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr)) 宏NLMSG_LENGTH(len)用于计算数据部分长度为len时实际的消息长度。它一般用于分配消息缓存。#define NLMSG_SPACE(len)...
2020-03-24 16:54:55
850
转载 kfree_skb
kfree_skb()只在skb->users为1的情况下才释放内存,否则只简单地递减skb->users,因此假设SKB有三个引用者,那么只有第三次调用dev_kfree_skb()或kfree_skb()时才释放内存。dev_kfree_skb()只是一个简单调用kfree_skb()的宏。__kfree_skb绕过了对skb引用计数的判断,一般来说,在内核中函数名前面加“_...
2020-03-18 09:09:57
1033
转载 skb_clone
skb_copy是一个深拷贝,skb_clone只是一个浅拷贝1、skb_clone()Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1...
2020-03-18 09:05:28
1014
原创 组播浅析
1. igmp协议用来在ip主机和其直接相邻的组播路由器之间建立、维护组播组成员的关系。所有igmp都支持任意信源组播;igmpv3可以直接应用于指定信源组播,igmpv1和v2需要igmp ssm mapping技术支持下才能应用于ssm模型。1.1igmpv1报文类型:加入、离开、响应离开时不再响应查询报文对于igmpv1来说,有组播路由协议(PIM)选举出唯一的组播信息转发者。过程...
2020-02-03 23:22:09
546
转载 __read_mostly
在linux中好多内容被定义为__read_mostly,那么这有什么作用呢?首先看一个使用:structr cpuinfo_mips cpu_data[NR_CPUS] __read_mostly再看一下其定义:#define __read_mostly __attribute__((__section__(".data..read_mostly")))也就是说被__read...
2020-02-03 23:18:55
141
转载 __attribute__
关键字__attribute__允许你在定义struct、union、变量等类型时指定特殊属性。此关键字后面是跟着双括号括起来的属性说明。__attribute__不属于标准C语言,它是GCC对C语言的一个扩展用法。你可以在其关键字之前和之后使用"__"指定这些属性中的一个,这样允许你在头文件中使用这些属性,而不必担心可能的同名宏。例如你可以使用__aligned__代替aligned。...
2020-01-27 17:01:08
152
转载 __attribute__((packed))详解
__attribute__((packed))详解标签:it 分类:linux程序 1.__attribute__ ((packed))作用__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在window...
2019-10-14 20:24:09
691
转载 cpld和fpga区别
1、cpld执行一次下载编程后,逻辑阵列就被保存下来;fpga断电后逻辑功能不能保存,需要一块配置芯片在上电后对其重新配置。2、cpld擦写次数非常有限(100-1000),而fpga读写次数可以理解为无限次。3、cpld容量较小,fpga容量很大。4、一般调试阶段用fpga,实际产品用cpld。5、cpld保密性好,速度快。https://wenku.baidu.com/...
2018-09-21 17:57:42
3506
转载 DDR的物理BANK和逻辑BANK
严 格的说DDR应该叫DDR SDRAM,是Double Data Rate SDRAM(synchronous dynamic random access memory,同步动态随机存储器)的缩写,同步是指其时钟频率与CPU前端总线的系统时钟频率相同,动态是指存储阵列需要不断刷新来保证数据不丢失,随 机是指数据可随机存储和访问。 SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期...
2018-09-21 17:35:05
684
原创 微码简介
1、微码是什么?微代码(Microcode):用简单的硬件操作来模拟当时无法用技术直接实现的复杂指令。指的是用软件技术来实现硬件设计的一种技术。拥有智能功能的计算机部件所包含的程序称为微码。另,小型机上许多部件都有智能功能,高级的部件甚至内嵌一个真正的CPU,这些CPU也需要执行程序,一般存储在自身的FLASH ROM中,当厂家设计出增强功能的程序,支持新硬件或修补bug等就需要更新程序。...
2018-09-20 20:37:12
15046
2
转载 学习SystemC应具备的C++基本语法
https://blog.csdn.net/ohgaga/article/details/49838471多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句...
2018-09-18 14:48:43
608
转载 SystemC进程-SC_THREAD(转)
线程进程(Threaded Proecess)能够被挂起和重新激活。线程进程使用wait()挂起,当敏感表中有事件发生,线程进程被重新激活运行到遇到新的wait()语句在重新挂起。在一次仿真中,线程进程一旦退出,将不能再次进入。 由于线程进程的这个特点,从理论上讲,用它可以描述几乎一切系统的行为。http://www.go-gddq.com/html/ShuZiXinHaoChuL...
2018-09-12 13:07:47
2919
转载 C/C++——map的基本操作总结(转)
https://blog.csdn.net/google19890102/article/details/51720305
2018-09-12 12:46:58
31273
转载 UART和RS232/RS485的关系是什么(转)?
转自http://wpp9977777.blog.163.com/blog/static/4625100720138411281980/ 串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式。但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句中同等的位置使用。在百度搜索二者的区别,可以看到排在
2013-12-31 11:30:15
648
原创 整数模拟浮点数运算小技巧
数学背景:t1 = 222406138240, t1' = 221398198824, t2 = 769162154708, t2' = 768154292671(单位:ns); k = (t1 - t1')/(t2 - t2'); 所需的结果为tr/k - tr,取整数部分, 其中tr为数量级为1 * e4数量级的一个时间值。 应用背景
2012-08-01 16:41:56
637
PHY中数据位的延时和抖动
2012-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人