os/fs/proc/generators/
meminfo.rs1use alloc::{format, vec::Vec};
2
3use crate::{
4 config::PAGE_SIZE,
5 fs::proc::ContentGenerator,
6 mm::frame_allocator::{get_free_frames, get_total_frames},
7 vfs::FsError,
8};
9
10pub struct MeminfoGenerator;
11
12impl ContentGenerator for MeminfoGenerator {
13 fn generate(&self) -> Result<Vec<u8>, FsError> {
14 let total_frames = get_total_frames();
16 let free_frames = get_free_frames();
17
18 let total_kb = (total_frames * PAGE_SIZE) / 1024;
20 let free_kb = (free_frames * PAGE_SIZE) / 1024;
21 let available_kb = free_kb; let content = format!(
25 "MemTotal: {:>8} kB
26MemFree: {:>8} kB
27MemAvailable: {:>8} kB
28Buffers: {:>8} kB
29Cached: {:>8} kB
30SwapCached: {:>8} kB
31Active: {:>8} kB
32Inactive: {:>8} kB
33Active(anon): {:>8} kB
34Inactive(anon): {:>8} kB
35Active(file): {:>8} kB
36Inactive(file): {:>8} kB
37Unevictable: {:>8} kB
38Mlocked: {:>8} kB
39SwapTotal: {:>8} kB
40SwapFree: {:>8} kB
41Dirty: {:>8} kB
42Writeback: {:>8} kB
43AnonPages: {:>8} kB
44Mapped: {:>8} kB
45Shmem: {:>8} kB
46",
47 total_kb, free_kb, available_kb, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
48 );
49
50 Ok(content.into_bytes())
51 }
52}