上一页 1 2 3 4 5 6 7 ··· 12 下一页
  2013年9月7日
摘要: 内容:(1):从schedule()开始,几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法(2):从CPU的IP值的变化上,说明在switch_to宏执行后,执行分析(3):堆栈发生切换位置,在切换堆栈前后,current_thread_info变化(4):地址空间发生切换,解释地址空间的切换不会影响后续切换代码的执行(5):current宏所代表的进程发生变化的源码位置(6):任务状态段中关于内核堆栈的信息发生变化源码位置1,从schedule()开始,说明几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法。在schedule()函数中,首先禁止抢占,获 阅读全文
posted @ 2013-09-07 12:22 Daniel.G 阅读(10768) 评论(0) 推荐(0) 编辑
摘要: 调度什么时候发生?即:schedule()函数什么时候被调用?调度的发生有两种方式:1、主动式在内核中直接调用schedule()。当进程需要等待资源等而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出CPU。主动放弃cpu例: 1. current->state = TASK_INTERRUPTIBLE; 2. schedule();2、被动式(抢占)用户抢占(Linux2.4、Linux2.6)内核抢占(Linux2.6)用户抢占发生在:* 从系统调用返回用户空间。* 从中断处理程序返回用户空间。内核即将返回用户空间的时候,如果need_resched标志被设置... 阅读全文
posted @ 2013-09-07 01:23 Daniel.G 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: Table of Contents1 convential process1.1 static priority1.2 dynamic priority2 real-time process2.1 static priority2.2 dynamic priority2.3 real time priority3 调度策略1convential process1.1static priority范围为100-139(MAX_RT_PRIO - MAX_PRIO-1)内核2.6中的静态优先级相当于内核2.4中的nice值,但转到MAX_RT_PRIO到MAX_PRIO-1取值范围,其公式为:st 阅读全文
posted @ 2013-09-07 00:13 Daniel.G 阅读(1399) 评论(0) 推荐(1) 编辑
  2013年9月6日
摘要: 一、常用的链表和内核链表的区别1.1 常规链表结构通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系。按照指针域的组织以及各个节点之间的联系形式,链表又可以分为单链表、双链表、循环链表等多种类型,下面分别给出这几类常见链表类型的示意图:单链表:双链表:1.2 Linux 2.6内核链表数据结构链表数据结构的定义很简单(节选自[include/linux/list.h],以下所有代码,除非加以说明,其余均取自该文件):struct list_head { struct list_head *next, *prev;}; list_head结构包 阅读全文
posted @ 2013-09-06 17:19 Daniel.G 阅读(9193) 评论(2) 推荐(4) 编辑
摘要: 进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。 用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”, 阅读全文
posted @ 2013-09-06 15:05 Daniel.G 阅读(317) 评论(0) 推荐(0) 编辑
  2013年9月4日
摘要: 输入mount -t nfs 192.168.1.110:/home/work /mnt,这时可能会出现mount.nfs:access denied by server while mounting,这时候可以重新配置一下/etc/exports,将192.168.1.*替换为*,当然我替换后也没能好使,不过重启系统后好使了,大家都可以尝试一下。挂载成功后,在/mnt下就会有/home/work下的文件了,如果要卸载,输入umount /mnt,这时可能会出现:device is busy ,这时候输入fuser -k /mnt,作用是杀死占用的进程,然后再输入umount /mnt就可以了 阅读全文
posted @ 2013-09-04 21:53 Daniel.G 阅读(2850) 评论(0) 推荐(0) 编辑
摘要: 编写驱动程序时,需要内核源码树的支持。内核源码树时从内核源代码编译得到的。下面开始构造内核源代码的步骤。以Ubuntu为例子1. 下载内源代码,位置www.kernel.org.(注意:源码树内核的版本要和驱动程序运行的目标平台的内核版本一致)uname -r 显示内核版本(2.6.32.2)下载内核解压内核2. 配置内核进入解压过的内核目录,开始配置内核选择最快的原版的配置(默认)方式。root@desktop# make oldconfig当然也可以使用其他配置方式,如 menuconfig, xconfig(必须有GTK环境)。反正不用剪裁什么,所以不管那种方式能配置它就行了。3. 编译 阅读全文
posted @ 2013-09-04 21:12 Daniel.G 阅读(1173) 评论(0) 推荐(1) 编辑
  2013年8月30日
摘要: 你是否相信如果你的程序里没有检查一个变量会导致怎么系统瘫痪?无论你相不相信,这是我一个亲身经历过的案例,你可以在本站的程序员那些悲催的事儿中找到很多这样的事。这样的事昨天在发生,今天同样在发生。Unix40多年了,在这40年里,程序员发生过各种各样的的惨剧,但是大多数的事情一而再再而三的重演。今天的你,可能在开发者各种各样NB的系统,你会相信你的一个空格也能导致系统瘫痪吗?也许你可能很难相信这个事。不过,再下面这个事将告诉你这个血淋淋的事实 —— 一个空格产生的bug可以让你的系统瘫痪。bumblebee是一个开源项目,这个名字也就是变形金刚里的大黄蜂,这个项目是这样介绍自己的——bumble 阅读全文
posted @ 2013-08-30 17:04 Daniel.G 阅读(808) 评论(0) 推荐(0) 编辑
  2013年8月28日
摘要: 随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核配置系统。众所周知,Linux 内核是由分布在全球的 Linux 爱好者共同开发的,Linux 内核每天都面临着许多新的变化。但是,Linux 内核的组织并没有出现混乱的现象,反而显得非常的简洁,而且具有很好的扩展性,开发人员可以很方便 阅读全文
posted @ 2013-08-28 10:19 Daniel.G 阅读(32198) 评论(0) 推荐(1) 编辑
摘要: 阅读全文
posted @ 2013-08-28 08:23 Daniel.G 阅读(221) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 12 下一页