上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: .6 的linux kernel最多可以使用32中softirq,见代码:softirq.c/*表示softirq最多可以有32种类型,实际上linux只使用了六种,见文件interrupt.h*/static struct softirq_action softirq_vec[32] __cacheline_aligned_in_smp;复制代码linux中实际使用的六种:interrupt.henum{ HI_SOFTIRQ=0, /*用于高优先级的tasklet*/ TIMER_SOFTIRQ, /*用于定时器的下半部*/ NET_TX_SOFTIRQ,/*用于网络层发... 阅读全文
posted @ 2012-03-08 22:22 only_eVonne 阅读(1701) 评论(0) 推荐(0) 编辑
摘要: 1.中断处理函数可以被其他中断线上的中断处理函数所中断2.如果中断线是共享的,那么当该中断线上有中断发生时,cpu将响应该中断,并依次调用该中断线上的所有已注册的中断处理函数,每个中断处理函数将进行判断,是否是自己对应的硬件设备发生的中断,不是则返还IRQ_NONE,否则返回IRQ_HANDLE,并响应该中断。3.在内核中执行do_IRQ()响应中断,首先判断该线上是否有中断处理程序,然后在该线上运行所有的中断处理程序。4.总的来说中断是属于大家的,所有在同一个中断号内的需要处理的例程(同一中断号内的处理例程可能有多个)都将调用这个中断处理程序,然而在释放中断处理程序的最后一个参数中的dev_ 阅读全文
posted @ 2012-03-08 20:30 only_eVonne 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 1> 所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的2> LINUX系统启动后,由/etc/init.d/sysklogd先后启动klogd,syslogd两个守护进程。 2.1> klogd会通过syslog()系统调用或者读取proc文件系统(/proc/kmsg)来从系统缓冲区(ring buffer)中得到由内核printk()发出的信息2.2>Klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的配置把log信息输出到/var/log/下的不同文件 阅读全文
posted @ 2012-03-04 17:43 only_eVonne 阅读(1061) 评论(0) 推荐(0) 编辑
摘要: 我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。第1步:编辑得到举例的程序--hello.h、hello.c和main.c;hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello 阅读全文
posted @ 2012-03-01 21:15 only_eVonne 阅读(10301) 评论(0) 推荐(0) 编辑
摘要: 通过软件中断0x80,系统会跳转到一个预设的内核空间地址,它指向了系统调用处理程序(不要和系统调用服务例程相混淆),即在arch/i386/kernel/entry.S文件中使用汇编语言编写的system_call函数。很显然,所有的系统调用都会同一跳转到这个地址进而执行system_call函数,那么system_call函数又该如何派发它们到各自的服务例程呢? 软中断指令int0x80执行时,系统调用号会被放进eax寄存器,同时,sys_call_table每一项占用4个字节。这样,system_call函数可以读取eax寄存器获得当前系统调用的系统调用号,将其乘以4天生偏移地址,然后.. 阅读全文
posted @ 2012-02-28 23:21 only_eVonne 阅读(2717) 评论(0) 推荐(0) 编辑
摘要: 时间片是一个数值,它表明进程在被抢占之前可以持续运行的时间。调度程序总是选择时间片未用尽而且优先级最高的进程运行。进程不一定一次就用完所有的时间片,可以分几次通过多次调度用完。进程时间片用尽后在本论调度中不会再被运行,直到等待其他所有进程的时间片耗尽,在那个时候,所以进程的时间片将被重新计算。一个CPU有一个可执行队列,一个可执行队列有两个优先级数组。活动优先级数组和过期优先级数组。进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。一个CPU有多个等待队列,根据不同的事件类型进行划分,当一个进程由于等待某一个事件而进入睡眠时,即被加入到该事件的等待 阅读全文
posted @ 2012-02-23 20:33 only_eVonne 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://feizf.blogbus.com/logs/16835565.htmlLinux内核 2.4和2.6的进程内核堆栈和task描述符存储不太一样,这儿总结一下。在内核2.4中堆栈是这么定义的:union task_union { struct task_struct task;unsigned long stack[INIT_TASK_SIZE/sizeof(long)]; };而INIT_TASK_SIZE只能是8K。内核为每个进程分配一个task_struct结构时,实际上分配两个连续的物理页面(8192字节), 阅读全文
posted @ 2012-02-21 20:19 only_eVonne 阅读(1013) 评论(0) 推荐(0) 编辑
摘要: termios结构体中,该结构体一般包括如下的成员:tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_t c_cc[NCCS];其具体意义如下c_iflag:输入模式标志,控制终端输入方式,具体参数如下所示。c_iflag参数表键值说明IGNBRK 忽略BREAK键输入BRKINT如果设置了IGNBRK,BREAK键的输入将被忽略,如果设置了BRKINT ,将产生SIGINT中断IGNPAR忽略奇偶校验错误PARMRK标识奇偶校验错误INPCK允许输入奇偶校验ISTRIP去除字符的第8个比特IN 阅读全文
posted @ 2012-02-19 13:58 only_eVonne 阅读(18545) 评论(0) 推荐(0) 编辑
摘要: mmap:memory map,就是内存映射简单的说就是将文件映射到用户的地址空间中。这么做有什么好处呢?1.传统文件访问方式是, 首先用open系统调用打开文件, 然后使用read, write等调用进行顺序或者随即的I/O. 这种方式是非常低效的, 每一次I/O操作都需要一次系统调用. 而通过mmap可以将文件映射到进程空间中,把对文件的操作变为对内存的访问,提高了效率。2.另外, 如果若干个进程访问同一个文件, 每个进程都要在自己的地址空间维护一个副本, 浪费了内存空间。而通过mmap由于只是简单的映射关系,所以非常方便于同一副本的共享。 阅读全文
posted @ 2012-02-18 12:42 only_eVonne 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 为什么在内核中碰到很多 #defines ... do{ ... } while(0)?有以下几点原因:1.当宏里面有if时,可以起到封闭代码作用,防止与外面的 if 混淆 比如定义宏,#define FREE1(p) if (p) free (p) 而在代码部分这样调用宏: if (expression) FREE1(p) else printf(“expression was false.\n”) ; 展开后,else会和宏中的if配对了,这就错了。但是宏写成如下的形式就永远不会错了 #define FREE4(P) do {if(p) free(p)}; while(0)... 阅读全文
posted @ 2012-02-06 14:55 only_eVonne 阅读(438) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页