操作系统 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 的内存分配。