推荐文章 New Blog
kernel中信号量实现(二)
上一篇介绍了信号量可以使用waitqueue实现,这一篇主要讲waitqueue的实现,waitqueue故名思义就是等待队列。waitqueue在linux中的实现主要在下面文件中:include/linux/wait.h kernel/sched/wait.c一、先看数据结构struct __wait_queue_head { spinlock_t lock; ...Dec. 5, 2018, 2:55 a.m.作者:zachary分类:Linux相关阅读(2369)评论(0)
kernel中信号量实现(一)
kernel中很多地方使用了信号量机制,一个典型的实现就是内存回收的触发,在内存进入慢速路径后的第一件事就是唤醒kswapd工作。信号量的使用很简单,总结起来有下面几点:1、初始化信号量。wait_queue_head_t _wait; //变量定义 init_waitqueue_head(&_wait); //变量初始化2、工作线程一般是一个死循环,工作结束后调用wait,等待触发线程唤醒,唤醒后处理wait事件。while(1) { DEFINE_WAIT(wait); //定义临时变量 prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRU...Nov. 27, 2018, 1 a.m.作者:zachary分类:Linux相关阅读(2509)评论(0)
进程退出时,内存回收流程
在android优化中,有一个是技术是ZRAM,ZRAM是基于swap技术的,前几天同事问了个问题,linux内核中通过kswapd或是直接reclaim一个进程到zram中,如果这个进程被杀,那这个进程对应在ZRAM中的内存会不会先解压然后在free,这个问题以前只是知道不会解压的,具体的流程不是很清楚,用了两天时间搞了明白,现在先上图: 进程退出最终调用的是do_exit函数,然后通过一层层vma,pud,pmd,pte找到所有的page,对应page如果是在swap中的,通过swap_slot_free_notify回调调用swap设备中的notify方法,直接释放swap中的页,如果不是在swap中最终通过调用free_pages_and_swap_cache释放到buddy系统中,这里如果是0阶页通过free_hot_cold_p...July 29, 2017, 8:27 a.m.作者:zachary分类:Linux相关阅读(2163)评论(0)
KILL命令流程全解
这篇文章在我的博客中是在另一篇的基础上完成的,http://www.sbfeng.cn/blog/detail?blogId=1454242937本文以android6.0.0源码为基础,内核版本3.10,其他代码大同小异。一、kill之冰山一角Kill是一个信号发送的程序,可发送的信号包括如下:在Android6.0中,代码位置external/toybox/toys/posix/kill.c,这个代码比较简单,最终会调用kill(procpid, signum),也即Kill程序最终通过系统调用kill发送信号。第二、kill之徐妃半面 在系统调用之后,SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) 2919 { 2920 struct s...May 8, 2016, 8:59 a.m.作者:zachary分类:Linux相关阅读(2386)评论(0)
[转]dumpsys使用
dumpsys顾名思义就是dump 系统信息的工具。1、首先可以获得dumpsys可用的service信息:shell@hwp7:/ $dumpsys |grep "DUMP OF SERVICE"DUMP OF SERVICE statusbar: DUMP OF SERVICE system.hsmcore: DUMP OF SERVICE telecom: DUMP OF SERVICE telephony.registry: DUMP OF SERVICE textservices: DUMP OF SERVICE trust...Feb. 3, 2016, 8:37 a.m.作者:zachary分类:Linux相关阅读(1933)评论(0)
linux之kill探究
好久没写东西了,抓住1月的尾巴,补上一篇,开发中常用kill命令杀死进程,具体为什么能杀死,我一直很好奇。前两天研究LMK的时候发现,在内存不够的时候使用了SIGKILL信号杀死了选定的进程,后面想着顺带探究了一下。 想要真正理解kill为什么能杀掉进程,需要理解linux上进程的工作原理,当然这里不可能说很清楚,我也没有这个能力,现在把我知道的写出来。 kill在linux中是一个程序,这个程序用于发送信号,linux中的信号很多,通过kill -l命令可以看对于信号的处理可以参看下面的文章:http://lifeofzjs.com/blog/2015/03/22/what-happens-when-you-kill-a-process/ 这篇文章写的还是挺清楚的,这里我们主要看一下9号信号,也就是传说中的强杀。与其他信号一样,在系统发送kill&n...Jan. 31, 2016, 8:22 p.m.作者:zachary分类:Linux相关阅读(1904)评论(0)
linux内核编程之sys接口以及workqueue
sys接口顾名思义/sys目录下的接口,linux系统是一个一切都是文件的系统,通过sys接口可以与内核的模块进行互动下面是默认sys目录下的内容下面通过编程可以实现我们自己的模块以及sys接口。实现sys接口并不难,只要会使用几个api就可以了,下面以一个实际的例子说明sysfs.c#include<linux/module.h> #include<linux/kernel.h> #include<linux/init.h> #include<linux/interrupt.h> #include<linux/sched.h> #include<linux/workqueue.h> #include<linux/sysfs.h> #include<linux/string.h> ...Dec. 24, 2015, 11:04 p.m.作者:zachary分类:Linux相关阅读(1820)评论(0)
linux新建用户后终端没有颜色
昨天由于工作的需要,在linux上需要添加一个账户,平常情况下只需要执行#adduser 用户名就好了,由于/目录挂载的磁盘空间不足,需要使用下面的命令#>useradd -d /usr1/zachary zachary在使用passwd设置完密码后,登录发现终端的shell明显不一样,所以重新使用下面的命令生成新的账户#>useradd -d /usr1/zachary -s /bin/bash zachary重新登录发现shell正常了,但是由于没有/usr1/zachary这个目录,用户登陆后默认进入了/根目录,所以我又手动生成了这个目录重新登录,可以自动进入这个目录了,但是发现这时候文件目录不能显示,baidu一下,说是没有.bashrc文件,从其他账户拷贝一个,重新登录还是没有,...June 20, 2015, 11:21 a.m.作者:zachary分类:Linux相关阅读(1758)评论(0)
关于Linux下按键的检测
写这篇博客是因为自己想做一个fc模拟器,核心代码(6502和ppu的模拟代码)用的原子开发板的代码,人家是从pc向单片机移植,我是反过来了,不过因为写的不错,用函数指针代替了switch方法可以学习一下,so就用了它的。在写按键控制的时候碰到一点点问题,怎么才能获取按键的状态。写代码的时候碰到三个问题,一个一个的解决。1、一般使用read、getchar()都要回车才能执行。经过一番百度,http://blog.sina.com.cn/s/blog_7be4196901014dxl.html,这个博客解决了这个问题。使用termios解决测试代码:#include<unistd.h> #include<termios.h> #include<stdio.h> #include<stdlib.h> int main(){ &...March 29, 2015, 8:59 p.m.作者:zachary分类:Linux相关阅读(1925)评论(0)