linux内核——进程切换宏switch_to】的更多相关文章

该宏有三个参数:prev, next, last.它们都是局部变量. prev:输入参数,变量值为旧进程描述符的地址. next:输入参数,变量值为新进程描述符的地址. last:输出参数,用来记录该进程是由哪个进程切换而来的,即保存 在当前进程之前 占用cpu的进程的 进程描述符地址. 为什么需要last这个局部变量呢? 因为: 首先,记录前一进程的进程描述符地址,对进程切换是很有用的,具体什么用途,以后再说. 其次,switch_to宏由就进程调用,在新进程结束,新进程如果想获取旧进程描述符…
关键词:Linux前后台进程切换,linux进程切换 fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 比如,top & 二.ctrl + z    可以将一个正在前台执行的命令挂起 比如,top,然后按下ctrl+z 三.jobs [3.1]查看当前有多少在后台运行的命令 jobs命令执行的结果,+(加号)表示是一个当前的作业,- (减…
#define container_of(ptr, type, member) ({ \ const typeof(((type *)0)->member) * __mptr = (ptr); \ (type *)((char *)__mptr - offsetof(type, member)); }) #endif 作用:通过结构体成员变量member的地址,反推出member成员所在结构体变量的首地址,ptr指向成员变量member. 解析: 1)({ })是何方神圣? ({ })是GNU…
进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙述符(process descriptor),该结构定义在<linux/sched.h>文件里. Linux通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色(cache coloring)的目的.还有一方面,为了避免使用额外的寄存器存储专门记录,让像x86这样寄存器较…
进程描述符task_struct task_struct { //进程基本信息 pid 进程id号 tgid 线程组id号,与线程组领头线程pid号相同   getpid()返回该值 tasks init_struct链接所有task_struct结构 run_list; //当前进程所处的运行链表 array 指向与进程相关的prio_array_t结构 real_parent当前进程的父进程,没有的话将会变成进程1(init)的描述符 parent 被执行跟踪时的跟踪父进程(ptrace)…
http://blog.csdn.net/yusiguyuan/article/details/12154823 在<linux内核设计与实现>中第三章讲解了进程管理,在关于进程和线程的概念之间的区别还是由点模糊.书中说道:     进程就是处于执行期的程序.但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,持利器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,当然还包括用来存放全局变量的数据段等.     然而每一个线…
    内核处理管理本身的内存外,还必须管理用户空间进程的内存.我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存.linux操作系统采用虚拟内存技术,因此,系统中的所有进程之间虚拟方式共享内存.对一个进程而言,它好像都可以访问整个系统的所有物理内存.即使单独一个进程,它拥有的地址空间也可以远远大于系统物理内存. 一.地址空间     每个进程都有一个32位或64位的平坦地址空间,空间的具体大小取决于体系结构.术语“平坦”指的是地址空间范围是一个独立的连续区间(比如,地址从0…
<奔跑吧linux内核>3.1笔记,不足之处还望大家批评指正 进程是Linux内核最基本的抽象之一,它是处于执行期的程序.它不仅局限于一段可执行代码(代码段),还包括进程需要的其他资源.在Linux内核中常被称作任务. 线程被称为轻量级进程,是操作系统调度的最小单元,通常一个进程可以拥有多个线程. 进程和线程的区别在于进程拥有独立的资源空间,而线程则共享进程的资源空间. 问题一:在内核中如何获取当前进程的task_struct数据结构? 内核有一个常用的常量current用于获取当前进程tas…
<奔跑吧linux内核>3.2笔记,不足之处还望大家批评指正 建议阅读博文https://www.cnblogs.com/openix/p/3262217.html理解linux cfs调度器 进程大致可以分为交互式进程,批处理进程和实时进程.对于不同的进程采用不同的调度策略,目前Linux内核中默认实现了4种调度策略,分别是deadline.realtime.CFS和idle,分别适用struct sched_class来定义调度类. 4种调度类通过next指针串联在一起,用户空间程序可以使…
<奔跑吧linux内核>3.3笔记,不足之处还望大家批评指正 根据实际物理属性,CPU域分类如图1所示. 图1 CPU域分类 问题一:一个4核处理器中的每个物理CPU拥有独立L1 cache且不支持超线程技术,分成两个簇cluster0和cluster1,每个簇包含两个物理CPU核,簇中的CPU核共享L2cache.请画出该处理器在Linux内核里调度域和调度组的拓扑关系图. 4核处理器关系图如图2所示,在不支持超线程技术的情况下,每个CPU核心只有一个执行线程,所以4核处理器没有SMT属性.…