Skip to content

操作系统 2024 Typos

M1

5.2. 开始做实验

回想一下大家做 OJ 题的过程。在编程的过程中,难免会经历修改代码 →→ 编译 →→ 运行 →→ 修改代码……这样的循环。你会选择怎么做呢?新手每次都键入命令 (或者他发现 Ctrl-p 可以重复命令)。

  • 之后,有同学~人~发现,可以把命令写在一行里,比如 gcc a.c && ./a.out,一键就能编译运行了。

5.6. 写出正确的代码

写出正确的代码远比想象中困难——目前地球上还没人能保证复杂的系统没有 bug 和漏洞。我们切盼望着没有 bug 的那一天的到来...

L1

我们要求分配和回收满足:

  • 原子性:当多个处理器同时请求内存分配或释放时,分配器必须确保同时进行的分配/回收操作能够正确完成。注意,在一个处理器上分配的内存,可能在另一个处理器上被释放。
  • 无重叠:分配器返回的内存块之间不能有重叠。每次调用 kalloc 时,它必须返回一个独特的内存区域,该区域在其生命周期内不与任何其他分配的内存块共享地址空间。
  • 对齐对于大小为 𝑠 的内存分配请求,返回的内存地址必须对齐到 2i,..
  • 无内存泄漏:当内存不再需要时,应该通过 kfree 正确释放。分配器需要确保所有释放的内存都可以被重新分配,不应该有任何内存泄漏。这意味着分配器需要准确跟踪哪些内存是空闲的,哪些是已分配的。
  • 错误处理:当无法满足内存分配请求时(例如,因为没有足够的空闲内存),kalloc 应该返回 NULL (0)。
  • 最后,不必初始化返回的内存,当然,对返回的内存赋上初始值 (例如零) 也许是个不错的主意。不必初始化返回的内存,当然,对返回的内存赋上初始值 (例如零) 也许是个不错的主意。
  • 由于我们在自制的操作系统内核中使用,你可以直接拒绝超过 16 MiB 的内存分配