Linux
文章平均质量分 78
轩动day
intel_do_flush_locked failed: Invalid argument
展开
-
由ubuntu安装tftp引发的思考
首先检查tftp是否已经安装,在控制台输入命令:netstat -a | grep tftp,如果输出udp 0 0 *:tftp则表明tftp已经安装。否则则输入以下命令 :sudo apt-get install tftpd-hpa tftp-hpa这一条命令实际上将服务端和客户端一起安装了。在安装结束之后需要进行设置,这里有两种方法。实际上市两种启动精灵进程的方式。所谓原创 2014-04-16 20:18:02 · 752 阅读 · 0 评论 -
Linux内核可加载模块基础(2)
file_operations结构体定义在linux/fs.h文件中,并且包含一系列函数指针这些函数指针最终都会由驱动程序实现的函数来进行填充(由于之前的驱动都只有两个函数,一个在加载时被调用,而另一个则在卸载的时候被调用)。文件操作体结构通用函数如下所示:struct file_operations { struct module *owner; loff_t(*llseek) (st原创 2014-12-21 08:36:47 · 651 阅读 · 0 评论 -
Linux内核可加载模块基础(1)
内核模块是一个在需要时能够被加载到内核内存空间代码片段,在合适的时候也可以从内核中移除。内核模块和.so的最大的差别是内核模块一定是被加载到内核空间中的,而so文件(共享对象文件)则可能被加载到用户空间。正因为内核模块的动态加载功能使得在不重启的情况下扩展系统的功能成为可能。用户可以通过lsmod命令来查看已经加载到内核中的模块信息,这个命令会获取/proc/modules文件中的信息(内核版原创 2014-12-20 18:55:05 · 796 阅读 · 0 评论 -
Linux RCU队列(3)树形RCU队列实现代码分析
经过之前的分析基本清楚了整个RCU的结构体,下面就通过分代码来解读RCU的实现。void synchronize_rcu(void){ if (!rcu_scheduler_active) return; wait_rcu_gp(call_rcu);}当rcu_scheduler_active变量将会在第一个任务创建之前由0转换为1.当这个变量等于0的时候,RCU可以假设当前原创 2014-12-02 00:13:52 · 2062 阅读 · 0 评论 -
Linux RCU队列(2)树形RCU队列实现
因为只用一个全局锁在多处理器系统中会造成很严重的锁竞争问题,一种有效的途径是将锁竞争关系变为一种层次关系(如图1)。图中四个rcu_node结构体都有自己的锁,因此处理器0和处理器1之间将会先竞争底层的锁然后在竞争高层的锁,其他处理器也一样。在grace period期间,只有获取了底层的锁的处理器才有机会获取高层的锁,也就是说只有每对处理器中的最后一个才能够记录相应的grace period转入原创 2014-12-02 00:02:39 · 1649 阅读 · 0 评论 -
Linux RCU队列(1)经典RCU队列实现
RCU全称Read Copy Update,这是一种对读写锁的优化。当所有对相关数据结构的操作时读者行为时,则通过最高层次的禁止线程调度就可以了,如果需要对这个队列进行写操作,那么可以先将原来的数值复制一份出来,然后对复制出来的数据进行处理,最后在适当的时机进行更新。而更新的适当时机则是所有的处理器上都进行了一次线程切换之后,因为只有这样才能保证整个所有的处理器上的读者都释放了相应的资源。 s原创 2014-12-01 23:55:58 · 1482 阅读 · 0 评论 -
Linux文件打开操作
这两者的区别仅仅在于搜索的其实目录不同,前者是从当前工作目录开始搜索而后者则由用户指定起始目录。这两个函数都只是对内部的系统调用do_sys_open的一个封装,do_sys_open函数原型如下所示:longdo_sys_open(int dfd, const char __user *filename, int flags, int mode)函数的第一个参数以一个原创 2014-11-01 21:44:10 · 1400 阅读 · 0 评论 -
Linux内核源代码中常见的宏
#define unlikely(x) __builtin_expect(!!(x), 0)#define likely(x) __builtin_expect(!!(x), 1)原创 2014-11-10 07:30:40 · 860 阅读 · 0 评论 -
Linux系统调用相关的宏
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)系统调用相关的函数经过这里被触发,慢慢惊醒扩展最终形成我们用户可见到的系统调用函数原型。这个宏首先将函数名称最前面加上下划线,然后给出函数的参数个数以及利用__VA_ARGS__将省略号中的参数接收。#define SYSCALL_DEFIN原创 2014-03-27 19:50:09 · 1294 阅读 · 0 评论 -
Linux下面signal处理
信号也被称为软中断,主要用于在软件层面对中断机制的一种模拟。在所有的进程通信当中只有信号是异步的,接受信号的进程不知道什么时候信号会来,也不知道来的是什么信号。我们可以通过在控制台执行kill -l命令查看所有的信号变量。每一个信号在进程调度并由内核空间返回到用户空间的时候进行处理,在处理完信号之后,又需要返回到内核然后再进入到用户空间执行。至于为什么会这样会在下面的分析中看到原因。在stru原创 2014-04-21 21:43:59 · 702 阅读 · 0 评论 -
windows和Linux启动过程对比
整个Linux的启动如下图所示:原创 2014-04-19 18:02:05 · 2958 阅读 · 1 评论 -
windows文件异步操作和Linux EPOLL模型
在windows系统下面存在三种形式的异步文件操作:1OVERLAPPED IO2APC3IO完成端口原创 2014-07-05 23:05:48 · 1589 阅读 · 0 评论