硬件视角的操作系统 (CPU Reset;固件;为硬件编程) [南京大学2023

0#00:01
计算机硬件是由数字逻辑电路构成的,可以模拟任何计算机系统。计算机系统是一个严格的数学对象,可以通过函数来描述其状态迁移。初始状态是一个重要问题,决定了程序是否能在计算机上执行。手机和电脑可以通过重启按钮来解决死机问题。
0#08:26
计算机系统中的CPU reset状态是由硬件和程序员之间的约定建立起来的。CPU reset后的状态包括所有寄存器的值,如程序计数器。厂商和CPU之间的约定使得主板的生产厂商可以在CPU reset的地址上放置代码,从而执行特定的操作。这些约定都是通过手册规定的,没有任何魔法存在。
0#17:48
操作系统的启动过程包括硬件的初始化和固件的执行。固件是由厂商提供的一部分代码,用于配置和管理计算机硬件,并加载操作系统。固件可以根据需求配置硬件选项,如启用或禁用某些功能。固件也可以识别和加载不同的操作系统。
0#26:17
BIOS是一种固件,负责启动计算机并提供一些功能。IBM PC的BIOS还提供了一组API,可以调用一些功能,如打印字符和配置屏幕。随着计算机硬件的发展,传统的BIOS已经不能满足需求,于是出现了UEFI,它规定了驱动和启动程序的格式和规范。传统的BIOS的主要功能是将程序加载到内存中,它会扫描可引导设备,找到第一个可引导的设备,并将其第一个扇区加载到内存中的7c00位置。
0#34:32
CPU reset后,计算机系统会执行一段代码,将可引导磁盘的第一个512字节加载到内存的0x7c00位置,并将PC指向第一条指令开始执行。主引导扇区的代码可以由程序员控制,通常比外部代码小一些。主引导扇区的最后两个字节是magic number,用于标记可引导磁盘。主引导扇区前面还有分区表。通过模拟器可以单步执行指令,进一步了解计算机系统的执行过程。
0#44:10
本节课介绍了x86汇编语言和如何通过翻译和改写来理解汇编代码。通过一个示例代码,展示了如何使用汇编语言打印字符串到屏幕上。还介绍了如何使用qemu和gdb来调试模拟器中的代码。
0#53:51
本节课介绍了使用gdb进行汇编代码调试的方法,包括使用gdp init文件自动化调试流程、使用watch point追踪内存变化等技巧。这些技巧可以提高调试效率,帮助解决代码中的问题。
0#62:37
操作系统的重要机制使得我们能够应对困难和挑战。固件加载和总线的基本原理类似,但有一些额外的约定。固件必须是GUID分区表格式化的,并且必须有一个FAT32分区。固件加载器可以加载任意大小的PE可执行文件和EFI文件。系统调用可以访问硬件信息和USB设备。启动加载器是一个重要的组件,它可以加载操作系统内核并使其运行。计算机病毒可以感染固件并导致系统无法启动。
0#70:59
操作系统就是一个C程序,写操作系统并不难,只需要了解一些基础知识和API。操作系统可以直接在计算机硬件上运行,只需要用到一些特定的编译选项和库函数。操作系统的编程和普通的C编程没有太大区别,只需要正确使用API即可。
0#79:24
通过使用命令行编译工具和合并选项,可以更好地理解和阅读代码的编译过程。使用好的搜索引擎和人工智能工具可以提高学习效率。
0#89:13
操作系统是一个C程序,可以分时运行多个程序。计算机启动的流程是操作系统的重要内容。