找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 1080|回复: 3

课程说明、目录、下载链接和相关资源

[复制链接]

98

主题

152

回帖

1586

积分

管理员

积分
1586
发表于 2024-2-20 16:20:46 | 显示全部楼层 |阅读模式
图书《x86汇编语言:从实模式到保护模式》计划中的下册是介绍64位x86处理器、汇编语言和操作系统。在图书出版之前,同步录制此视频。
本视频原定的名字是《X64架构的汇编语言和操作系统基础》。
本套视频课程需要有保护模式的基础,所以应当先学习32位汇编语言的图书或者视频课程。
课程内容包括:
1,与IA-32架构进行对比,介绍64位处理器的基本架构,包括寄存器的变化、指令集和工作模式的变化、系统表的变化、内存组织和内存访问模式的变化;
2,IA-32e模式的特点及如何进入IA-32e模式,重点介绍其64位子模式;
3,IA-32e模式的4级和5级分页;
4,IA-32e模式下的中断和异常处理;
5,64位模式下的单处理器多任务和任务切换;
6,64位模式下的多处理器管理和初始化,包括高级可编程中断控制器APIC;
7,64位模式下的多处理器多任务和任务切换;
8,64位模式下的多处理器多线程和线程切换;
9,通过上述多任务和多线程引入基本的操作系统概念和实践,包括任务调度、线程同步、竞争、临界区、锁、原子操作,等等;
10,处理器内部高速缓存的知识及高速缓存控制,高级语言的多线程和并行程序设计需要这些知识。


课程状态:正在重制,2024年6月前上线提供下载。

98

主题

152

回帖

1586

积分

管理员

积分
1586
 楼主| 发表于 2024-2-26 12:39:26 | 显示全部楼层
以下是本套视频课程用到的源码和工具及相关图表。请购买至尊会员后下载

视频配套的源码和工具(已知它与将来出版的图书的源码不同):

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

98

主题

152

回帖

1586

积分

管理员

积分
1586
 楼主| 发表于 2024-2-27 10:37:57 | 显示全部楼层

以下是本套课程的视频,请点击观看(至尊会员权益部分需下载):




第1章:开篇
1.1  用汇编语言演示操作系统
1.2  内容提要及课程相关说明

第2章:X64的基本架构和执行环境
2.1  有关如何学习本章内容的重要提示
2.2  X64架构的由来
2.3  物理地址、有效地址和线性地址
2.4  X64架构的工作模式

98

主题

152

回帖

1586

积分

管理员

积分
1586
 楼主| 发表于 2024-5-7 21:22:22 | 显示全部楼层
课程目录:

├─C00.用汇编语言演示操作系统基础

├─C01.内容提要及课程相关说明

├─C02.X64的基本架构和执行环境
│  ├─002.有关本章内容学习的重要提示
│  ├─003.X64架构的由来
│  ├─004.物理地址、有效地址和线性地址
│  ├─005.X64架构的工作模式
│  ├─006.IA-32e模式及其子模式
│  ├─007.第一次阶段性巩固和测试
│  ├─008.X64架构对通用寄存器的扩展
│  ├─009.X64架构新增加的通用寄存器
│  ├─010.X64架构的通用寄存器访问规则
│  ├─011.X86处理器的物理地址空间
│  ├─012.X64架构下传统模式的内存访问
│  ├─013.传统模式下的32位4KB分页技术
│  ├─014.传统模式下如何利用超过4GB的物理内存
│  ├─015.传统模式下的32位4MB分页技术
│  ├─016.传统模式下的32位PAE分页技术
│  ├─017.传统模式下的32位PAE-4KB分页技术
│  ├─018.传统模式下的32位PAE-2MB分页技术
│  ├─019.X64架构的线性地址空间
│  ├─020.扩高地址的特点和处理器检查
│  ├─021.X64架构下IA-32e模式的内存访问
│  ├─022.X64架构的段寄存器
│  ├─023.X64架构下的代码段描述符
│  ├─024.X64架构下的数据段描述符
│  ├─025.X64架构下的4级和5级分页简介
│  ├─026.X64架构下的系统表和系统描述符
│  ├─027.X64架构下的GDTR
│  ├─028.X64架构下的IDTR
│  ├─029.X64架构下的LDT描述符和LDTR
│  ├─030.X64架构下的TSS描述符和TR
│  ├─031.X64架构下的标志寄存器和指令指针寄存器
│  ├─032.X64架构下传统模式的寻址方式
│  ├─033.X64架构下IA-32e模式的寻址方式
│  ├─034.64位模式的RIP相对寻址方式
│  ├─035.64位模式下的指令变化情况
│  └─036.IA-32e模式下的中断和异常处理概述

├─C03.准备进入IA-32e模式
│  ├─037.进入IA-32e模式的方法
│  ├─038.本章的目标及源程序的组织
│  ├─039.主引导程序和NASM的文件包含功能
│  ├─040.如何避免文件被重复包含
│  ├─041.编写主引导程序的一般性建议
│  ├─042.用BIOS硬盘扩展读加载内核加载器
│  ├─043.在程序中使用NASM运算符和表达式
│  ├─044.内核加载器程序的有效标志和长度
│  ├─045.通过数据段访问栈中的数据结构
│  ├─046.调用BIOS例程显示字符串
│  ├─047.读磁盘失败后的错误处理
│  ├─048.准备读取内核加载器程序的剩余部分
│  ├─049.转入内核加载器执行
│  ├─050.检测处理器是否支持IA-32e模式
│  ├─051.位测试指令BT
│  ├─052.获取和显示处理器商标信息
│  ├─053.获取和保存处理器的地址尺寸数据
│  ├─054.显示处理器的地址尺寸信息
│  ├─055.为进入保护模式准备全局描述符表
│  ├─056.进入保护模式
│  ├─057.在保护模式下显示字符串
│  ├─058.有关内核程序及其如何加载的说明
│  ├─059.读取内核程序的第一个扇区
│  └─060.将内核程序完全加载到内存中

├─C04.为进入IA-32e模式准备4级分页
│  ├─061.4级分页的结构和原理
│  ├─062.2MB和1GB页面的4级分页方式
│  ├─063.4级头表项的格式
│  ├─064.页目录指针项的格式
│  ├─065.页目录项和页表项的格式
│  ├─066.4级头表的创建和初始化
│  ├─067.创建指向4级头表自身的4级头表项
│  ├─068.准备映射物理内存的低端2MB空间
│  ├─069.在4级分页中使用2MB的物理页
│  ├─070.创建与低端2MB物理内存对应的4级头表项和页目录指针表
│  ├─071.创建与低端2MB物理内存对应的页目录指针项和页目录表
│  ├─072.创建与低端2MB物理内存对应的页目录项
│  ├─073.将物理内存低端的2MB映射到线性地址空间的高端
│  ├─074.为多任务环境准备必要的4级头表项
│  ├─075.为内核的4级分页系统预分配254个页目录指针表
│  ├─076.在内核的4级头表内安装254个表项并清空相关的页目录指针表
│  ├─077.进程上下文标识PCID
│  ├─078.控制寄存器CR3的内容格式
│  ├─079.设置控制寄存器CR3并开启物理地址扩展功能
│  └─080.型号专属寄存器IA32_EFER的设置和分页的开启

├─C05.进入IA-32e的64位模式执行
│  ├─081.在IA-32e的兼容模式下显示文本信息
│  ├─082.通过远返回方式进入64位模式的内核
│  ├─083.准备让内核工作在线性地址空间的高端
│  ├─084.启用GDT和栈区的高端线性地址
│  ├─085.使用RIP相对寻址将内核的起始线性地址改为高端地址
│  ├─086.让处理器转到内核程序对应的高端位置继续执行
│  ├─087.IA-32e模式下的中断门和陷阱门
│  ├─088.IA-32e模式下的中断处理过程
│  ├─089.内核的文件组织与通用的中断和异常处理策略
│  ├─090.通用异常服务例程的工作过程
│  ├─091.加载有效地址指令LEA
│  ├─092.创建通用中断处理过程的中断门
│  ├─093.在IDT内安装前32个与异常有关的中断门
│  ├─094.在IDT内安装剩余的中断门并加载IDTR
│  ├─095.初始化8259中断控制器
│  ├─096.打印64位模式下的第一条信息
│  └─097.在虚拟机上观察内核的运行情况

├─C06.单处理器环境下的多任务管理和调度
│  ├─098.单处理器环境下的多任务概述
│  ├─099.快速系统调用概述
│  ├─100.型号专属寄存器IA32_STAR
│  ├─101.准备在GDT中安装新的描述符
│  ├─102.为快速系统调用安装段描述符
│  ├─103.为快速系统调用准备段选择子
│  ├─104.设置快速系统调用的入口点
│  ├─105.快速系统调用时的RFLAGS和栈切换
│  ├─106.动态内存分配和内核空间的分配策略
│  ├─107.内核可用线性地址的获取和更新
│  ├─108.立即数在64位模式下的长度限制
│  ├─109.计算本次内存分配涉及的线性地址范围
│  ├─110.获取与指定线性地址对应的4级头表项的线性地址
│  ├─111.页面分配与页映射位串
│  ├─112.页映射位串的定义和空闲页的查找
│  ├─113.获取与指定线性地址对应的页目录指针项的线性地址
│  ├─114.检查与指定线性地址对应的页目录指针项是否存在
│  ├─115.分配页目录表并安装与线性地址对应的页目录指针项
│  ├─116.安装与指定线性地址对应的页目录项、页表项和页面
│  ├─117.64位LDT和TSS描述符的格式
│  ├─118.创建和安装64位的TSS描述符并加载任务寄存器TR
│  ├─119.实时时钟中断的安装和系统外壳任务简介
│  ├─120.准备创建外壳任务
│  ├─121.为新任务创建任务控制块PCB
│  ├─122.为新任务创建4级头表
│  ├─123.将指定的线性地址映射到指定的物理页
│  ├─124.复制当前活动4级头表的内容给新任务的4级头表
│  ├─125.切换到新任务的地址空间并清空4级头表的前半部分
│  ├─126.为新任务分配0特权级使用的栈空间
│  ├─127.为新任务分配3特权级使用的栈空间
│  ├─128.从硬盘上加载用户程序
│  ├─129.生成任务标识
│  ├─130.双向PCB链表概述
│  ├─131.将新任务的PCB添加到PCB链表中
│  ├─132.64位的任务状态段TSS和中断栈表IST
│  ├─133.以中断返回的方式进入外壳任务的局部空间执行
│  ├─134.系统调用指令SYSCALL和SYSRET
│  ├─135. 根据功能号计算内核例程的线性地址
│  ├─136.快速系统调用的返回和指令的REX前缀
│  ├─137.准备在时钟中断的处理中执行任务切换
│  ├─138.执行任务切换
│  ├─139.通过系统调用获取屏幕上可用的显示行坐标
│  ├─140.通过系统调用获取当前时间
│  ├─141.在外壳任务中显示当前时间
│  ├─142.用户任务的结构和功能
│  ├─143.当前任务标识的获取和用户程序例程库的介绍
│  ├─144.将64位二进制数转换为十进制字符串
│  ├─145.在每一轮相加中将结果和加数转换为字符串
│  ├─146.字符串的连接和显示
│  ├─147.用户任务的终止
│  └─148.任务切换频次对用户体验的影响

├─C07.多处理器和APIC的初始化
│  ├─149.多处理器环境概述
│  ├─150.同时多线程和INTEL超线程技术
│  ├─151.高级可编程中断控制器APIC概述
│  ├─152.中断引脚、中断类型和中断源
│  ├─153.本地中断源和本地向量表
│  ├─154.APIC的工作模式和APIC ID
│  ├─155.组成Local APIC ID的处理器拓扑
│  ├─156.Local APIC的地址映射
│  ├─157.I/O APIC的地址映射
│  ├─158.多处理器的初始化过程和MP规范
│  ├─159.高级的配置和电源接口(ACPI)规范
│  ├─160.本章代码清单
│  ├─161.ACPI的数据结构和表
│  ├─162.E820功能调用和内存地址范围结构
│  ├─163.查询和保存物理地址映射数据
│  ├─164.获取ACPI申领的物理内存地址范围
│  ├─165.准备映射ACPI申领的内存
│  ├─166.映射ACPI申领的内存到当前分页系统
│  ├─167.根系统描述指针结构
│  ├─168.搜索根系统描述指针结构
│  ├─169.系统描述表的层次结构和表头格式
│  ├─170.扩展的系统描述表XSDT
│  ├─171.通过XSDT搜索多APIC描述表MADT
│  ├─172.根系统描述表RSDT
│  ├─173.通过RSDT搜索多APIC描述表MADT
│  ├─174.多APIC描述表MADT的格式
│  ├─175.准备遍历中断控制器结构列表
│  ├─176.从中断控制器结构内提取处理器和APIC信息
│  ├─177.映射APIC地址
│  ├─178.Local APIC定时器
│  ├─179.Local APIC定时器的精度
│  ├─180.APIC定时器的本地向量表寄存器及其设置
│  ├─181.设置CMOS RTC以测量Local APIC定时器
│  ├─182.测量Local APIC定时器在1ms内经历的时钟周期数
│  ├─183.多处理器的中断机制之虚拟线模式
│  ├─184.中断输入引脚LINT0的本地向量表寄存器
│  ├─185.用LINT0的本地向量表寄存器屏蔽8259中断
│  ├─186.I/O APIC概述
│  ├─187.I/O APIC的I/O重定向表寄存器
│  ├─188.用I/O APIC投递的中断实施任务切换
│  ├─189.使用8253/8254定时器中断切换任务
│  ├─190.使用Local APIC定时器中断切换任务
│  ├─191.逻辑目标模式下的中断目标判别机制
│  ├─192.APIC中断的优先级及其相关的寄存器
│  ├─193.APIC中断的接受机制
│  └─194.最低优先级模式的中断处理

├─C08.多处理器环境下的多任务管理和调度
│  ├─195.本章的目标和代码清单
│  ├─196.高速缓存
│  ├─197.单处理器环境下的数据竞争
│  ├─198.多处理器环境下的数据竞争
│  ├─199.原子操作
│  ├─200.锁和自旋锁
│  ├─201.分支预测和PAUSE指令
│  ├─202.宏定义和宏扩展
│  ├─203.互斥锁的一般原理
│  ├─204.本章对内核工具文件的修改
│  ├─205.开始执行内核的初始化
│  ├─206.处理器专属存储区(每CPU数据区)
│  ├─207.为自举处理器BSP分配专属存储区
│  ├─208.用型号专属寄存器IA32_KERNEL_GS_BASE指向处理器专属存储区
│  ├─209.多处理器系统的初始化协议算法
│  ├─210.本章的多处理器多任务调度方案
│  ├─211.中断命令寄存器ICR
│  ├─212.本章的AP初始化代码简介
│  ├─213.将AP初始化代码传送到指定位置
│  ├─214.向所有应用处理器广播SIPI消息
│  ├─215.应用处理器AP的初始化:进入保护模式
│  ├─216.应用处理器AP的初始化:进入64位模式
│  ├─217.应用处理器AP的初始化:创建数据结构
│  ├─218.应用处理器AP的初始化:初始化之后的处理器架构状态
│  ├─219.应用处理器AP的初始化:用SWAPGS指令访问专属存储区
│  ├─220.应用处理器AP的初始化:开启Local APIC并进入停机待命状态
│  ├─221.自举处理器BSP:等待所有应用处理器完成初始化
│  ├─222.自举处理器BSP:创建系统外壳任务并为其指定时间片
│  ├─223.交换并相加指令XADD和无锁操作
│  ├─224.自举处理器BSP:广播新任务认领消息并进入预定状态
│  ├─225.新任务认领中断的处理过程
│  ├─226.在任务链表中查找就绪任务
│  ├─227.用比较并交换指令CMPXCHG以无锁方式操作链表节点
│  ├─228.执行新任务:为新任务指定时间片
│  ├─229.执行新任务:恢复任务的状态并开始执行
│  ├─230.时间片到期中断的处理过程
│  ├─231.处理器专属存储区的必要性
│  ├─232.外壳任务的执行流程
│  ├─233.用户任务的执行流程
│  └─234.任务的终止

├─C09.多处理器环境下的多线程管理和调度
│  ├─235.任务(进程)和线程
│  ├─236.任务控制块PCB和线程控制块TCB
│  ├─237.任务及其主线程的创建
│  ├─238.新线程认领中断的处理过程
│  ├─239.查找就绪状态的线程
│  ├─240.让处理器执行指定的线程
│  ├─241.时间片到期中断的处理过程
│  ├─242.系统外壳任务及其主线程的执行
│  ├─243.准备创建新的线程
│  ├─244.创建新线程:创建线程控制块TCB和栈
│  ├─245.创建新线程:例程返回和结束线程的区别
│  ├─246.创建新线程:如何用RET指令结束线程
│  ├─247.创建新线程:在栈中构造结束线程的栈帧
│  ├─248.创建新线程:将TCB添加到当前任务的TCB链表
│  ├─249.线程的执行:动态内存分配
│  ├─250.线程的执行:在栈中保存所有缓冲区的线性地址
│  ├─251.线程的执行:字符串的生成、连接和打印
│  └─252.线程的结束和任务的终止

└─C10.数据竞争和互斥锁
    ├─253.本章内容提要
    ├─254.线程休眠及其实现机制
    ├─255.执行线程休眠的系统调用
    ├─256.保存和修改休眠线程的状态
    ├─257.安装系统管理中断
    ├─258.系统管理中断的处理过程
    ├─259.利用系统管理中断处理休眠线程
    ├─260.用户任务及其线程的创建
    ├─261.使用系统调用让一个线程等待另一个线程
    ├─262.利用系统管理中断处理线程等待
    ├─263.在两个同时执行的线程中访问共享数据
    ├─264.在用户任务的主线程中打印共享数据
    └─265.并发线程的数据竞争过程


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-5-19 23:13 , Processed in 0.227472 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表