2019年2月13日

动态库静态库差异对比

摘要: 最近在做一个项目需要http接口,由此将框架中依赖libcurl的http单独拿来用 libcurl提供两种库:静态库跟动态库,首先curl目下只提供了libcurl.a,并没有生成libcurl.so,由此开始编译依赖静态的http.sog++ -shared -fPIC -o lib/libht 阅读全文

posted @ 2019-02-13 10:17 笨拙的菜鸟 阅读(1088) 评论(0) 推荐(0) 编辑

2017年5月11日

Linux内核之页面换出详解

摘要: kswap线程主要用于页面的定期换出,接下来说说kswap线程的实现 首先kswap线程的初始化时,需要根据物理内存的大小设置一个page_cluster变量的值,这个值表示预读数目 (比如本来只读一个页面,预读3个,就会一次性读取3个页面,这样根据访问局部性原理有利于提高速度) kswap是一个线 阅读全文

posted @ 2017-05-11 20:07 笨拙的菜鸟 阅读(2794) 评论(0) 推荐(0) 编辑

2016年11月17日

libevent源码分析之信号处理

摘要: 新看看官方demo的libevent如何使用信号int called = 0;static voidsignal_cb(int fd, short event, void *arg){ struct event *signal = arg; printf("%s: got signal %d\n", __func__, EVENT_SIGNAL(signal)); if (called >= 2)... 阅读全文

posted @ 2016-11-17 12:26 笨拙的菜鸟 阅读(1152) 评论(0) 推荐(0) 编辑

Linux之epoll详细解析实现

摘要: /* * fs/eventpoll.c (Efficient event retrieval implementation) * Copyright (C) 2001,...,2009 Davide Libenzi * * This program is free software; you can redistribute it and/or modify * it und... 阅读全文

posted @ 2016-11-17 12:23 笨拙的菜鸟 阅读(5695) 评论(0) 推荐(0) 编辑

2016年11月8日

Linux内核之内存管理完全剖析

摘要: linux虚拟内存管理功能• 大地址空间;• 进程保护;• 内存映射;• 公平的物理内存分配;• 共享虚拟内存。实现结构剖析(1)内存映射模块(mmap):负责把磁盘文件的逻辑地址映射到虚拟地址,以及把虚拟地址映射到物理地址(2)交换模块(swap)负责控制内存内容的换入与换出,淘汰最近没访问的页,保留最近访问的页.(3)core(核心内存管理模块):负责内存管理功能.(4)结构特定模块:实现虚拟... 阅读全文

posted @ 2016-11-08 18:49 笨拙的菜鸟 阅读(3761) 评论(0) 推荐(0) 编辑

2016年11月1日

深入解析Linux内核I/O剖析(open,write实现)

摘要: Linux内核将一切视为文件,那么Linux的文件是什么呢?其既可以是事实上的真正的物理文件,也可以是设备、管道,甚至还可以是一块内存。狭义的文件是指文件系统中的物理文件,而广义的文件则可以是Linux管理的所有对象。这些广义的文件利用VFS机制,以文件系统的形式挂载在Linux内核中,对外提供一致的文件操作接口。从数值上看,文件描述符是一个非负整数,其本质就是一个句柄,所以也可以认为文件描述符就... 阅读全文

posted @ 2016-11-01 15:49 笨拙的菜鸟 阅读(4582) 评论(0) 推荐(0) 编辑

2016年10月27日

Linux内核情景分析之异常访问,用户堆栈的扩展

摘要: 情景假设:在堆内存中申请了一块内存,然后释放掉该内存,然后再去访问这块内存。也就是所说的野指针访问。当cpu产生页面错误时,会把失败的线性地址放在cr2寄存器.线性地址缺页异常的4种情况1.如果cpu访问的行现地址在内核态,那么很可能访问的是非连续区,需要vmalloc_fault处理.2.缺页异常发生在中断或者内核线程时,直接失败,因为不可修改页表3.地址在一个区间内,那就可能是已经物理地址映射... 阅读全文

posted @ 2016-10-27 11:10 笨拙的菜鸟 阅读(1681) 评论(0) 推荐(0) 编辑

Linux内核情景分析的alloc_pages

摘要: NUMA结构的alloc_pages==================== mm/numa.c 43 43 ====================43 #ifdef CONFIG_DISCONTIGMEM==================== mm/numa.c 91 128 ====================91 /*92 * This can be refined. Cur... 阅读全文

posted @ 2016-10-27 11:07 笨拙的菜鸟 阅读(2911) 评论(0) 推荐(0) 编辑

linux内核情景分析之execve()

摘要: 用来描述用户态的cpu寄存器在内核栈中保存情况.可以获取用户空间的信息struct pt_regs {long ebx; //可执行文件路径的指针(regs.ebx中long ecx; //命令行参数的指针(regs.ecx中)long edx; //环境变量的指针(regs.edx中)。long... 阅读全文

posted @ 2016-10-27 11:00 笨拙的菜鸟 阅读(1196) 评论(0) 推荐(0) 编辑

linux内核情景分析之exit与Wait

摘要: //第一层系统调用asmlinkage long sys_exit(int error_code){ do_exit((error_code&0xff)pid)//空转进程也就是0号进程禁止退出 panic("Attempted to kill the idle task!"); if (tsk->pid == 1)//1号进程禁止退出 panic("Attempted to kill ini... 阅读全文

posted @ 2016-10-27 10:59 笨拙的菜鸟 阅读(1869) 评论(0) 推荐(0) 编辑

导航