linux内核

系统调用

用户进程与内核进行交互的一组接口;

需要C库支持,通过使用C库定义的函数来访问系统调用

系统调用、中断、异常是访问内核的三种方式。

  • 系统调用号:关联系统调用
  • 系统调用的性能:
  1. linux很短的上下文切换时间
  2. 系统调用处理程序和每个系统调用都非常简洁
  • 系统调用处理程序:用户空间的程序使用软中断来通知内核执行系统调用

通过exa寄存器传递系统调用号给内核;

给用户空间的返回值也通过寄存器传递(x86系统:存放在eax寄存器上);

建立系统调用的好处:

  • 系统调用创建容易且使用方便
  • Linux系统调用性能很高
  • 保证了系统的安全性和稳定性:用户程序不能直接操作内核地址空间。

系统调用和库函数的区别:

  • 库函数是0-n个系统调用的封装
  • 函数库调用是调用函数库中的一个程序,而系统调用是调用系统内核的一个服务
  • 函数库调用属于过程调用,开销较小,系统调用需要有用户态和内核态之间的切换开销
  • 库函数调用是在用户地址空间执行,而系统调用是在内核地址空间执行

问题:

  • 围绕系统调用号来讲,包括系统预分配、再固化、注册到每个需要支持的体系结构、维护困难(只能在主内核树维护)、功能简单的话便是大材小用

内存管理

  • 页:内核把物理页作为内存管理的基本单位

  • 内存管理单元(MMU):管理内存并把虚拟地址转换为物理地址的硬件,以页为单位进行处理。

  • struct page:使用了大量的联合体union来保证struct page结构体足够小

  • 区:Linux把系统的页划分成区,形成不同的内存池,这样可以根据用途进行分配。

    ZONE_DMA:DMA使用的页

    ZONE_NORMAL:正常可寻址的页

    ZONE_HIGHMEM:动态映射的页

  • kmalloc():返回在物理连续的一段以字节为单位的内核内存

  • kfree():与kmalloc()配对使用,避免内存泄漏

  • vmalloc():分配的内存虚拟地址连续,物理地址无需连续

    分配非连续的物理内存块,再“修正”页表,把内存映射到逻辑地址空间的连续区域

  • kmalloc和vmalloc

    大部分内核代码选用kmalloc分配内存的原因,主要出于性能考虑。

    ​ vmalloc为了把物理上不连续的页转换为虚拟地址空间上连续的页,必须专门建立页表项。并且,通过vmalloc获得的页必须一个一个进行映射,会导致比直接映射产生更大的TLB抖动

  • 内核常用的内存分配方式:使用某个低级页分配器或者kmalloc

  • 当创建和撤销很多大的数据结构,可以建立slab高速缓存来提升性能

进程地址空间

用户空间中进程的内存,成为进程地址空间。

  • 内存区域:

    • 代码段:可执行文件代码的内存映射
    • 数据段:可执行文件的已初始化的全局变量和静态变量
    • BSS段:未初始化的全局变量和静态变量
    • 堆:任何匿名的内存映射(如malloc分配的内存)
    • 栈:进程用户空间栈(进程内核栈独立存在并由内核维护)
  • 内核同时使用了mmap(链式结构)和mm_rb(红黑树)来描述同一块内存区域,在可以同时遍历整个节点同时,保证了查找节点的效率

  • 查找内存地址所对应的内存区域:

    1. 查看mmap_cache缓存
    2. 未命中时则选择搜索mm_rb红黑树结构,未找到则返回NULL
  • linux使用三级页表完成地址转换(虚拟地址转换成物理地址)

  • brk sbrk

定时器和时间管理

  • 实际时间:开机后,内核初始化从RTC读取,放入到xtime变量中。系统读写 xtime 时用的就是顺序锁

  • 定时器

    • 静态定时器:执行周期性的工作

      1. 更新系统运行时间

      2. 更新实际时间

      3. 检查当前进程是否用尽了自己的时间片,如果用尽,需要重新调度。

  • 动态定时器

    动态创建的定时器,使用后销毁。一般在内核代码中使用的基本都是动态定时器

    1. HZ:

      节拍率(HZ)是时钟中断的频率,表示的一秒内时钟中断的次数。比如 HZ=100 表示一秒内触发100次时钟中断程序。

    2. jiffies

      jiffies用来记录自系统启动以来产生的总节拍数。比如系统启动了 N 秒,那么 jiffies就为 N×HZ

    3. 时间中断处理程序

      时钟中断处理程序作为系统定时器而注册到内核中,体系结构的不同,可能时钟中断处理程序中处理的内容不同

  • 定时器执行流程

    定义:定时器在内核中用一个链表来保存的,链表的每个节点都是一个定时器

    生命周期:

    img
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容