SunBo

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  322 随笔 :: 0 文章 :: 13 评论 :: 111万 阅读

01 2011 档案

摘要:本文详细的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例 一、引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。 在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量(rw_semaphore)、spinlock、BKL(Big Kernel Lock)、rw... 阅读全文
posted @ 2011-01-14 05:20 SunBo 阅读(277) 评论(0) 推荐(0) 编辑

摘要:1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放CPU的控制权。函数schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程占用CPU。一旦这个主动放弃CPU的进程被重新调度占用CPU,那么它将从上次停止执行的位置开始执行,也就是说它将从调用schedule()的下一行代码处开始执行。 ... 阅读全文
posted @ 2011-01-14 03:27 SunBo 阅读(4200) 评论(0) 推荐(0) 编辑

摘要:转自:http://blog.chinaunix.net/u3/112940/showart_2450064.html 由于前两天在看netconsole的源码实现中,发现其跟printk的实现机制相关,加之之前一直是很普通的使用printk,从不清楚printk到底是怎样工作的,因此就趁这个机会把printk的实现代码也给大致看了一下,代码流程并不复杂,下面就简要说明一下。 printk在内核中的实现代码如下。 asmlinkage int printk(const char *fmt, ...) { va_list args; int r; /*将fmt后的参数信息保存到args中*/ v 阅读全文
posted @ 2011-01-06 09:35 SunBo 阅读(4062) 评论(0) 推荐(0) 编辑

摘要:内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("<6>Hello, world!/n");。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。#define KERN_EMERG "<0>" /* system is unusable */#define KERN_ALERT "<1>" /* action must be taken immediately * 阅读全文
posted @ 2011-01-06 09:34 SunBo 阅读(857) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示