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

第1章-课程说明、视频目录和相关资源

[复制链接]

416

主题

315

回帖

3288

积分

管理员

积分
3288
发表于 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,处理器内部高速缓存的知识及高速缓存控制,高级语言的多线程和并行程序设计需要这些知识。


课课程说明视频版:链接: https://pan.baidu.com/s/1nfH_oiTswgxvTOqYi_F9rw 提取码: 3zsr

课程状态:已完结,请在本版内逐课段学习(自2024-06-15日开始正在逐课段上传,一周内上传完毕)。相关资料包含在各课段内。有疑问的,在对应的课段内讨论。

无论是对高级会员还是至尊会员来说,本课程的主体内容都是成体系而且完整的。但是至尊会员多了习题(含解答)和相关资料。

416

主题

315

回帖

3288

积分

管理员

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

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

供至尊会员下载的附加资料一:
资料一的内容:
什么是TLB和PCID
本套视频课程编码时的故障调试备忘录
本套课程的系统调用一览表
System address map initialization in x86_x64 architecture part 1_ PCI-based systems - Infosec Resources
端口级硬盘读写流程图
What is the purpose of the _PAUSE_ instruction in x86(x86处理器引入PAUSE指令的目的)
ACPI定义器介绍
A-Major-Overhaul-of-the-APIC-Initialization-and-Vector-Allocation

供至尊会员下载的附加资料二:

供至尊会员下载的附加资料三:
资料三的内容:
64 位英特尔® 架构处理器拓扑枚举
INTEL处理器手册三卷本
AMD处理器手册三卷本
AMD处理器手册5卷本
Advanced Configuration and Power Interface (ACPI) Specification
BIOS and Kernel Developer’s Guide
BIOS_Enhanced Disk Drive Specification
What Every Programmer Should Know About Memory
x86-64 Assembly
EM64T Software Developer's Guide -1、2
Intel® 64 Architecture Memory Ordering White Paper
82093AA I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (IOAPIC)
Intel  64 Architecture Processor Topology Enumeration
MultiProcessor Specification Version 1.4
Intel® 64 Architecture x2APIC Specification
Notes on x86-64 programming
The 64 bit x86 C Calling Convention





本帖子中包含更多资源

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

×

416

主题

315

回帖

3288

积分

管理员

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

免费观看部分视频:




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

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

416

主题

315

回帖

3288

积分

管理员

积分
3288
 楼主| 发表于 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.并发线程的数据竞争过程


0

主题

2

回帖

70

积分

至尊会员

积分
70

至尊会员

发表于 2024-6-4 14:32:26 | 显示全部楼层
找个时间把x64中使用的intel官方参考文档发一下,比如sdm-vol-3a

416

主题

315

回帖

3288

积分

管理员

积分
3288
 楼主| 发表于 2024-6-5 11:32:07 | 显示全部楼层
pp553933054 发表于 2024-6-4 14:32
找个时间把x64中使用的intel官方参考文档发一下,比如sdm-vol-3a

这种资料网上多得很,所以就没有上传。既然 要求了,那就和别的至尊会员资料一起上传。见上。

7

主题

17

回帖

253

积分

至尊会员

积分
253

至尊会员

发表于 2024-6-22 08:56:11 | 显示全部楼层
为什么是分段上传,而不是完整的全部视频放在一个文件夹中分享了?是出于什么考虑呢?

416

主题

315

回帖

3288

积分

管理员

积分
3288
 楼主| 发表于 2024-6-22 10:09:36 | 显示全部楼层
xiaoyangst 发表于 2024-6-22 08:56
为什么是分段上传,而不是完整的全部视频放在一个文件夹中分享了?是出于什么考虑呢? ...

每一个课段属于一个小主题,学员有问题可以在对应的课段下提问交流。同时,每个课段或者每几个课段会有习题和总结,方便学员按步就班地、一个阶段一个阶段地学习。
基于以上考虑,严格来说,应当按视频的每一集拆分,不过当前的课程并没有弄这样细。后面的课程再考虑吧。

7

主题

17

回帖

253

积分

至尊会员

积分
253

至尊会员

发表于 2024-6-22 22:48:03 | 显示全部楼层
站长 发表于 2024-6-22 10:09
每一个课段属于一个小主题,学员有问题可以在对应的课段下提问交流。同时,每个课段或者每几个课段会有习 ...

那同时也提供全部完整的视频到一个网盘中吧,不然一个一个下载实在麻烦

416

主题

315

回帖

3288

积分

管理员

积分
3288
 楼主| 发表于 2024-6-22 22:55:54 | 显示全部楼层
xiaoyangst 发表于 2024-6-22 22:48
那同时也提供全部完整的视频到一个网盘中吧,不然一个一个下载实在麻烦 ...

对有些人来说大文件下载更慢更讨厌。上次有个朋友说用手机看,觉得每个课段的压缩包大了,手机存不下。
总之各人的需求不同,具体如何改进,需要通过时间来检验。慢慢改进,不可能一开始就很完美的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 10:18 , Processed in 0.256721 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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