最新公告
  • 自助下单 自动发货 58学课 欢迎您【客服QQ:260837161】
  • 抖码老汤操作系统

    • 在线网盘 点击查看详情 购买后内容一样

    内存篇

     1. 内存篇一:ELF 文件【2.9 小时】

    1. C 程序的编译过程
      1. 预处理、编译、汇编
      2. 链接阶段
      3. 符号解析
      4. 重定位
      5. 链接静态库
    2. ELF
      1. ELF 格式详解
        1. ELF Header
        2. ELF Sections
          1. .text
          2. .rodata
          3. .data
          4. .bss
          5. .symtab
      2. 节头部表
      3. 可重定位目标文件
      4. 可执行目标文件
    3. 一个程序需要占用多少内存?
      1. 代码段
      2. 数据段
      3. 静态数据
      4. 动态数据
      5. 栈段

    2. 内存篇二:内存寻址【2.6 小时】

    1. 寻址能力
      1. 物理寻址
      2. CPU 寻址能力
      3. CPU 位数和地址总线位数
      4. Intel 处理器发展历史
    2. 分段寻址
      1. 实模式:8086 处理器寻址方式
      2. 保护模式:32 位操作系统分段寻址
    3. 虚拟寻址
      1. 虚拟寻址 vs 物理寻址
      2. 虚拟内存
      3. 地址空间
    4. 分页寻址
      1. 分段寻址的缺点
      2. 页表 (Page Table)
      3. 地址转换
      4. 多级分页
      5. 二级分页
      6. Linux 多级分页
      7. TLB:页表的缓存

    3. 内存篇三:内存布局【4.2 小时】

    1. 虚拟内存布局
      1. 用户态
      2. 用户态虚拟内存布局
      3. 内存映射
        1. 内存映射普通文件
        2. 内存映射匿名文件
        3. 共享对象:动态共享库
        4. 私有对象:写时复制
        5. 内存映射函数
          1. mmap:创建内存映射
          2. mummap:解除内存映射区
        6. 加载 ELF 可执行文件时的内存映射
        7. 内存映射区的抽象:vm_area_struct
        8. VMAs 双向链表
        9. VMAs 红黑树
        10. mmap 的执行流程
      4. 用户态虚拟地址空间抽象:mm_struct
      5. 内核态
        1. 内核态虚拟内存布局【32 位】
          1. 直接映射区
          2. vmalloc 区
          3. 持久映射区
          4. 固定映射区
          5. 什么是高端内存 – high memory?
          6. 内核如何访问高端内存?
            1. 持久映射:kmap
            2. 固定(临时)映射:kmap_atomic
            3. vmalloc
        2. 内核态虚拟内存布局【64 位】
          1. 直接映射区
          2. vmalloc 区
          3. 虚拟内存映射区
          4. 代码段
      6. 内核页表 vs 用户程序页表
    2. 物理内存布局
      1. SMP 架构实现
        1. UMA
        2. NUMA
      2. 内存模型
        1. 平坦内存模型
        2. 不连续内存模型
        3. 稀疏内存模型
    3. 缺页异常处理程序执行逻辑 – 用户态

    4. 内存篇四:内存分配【5.2 小时】

    1. 内存分配算法
      1. 内存的分配和释放
      2. 内存对齐
      3. 如何评估内存分配器的好坏
        1. 内存利用率
        2. 吞吐率
      4. 实现内存分配器要考虑的问题
        1. 如何表达内存块?
        2. 空闲块的组织
        3. 隐式空闲链表
        4. 空闲块的放置
          1. 首次适配
          2. 下一次适配
          3. 最佳适配
        5. 空闲块的分割
        6. 空闲块的合并
      5. 显示空闲链表
      6. 分离空闲链表
    2. 虚拟内存分配
      1. malloc 和 free
        1. 系统调用:sbrk
        2. 系统调用:mmap
      2. ptmalloc 中的分离空闲链表(bins)的组成
        1. top chunk
        2. fast bins
        3. unsorted bin
        4. small bins
        5. large bins
      3. malloc 内存分配和释放流程
    3. 物理内存分配
      1. 物理内存页帧的分配和释放
        1. 伙伴系统
      2. 页面置换流程
      3. 页面置换算法
      4. 逆向映射:通过 page 找到使用它的页表项
      5. 再看缺页异常处理程序处理逻辑
      6. slab 分配器
        1. slab 结构
        2. slab 着色
        3. 分配和释放对象的流程
      7. 非连续物理内存的分配:vmalloc

    进程篇

    1. 进程篇一:进程和线程【4.3 小时】

    1. 进程和程序的关系
    2. 进程的组成
      1. 一:文件相关信息
        1. 文件系统 fs_struct
        2. 打开的文件 files_struct
      2. 二:虚拟地址空间信息:mm_struct
      3. 三:一组寄存器中的数据
        1. CPU 上下文信息
          1. 指令指针寄存器
          2. 通用寄存器
          3. 段寄存器
          4. 标志寄存器
      4. 四:函数调用栈
        1. 用户态函数栈
        2. 内核函数栈
      5. 五:调度信息
        1. 进程切换【时钟中断】
    3. 进程的抽象:task_struct 数据结构
    4. 0 号进程、1 号进程以及 2 号进程
    5. 创建进程的过程 (fork 和 exec 系统调动)
      1. fork
      2. execvp
      3. load_elf_binary
    6. 为什么需要线程?
    7. 线程可以访问的三类数据
      1. 线程栈上的本地数据
      2. 在整个进程里共享的全局数据
      3. 线程私有数据
    8. 线程创建的详细过程
      1. clone 系统调用
    9. 线程的实现
      1. 用户级线程
      2. 内核级线程
    10. 内核线程
    11. 再来看 0、1、2 号进程
    12. 线程的状态
    13. 再次回顾进程和线程
    14. 进程和线程的串讲以及线程池

    2. 进程篇二:进程调度【3.0 小时】

    1. 通用的任务调度算法
      1. 周转时间优先
        1. 先进先出 (FIFO) 算法
        2. 最短任务优先 (SJF) 算法
        3. 最短完成时间优先 (STCF) 算法
      2. 响应时间优先
        1. 轮转 (RR) 调度算法
      3. CPU 计算和 IO 重叠以提高资源利用率
      4. 多级反馈队列 (MLFQ) 调度算法
        1. 背后的数据结构
        2. 问题及其解决方案
          1. 产生饥饿
          2. 会被欺骗
          3. 任务类型变化
    2. Linux 进程调度算法
      1. 数据结构:多级队列
      2. 实时进程调度
        1. FIFO 调度算法:不可抢占
        2. RR 调度算法:可抢占
      3. 普通进程调度
        1. 完全公平 (CFS) 调度算法
        2. 优先级的设置
        3. 进程权重的计算
        4. 虚拟运行时间
      4. 调度流程
        1. 主动调度流程:schedule 函数
        2. 抢占调度流程
      5. 线程切换需不需要刷新 TLB 和 CPU 高速缓存?

    3. 进程篇三:信号和中断【2.7 小时】

    1. 信号
      1. 什么是信号?
      2. 什么时候发送信号?
        1. kill 命令发送信号
      3. 背后的数据结构
        1. 信号的发送
        2. 信号的处理
      4. 信号发送和处理的总流程
      5. 系统调用时的信号处理
    2. 中断
      1. 异步中断
        1. I/O 中断
        2. 时钟中断
      2. 同步中断 (异常)
        1. 除 0 异常
        2. 缺页异常
        3. 80 中断
      3. 中断描述符表 (IDT)
      4. 同步中断处理流程
        1. 用户态发生中断
        2. 内核态发生中断
      5. 异步中断 (异常) 处理流程
        1. 中断嵌套
      6. 硬中断和软中断
    3. 总结:CPU 上下文、进程上下文以及中断上下文

    4. 进程篇四:并发编程【6.6 小时】

    1. 内核代码是如何运行的?
      1. 和当前进程有关系
      2. 异常处理程序
      3. 中断处理程序
      4. 内核线程
    2. 中断的禁止和开启
    3. 用户态抢占和内核抢占
      1. 抢占的禁止和开启
    4. 线程并发安全问题
      1. 临界区
      2. 多个线程同时访问临界区
    5. 解决线程并发安全问题
      1. 硬件方案
        1. 禁止中断
        2. 原子操作
      2. 软件方案
        1. CAS
        2. ABA 问题
    6. 线程互斥
      1. 自旋锁
        1. 饥饿问题及其解决方案
        2. 浪费 CPU 时间问题及其解决
      2. 阻塞互斥锁 vs 自旋锁
      3. 公平锁、非公平锁以及读写锁
      4. 多个有关联的资源的保护
      5. 细化锁的粒度可以提高并发性能
      6. 死锁及其避免方法
      7. 活锁及其避免方法
    7. 线程同步
      1. 信号量(Semaphore)
        1. 信号量的作用
        2. 生产者消费者模式
        3. 苹果橙子问题
      2. 管程 (Monitor)
        1. 什么是管程?
        2. 管程实现的生产者消费者
        3. 条件变量的实现

    5. 进程篇五:缓存一致性【3.2 小时】

    1. 什么是缓存一致性问题?
    2. CPU 核心之间数据如何传播?
      1. 写传播
      2. 事务的串行化
      3. 总线嗅探机制
      4. 写失效
      5. 写广播
    3. CPU 本地读写和总线读写
    4. 总线仲裁
    5. MSI 缓存一致性协议
    6. MESI 缓存一致性协议
    7. x86 MESIF 缓存一致性协议
    8. 内存屏障
      1. Store Buffer
      2. 写内存屏障
      3. 失效队列
      4. 读内存屏障
      5. lock 前缀指令作为内存屏障
      6. 用户态插入内存屏障

    文件篇

    1. 文件篇一:文件系统【3.0 小时】

    1. 硬盘
      1. 机械硬盘 (HDD)
        1. 拆解机械硬盘
        2. 寻道、旋转和传送时间
        3. 顺序读写和随机读写
        4. RAID(磁盘阵列)
      2. 固态硬盘 (SSD)
    2. 文件中的数据块
    3. 如何分配数据块给文件?
      1. 连续分配
      2. 链表分配
      3. 文件分配表 (FAT)
      4. i 节点 (index node)
    4. 文件系统(Linux 一切皆文件)
      1. 磁盘文件系统
      2. 设备文件系统
        1. 块设备
        2. 字符设备
      3. 网络文件系统
      4. 特殊文件系统
    5. 文件系统挂载
      1. 磁盘分区:fdisk
      2. 在磁盘分区格式化指定文件系统:mkfs
      3. 文件系统的挂载:mount 和 unmount

    2. 文件篇二:文件读写【3.9 小时】

    1. ext 4 文件系统
      1. 硬盘布局
        1. 超级块
        2. inode 位图
        3. 数据块位图
        4. 存储 inode 的 inode 表
        5. 数据区域
      2. 文件组织(inode)
        1. 文件元数据信息的存储
        2. 数据块地址的管理
      3. 目录的组织:目录项
      4. 块组描述符表
      5. 基于 ext4 的文件操作
        1. 创建文件目录的过程
        2. 创建文件的过程
        3. 读写文件的过程
    2. 虚拟文件系统 (VFS)
      1. 核心数据结构
        1. 索引节点:inode
        2. 目录项:dentry
        3. 文件:file
        4. 路径:path
        5. 挂载点:mount
        6. 文件系统挂载信息:vfsmount
        7. 超级块:super_block
        8. 文件系统类型:file_system_type
      2. 操作接口
        1. 索引节点操作
        2. 文件操作
      3. 文件系统树
    3. 进程文件读写路径
      1. 应用程序和 VFS 的交互
      2. task_struct、fs_struct、files_struct
      3. inode 和 dentry 缓存:元数据缓存
      4. open 文件打开流程
      5. read 和 write 读写文件的流程
      6. 硬链接和软链接

    3. 文件篇三:页面缓存【2.6 小时】

    1. 页面缓存的数据结构
      1. 页面缓存的抽象:address_space
      2. 使用基数树维护缓存页
      3. inode 和 file 中都会有对应的 address_space
      4. address_space 的操作方法
    2. 页面缓存的处理函数
      1. 查找页
      2. 增加页
      3. 删除页
    3. 带有页面缓存的文件读流程
    4. 带有页面缓存的文件写流程
      1. 脏页回写磁盘
    5. 页面缓存和内存映射的关系
      1. 再看内存映射的数据结构
      2. 再看内存映射文件的流程
    6. 再看缺页异常处理逻辑
      1. 按需调页
    7. 文件系统组件总结

    4. 文件篇四:进程间通信【2.9 小时】

    1. 管道
      1. 匿名管道 vs 命名管道
      2. 匿名管道的实现原理
      3. 管道依赖的 pipefs 文件系统
      4. 匿名管道底层实现
      5. 命名管道底层实现
    2. 共享内存
      1. 什么是共享内存?
      2. 共享内存的使用
        1. 创建共享内存:shmget
        2. 映射共享内存:shmat
        3. 解除映射共享内存:shmdt
      3. 共享内存的底层原理_基于 tmpfs 文件系统
    3. IPC 中的信号量
      1. 信号量的作用
      2. 信号量的使用
        1. 创建信号量集:semget
        2. 信号量集初始化:semctl
        3. 信号量操作:semop
    4. 消息队列
      1. 创建消息队列:msgget
      2. 消息发送:msgsnd
      3. 接收消息:msgrcv
    每天成长一点点,要比别人快一步
    58学课 » 抖码老汤操作系统

    常见问题FAQ

    如何下单?如何下载?
    ->> 点击查看 自助下单,自动发货,下单后,页面会自动刷新,显示百度网盘地址
    如何查看下单后的内容?
    在线网盘 点击查看详情 下单后内容一样
    本站不议价 !
    本站不议价,不支持无理由退换,看清楚再下单
    更多常见问题?
    ->> 点击查看

    发表回复

    Hi, 如果你对这个资源有疑问,可以跟我联系哦!

    联系客服
    • 13259会员总数(位)
    • 5283资源总数(个)
    • 87本周发布(个)
    • 3 今日发布(个)
    • 1510稳定运行(天)

    自助下单 自动发货 58学课 欢迎您

    加入我们