
Linux
ordeder
关注Linux&TCPIP&Nginx&Redis
展开
-
linux系统调用学习笔记
linux内核设计与实现学习笔记 系统调用笔记定义 系统调用的设计是为了更好的管理用户对系统硬件资源的使用,采用统一的接口有利于系统的稳定和安全。 API是编程接口,他可以是一个或者由多个系统调用来实现。 C库封装了许多系统编程接口,按照posix标准来编写。 系统调用的过程 应用程序调用fopen ->原创 2013-08-19 13:28:15 · 863 阅读 · 0 评论 -
epoll之ep_insert()源码分析
参考:http://www.cnblogs.com/apprentice89/p/3234677.htmlep_insert()过程中涉及的数据结构及回调函数如下图所示:其中,红色部分回调函数构造了红色部分的结构体,黄色部分结构体主要由init_poll_funcptr和主函数ep_insert构造。具体源码表在下面,重点环节已标出,以后有空再完善吧~str原创 2014-05-11 00:14:45 · 3387 阅读 · 1 评论 -
epoll()涉及到的两种wait队列分析
主要是等待队列的回调函数用处不同,1的回调是为了唤起处于等待事件而处于休眠的进程,2的回调是为了将epitem中的rdllink结构加入到ready list中。原创 2014-04-24 23:31:18 · 7342 阅读 · 1 评论 -
Linux-2.6 open()打开文件涉及的内核处理和数据结构分析
Linux-2.6 文件打开过程涉及数据结构分析:fd = open(path,flag,mode)1. 进程打开一个文件,需要消耗该进程的一个文件描述符fd,该fd是用来唯一标示打开的文件,也成为文件号。通过函数get_unused_fd_flags从根据fdtable返回一个空闲的fd,fd对应的task_struct->files[fd]空闲的。进程打开一个文件,需要消耗该进程的一个文件描述符fd,该fd是用来唯一标示打开的文件,也成为文件号。通过函数get_unused_fd_flags从根据原创 2014-04-24 16:28:55 · 3809 阅读 · 0 评论 -
vim7.2 代码自动补全的配置
系统 ubuntu10.4vim 7.2ctags vim7以上已经自带~omnicppcomplete omnicppcomplete-0.41.zip第一步:问本用户创建配置文件和目录文件: ~/.vimrc目录: ~/.vim/plugin ~/.vim/doc ~/.vim/syntax第二步:安装omni原创 2013-12-21 22:17:37 · 4764 阅读 · 0 评论 -
Wait4 & Ptrace & 进程调试 & 子进程状态获取 笔记总结
实例http://hi.baidu.com/ordeder/item/4c31f93512e6524d3075a1b0Ptrace详解http://www.cnblogs.com/catch/p/3476280.htmlPtrahttp://blog.sina.com.cn/s/blog_4ac74e9a0100n7w1.html原创 2014-10-05 12:17:29 · 1417 阅读 · 0 评论 -
Ubuntu 10.10 老版本源列表
deb http://old-releases.ubuntu.com/ubuntu/ maverick main restricted universe multiversedeb http://old-releases.ubuntu.com/ubuntu/ maverick-security main restricted universe multiversedeb http://ol原创 2014-11-01 16:50:00 · 2327 阅读 · 0 评论 -
Linux Malloc分析-从用户空间到内核空间
本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系。每当进程调用malloc,首先会在该堆缓冲区寻找足够大小的内存块分配给进程(选择缓冲区中的那个块就有首次命中和最佳命中两种算法)。如果freechunklist已无法满足需求的chunk时,那么malloc会通过调用系统调用brk()将进程空间的堆进行扩展,在新扩展的堆空间上建立一个新的chunk并加入到freelist中,这个过程相当于进程批量想系统申请一块内存(大小可能比实际需求大得多)。原创 2014-12-01 22:35:33 · 18433 阅读 · 2 评论 -
Linux 虚拟地址与物理地址的映射关系分析
3.1用户空间的映射:1. 用户空间的虚拟地址vaddr通过MMU(pgd,pmd,pte)找到对应的页表项x(即为物理地址)2. 页表项x的高20位是物理也好,物理页号index = x >> PAGE_SHIFT, 同理,index后面补上12个0就是物理页表的首地址。3. 通过物理页号,我们可以再内核中找到该物理页的描述的指针mem_map[index],当然这个指针是虚拟地址,page结构见上文。3.2内核空间虚拟地址的映射:内核空间与物理地址之间有直接的映射关系,而不需要向用户空原创 2014-11-30 23:20:10 · 22695 阅读 · 1 评论 -
epoll()学习
前言Redis源码中的文件事件轮询,对于linux采用了epoll而非select。故而对epoll产生了兴趣,查资料发现原来epoll比select高效不少。下面是看了几篇文章的一点心得。目前还没真正的看epoll源码,看起来源码比select复杂,等以后有时间在好好啃一啃。几个关键点1. epoll是linux独有的。2. 系统启动的时候,会构建特殊的文件系统。 epf原创 2013-10-19 14:28:47 · 1087 阅读 · 0 评论 -
Linux 2.6 Alarm信号中断遇上函数阻塞
Unix网络编程 中提到,可以使用alarm + signal 机制产生信号,从而使程序从阻塞的函数调用中跳出,例子如下:服务进程使用阻塞的监听套接字进入监听,设置3s的alarm,确保3s内无客户端连接,看服务进程是否能在alarm触发后跳出accept阻塞;实践证明,Linux在处理完信号中断后,还会进入原有的阻塞代码中,而不是执行阻塞代码的下一条。原创 2014-03-25 21:27:02 · 3765 阅读 · 0 评论 -
linux下的进程管理
linux内核设计与实现学习笔记 进程管理 进程 Fork() 父进程 子进程 Exec() 载入程序 Exit():进程退出执行,处于僵死状态 负责进程内存销毁(task_struct保留) Wait4(原创 2013-08-19 13:28:18 · 1051 阅读 · 0 评论 -
内核网卡参数设置:devinet_ioctl()
devinet_ioctl() 根据用户空间提供的ifreq参数和cmd操作对网卡进行设置或参数的获取cmd:大体分为两种,即set和getp.s. 有意思的是,用户空间的ifreq指针指向的参数需要拷贝到内存空间中,让后函数才能对参数进行解读和分析。 copy_from_user(&ifr, arg, sizeof(struct ifreq)原创 2013-08-19 13:28:20 · 1788 阅读 · 0 评论 -
Linux2.4-net源码学习笔记 IO多路复用之select()
select用于多路IO,所谓多路就是同时监听fd_set *readfds,fd_set *writefds,fd_set *errorfds这三个集合中的fd。函数的返回值int是监听的具备条件的fd个数。还有,select返回后的参数fd_set *readfds,fd_set *writefds,fd_set *errorfds是select的结果集合。本文将带你走进linux中select()是如何实现这些fd集合的检测。原创 2013-08-25 22:19:51 · 1954 阅读 · 0 评论 -
进程的信号量&线程的互斥量
进程的信号量(semaphore)和线程的互斥量(mutex)本质上都是为了实现互斥,但是线程的mutex的api(pthread_mutex_xxx)相比进程的semaphore的api(semxxx())相比,简洁很多。本质上来说,semaphore是在内核空间,个进程通过系统调用来实现变量操作;而mutex是在用户进程空间定义的,从属于该进程的所有线程皆可访问,而pthread_xxx的接口原创 2014-02-15 16:21:52 · 1073 阅读 · 0 评论 -
socket 协议簇套接字地址和通用套接字地址
套接字的地址结构看着貌似很复杂,因为经常看到定义一个地址的时候用到struct sockaddr_in,而在bind中的地址参数是struct sockaddr。他们之间的关系是什么呢?原创 2014-02-16 13:42:29 · 4872 阅读 · 0 评论 -
Posex信号量 实现进程间的同步(生产者&消费者)
Posex信号量sem实现多个线程的互斥,只需在进程空间定义好sem_t变量即可,因为各个线程是共享该sem_t变量。同理,如果sem要实现进程间的互斥,这个sem_t的变量就要在共享存储中定义,因为,两个进程对sem_t的操作必须是同一个地址空间的变量,才能实现信息同步,从而达到互斥的目的。而进程间的数据共享,用共享存储即可。原创 2014-03-10 22:35:33 · 3511 阅读 · 0 评论 -
基于信号驱动式IO的监听套接字(O_ASYNC,O_NONBLOCK)
背景Source: http://blog.youkuaiyun.com/ordeder/article/details/22733077(Unix网络编程卷1说明如下)设置套接字信号驱动式io(SIGIO)需要三个步骤:1.建立SIGIO信号的处理函数2.设置套接字的属主,即fcntl:F_SETOWN3.开启套接字的信号驱动是IO,即:fcntl:O_ASYNC引起套接原创 2014-04-01 14:55:30 · 3360 阅读 · 0 评论 -
进程调用fork与文件描述符的共享(fork,dump)
Linux的进程描述task_struct{}中有一个数组专门用于记录一打开的文件,其中文件描述符作为该数组的下标,数组元素为指向所打开的文件所创建的文件表项。如下图所示,文件表项是用于描述文件当前被某个进程打开后的状态信息,包括文件状态标志,记录当前文件读取的位移量(可以通过接口lseek设置),以及文件的i节点指针(i节点描述文件的具体信息,如:创建,修改时间,文件大小,文件存储的块信息)。进程调用fork后,打开的文件描述符进行拷贝,那么两个进程对文件描述符的操作有相关性吗?原创 2014-03-21 14:58:24 · 10391 阅读 · 4 评论 -
sigaction 使用
函数sigaction原型:int sigaction(int signo,const struct sigaction *restrict act, struct sigaction *restrict oact); @signo 信号编号 @act 要注册的信号动作 @oact 原信号动作参数 struct sigactionstruct sigaction{原创 2016-03-05 16:55:54 · 3112 阅读 · 0 评论