mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 14:27:49 +00:00
Update blog to 3c6057dd76
This commit is contained in:
@@ -301,7 +301,7 @@ fn choose_next_area(&mut self) {
|
||||
self.current_area = self.areas.clone().filter(|area| {
|
||||
let address = area.base_addr + area.length - 1;
|
||||
Frame::containing_address(address as usize) >= self.next_free_frame
|
||||
}).min_by(|area| area.base_addr);
|
||||
}).min_by_key(|area| area.base_addr);
|
||||
|
||||
if let Some(area) = self.current_area {
|
||||
let start_frame = Frame::containing_address(area.base_addr as usize);
|
||||
@@ -311,9 +311,9 @@ fn choose_next_area(&mut self) {
|
||||
}
|
||||
}
|
||||
```
|
||||
This function chooses the area with the minimal base address that still has free frames, i.e. `next_free_frame` is smaller than its last frame. Note that we need to clone the iterator because the [min_by] function consumes it. If there are no areas with free frames left, `min_by` automatically returns the desired `None`.
|
||||
This function chooses the area with the minimal base address that still has free frames, i.e. `next_free_frame` is smaller than its last frame. Note that we need to clone the iterator because the [min_by_key] function consumes it. If there are no areas with free frames left, `min_by_key` automatically returns the desired `None`.
|
||||
|
||||
[min_by]: https://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.min_by
|
||||
[min_by_key]: https://doc.rust-lang.org/nightly/core/iter/trait.Iterator.html#method.min_by_key
|
||||
|
||||
If the `next_free_frame` is below the new `current_area`, it needs to be updated to the area's start frame. Else, the `allocate_frame` call could return an unavailable frame.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user