码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【内核的设计与实现笔记】| 【01】初步了解内核


    文章目录

      • 1 内核比较
        • 1.1 单内核与微内核设计
        • 1.2 Linux内核版本
      • 2 了解内核
        • 2.1 源码目录介绍
        • 2.2 内核开发
          • 2.2.1 特点

    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是抢占多任务系统,内核进程调度会对进程进行调度;
    是多处理器系统,会有多个访问统一资源;
    常用自旋锁和信号量;

  • 相关阅读:
    现在的数字藏品该怎么玩才不会被割韭菜?
    CI/CD持续集成与持续交付(五)钉钉报警、ansible自动化构建部署
    记一个带批注、表头样式的导入导出excel方法(基于easyexcel)
    Elasticsearch8.13.4版本的Docker启动关闭HTTPS
    快手小程序模板_快手小程序模板平台制作
    MATLAB平台学习(13)一些感悟
    系统编程 day12 (linux ) 消息队列 的函数 与知识
    【UVA No. 442】 矩阵链乘 Matrix Chain Multiplication
    Redis-使用java代码操作Redis
    WebSocket集群解决方案,不用MQ
  • 原文地址:https://blog.csdn.net/weixin_45926547/article/details/126886203
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号