现代CPU都是多核多线程的,本次的工作是使用x86汇编来编写一个支持多线程、多任务的系统。
先看一下该系统的运行截图:
该系统运行在 VirtualBox 6.1.16 上,一共开启了3个线程(一个BSP和两个AP),其各自的工作如下:
1. BSP开启了键盘和HPET中断,安装了0x80号系统调用,以100ms的间隔向AP1和AP2发送IPI消息。BSP在界面上显示启动后持续的秒数,并显示键盘输入的字符。
2. 两个AP各自启动了系统进程和用户进程:
1)AP1和AP2的系统进程不断获取RTC时钟的秒数并显示;
2)AP1的用户进程不断调用BSP的系统调用来显示‘0’到‘9’的字符;
3)AP2的用户进程不断调用BSP的系统调用来显示‘A’到‘Z’的字符。
与上一个《一个用x86汇编编写的、页式管理、图形化的CS》相比,本系统在线程的管理、协调上有较大差别,而AP自己的任务调度则相对简单。
好了,下面我们将详细介绍该系统各模块的代码以及在调试过程中遇到的坑。
让我们开始吧。