- 博客(53)
- 资源 (8)
- 收藏
- 关注
转载 多播(组播)原理分析
为什么要使用多播: 网卡从网络上接收到目标物理地址对应的所有bit位都为1的数据报时,会收到这条消息并将其上传给驱动程序,网卡的这种工作模式称为广播模式,网卡的缺省工作模式包含直接模式和广播模式。利用这一特性,UDP(用户数据报协议)还提供了向多个目标地址发送广播数据包的能力。广播数据即数据从一个工作站上发出,只要将数据包的目标物理地址对应的所有bit位都设为1,局域网内的所有工
2014-07-09 13:20:26
2126
转载 LSPCI详解分析
一、PCI简介 PCI是一种外设总线规范。我们先来看一下什么是总线:总线是一种传输信号的路径或信道。典型情况是,总线是连接于一个或多个导体的电气连线,总 线上连接的所有设备可在同一时间收到所有的传输内容。总线由电气接口和编程接口组成。本文讨论Linux 下的设备驱动,所以,重点关注编程接口。 PCI是Peripheral Component Interconnect(外围设
2014-03-22 08:53:22
6636
转载 ata驱动框架
这里所说的ATA Disk包含两大类:一类是传统的并行ATA(PATA),即IDE接口;另一类是目前流行的串行ATA(SATA)。对于IDE的驱动,Linux-2.6.28还进行了保留,其可以驱成传统的HD设备,也可以驱成流行的SD设备。对于SATA设备,Linux的标准做法是驱成SD设备,下面对传统ATA的驱动架构和目前流行ATA的驱动架构进行对比分析说明。 传统ATA
2014-03-21 09:39:36
4663
原创 glibc编译及makefile机制
本文只列出glibc的makefile中比较难以找出的一些规则,一些细节可以详细阅读glibc的makefile系统。 I.编译[redhat@localhost build]$ ../glibc-2.16.0/configure --disable-sanity-checks[redhat@localhost build]$ make | tee make.logi.
2013-12-26 22:59:01
6917
原创 perl hexdump
#!/usr/bin/perl#author : morphad#date : 2013-12-26use warnings;use strict;use IO::File;use Fcntl;sub hexdump{ my $data = shift; my $offset = shift; my @darray
2013-12-26 11:30:56
1455
原创 gdb tracepoint 使用demo
gdb对tracepoint的描述In some applications, it is not feasible for the debugger to interruptthe program's execution long enough for the developer to learn anythinghelpful about its behavior. If the
2013-12-13 23:28:53
4945
原创 redhat 添加DVD作为yum本地源
1.挂载DVD[root@localhost yum.repos.d]# cat /etc/fstab# user defined/home/redhat/pack/rhel-server-6.2-x86_64-dvd.iso /mnt/rhel iso9660 defaults,loop 0 0[root@localhost yum.repos.d]# mount -a
2013-11-30 09:31:36
3117
原创 Wireshark自定义协议RPUDPDL-同序号包统计插件
rpudpdl-stat-ssidsn.lua-- reference "Wireshark User's Guide - Chapter 11. Lua Support in Wireshark"-- This program will register a menu that will open a window with a count of occurrences-- of
2013-11-29 13:22:23
2099
原创 Wireshark自定义协议RPUDPDL(UDP下载)插件 (c版)
/* packet-rpudpdl.c * * RecordPlayer UDP Download Protocol *//* include files */#include "config.h"#include #include #include #include #include #include #include #inc
2013-11-29 12:42:50
2000
原创 linux下静态库.a与.o生成动态库.so
项目中需要用到时间同步,直接使用开源项目ntp中的ntpdate作为客户端来同步时间。但是又不想直接使用ntpdate这个命令,而是以动态库的形式使用。 1 生成ntpdate.so在编译ntpdate可执行程序时,可以看到ntpdate依赖libntp.a, version.o, ntpdate.o。所以ntpdate.so需要由libntp.a, version.o, nt
2013-11-21 22:14:35
1772
原创 linux下查看TCP端口所属进程/线程
在linux下面经常会需要“进程打开了哪些端口,某端口是哪个进程打开的”相关信息,下面来看下如何获取这些信息。注:"进程打开了哪些端口"与“某个端口属于哪个进程/线程”过程相近,只看“某个端口属于哪个进程/线程”1 netstat查看端口及进程用以下命令(需要root权限)查看端口及对应的进程[redhat@localhost ~]$ su密码:[root@localh
2013-11-21 20:20:36
28571
1
原创 查看Wireshark编译器版本
编译Wireshark插件,一般得与编译Wireshark的版本保持一致,这样才能直接将编译生成的dll插件放入Wireshark/plugins中后直接使用,而不用重新编译整个Wireshark。Wireshark Version 1.10.1 1 使用PEiD确定可以看到Linker Info为:10.0VS的Linker版本对应关系为VC6.0 : 6.0
2013-11-21 12:31:13
4285
原创 Wireshark自定义协议RPUDPDL(UDP下载)插件 (lua版)
-- reference "Wireshark User's Guide - Chapter 11. Lua Support in Wireshark"-- RP UDP Download protocoldo-- Proto local p_udpdl = Proto("udpdl","RecordPlayer UDP Download")-- ProtoFiel
2013-11-15 18:58:54
2124
原创 linux aio 实现概览
----------kernel version : 2.6.32.60----------I.aioAsynchronous I/O帮助用户程序提高CPU和IO设备的利用率和提高程序性能,特别是在高负载的IO操作下。比如各种代理服务器,数据库,流服务器等等。AIO可以一次性发出大量的read/write调用并且通过通用块层的IO调度来获得更好的性能,用户程序也可以减少
2013-11-04 20:42:32
4635
原创 ecb 布局配置 (emacs-ecb-cust-layout.el)
emacs-ecb-cust-layout.el; -*- mode: Lisp -*-;; reference path-to-ecb/ecb-layout-defs.el(ecb-layout-define "leftright-sa-m" left-right "This function creates the following layout: --
2013-10-27 21:24:38
1712
原创 aio 运用demo
aio.c#include #include #include #include #define error() printf("error [%s : %d]\n", __FILE__, __LINE__)#define BUFF_SIZE 51#define BUFF_CNT 50/* * 异步读取BUFF_CNT次__FILE__文件,每次大小
2013-10-23 15:10:28
1469
原创 c++ STL 红黑树实现
红黑树是一种自平衡二叉查找树,它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。 红黑树应用:1.linux内核中,进程的虚拟地址区间由红黑树组织管理2.nginx中,超时时间由红黑树组织管理3.C++ STL中,C++中set,multiset,map,multimap集合模板类都是在STL
2013-08-06 23:02:20
2214
原创 linux 系统调用epoll_create epoll_ctl epoll_wait
epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。epoll主要涉及epoll_create epoll_ctl epoll_wait三个基本系统调用,及增加功能的epoll_create1,epoll_pwait epoll相对poll
2013-07-23 19:35:55
4430
原创 linux 当前处理信号自动屏蔽
当某个信号被处理时(即正在执行信号处理handler),内核会自动阻塞该信号的再次传递(再次传递会导致信号处理handler的嵌套);当信号处理返回后,内核会自动恢复该信号到调用信号处理handler之前的阻塞状态;如信号SIGUSR1在调用handler之前未被阻塞,在调用handler时被阻塞,handler执行完后恢复未被阻塞状态;信号SIGUSR2在调用handler之前被阻塞
2013-07-08 20:13:31
1402
原创 c++ 单例模式多线程竞态条件
单例模式在类只允许一个实例时用到以下是摘自“Design Patterns Elements of Reusable Object-Oriented Software”一书中单例模式实现:class Singleton {public: static Singleton* Instance();protected: Singleton(){};private: st
2013-07-06 15:29:54
3005
原创 linux signal传递(处理)
内核版本:2.6.32.60linux信号传递阶段发生在异常/中断返回到用户态时;当内核由内核态返回到用户态时,如果有信号pending到当前进程,内核就将信号传递给进程并做信号处理I.异常/中断返回i.信号传递由以下注释可以看出异常/中断或系统调用(特殊的中断)退出时,都会去检测pending的信号并做处理/* arch/x86/kernel/entry_32.S */
2013-07-05 23:03:58
2565
原创 linux signal产生(发送)
不论是内核发送信号(硬件异常-SIGSEGV等、软件通知-SIGPIPE等、终端键-SIGINT等),还是用户进程发送信号(kill系统调用),都要由内核将信号记录到相应(轻量级)进程描述符中的信号相关结构中、唤醒被阻塞的目标进程等。在信号发送阶段,内核将信号添加到信号pending队列中;在信号传递阶段,内核将信号从pending队列中取出,并处理(包括调用用户自定义处理、SIG_DFL默认
2013-07-04 23:07:19
5222
原创 linux 信号signal实现
信号是发送给进程或进程组的非常小的消息,通常只包含信号编号;现在的系统可以附带siginfo信息,见sigaction的SA_SIGINFO标识。信号主要有以下两个目的:1.让进程知道出现某异步事件2.出现异步事件,让进程能做出相应的处理(通过提供信号处理函数,由内核自动调用) I.信号生命周期i.信号生命周期1.信号产生:内核更新目标进程数据结构,表示出现某异步事件
2013-07-03 19:16:25
2967
原创 vim配置(~/.vimrc)
vim配置文件.vimrc set number" 缩进set smartindentset shiftwidth=4set softtabstop=4set expandtab" 代码跳转set tags=~/icssvn/tags" 自动补齐filetype plugin on
2013-07-02 23:34:49
967
原创 emacs配置(.emacs.d/init.el)
emacs配置文件.emacs;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;;Basic;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2013-07-02 23:30:27
7932
原创 linux 系统调用pipe
linux的管道是在pipefs上实现的,pipefs实现见linux pipe文件系统(pipefs)注: pipe会在挂载到内核上的pipefs上创建虚拟管道文件(文件对象superblock,dentry,inode,file都是内核内存中);FIFO是在物理文件系统(ext4/ext3/nfs等)中创建管道文件,物理存储中有对应的文件(如文件inode) I.原型
2013-07-02 18:50:21
4895
原创 linux 有名管道FIFO
linux文件主要有4种:普通文件、目录文件、设备文件(字符设备文件/块设备文件)、管道文件 管道文件(p表示管道文件)[redhat@localhost tmp]$ mkfifo fifo[redhat@localhost tmp]$ ll fifoprw-rw-r--. 1 redhat redhat 0 7月 1 22:06 fifo文件系统(ext4/ext3/
2013-07-01 23:01:40
1710
原创 linux pipe文件系统(pipefs)
linux的pipe,FIFO(named pipe)都是基于pipe文件系统(pipefs)的。linux的pipe和FIFO都是半双工的,即数据流向只能是一个方向;pipe只能在pipe的创建进程及其后代进程(后代进程fork/exec时,通过继承父进程的打开文件描述符表)之间使用,来实现通信;FIFO是有名称的pipe,即可以通过名称查找到pipe,所以没有“只能在pipe的创建
2013-07-01 21:31:29
8621
原创 fork & exec时打开文件的变化
在分析linux系统调用fork,linux系统调用execve时,已经知道:1.fork时,子进程会复制父进程的打开文件描述符表2.exec时,进程的打开文件描述符表保持不变 用以下代码观察fork,exec打开文件的变化情况:父进程fork子进程,睡眠一定时间(方便命令行查看打开文件);子进程fork孙进程,睡眠一定时间;孙进程exec新程序,新程序也睡眠一定时间
2013-06-30 16:53:53
2192
原创 linux 系统调用fork vfork clone
fork:通过fork创建新进程vfork:主要用于马上执行exec的情况,因为马上就exec装入新的程序,所以可以去掉fork中分配新的地址空间等操作,进而加速进程创建clone:功能更强,参数更多;主要用于创建线程/父子进程资源共享等,可以通过设置相应的参数实现fork、vfork的功能 I.系统调用i.系统调用arch/x86/kernel/syscall_table
2013-06-29 12:02:18
2906
原创 c++ 虚函数表
c++中的虚函数作用主要是实现多态,用父类指针指向子类实例,通过父类指针调用子类成员函数,而这个成员函数在父类中被声明为虚函数。要实现父类指针调用子类成员函数,主要满足以下两个条件:1、子类实例指针转换成父类指针时,指针所指的子类实例内容必须与父类内容完全一致(成员及顺序);主要是通过在子类继承父类时,按继承顺序将父类内容与子类成员组成子类内容来实现,将子类实例指针偏移一定量就能得到父类指
2013-06-27 22:08:43
1259
原创 linux 虚拟文件系统VFS
与其它系统完美共存是linux的成功之处之一,linux可以透明挂载其它系统文件格式的磁盘或分区,如Windows的FAT32、NTFS等;linux使用虚拟文件系统VFS(Virtual Filesystem Switch)来支持多种类型的文件系统。VFS的思想是:将不同类型文件系统信息存放到内核中,linux所有文件系统支持的每个操作都有一个域与之对应,当读、写或其它功能调用时内核
2013-06-24 18:51:52
1966
原创 linux SysV IPC msg消息队列实现
消息队列是由存放在内核中的消息组成的链表,由IPC id标识。由msgget创建新队列或打开已经存在的队列由msgsnd将消息添加到消息队列尾,每个消息包括正整数标识的类型,非负的长度,及数据。由msgrcv从消息队列中取消息,不必按FIFO取消息,可以通过类型字段取相应的消息。 I.数据结构i.msg_queue 87 /* one msq_queue structu
2013-06-22 11:48:06
3283
原创 linux SysV IPC shm共享内存实现
共享内存可以使多个进程共享某段内存,由于不需要进程间数据复制,所以是速度最快的IPC。多个进程访问共享内存时需要同步机制,如进程A往共享内存中写数据时,进程B不能使用共享内存;通常采用信号量同步多进程访问共享内存。共享内存实现主要有以下几点:1.分配物理内存2.将物理内存映射到进程的地址空间;通过修改进程的页表,可以虚拟地址直接访问物理内存3.进程不再使用共享内存时,取消物理内
2013-06-21 21:41:30
4439
原创 linux SysV IPC sem信号量实现
信号量值是一个计数器,用于控制多进程对共享资源的访问;进程获取共享资源需要以下步骤:1.检查资源的信号量值2.如果信号量值是正,进程可以访问资源;进程将信号量值减1,表示进程已经使用了一个资源3.如果信号量值是0,进程被阻塞直到信号量值大于0;被阻塞进程被唤醒时重复执行步骤1注:检查信号量值和减1必须为原子操作 SysV信号量有以下特征:1.信号量是一个信号量值集合,在
2013-06-20 23:18:11
3558
原创 semop SEM_UNDO标识
当操作信号量(semop)时,sem_flg可以设置SEM_UNDO标识;SEM_UNDO用于将修改的信号量值在进程正常退出(调用exit退出或main执行完)或异常退出(如段异常、除0异常、收到KILL信号等)时归还给信号量。如信号量初始值是20,进程以SEM_UNDO方式操作信号量减2,减5,加1;在进程未退出时,信号量变成20-2-5+1=14;在进程退出时,将修改的值归还给信号量,信号
2013-06-19 21:45:59
5250
原创 linux SysV IPC实现
IPC(Interprocess Communication)表示进程间通信机制;System V IPC机制主要有消息队列、共享内存、信号量,linux中实现了SysV IPC。 I.SysV IPC创建/获取消息队列、共享内存、信号量的创建/获取API原型如下:int msgget(key_t key, int msgflg);int shmget(key_t key, s
2013-06-14 20:44:52
2590
原创 linux cred管理
I.credential管理linux系统中,一个对象操作另一个对象时通常要做安全性检查。如一个进程操作一个文件,要检查进程是否有权限操作该文件。linux内核中,credential机制的引入,正是对象间访问所需权限的抽象;主体提供自己权限的证书,客体提供访问自己所需权限的证书,根据主客体提供的证书及操作做安全性检查。证书管理术语:客体:指用户空间程序直接可以操作的系统对象,如进
2013-06-13 20:43:43
7808
原创 linux idr机制
I.idr机制i.idr介绍系统许多资源都用整数ID来标识,如进程ID、文件描述符ID、IPC ID等;资源信息通常存放在对应的数据结构中(如进程信息存放在task_struct中、ipc信息存放在ipc_perm中),id与数据结构的关联机制有不同的实现,idr机制是其中的一种。idr,id radix的缩写。idr主要用于建立id与指针(指向对应的数据结构)之间的对应关系。idr用
2013-06-07 21:45:23
8917
原创 linux TCP超时重传
TCP超时重传是保证TCP可靠性传输的机制之一,当超时后仍没有收到应答报文,就重传数据包并设置超时时钟(超时时间一般增大到原超时时间2倍);直到收到应答报文或超过最大重试次数。linux TCP超时重传是通过设置重传超时时钟icsk_retransmit_timer来实现的。零窗探测超时时钟与重传超时时钟共用icsk_retransmit_timer,根据icsk_pending是IC
2013-06-04 11:16:48
23565
C99是标准ISO/IEC 9899:1999的简称
2014-03-15
存储技术原理分析:基于Linux_2.6内核源代码(部分)
2014-03-14
The Second Extended File System
2013-12-08
Beamer v3.0 with PSTricks
2013-12-08
python cookbook
2013-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人