linux内核设计与实现
文章平均质量分 85
徐行而致--浅唱而归
善战者 无智名无勇功
展开
-
linux中断下半部实现机制之tasklet
linux中断下半部实现机制之tasklet1.声明自己的tasklet 既可以静态地创建tasklet,也可以动态地创建它。如果静态地创建一个tasklet(直接引用),使用中的两个宏:#define DECLARE_TASKLET(name, func, data) / struct tasklet_struct name = { NULL, 0转载 2013-07-29 20:13:30 · 916 阅读 · 0 评论 -
Linux进程睡眠和唤醒以及无效唤醒
1 Linux进程的睡眠和唤醒在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux 内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。当然,一个进程也可以主动释放CPU的控制权。函数 schedule()是一个调度函数,它可以转载 2013-08-22 10:51:09 · 2740 阅读 · 0 评论 -
进程调度
《Linux内核设计与实现》读书笔记(四)- 进程的调度Posted on 2012-09-04 16:10 wang_yb 阅读(442) 评论(0) 编辑 收藏主要内容:什么是调度调度实现原理Linux上调度实现的方法调度相关的系统调用1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运转载 2013-08-21 23:54:20 · 890 阅读 · 0 评论 -
linux内核中的xx_initcall初始化标号
LINUX内核中有很多的初始化指示标志postcore_initcall(), arch_initcall(), subsys_initcall(), device_initcall(), etc. 这些起什么作用呢?查阅源代码(android goldfish-2.6.29)并搜索网上相关文章,对此做一总结。初始化标号先看这些宏的定义(定义在文件include/linux/ini转载 2013-08-09 01:50:45 · 915 阅读 · 0 评论 -
进程控制之 fork、wait、exec族函数 及进程资源控制
一,fork//头文件#include //函数定义pid_t fork( void );返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1函数说明:一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。子转载 2013-08-08 13:13:58 · 1373 阅读 · 0 评论 -
线程程序里不准使用fork ?
其实这是 UNIX上C++程序设计守则3准则3:多线程程序里不准使用fork在多线程程序里,在”自身以外的线程存在的状态”下一使用fork的话,就可能引起各种各样的问题.比较典型的例子就是,fork出来的子进程可能会死锁.请不要,在不能把握问题的原委的情况下就在多线程程序里fork子进程.那看看实例吧.一执行下面的代码,在子进程的执行开始处调用doit()时,发生死锁的机率会很高.转载 2013-08-08 13:08:58 · 861 阅读 · 0 评论 -
深入分析 Linux 内核链表
深入分析 Linux 内核链表杨沙洲 (pubb@163.net)国防科技大学计算机学院简介: 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。发布日期: 2004 年 8 月 01 日 级别: 初级 访问情况 : 40400 次浏览 评论: 1 (查看 | 添加评论 - 登录) 平均分 (1转载 2013-08-07 23:32:15 · 790 阅读 · 0 评论 -
linux中断下半部实现机制之软中断
软中断保留给系统中对时间要求最严格以及最重要的下半部使用。目前,只有两个子系统---网络和SCSI直接使用软中断。此外,内核定时器和taskelet都是建立在软中断上的。对于时间要求严格并能自己高效完成加锁工作的应用,软中断会是正确的选择。 怎样使用软中断呢? 1.分配索引 在编译期间,可以通过中定义的一个枚举类型来静态声明软中断。索引号小的软中断在索引号大的软转载 2013-08-05 15:07:13 · 977 阅读 · 0 评论 -
窥探 kernel - 浅析do_exit
本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7483054进程在退出时,必须释放它所拥有的资源,并通过某种方式告诉父进程。进程的退出一般是显示或隐式地调用了eixt(),或者接受了某种信号。不过什么原因退出,最终都调用了do_exit。用于进程退出的系统调用有两个exit转载 2013-08-03 19:06:22 · 850 阅读 · 0 评论 -
kthread_create和kernel_thread的区别和总结
在看linux驱动代码的时候,经常惠会碰到kthread_create这个函数,google一下,发现很多人在讲二者的区别,但是都在讲源码的区别而已,总结不够,感觉没有说出二者之间的本质区别,自己总结下。 一. 源码分析(linux-2.6.39)1. kthread_create源码分析#define kthread_create(threadfn, data,转载 2013-08-03 18:36:03 · 827 阅读 · 0 评论 -
异常 中断上下文 内核抢占
一个中断处理程序既可以抢占其他中断处理程序,也可以抢占异常处理程序,相反,异常处理程序从不抢占中断处理程序。在内核态能触发的唯一异常就是缺页异常。但是,中断处理程序从不执行可以导致缺页(因此意味着进程切换)的操作。原创 2013-08-04 16:40:57 · 1122 阅读 · 0 评论 -
内核抢占和用户抢占
用户抢占内核即将返回用户空间的时候,如果need_resched被设置,会导致schedule()被调用,此时就会发生用户抢占。在内核返回用户空间的时候,它知道自己是安全的,因为既然它可以继续去执行当前进程,那么它当然可以再去选择一个新的进程去执行。所以内核无论是从中断处理程序还是在系统调用后返回,都会检查need_resched标志。如果它被设置了,那么,内核就会选择一个其他(更合适的)进程原创 2013-08-04 02:46:01 · 933 阅读 · 0 评论 -
linux中断下半部实现机制之软中断的实现
linux中断下半部实现机制之软中断的实现 今天继续看第7章《下半部和推后执行的工作》。前天本来已经写了《软中断的实现》,但是没保存,所以今天又重新写一次。 我们首先从头说起。我们一般把中断处理流程切为两个部分或两半。中断处理程序是上半部(top half),对时间要求相对宽松的工作就是下半部(bottom half)的执行目标。 目前,有三种机制可以转载 2013-07-29 18:43:19 · 743 阅读 · 0 评论 -
Linux内核spin_lock与spin_lock_irq分析
Linux内核spin_lock与spin_lock_irq分析在Linux内核中何时使用spin_lock,何时使用spin_lock_irqsave很容易混淆。首先看一下代码是如何实现的。spin_lock的调用关系 spin_lock | + -----> raw_spin_lock |+---转载 2013-08-02 17:50:20 · 822 阅读 · 0 评论 -
自旋锁spin_lock和raw_spin_lock
自旋锁spin_lock和raw_spin_lock/*****************************************************************************************************/声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢!/**转载 2013-08-02 17:23:40 · 734 阅读 · 0 评论 -
进程调度的时机及阻塞
引起进程调度的原因有以下几类进程调度发生在什么时机呢?这与引起进程调度的原因以及进程调度的方式有关。(1)正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。(2)执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态。(3)执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。(4)执行中进程提出I/O请求后被原创 2013-07-31 16:58:13 · 1691 阅读 · 0 评论 -
关于内核进程0和进程1
Kernel Version: Linux 2.6.18_Pro500 (for Arm) Process 0 下面这段对进程0的描述引用自《Understanding The Linux Kernel - Third Edtion》The ancestor of all processes, called process 0, the idle proce转载 2013-07-31 13:03:41 · 1297 阅读 · 0 评论 -
linux内核中等待队列 (函数wait_event与wake_up)
根据内核3.1.6版本源码、书籍和网上资料,对几个函数进行分析 介绍这几个函数,不得不先介绍等待队列wait_queue_head_t与完成量completion。 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当时间发生后由内核自动唤醒。 完成量机制是基于等待队列的,内核利用该机制等待某一操作的结束。这两种经常被转载 2013-08-15 16:07:57 · 1733 阅读 · 0 评论