4 落尘纷扰

尚未进行身份认证

服务于制造业的码农,没怎么写过代码

等级
TA的排名 1w+

使用CSDN-markdown

1111jp1e8CgYjJ4zf0KhAe8QTR25SFOyWGshdxeqq1esijXleGGAT-Sr0LeFQTvBkeMSRfqNx32mm8oiqLyaoaV5R+1111

2019-01-29 08:25:41

tcmalloc的使用问题

tcmalloc能用作内存池,优化malloc和线程分配内存的效率。它是gperftools的一员,gperftools还提供了heap-checker,heap-profiler和cpu-profiler三个工具。源码下载:https://github.com/gperftools/gperftools编译完后就可以使用tcmalloc库了:-ltcmalloc-ltcmalloc_m...

2018-10-03 15:26:07

exit() 和 _exit() 的区别

exit()和_exit()的效果都是让程序退出执行,而_exit()用来“尽快”退出。atexit()先说一下atexit()函数。我们可以用atexit()注册一个或多个函数退出清理函数(或者on_exit()但这个函数不建议用),这些清理函数按照注册时的反顺序,在exit()或main函数return时被调用。#include<stdlib.h>inta...

2018-06-24 22:58:55

stdout行缓冲和stderr无缓冲的含义

stdout和stderr有人说stdio是带缓冲的,stderr是不带缓冲的,这并不是指fd=1和fd=2这两个设备文件,这两个设备是字符设备,本身没有缓存。并且你看一个进程的1和2两个fd指向的其实是同一个终端设备文件:[root@ubuntu]arm-code:$ls-l/proc/8669/fd/total0lrwx------1rootroot644月...

2018-06-24 22:57:25

leap smear是什么

用来解决润秒突变时可能会造成的系统运行异常。对时间同步也有一定参考意义。原文:https://googleblog.blogspot.com/2011/09/time-technology-and-leaping-seconds.htmlGoogle’sSiteReliabilityteamisresponsibleforkeepingGoogle’sservicesa...

2018-06-24 22:54:55

Linux内核中负责回写脏页的线程

内核版本3.0和3.4.35(不同内核版本的回写机制不同哦~)Linux内核里负责回写脏页的线程称为flusher线程,它们以“flush-”+“设备名”来命名,例如”[flush-8:64]”(这里设备名是指用设备号拼接的字符串)。在BDI(即backingdeviceinfo)模块初始化(default_bdi_init())时会创建”[sync_supers]”和”[bd...

2018-05-08 23:25:04

__attribute__((context())属性理解

原文:http://blog.chinaunix.net/uid-14528823-id-4284946.html另外还有一篇补充:内核工具–Sparse简介看spinlock的实现代码中,会发现有如下的实现:void__lockfunc_raw_spin_lock(raw_spinlock_t*lock)__acquires(lock);void__lockfunc...

2018-05-05 23:53:07

指针、数组、数组指针、函数指针

1.数组和指针的大小对于指针,无论它指向何种类型(int、char或是结构体等类型),指针自身总是占用4个字节(32位的long型大小),因为指针和它指向的内容是分离开的,指针本身只保存实际内容的地址,因此其大小就是系统地址范围的大小。对于数组,其本身就是用在存放实际内容的,因此它的大小就是这个数组实际需要的内存大小,例如数组shortscore[6];就是定义了一个包含6个shor...

2018-05-02 18:56:44

为什么最小帧长度是64字节

我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信...

2018-05-02 18:54:25

Linux IO的buffer cache和page cache合并的原因

我先大概解释一下,这里“buffercache”中的buffer指的是以前块设备层中用来缓存磁盘内容的结构,一个buffer大小就是磁盘中一个block的大小。这里“pagecache”指的是文件系统层用于缓存读写内容的cache,因为这一层在设备层之上,因此和内核其他地方一样,以page为单位来管理。我们看到free命令打印中,有的版本cached和buffers是分开的,有的版本是“c...

2018-04-30 19:17:48

Linux内核中的内存屏障

编译器有时会对代码做一些优化,例如尝试在保证程序执行正确的前提下修改指令顺序或优化ldr/str指令,让程序执行地更快。但是编译器毕竟不能完全猜透人的心思,有时候它做的优化会导致程序运行不符我们的预期。因此,内核中提供了一些额外的函数,可以插在某段代码里,告诉编译器不要在这里做指令优化。这些函数分为两种:内存屏障:rmb(),wmb(),mb(),可以防止硬件上的指令重排。除了编译器,...

2018-04-30 19:07:16

offsetof 和 container_of 的用途

offsetof()和container_of()两个宏定义在Linux内核中很常见。我们在应用程序编程时可能也需要用到,因此可以把这两个宏定义copy过来。offsetof(type,member)用来求结构体type中的member成员在type中的偏移,其定义如下:#defineoffsetof(TYPE,MEMBER)((size_t)&((TYPE...

2018-04-24 19:21:06

Linux中的字符串和字节序列处理函数

花了两天的时间总结了Linux编程时的字符串操作函数和字节序列操作函数,以便后续查阅。这些函数大都不会去检查传入的参数是否为NULL,因此在使用之前要自己做检查,否则后果你懂的。一个基本知识点:字符串处理中,如strcpy,字符串都是以’\0’来判断结束的。字节序列处理中,如memcpy,操作内存字节,不在乎’\0’或其他字符。下列函数基本都包含在头文件string.h中,如果...

2018-04-24 19:19:01

Linux内核中的page migration和compaction机制简介

我们知道buddy容易产生内存碎片,内核中可以通过给页面设置迁移类型以及compaction机制来预防和处理内存碎片。内存页主要有下面三种类型:1.可移动的(movable)。用户态申请。2.可回收的(reclaimable)。文件系统的cache。3.不可移动(unmovable)。内核申请用。可移动的页面,顾名思义就是在被分配之后,还可以改变在物理内存中的位置。只要更新一下...

2018-04-06 18:31:55

Linux内核中的skb_queue_splice_tail_init函数

skb_queue_splice_tail_init()函数用于将链表a连接到链表b上,形成一个新的链表b,并将原来a的头变成空链表。其实现如下:/***skb_queue_splice_tail-jointwoskblistsandreinitialisetheemptiedlist*@list:thenewlisttoadd*@...

2018-04-06 13:26:00

用户程序函数调用过程中的参数传递方式

在C语言中,在调用一个函数func()时,如果func()接受不超过4个的参数,则调用者直接将实参从左到右依次赋值给r0,r1,r2,r3寄存器(如果是指针则传入地址),然后调用func()。进入func()函数后,func()将自己的栈紧接着caller的栈顶向下扩展,从r0,r1,r2,r3寄存器中拿参数,然后开始做事。而如果func()有超过4个参数,例如:intf...

2018-03-29 20:32:47

看盘古系统杂记

看视频盘古:阿里云飞天分布式存储系统实践过程中记的乱七八糟的东西。仅是个人笔记供以后查阅,没有参考价值,各位看官还是各自散去~分布式和集群的区别:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。...

2018-03-10 21:26:05

Linux内核中的锁

1.为什么要保证原子性处理器分两种:cisc(复杂指令集,可以直接在内存上进行操作,如x86,一条汇编指令可以原子的完整读内存、计算、写内存)和rics(精简指令集,所有操作都必须是在CPU内部进行。所以你想给内存某个变量做加法,你要先用load指令把内存load到CPU的寄存器、再执行add,再执行store把结果放到内存中)。因此a++这句话在rics上并不是原子的,必须翻译成一个r...

2018-03-07 00:05:34

Linux内存管理 —— DMA和一致性缓存

1.出现内存不一致的原因CPU写内存的时候有两种方式:1.writethrough:CPU直接写内存,不经过cache。2.writeback:CPU只写到cache中。cache的硬件使用LRU算法将cache里面的内容替换到内存。通常是这种方式。DMA可以完成从内存到外设直接进行数据搬移。但DMA不能访问CPU的cache,CPU在读内存的时候,如果cache命中...

2018-03-06 18:34:30

Linux内存管理 —— 文件系统缓存和匿名页的交换

1.swap的含义在Linux里swap有两个意思:1.动词:交换。内存和磁盘的颠簸行为。2.名词:硬盘的swap分区。没有文件背景的页面,即匿名页(anonymouspage),如堆,栈,数据段等,不是以文件形式存在,因此无法和磁盘文件交换,但可以通过硬盘上划分额外的swap交换分区或使用交换文件进行交换。即上面wap作为名词的意思。Swap分区可以将不活跃的页交换到硬盘...

2018-03-06 18:27:22

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!