分类目录归档:linux

虚拟地址空间布局架构


虚拟地址空间布局架构

内存管理子系统架构可以分为:用户空间,内核空间以及硬件部分3个层面。

  1. 用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源
  2. 内核空间:内核总是驻留在内存中,是操作系统的一部分,内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。
  3. 硬件:处理器包含一个内存管理单位( Memory Management Unit ,MMU)的部件,负责把虚拟地址转换为物理地址。

Linux内核只是操作系统当中的一部分,对下管理系统所有硬件设备;对上通过系统调用向Library Routine 或(或者其他应用程序提供的API接口)

Read more

内核数据结构


内核数据结构

链表和红黑树

Linux 内核源码中,常用的数据结构为链表和红黑树。如链表主要解决元素可以动态创建并删除和插入,每个元素离散存放 不需要占据连续的内存

链表在Linux 内核数据结构如下:

struct list_head {
    struct list_head *next, *prev;
};
struct hlist_head{
    struct hlist_node *first;
}

链表静态和动态初始化操作:

#define LIST_HEAD_INIT(name) { &(name),&(name)}
#define LIST_HEAD(

Read more

内核内存布局和堆管理


Linux 内核内存布局

64位Linux 一般使用48位来表示虚拟地址空间,45(有的是44 或者 46)位表示物理地址,通过命令:cat /proc/cpuinfo 输出地址大小,具体的其他选项参数: vendor_id : GenuineIntel //厂商 cpu family : 6 //CPU产品代号 mode : 79 //cpu 属于其系列的具体代号 mode name: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz stepping : 1//cpu 属于制作更新版本 cpu MHz

Read more

RCU机制以及内存优化屏障


RCU

RCU (ready-copy-update) 是读-拷贝-更新,是linux内核中重要的同步机制,Linux内核已有原子操作,读写信号量等锁机制

  1. RCU 重要的应用场景是链表,有效地提高遍历读取数据的效率,读取链表成员时候,通常只需要rcu_read_lock(),允许多个线程同时读取链表,并且允许一个线程同时修改链表。
  2. RCU 的意思是读复制更新,它是根据原理命名,写者修改对象的流程为:首先复制生成一个副本,然后更新此副本,最后使用新对象替换旧的对象。
  3. 在写者执行复制更新的时候,读者可以读数据信息

写者删除对象,必须等待所有访问被删除对象读者访问结束的时候,才能够执行销毁操作实

Read more

进度优先级与调度策略


基础知识

Linux 内核当中有3中调度策略

  1. SCHED_OTHER 分时调度策略
  2. SCHED_FIFO 实时调度策略,先到先服务;
  3. SCHED_RR 实时调度策略,时间片轮转,公平和平等, 备注:如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才能运行这个优先级相同的任务 而RR可以每个任务都执行一段时间。

获取线程设置的最高和最低优先级函数如下:

int sched_get_priority_max(int policy);//获取实时优先级的最大值
int sched_get_priority_min(int policy

Read more