
linux 设计与实现
文章平均质量分 75
lianliange85
这个作者很懒,什么都没留下…
展开
-
asynchronous vs non-blocking
linux 同步异步 阻塞 非阻塞原创 2016-10-10 15:46:01 · 443 阅读 · 0 评论 -
IRQ Affinity
硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。VPSee 前天收到一位网友的邮件提到了 SM转载 2015-01-25 22:46:02 · 848 阅读 · 0 评论 -
Shell 处理命令cmdline 选项
处理命令行参数是一个相似而又复杂的事情,为此,C提供了getopt/getopt_long等函数,C++的boost提供了Options库,在shell中,处理此事的是getopts和getopt.getopts和getopt功能相似但又不完全相同,其中getopt是独立的可执行文件,而getopts是由Bash内置的。先来看看参数传递的典型用法: * ./tes转载 2015-01-22 23:35:52 · 1566 阅读 · 0 评论 -
akw获取外部变量
这里提到awk,相信写shell的朋友都会接触到。AWK 是一种用于处理文本的编程语言工具。AWK 提供了极其强大的功能:可以进行正则表达式的匹配样式装入流控制数学运算符进程控制语句内置的变量和函数可以把awk看作一门完全的程序设计语言,它处理文本的速度是快得惊人的。现在很多基于shell 日志分析工具都可以用它完成。设计简单,速度表现很好。 涉及到以上六个方面内容,我会在以后文章转载 2015-01-22 23:22:39 · 706 阅读 · 0 评论 -
linux(SUSE) service 自启动服务
1.what is rc_statusThe commands from rc.status are actually SuSe specific I think. AFAICT they handle two things: output to the user and the final return status of the script. rc_status checks i原创 2015-01-23 16:01:53 · 4331 阅读 · 0 评论 -
shell awk 用法总结
关于NR和FNR的典型应用:现在有两个文件格式如下:#cat account张三|000001李四|000002#cat cdr000001|10000001|20000002|30000002|15想要得到的结果是将用户名,帐号和金额在同一行打印出来,如下:张三|000001|10张三|000001|20李四|000002|30转载 2015-02-10 13:33:36 · 1004 阅读 · 0 评论 -
shell 进制转换
shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值。如:以 0 开头就是 8 进制.以0x 开头就是16 进制数.使用方法:其它进制转为10进制八进制转十进制:[chengmo@centos5 ~]$ ((num=0123));[chengmo@centos5 ~]$ echo $num转载 2015-02-10 13:23:04 · 616 阅读 · 0 评论 -
bash 与 csh 区别
BASH中的算术运算表达式定义变量:Var=2Var1=3Var2=4可用的写法:1、Var=$[$Var1 + $Var2] 或 Var=$[$Var1 + 1]2、Var=$[Var1 + Var2] 或 Var=$[Var1 + 1]3、Var=$(($Var1 + $Var2)) 或 Var=$(($Var1 + 1))转载 2015-01-20 13:57:39 · 14595 阅读 · 0 评论 -
Xargs用法详解
1. 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:find /sbin -perm +700 |ls -l 这个命令是错误的find /sbin -perm +700 |xargs ls -l 这样才是正确的xargs 可以读入 stdin 的资料,并且以空白字元或转载 2015-01-14 23:46:38 · 437 阅读 · 0 评论 -
tr 删除控制字符
tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。语法:tr [–c/d/s/t] [SET1] [SET2]SET1: 字符集1SET2:字符集2-c:complement,用SET2替换SET1中没有包含的字符-d:delete,删除SET1中所有的字符,不转换-s: squeeze-repeats,压缩SET1中重复的字符-t: trun转载 2015-01-14 23:44:53 · 1001 阅读 · 0 评论 -
同步 异步 阻塞 非阻塞机制
知乎:阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就转载 2015-08-26 23:22:19 · 579 阅读 · 0 评论 -
内核双链表 list_entry实现
list_entry(ptr, type, member)语句理解 list_entry(ptr, type, member)语句定义在文件include/linux/list.h中。00342: /**00343: *list_entry-getthestructforthisentry00344: *@ptr:the&structlist_headpointer.00转载 2016-02-16 14:15:30 · 590 阅读 · 0 评论 -
Linux schedule introduction
In Linux kernel, the scheduler is invoked by periodic timer interrupt. This iscalled periodic scheduling which is essential for preempting tasks that have consumed more CPU cycles in order tooffer转载 2016-10-08 15:03:32 · 409 阅读 · 0 评论 -
linux seq 锁实现
seq lock: 2.6版本内核引入Application: 用于读写共享数据;Benifit: 读者不影响写锁,单一的写者与多个读者并发执行;Implement: 利用序列计数器,写锁获取或释放都会使序列值加1,读取数据前和后检查序列号: 1.值为偶数,则没有写者持有锁; 2.利用异或 检查序列值是否发生改变,改变了则期间写者对其加1了。#i原创 2016-10-18 17:36:45 · 740 阅读 · 0 评论 -
Linux memory performance analysis
Memory metrics: 1.Free memoryCompared to most other operating systems, the free memory value in Linux should not bea cause for concern.“The Linux kernel allocates most unused memory as file sys原创 2016-11-04 15:19:29 · 735 阅读 · 0 评论 -
Generate high cpuload on specified cpu core
Purpose : generate CPU load on CPU cores to test server thoughput related to cpu switch.Step: 1. Set affinity mask to include cpu and only cpupthread_setaffinity_np(pthread_self(), sizeof(cpu_原创 2016-11-03 13:27:51 · 581 阅读 · 0 评论 -
threadPool example
Thread Pools are useful when you need to limit the number of threads running in your application at the same time. There is aperformance overhead associated with starting a new thread, and each thre转载 2016-10-12 18:35:40 · 420 阅读 · 0 评论 -
connect nonblock mode
非阻塞connect(non-block mode connect)套接字执行I/O操作有阻塞和非阻塞两种模式。在阻塞模式下,在I/O操作完成前,执行操作的函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。相反,在非阻塞模式下,套接字函数会立即返回,而不管I/O是否完成,该函数所在的线程会继续运行。客户端调用connect()发起对服务端的socket连接,如果客户端的socket转载 2016-09-24 19:09:46 · 992 阅读 · 0 评论 -
kernel space and user space
1.What's the difference between kernel stack and user stack ?In short, nothing - apart from using a different location in memory(and hence a different value for the stackpointer register), and转载 2016-10-10 15:59:32 · 568 阅读 · 0 评论 -
linux_for_each_entry
在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下: 假设下面几个结点,则第一个member代表head,list_for_each_entry的作用就是循环遍历每一个pos中的member子项。list_for_each_entry应用: 它实际上是一个 for 循转载 2016-02-16 15:48:54 · 589 阅读 · 0 评论 -
Linux 双链表 list_for_each_entry 实现
们知道list_for_each_entry会用到list_entry,而list_entry用到container_of,所以首先讲讲container_of。在讲container_of之前我们不得不提到offsetof,因为在container_of中会使用到它,所以我们看下来,把list_for_each_entry函数的用法理顺我们对整个Linux中经常用到的一些函数就会比较转载 2016-02-16 15:44:30 · 581 阅读 · 0 评论 -
AWK 循环
循环awk有三种循环:while循环;for循环;special for循环。$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test通过while语句实现循环$ awk '{for (i = 1; i test 通过for语句实现循环变量的初始值为1,若i小于可等于NF转载 2015-01-14 23:43:19 · 832 阅读 · 0 评论 -
sed N与n 用法说明
echo -e "1\n2\n3\n4"的结果是:1234echo -e "1\n2\n3\n4" | sed -n 'N;s/\n/ /;p'sed先读入第一行到pattern space,然后执行N命令,将第二行追加进pattern space这时pattern space里面就是1\n2,然后执行s/\n/ /,将换行符替换成空格,最后打印。echo -e转载 2015-01-14 23:41:46 · 2571 阅读 · 0 评论 -
linux poen函数
函数原型: #include “stdio.h” FILE *popen( const char* command, const char* mode ) 参数说明: command: 是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用 -c 标志,shell 将执行这个命令。 mode: 只能是读转载 2014-02-25 17:18:11 · 5484 阅读 · 0 评论 -
fgets()和fputs()函数
fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。#include char *fgets(char *s, int size, FILE *stream);char *gets(char *s);返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULLgets函数无需解释,Man Page的BUGS部转载 2014-02-25 18:10:18 · 780 阅读 · 0 评论 -
Linux initrd 详解
在Linux操作系统中,有一项特殊的功能——初始化内存盘INITRD(INITial Ram Disk)技术,而且内核支持压缩的文件系统映像。有了这两项功能,我们可以让Linux系统从小的初始化内存盘启动,并把系统内存的一部分作为根文件系统挂载。 Ramdisk就是将内存的一部分分配为一个分区并作为硬盘来使用。对于系统运行时不断使用的程序,将它们放在Ramdisk中将加快计算机的操作,如转载 2014-01-24 15:02:46 · 985 阅读 · 0 评论 -
linux 网络配置
检查网卡的芯片型号 linux系统对硬件的识别是以芯片组的厂商为依据的,而不是硬件品牌。查找网卡芯片方法:1.拆机箱,找到网卡上最大的芯片上写的芯片类型记录下来即可。2.用linux命令查看,通过lspci命令可以看到。lspci | grep –in ‘ethernet’02:01.0Ethernet controller: Intel Corporation 8254转载 2014-01-21 16:27:19 · 2877 阅读 · 0 评论 -
驱动中的宏定义
原文:http://blog.youkuaiyun.com/woshixingaaa/archive/2011/06/02/6462065.aspx本文档讲解一下驱动中常用的宏,下边一个一个来说,先声明我使用的内核是Linux2.6.30.4。Linux在arch/$(ARCH)/kernel/vmlinux.lds中定义了.init段,当内核启动完毕,这个段中的内存会被释放掉供其他使用,vmli转载 2013-09-13 09:58:07 · 1559 阅读 · 0 评论 -
详解linux中I/O端口与I/O内存
讲解透彻,原文地址:http://www.linuxidc.com/Linux/2012-01/51761p2.htm一、I/O端口 端口(port)是接口电路中能被CPU直接访问的寄存器的地址。几乎每一种外设都是通过读写设备上的寄存器来进行的。CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、转载 2013-09-12 10:36:41 · 1167 阅读 · 0 评论 -
request_mem_region 申请物理内存函数
文章出处:http://www.linuxidc.com/Linux/2012-08/68253.htmrequest_mem_region这里我们看到的那个 request_mem_region 是申请 I/O 内存用的 . 申请了之后 , 还需要使用 ioremap 或者 ioremap_nocache 函数来映射 .对于 request_region, 三个参数 start,转载 2013-09-11 14:15:07 · 2697 阅读 · 0 评论 -
Linux/Unix Fork与Exec使用
原文出处:http://www.cnblogs.com/hicjiajia/archive/2011/01/20/1940154.html一、引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面转载 2013-09-11 10:25:47 · 1468 阅读 · 0 评论 -
Howto: Build Linux Kernel Module Against Installed Kernel w/o Full Kernel Source Tree
依赖内核头文件编译内核模块Linux Kernel headersThis is essential because if you just want to compile and install driver for new hardware such as Wireless card or SCSI device etc. With following method转载 2013-09-03 14:00:08 · 977 阅读 · 0 评论 -
linux fileno函数
函数fopen()就是返回打开文件的指针。其实文件描述符和文件指针是可以互相转换的。这要通过fdopen和fileno两个函数实现。它们都包含在头文件stdio.h中。先看fdopen的原型:FILE * fdopen(int filedes, const char *opentype);第一个参数filedes是一个打开的文件描述符,opentype是表示打开方式的字符串,和fopen函转载 2014-02-25 17:23:41 · 6318 阅读 · 0 评论 -
父进程与子进程 wait, WIFEXITED, WEXITSTATUS 函数
wait()的函数原型是:#include #include pid_t wait(int *status)进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出。如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现转载 2014-02-27 14:45:08 · 966 阅读 · 0 评论 -
linux signal函数定义
C语言中的抽象函数定义也就是使用了函数指针,这里用signal函数解释一下抽象函数定义的含义和规则。signal函数定义为:void ( * signal(int signum , void (*handler)(int) ) )(int); 可以这样定义typedef void(* handler) (int)handler signal(int sig转载 2014-04-21 17:19:57 · 808 阅读 · 0 评论 -
linux 消息队列
【snd.c】#include #include #include #include #include #include #define MAX_TEXT 512struct my_msg_st {long int my_msg_type;char some_text[MAX_TEXT];};int main(){int i = 10;i转载 2014-04-21 17:59:30 · 612 阅读 · 0 评论 -
linux perror()函数
头文件: #include perror是包含在这个文件里;函数定义: void perror(const char *s); 函数说明 perror ( )用 来 将 上 一 个 函 数 发生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上出错原因字符串。此错误原因依照全局变量err原创 2014-02-27 16:21:45 · 4326 阅读 · 0 评论 -
Linux下多线程(pthread)编程实例
Linux系统下的多线程遵循POSIX线程接口,称为 pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。顺便说一下,Linux 下pthread的实现是通过系统调用clone()来实现的。clone()是 Linux所特有的系统调用,它的使用方式类似fork,关于clone()的详细情况,有兴趣的读者可以去查看有关文档说明。下转载 2012-10-20 23:39:55 · 520 阅读 · 0 评论