• Linux内核简介


    Linux内核简介

    UNIX的历史

    • UNIX强大的根本原因
      • 简洁,只提供几百个系统调用并且有很明确的设计目的
      • 所有的东西都被当作文件对待
      • 内核和相关的系统工具软件是用C语言编写而成:不同硬件架构移植能力强
      • 进程创建迅速,独特的fork()系统调用
      • 简单稳定的进程通信,目标明确的程序运行,方便的程序组合:策略与机制分离,清晰的层次化结构

    Linux简介

    • 类UNIX系统
    • 协作开发项目
    • 内核也是自由(公开)软件,遵循GNU GPL 2.0

    操作系统和内核简介

    • 操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
    • 通常一个内核由负责响应的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序网络、进程间通信等系统服务程序共同组成。
    • 内核态、用户态,内核空间、用户空间
    • 应用程序通过系统调用与内核通信:应用程序通过系统调用在内核空间运行,内核运行于进程上下文中:应用通过系统调用界面陷入内核
    • 异步中断信号,中断号,中断服务程序,专门的执行环境:第一时间响应处理与退出
      -在这里插入图片描述
      • 运行于用户空间,执行用户进程
      • 运行于内核空间,处于进程上下文,代表某个特定的进程执行
      • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

    Linux内核和传统UNIX内核的比较

    • UNIX内核基本都是一个不可分割的静态可执行库:必须以巨大、单独的可执行块的形式在一个单独的地址空间中运行
    • UNIX内核通常需要硬件系统提供页机制**(MMU)**以管理内存:可加强对内存空间的保护,并保证每个进程都可以运行于不同的虚拟地址空间上
    • 初期Linux系统也需要MMU支持,但有一些特殊版本并不依赖于此

    单内核与微内核设计之比较

    • 单内核

      • 所谓单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上
      • 通常以单个静态二进制文件的形式存放在磁盘中
      • 大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数
      • 支持者认为单模块具有简单和性能高的特点
      • 大多数UNIX系统都设计为单模块
    • 微内核

      • 微内核的功能被划分成多个独立的过程,每个过程叫做一个服务器
      • 只有强烈请求特权服务的服务器可以运行在特权模式,其他服务器都运行在用户空间
      • 所有服务器都保持独立并运行在各自的地址空间上
      • 通过消息传递处理微内核通信:采用了进程间通信机制(IPC)
      • 各自独立有效避免了一个服务器的失效祸及另一个
      • 由于IPC机制开销大于函数调用,又涉及到内核空间和用户空间的切换,所以消息传递需要一定时间。结果,所有实际应用的基于微内核的系统都让大部分或全部服务器位于内核。WindowsNT内核,Mach内核是微内核的典型实例,都在其新近版本中不让任何微内核服务器运行在用户空间,违背了微内核的设计初衷

    Linux的内核风格

    • Linux是单内核,运行在单独的内核地址空间上
    • 吸取微内核精华:模块化设计、抢占式内核、支持内核线程、动态装载内核模块
    • 避其微内核设计缺陷,让所有事情都运行在内核态,直接调用函数,无须消息传递
    • Linux内核与传统UNIX系统的差异
      • Linux支持动态加载内核模块
      • Linux支持对称多处理(SMP)机制
      • Linux内核可以抢占
      • Linux对线程的实现比较有意思:内核并不区分线程和其他一般的进程。对于内核来说,所有进程都一样,只不过其中的一些共享资源而已
      • Linux提供具有设备类的面向对象的设备类型、热插拔事件,以及用户空间的设备文件系统(sysfs)
      • Linux忽略了一些被认为是设计的很拙劣的UNIX特性,像STREAMS,还忽略了一些难以实现的过时标准
      • Linux体现了自由的精髓。现有的Linux特性集就是Linux公开开发模型自由发展的结果

    Linux内核版本

    • Linux内核有两种:稳定的和处于开发中的
    • 通过一个简单的命名机制来区分内核
      • 使用三个或者四个’.'分隔的数字表示
      • 第一个数字是主版本号,第二个数字是从版本号,第三个数字是修订版本号,第四个可选的数字为稳定版本号
      • 副版本号可反映是稳定版本还是开发中版本:偶数为稳定版,奇数为开发版
        在这里插入图片描述
      • 处于开发中的内核会经历几个阶段:最开始实验各种新特性,会出现不可避免的错误和混乱;系统逐渐成熟后,会有一个特性审定的声明,此时不再接受新特性,而对已有特性的后续工作继续进行;新内核确实趋于稳定后,开始审定代码,之后只允许加入修改bug的代码;经过一个准备期之后,将这个内核作为新的稳定版推出
      • 一直到2004年,Linux开发者峰会上,确定延长2.6内核系列,因为其被广泛接受并十分成熟
      • 未解决版本发布周期变长的副作用,引入稳定版本号:包含关键性bug修改,常会向前移植处于开发版内核的重要修改
      • 未解决版本发布周期变长的副作用,引入稳定版本号:包含关键性bug修改,常会向前移植处于开发版内核的重要修改

    UNIT 1 end

    加油学习啊少年!!

  • 相关阅读:
    HDU3145 Max Sum of Max-K-sub-sequence (单调队列模板)
    AcWing1088 旅行问题(单调队列)
    POJ1821 Fence(单调队列)
    POJ1742 Coins(多重背包+二进制优化)
    AcWing217 绿豆蛙的归宿(期望)
    BZOJ.2134.[国家集训队]单选错位(概率 递推)
    洛谷.3805.[模板]manacher算法
    Codeforces.280C.Game on Tree(期望)
    BZOJ.2521.[SHOI2010]最小生成树(最小割ISAP/Dinic)
    洛谷.4172.[WC2006]水管局长(LCT Kruskal)
  • 原文地址:https://www.cnblogs.com/ekkone/p/11667182.html
Copyright © 2020-2023  润新知