- 博客(37)
- 资源 (4)
- 收藏
- 关注
转载 Linux内核中的等待队列--init_waitqueue_head等
inux内核中的等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t
2014-08-28 10:26:17 487
转载 linux内核等待队列方法
当你在用户空间需要读写一大片数据的时候,这个就用上了。 以下来自:http://www.yuanma.org/data/2006/1207/article_1916.htm假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffe
2014-08-28 09:37:27 378
转载 LINUX的Netlink机制
Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火
2014-08-25 19:16:15 549
转载 内核中container_of
在linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。呵呵,乍一看不知道是什么东东。我们先来分析一下container_of(ptr,type,member),这里面有ptr,type,member分别代表指针、类型、成员。看一个例子:Struct test {
2014-08-25 13:43:17 356
原创 应用层log函数的写法
int my_log(const char *format,...){ va_list args; FILE *fp; fp = fopen("/tmp/my_log","a+"); if(!fp) { fprintf(stderr,"fp is NULL\n"); return -1;
2014-08-19 11:57:32 721
转载 浅谈HTTP中的GET与POST
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 1
2014-08-18 13:30:45 345
转载 C语言常用的各种操作字符串的函数
/*字符串长度函数*/ size_t strlen(const char *string); /*不受限制的字符串函数*/ char *strcpy(char *dst, const char *src); char *strcat(char *dst, const char *src); int strcmp(const char *s1,
2014-08-18 11:20:42 631
转载 cgi
http://www.programfan.com/article/2858.htmlhttp://222.30.226.10/hhcmc/study/teach_vc/teach_sp_11.htmhttp://www.moon-soft.com/program/bbs/readelite887957.htm一、CGI概述 CGI(Common Gateway
2014-08-15 15:44:07 459
转载 URI
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。目录1组成2使用3区别4与URN▪ 技术观点▪ RFC 33055相关介绍▪ 发展▪ 标准改良▪ 与XML命名
2014-08-15 09:36:37 682
转载 软中断
软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"(《Linux内核源代码情景分析》第三章)。软中断的一种典型应用就是所谓的"下半部"(bottom half),它的得
2014-08-14 11:09:09 489
转载 同步IO、异步IO、阻塞IO、非阻塞IO的区别
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不
2014-08-13 19:29:19 565
转载 同步IO与异步IO
I/O 既 输出/输入 (Input/Output)既然是输入输出,为什么又会有同步和异步的不同方式呢?同步 当一个IO操作进行时,系统停下来等待这个IO的操作完成后才会继续进行下面的计算。异步 当一个IO操作进行时,通过多线程等方法,当CPU去处理那些不需要依赖IO执行结果的计算,充分的利用CPU的运算能力。当IO操作执行完毕时,继续执行后续的操作。一般情况下,作
2014-08-13 19:10:35 439
原创 工作笔记
分析start_kernel函数 位于init/main.c#8 kernel/irq/handle.c 中断描述符的初始化在early_irq_init中进行中断描述符的action没有进行初始化默认为NULL,可以调用request_irq来进行注册#9 start_kernel函数中调用t
2014-08-13 11:30:08 490
转载 Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时器的实现代码几乎没有借用低分辨率定时器的数据结构和代码,内核文档给出的解释主要有以下几点:
2014-08-13 11:21:54 499
转载 Linux时间子系统之一:clock source(时钟源)
clock source用于为linux内核提供一个时间基线,如果你用linux的date命令获取当前时间,内核会读取当前的clock source,转换并返回合适的时间单位给用户空间。在硬件层,它通常实现为一个由固定时钟频率驱动的计数器,计数器只能单调地增加,直到溢出为止。时钟源是内核计时的基础,系统启动时,内核通过硬件RTC获得当前时间,在这以后,在大多数情况下,内核通过选定的时钟源更新实时时
2014-08-13 11:21:46 466
转载 Linux时间子系统之四:定时器的引擎:clock_event_device
红色字体为转载时早期的内核版本中,进程的调度基于一个称之为tick的时钟滴答,通常使用时钟中断来定时地产生tick信号,每次tick定时中断都会进行进程的统计和调度,并对tick进行计数,记录在一个jiffies变量中,定时器的设计也是基于jiffies。这时候的内核代码中,几乎所有关于时钟的操作都是在machine级的代码中实现,很多公共的代码要在每个平台上重复实现。随后,随着通用时钟框
2014-08-12 10:13:07 465
转载 Linux中断浅析http://bbs.chinaunix.net/thread-3566316-1-1.html
本文描述内容针对2.6.31+x86平台,不包含硬件相关的细节。作者:独孤九贱;版权所有,转载请注明出处。有问题欢迎与我交流讨论。一、概述中断,本质上是一个电信号,早期的计算的并没有中断这一概念,这使得CPU与外围设备的交互变得困难,CPU需要不断的轮询,以探测外围设备是否有数据需要处理。这浪费大量的资源。中断的出现,将CPU从这一任务中解放出来,CPU与外设的处理,变为异
2014-08-11 20:17:32 912
转载 c语言宏定义和宏函数
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX(
2014-08-11 09:49:29 1026
转载 软中断与硬件中断的区别
①硬中断是由外部事件引起的因此具有随机性和突发性;软中断是执行中断指令产生的,无面外部施加中断请求信号,因此中断的发生不是随机的而是由程序安排好的。②硬中断的中断响应周期,CPU需要发中断回合信号(NMI不需要),软中断的中断响应周期,CPU不需发中断回合信号。③硬中断的中断号是由中断控制器提供的(NMI硬中断中断号系统指定为02H);软中断的中断号由指令直接给出,无需使用中断控制器。
2014-08-08 17:33:50 685
转载 为什么中断不能休眠
1. 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断(这点对 于softirq,tasklet也一样,因此这些bottom half也不能休眠),如果在中断context中休眠,则没有办法唤醒它,因为所有的 wake_up_xxx都是针对某个进程而言的,而在中断context中,没有进程的概念,没有一个tas
2014-08-08 16:13:37 547
转载 jiffies等内核时间概念
类似于软件中断的机制不能执行休眠或可能引起休眠的函数。在内核空间sleep这种用户空间的延时函数是不能用的,可以使用msleep等代替,详情见《Linux设备驱动程序》一书第七章。linux HZLinux核心几个重要跟时间有关的名词或变数,底下将介绍HZ、tick与jiffies。 HZLinux核心每隔固定周期会发出timer int
2014-08-06 09:07:41 1118
转载 Linux的hrtimer高精度定时器的使用
#include #include #include #include MODULE_LICENSE("GPL");#define MS_TO_NS(x) (x * 1E6L)//zstatic struct hrtimer hr_timer;enum hrtimer_restart my_hrtimer_callback( struct hrtimer *timer ){
2014-08-01 17:53:16 1613
原创 linux下一个定时器的使用方法
这是linux下一个精确定时器的使用方法#define READ_INTERVAL 40*1000000static int timer_init(){ int ret; struct sigevent sev; struct itimerspec its; sev.sigev_notify = SIGEV_TH
2014-08-01 10:44:55 578
转载 Linux定时器
摘要】本文主要介绍了linux的时间和定时器。【关键词】Linux 定时器 时间一、问题的提出我们开发程序时,经常会遇到时间和定时器的问题,为了更好的使用时间和定时器,现在列举一个一些时间结构体、函数和定时器。二、解决思路1.时间类型1) time_t是一个长整型,一般用来表示用1970年以来的秒数。2)struct timeval有两个
2014-08-01 10:41:24 470
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人