- 博客(10)
- 收藏
- 关注
原创 AbstractMachine 规约 (Specifications)
立即终止整个 AbstractMachine 的运行,并返回数字编号code对 QEMU 平台,虚拟机将直接终止,终止前会向调试终端打印信息 (例如返回代码)。对 native 平台,代码将退出,进程的返回代码为code。对真实的硬件平台,根据硬件的支持关闭或进入死循环状态。多处理器:安全。在任意处理器上执行halt都会终止整个 Kernel 的执行。
2023-06-21 23:30:44
224
原创 AbstractMachine 设计概述
* 其他 task 相关的数据 */struct task tasks[] = { /* task 描述 */ };void func(void *arg) { /* task 代码 */ }// 中断驱动的上下文切换// 将当前 CPU 的上下文保存到 taskdo { // 寻找下一个可调度的 “上下文”cur = (!// 把找到的 “上下文” 恢复到 CPU 上执行// 打开当前 CPU 的中断yield();// 不会返回i++) {
2023-06-20 20:47:09
160
1
原创 在 AbstractMachine 上封装库函数
我们虽然声明了这些函数,但如果你调用它们的话,会得到一个无情的 panic(指一种操作系统无法继续正常运行的状态)。没错,这些库函数是用 C 语言和 AbstractMachine 共同实现的——我们已经准备好了抽象层,那么剩下的任务就是编程习题了。关于这些函数,Linux manpages(指的是 Linux 系统中的在线手册,提供了对各种 Linux 命令、函数和系统调用的详细说明) 是很不错的起点。你的程序里充满了可能出现 bug 的地方,而进行防御性地检查是帮助你快速定位 bug 的最佳方案。
2023-06-20 20:26:52
162
1
原创 AbstractMachine: 抽象计算机
AbstractMachine 是裸机上的 C 语言运行环境,提供 5 组 (15 个) 主要 API,可以实现各类系统软件 (如操作系统):(TRM)putch/halt- 最基础的计算、显示和停机(IOE)ioe_read/ioe_write- I/O 设备管理(CTE)ienabled/iset/yield/kcontext- 中断和异常(VME)protect/unprotect/map/ucontext- 虚存管理(MPE)cpu_count/cpu_curren
2023-06-20 20:15:56
422
1
原创 [操作符】求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?求两个数二进制中不同位的个数。输入例子:1999 2299。只有c最后一位为1时,
2023-04-29 09:17:02
30
原创 【循环语句】分数求和
所以要转换为浮点数,但是(double)1/i 不行,因为1/i 为整数,所以double 之后只是多加了.0000。计算1/1-1/2+1/3-1/4+1/5 ……+ 1/99 - 1/100 的值,打印出结果;因此要把i变为double,所以直接乘以一个浮点数。1/i为浮点型数,所以sum的类型为double。因为 i 为整数,1/i: 整数*整数 = 整数。
2023-04-22 10:10:48
292
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人