• 【内核的设计与实现笔记】| 【01】初步了解内核


    1 内核比较

    1.1 单内核与微内核设计

    【单内核】:所有的内核服务都在一个地址空间上运行;

    • 内核以静态二进制的形式存放在磁盘中;
    • 可类似用户程序直接调用函数;
    • 简单、性能高;

    【微内核】:将功能模块划分为多个独立的过程(服务器),都运行在各自的地址空间上;

    • 调用函数需要采用ICP机制,将消息传递到微内核通信;
    • 各自独立,避免出现失效;
    • 【IPC机制】:开销多余函数调用,设计到内核态与用户态的上下文切换;
      • 【解决】:基于该内核的系统,将服务器位于内核中,就避免了这些开销;

    Linux内核】:为单内核,提供模块化设计、抢占式内核、支持内核线程、多处理机制以及动态装载内核模块的能力;

    • 让所有事情都运行在内核态中,直接调用函数;
    • 汲取了微内核的精华;

    1.2 Linux内核版本

    【主.副.修.稳】

    • 副班版本是奇数则为开发版,为偶数则为稳定版;
      在这里插入图片描述

    2 了解内核

    =========》内核源码下载地址《========
    或者===》 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

    2.1 源码目录介绍

    在这里插入图片描述

    2.2 内核开发

    2.2.1 特点

    【特点】:

    • 内核编程时不能访问C库和标准C头文件;
    • 必须使用CNU C;
    • 缺乏类似用户空间的内存保护机制;
    • 难以执行浮点运算;
    • 每个进程只有一个很小的定长堆栈;
    • 需要注意同步和并发因为内核支持异步中断、抢占和SMP;
    • 注意移植性;

    【无libc库和标准头文件】
    内核不能连接C库,但大部分函数在内核都进行实现;

    【GNU】
    gcc是多种GNU编译器的集合,可编译内核及系统上的C程序;

    【GNU中的区别】
    1.内联函数:
    C99及GNU支持,函数会在调用位置展开,减少函数调用以及返回带来的开销;
    但会让内存空间增多,少用于常调用的函数;
    2.分支声明
    gcc内建了指令用于优化,likely和unlikely;
    若使用正确,性能会提升,否则会下降;
    一般用于错误条件判断;

    【没有内存保护机制】
    若用户程序内存错误则会结束进程,而内核则无法控制,没有提示;

    【不要使用浮点数】
    在用户程序中会被内核进行转换,内核中不会;

    【同步和并发】
    Linux是抢占多任务系统,内核进程调度会对进程进行调度;
    是多处理器系统,会有多个访问统一资源;
    常用自旋锁和信号量;

  • 相关阅读:
    用ABAP语言写的扫雷游戏
    算法基础:单链表图解及模板总结
    苹果Siri怎么打开?教你两招轻松唤醒!
    OKHTTP断点续传
    Python工程师Java之路(p)Maven聚合和继承
    【踩坑】POST 方法的基于摘要的协商缓存实现
    Prototype(原型模式)
    前端实现分页
    Linux文件目录相关指令
    bodipy荧光标记染料BDP 558/568 COOH/羧基羧酸,CAS:150173-72-1
  • 原文地址:https://blog.csdn.net/weixin_45926547/article/details/126886203