首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux系统内核探索】进程调度

    简化过后我们就得到了一个非常简洁的结构体: 这里我们用queue来简化前面的类型 struct runqueue { struct queue* active; struct queue* expired...就由nr_active控制,当active中的没有任何有效进程的时候,就将expired和active直接交换。 swap之前:按照优先级调度 swap之后,给了其他优先级的进程调度机会。...,他只有连接关系,没有属性,我们来看看原码: 可以看见确实是这样的,说明task_struct的结构是这样的: 内部套了一层双链表的数据结构,然后把数据属性放在外面。...在写代码的过程中,我们知道,我们一般都是用外层的结构体来访问内层的成员,但是在这里,我们只知道成员,我们该如何访问其他数据呢,在C语言阶段,我们知道结构体的存储是有偏移的。...利用这个公式: (struct\ A*)(\&c-偏移量)\rightarrow成员变量 结构体的地址等于成员变量的地址减去对应的偏移量,最后就可以结构体的地址了。

    8310

    paceMaker_pacemaker怎么读

    他用资源级别的监测和恢复来保证集群服务(aka.资源)的最大可用性。它可以用你所擅长的基础组件(Corosync或者是Heartbeat)来实现通信和关系管理。​ 2....支持大型或者小型的集群​ 支持quorate(法定人数) 或 resource(资源) 驱动的集群​ 支持几乎所有的冗余配置,包括Active/Active, Active/Passive,...提供一个统一的接口去支持不同的资源类型,直接与Resource agents(脚本)交互. ccm(consensus cluster membership):CCM的最主要工作就是管理集群中各个节点的成员以及各成员之间的关系...openais:指OpenAIS的消息和成员层。...应用 由Pacemaker的特性我们知道Pacemaker对环境的要求不高,支持几乎所有的冗余配置,包括Active/Active, Active/Passive ,N+1, N+M, N-to-1 and

    95240

    MTK T750平台:CCCI驱动调试

    no member named ‘max_mtu’ 2.9 error: ‘atomic_t {aka struct }’ has no member named ‘refs’ 2.10 Unknown...4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的,两者间存在差异,由于是新增功能,未能在4.9.0中找到替代,所以修改CCCI驱动源码,将该结构体相关新增功能进行版本的区分。...pci_dev 上图是struct pci_dev结构体部分截图,左侧为4.9.0,右侧为4.15.0,可以很明显的看到4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的...,右侧为4.15.0,可以很明显的看到4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的,两者间存在差异,由于是新增功能,未能在4.9.0中找到替代,所以修改CCCI驱动源码,将该结构体相关新增功能进行版本的区分...,右侧为4.15.0,可以很明显的看到4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的,两者间存在差异,由于是新增功能,未能在4.9.0中找到替代,所以修改CCCI驱动源码,将该结构体相关新增功能进行版本的区分

    2.6K30

    进程切换分析(1):基本框架

    ---------------(1) { struct mm_struct *mm, *oldmm; mm = next->mm; oldmm = prev->active_mm...对于normal进程,其任务描述符(task_struct)的mm和active_mm相同,都是指向其进程地址空间。...对于内核线程而言,其task_struct的mm成员为NULL(内核线程没有进程地址空间),但是,内核线程被调度执行的时候,总是需要一个进程地址空间,而active_mm就是指向它借用的那个进程地址空间...四、在内核线程切换过程中,内存描述符的处理 我们上面已经说过:如果切入内核线程,那么其实进程地址空间实际上并没有切换,该内核线程只是借用了切出进程使用的那个地址空间(active_mm)。...mm_struct中的pgd成员中。

    23511

    libev源码解析——定时器监视器和组织形式

    invoked after a specific time, repeatable (based on monotonic clock) */ /* revent EV_TIMEOUT */ typedef struct...可以注意到,这两个监视器结构开头都拥有近乎相同的成员变量,即EV_WATCHER_TIME宏中定义的那部分 #define EV_WATCHER_TIME(type) \ EV_WATCHER...对这两种监视器,libev并没有像《libev源码解析——监视器(watcher)结构和组织形式》文中所述,将这些监视器关联到文件描述符作为下标的anfds结构中。 ?        ...而定时器是要求文件描述符对应的事件没有发生,通过等待超时而被触发(或者被其他无关事件触发,顺带执行)。所以将定时器监视器保存在这个结构中是没有用的。...WT w; } ANHE;         ev_watcher_timer和ev_timer、ev_periodic有着近乎一致的数据格式——它们都是使用EV_WATCHER_TIME宏构成开始的几个成员变量

    84940

    【Linux 内核 内存管理】分区伙伴分配器 ⑥ ( zone 结构体中水线控制相关成员 | 在 Ubuntu 中查看内存区域水位线 )

    文章目录 一、zone 结构体中水线控制相关成员 ( managed_pages | spanned_pages | present_pages ) 二、在 Ubuntu 中查看内存区域水位线 上一篇博客...【Linux 内核 内存管理】分区伙伴分配器 ⑤ ( 区域水线 | 区域水线数据结构 zone_watermarks 枚举 | 内存区域 zone 中的区域水线 watermark 成员 ) 中讲解了...( managed_pages | spanned_pages | present_pages ) ---- 在 linux 内核源码中 描述 " 内存区域 " 的结构体 struct zone 中...managed_pages ( 伙伴分配器管理的物理页数 ) 参考 【Linux 内核 内存管理】物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 ) 博客 ; struct...zone 结构体相关源码 : struct zone { /* Read-mostly fields */ /* zone watermarks, access with *_wmark_pages

    2.6K30

    深入理解libevent事件库的原理与实践技巧

    */struct evcallback_list active_later_queue;/* common timeout logic *//** An array of common_timeout_list...*/short enabled;};struct bufferevent中的重要成员变量:变量含义ev_base事件对象所属的reactor的对象。be_opsbufferevent的具体操作。...wm_write写水平线,写只有低水平没有高水平。低水平默认值是0,即用户态缓冲区为空时回调写回调函数。struct bufferevent_ops中的重要成员变量:变量含义input用户态读缓冲区。...用户态写缓冲区的存在是因为用户根本不清楚内核写缓存区的状态,需要把没有写出去的数据缓存起来等待下次写事件时把数据写出去。buffer的设计有三种类型:(1)固定数组,固定长度。...限定了处理数据包的能力,没有动态伸缩的能力;需要频繁挪动数据。(2)ring buffer。可伸缩性差。(3)chain buffer。

    31110

    Python字典实现--源码解读

    1.me_hash:存储了key的哈希值,专门用一个成员记录key的散列值,可以避免每次查询时都要去重新计算下。...PyDictObject中的entry可以在4种状态中转换:Unused(态)、Active(态)、Dummy(态)和Pending(态)   Unused:当一个entry处于Unused态时,entry...的me_key和me_value都为NULL,这种情况下,表示这个entry并没有存储一个(key,value),并且之前也没有存储过它们,每一个entry在初始化的时候都会处于这种状态。...Active:当一个entry存储了一个(key,value)时,entry便转换到了Active态,在这种状态下,me_key和me_value都不能为NULL,更准确的讲me_key不能为dummy...ma_values */     PyObject **ma_values; } PyDictObject; 1.PyObject_HEAD:就不用多说了,这是所有Python对象共有的,包含了两个成员

    94430

    【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct 结构体成员分析 | vm_mm 成员 | vm_page_prot 成员 | vm_flags 成员 )

    文章目录 一、vm_area_struct 结构体成员分析 1、vm_mm 成员 2、vm_page_prot 成员 3、vm_flags 成员 二、vm_area_struct 结构体完整源码 在之前的博客...中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员的含义 , 下面继续分析剩余结构体成员的含义 ; 一、vm_area_struct...结构体成员分析 ---- 1、vm_mm 成员 struct mm_struct *vm_mm 成员的作用是 指向 " 内存描述符 " mm_struct 结构体 , 这是该 " 虚拟内存区域 " vm_area_struct..." , 又称为 " 内存描述符 " ; struct mm_struct *vm_mm; /* The address space we belong to. */ 2、vm_page_prot 成员...include/trace/events/mmflags.h */ #define VM_NONE 0x00000000 #define VM_READ 0x00000001 /* currently active

    4.2K10

    libevent源码深度剖析(六) 初见事件处理框架

    evbase实际上是一个eventop实例对象; 先来看看eventop结构体,它的成员是一系列的函数指针, 在event-internal.h文件中: 1struct eventop { 2...(struct event *ev); 3int event_base_loop(struct event_base *base, int loops); 4void event_active(struct...event *event, int res, short events); 5void event_process_active(struct event_base *base); 本节将按介绍事件注册和删除的代码流程...,事件类型由ev->ev_events指明, 如果注册成功,v将被插入到已注册链表中; 如果tv不是NULL,则会同时注册定时事件,将ev添加到timer堆上; 如果其中有一步操作失败,那么函数保证没有事件会被注册...; 5 void *evbase; 6 // ev_base为NULL,表明ev没有被注册 7 if (ev->ev_base == NULL) 8

    1.2K20

    Linux C下线程池的使用

    这些线程提前创建好了之后,“任务队列”里面假设没有任务,那么就让这些线程休眠,一旦有任务,就唤醒线程去执行任务,任务执行完了,也不需要去销毁线程,直到当你想退出或者是关机时,这个时候,那么你调用销毁线程池地函数去销毁线程...如果,创建和销毁线程的时间对比执行任务的时间可以忽略不计,那么我们在这种情况下面也就没有必要用线程池。 “任务队列”是一个共享资源“互斥访问” ?...线程池本质上也是一个数据结构,需要一个结构体去描述它: struct pthread_pool //线程池的实现 { //一般会有如下成员 //互斥锁,用来保护这个“任务队列” pthread_mutex_t...task*)malloc(sizeof(struct task)); pool->tids = (pthread_t *)malloc(sizeof(pthread_t) * MAX_ACTIVE_THREADS...任务结点类型的指针,指向下一个任务 struct task * next; }; struct pthread_pool //线程池的实现 { //一般会有如下成员 //互斥锁,用来保护这个“

    1.8K50
    领券