您现在的位置:主页 > 技术中心 > 操作系统 > Linux

linux驱动current关键词

来源:网络 责任编辑:admin 发表时间:2013-07-01 05:16 点击:

尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义, 它产生一个指针指向结构 task_struct, 在 <linux/sched.h> 定义. current 指针指向当前在运行的进程. 在一个系统调用执行期间, 例如 open 或者 read, 当前进程是发出调用的进程. 内核代码可以通过使用 current 来使用进程特定的信息, 如果它需要这样.
实际上, current 不真正地是一个全局变量. 支持 SMP 系统的需要强迫内核开发者去开发一种机制, 在相关的 CPU 上来找到当前进程. 这种机制也必须快速, 因为对 current 的引用非常频繁地发生. 结果就是一个依赖体系的机制, 常常, 隐藏了一个指向 task_struct 的指针在内核堆栈内. 实现的细节对别的内核子系统保持隐藏, 一个设备驱动可以只包含 <linux/sched.h> 并且引用当前进程. 例如, 下面的语句打印了当前进程的进程 ID 和命令名称, 通过存取结构 task_struct 中的某些字段.
printk(KERN_INFO "The process is \"%s\" (pid %i)\n", current->comm, current->pid);
存于 current->comm
的命令名称是由当前进程执行的程序文件的基本名称( 截短到 15 个字符, 如果需要 ).
 
  在linux   中每一个进程都由task_struct   数据结构来定义.   task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段.   当我们调用fork()   时,   系统会为我们产生一个task_struct结构.然后从父进程,那里继承一些数据,   并把新的进程插入到进程树中,   以待进行进程管理.因此了解task_struct的结构对于我们理解任务调度(在linux   中任务和进程是同一概念)的关键.在进行剖析task_struct的定义之前.   我们先按照我们的理论推一下它的结构.   1,   进程状态   ,将纪录进程在等待,运行,或死锁   2,   调度信息,   由哪个调度函数调度,怎样调度等   3,   进程的通讯状况   4,因为要插入进程树,必须有联系父子兄弟的指针,   当然是task_struct型   5,时间信息,   比如计算好执行的时间,   以便cpu   分配   6,标号   ,决定改进程归属   7,可以读写打开的一些文件信息   8,   进程上下文和内核上下文   9,处理器上下文   10,内存信息   因为每一个PCB都是这样的,   只有这些结构,   才能满足一个进程的所有要求.打开/include/linux/sched.h   找到task_struct   的定义  
    struct   task_struct   {   /*   these   are   hardcoded   -   don't   touch   */   这里是一些硬件设置对程序原来说是透明的.   其中state   说明了该进程是否可以执行,还是可中断等信息.   Flage   是进程号,   在调用   fork()   时给出,addr_limit   是区分内核进程与普通进程在内存存放的位置不同 
volatile   long   state; /*   -1   unrunnable,   0   runnable,  >0  stopped   */  
unsigned   long   flags;   /*   per   process   flags,   defined   below   */   int   sigpending;  
mm_segment_t   addr_limit;   /*   thread   address   space:   0-0xBFFFFFFF   for   user-thead   0-0xFFFFFFFF   for   kernel-thread   */  
struct   exec_domain   *exec_domain;  
long   need_resched;    
  /*   various   fields   */   count   是   计数器   priorrity   是优先级  
long   counter;  
long   priority;  
cycles_t   avg_slice;  
/*   SMP&nbs

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      评价:
      表情:
      用户名: 验证码:点击我更换图片

      推荐热点

      • /etc/fstab 详解
      • nginx主主集群
      •  LVS-NAT和LVS-DR模式的实现详解
      •  RHCE考试之磁盘配额
      • 学习笔记:ACL详解
      •  LVM逻辑卷管理器
      • suse linux双网卡双网关配置
      •  Nginx主主负载均衡架构
      • linux top命令详解

      快速直达

      ?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
      Copyright © 2004-2024 上海卓卓网络科技有限公司