深入Linux内核架构——简介和概述

文章目录

        • 1.1 内核的任务
        • 1.2 实现策略
          • 微内核
          • 宏内核
        • 1.3 内核的组成部分
          • 1.3.1 进程、进程切换、调度
          • 1.3.2 Unix进程
            • 创建进程的机制
            • 线程
            • 命名空间
          • 1.3.3 地址空间与特权级别
            • 内核空间与用户空间
            • 1. 特权级别
            • 2. 虚拟和物理地址
          • 1.3.4 页表
            • 多级页表
            • 访问优化
          • 1.3.5 物理内存的分配
          • 1.3.6 计时
          • 1.3.7 系统调用
            • 分类
          • 1.3.8 设备驱动程序、块设备与字符设备
            • 分类
          • 1.3.9 网络
          • 1.3.10 文件系统
          • 1.3.11 模块和热拔插
          • 1.3.12 缓存

1.1 内核的任务

  • 应用程序的视角:增强的计算机【内核抽象了与硬件的细节】
  • 若干程序的视角:资源管理程序 【分配共享资源(CPU时间,磁盘空间,网络链接】
  • 其它视角:库 系统调用向计算机发送请求

1.2 实现策略

微内核
  • 只有最基本的功能由中央内核实现

  • 其它功能委托给独立进程(文件系统,内存管理)

  • 容易拓展,不容易崩溃

  • Mac OS X

宏内核
  • 内核的全部代码(包括内存管理,文件系统,设备驱动程序)都是单独的文件

  • 执行速度比较快

  • 模块弥补了部分可拓展性缺陷

  • Linux,Windows

1.3 内核的组成部分

深入Linux内核架构——简介和概述_第1张图片

1.3.1 进程、进程切换、调度
  • 每个进程在CPU的虚拟内存中分配地址

  • 各个进程地址空间是完全独立的,进程通信需要特定的内核机制

  • 多任务系统的Linux系统需要完成

    • 内核借助CPU,需要保存完成进程的切换

    • 内核需要按照一定规则确定如何分享CPU,称之为调度

1.3.2 Unix进程
  • Linux对进程采取了层次系统管理

  • 每个进程都有一个依赖的父进程

  • init程序是第一个程序(负责系统初始化,然后显示登录界面/提示符

创建进程的机制
  1. fork: 创建进程的副本(除了id其它都相同),使用copy on write机制来优化

  2. exec: 将一个新进程加载到当前进程的内存中

线程
  • 线程与进程共享同样的地址空间

  • linux使用clone方法创建线程

命名空间
  • 命名空间使得不同的进程看到不同的系统视图

  • 每个命名空间可以包含一个特定的PID集合

1.3.3 地址空间与特权级别
  • 虚拟地址空间与物理内存数量无关
内核空间与用户空间
  1. 用户空间:0~TASK_SIZE 不同进程各不相同

  2. 内核空间:TASK_SIZE~MAX 不同进程相同

1. 特权级别
  • 处理器IA-32提供种权限级别,Linux使用了

  • 系统调用:用户态到核心态的切换

  • 硬件中断:内核也可以由异步硬件中断激活,然后在中断上下文中运行。(中断不可访问用户空间)

  • 内核线程:无权处理用户空间,不与用户空间进程相关联

2. 虚拟和物理地址

页表:为物理地址分配虚拟地址

1.3.4 页表
  • 将虚拟地址映射到物理地址
多级页表

深入Linux内核架构——简介和概述_第2张图片

访问优化
  • MMU:优化内存访问操作

  • TLB: 快表

1.3.5 物理内存的分配
  • 内核只分配到页帧更小标准库分配

  • 深入Linux内核架构——简介和概述_第3张图片

  1. 伙伴系统:快速检测内存中的连续区域

  2. slab缓存:频繁使用的小对象的一般性缓存

  3. 页面交换与页面回收:将磁盘作为拓展空间

1.3.6 计时
  • jiffies:时间坐标

  • 定时器中断

1.3.7 系统调用
  • 用户进程与内核交互的经典方法
分类
  • 深入Linux内核架构——简介和概述_第4张图片
1.3.8 设备驱动程序、块设备与字符设备
  • 设备驱动程序:与输入/输出设备通信
分类
  1. 字符设备连续的数据流,字节/字符读写数据

  2. 块设备随机访问设备数据,自行确定读取数据的位置

1.3.9 网络
  • 网卡:可以通过设备驱动程序管理,但是在内核中属于特殊状况,不能使用设备文件访问
    • 原因:数据被打包到协议层,必须进行打包与拆包
  • Linux使用了套接字
1.3.10 文件系统
  • Linux的组成:数以百万计的文件,存储在硬盘或者块设备

  • 目录结构:层次式文件系统,然后将元数据与实际数据关联起来

  • 虚拟文件系统(统一各式各样的文件系统)

    • Ext2: 基于inode
    • XFS
    • VFAT
  • 深入Linux内核架构——简介和概述_第5张图片
1.3.11 模块和热拔插
  • 模块:运行时向内核动态地添加功能
  • 设备驱动程序
    • 文件系统
    • 网络协议
1.3.12 缓存
  • 缓存:内核用来改进系统性能

  • 页缓存 块缓存

你可能感兴趣的:(深入Linux,linux,架构,服务器)