MCPcopy Create free account
hub / github.com/chyyuu/os_kernel_lab / copy_data

Method copy_data

os/src/mm/memory_set.rs:319–338  ·  view source on GitHub ↗

data: start-aligned but maybe with shorter length assume that all frames were cleared before

(&mut self, page_table: &mut PageTable, data: &[u8])

Source from the content-addressed store, hash-verified

317 /// data: start-aligned but maybe with shorter length
318 /// assume that all frames were cleared before
319 pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8]) {
320 assert_eq!(self.map_type, MapType::Framed);
321 let mut start: usize = 0;
322 let mut current_vpn = self.vpn_range.get_start();
323 let len = data.len();
324 loop {
325 let src = &data[start..len.min(start + PAGE_SIZE)];
326 let dst = &mut page_table
327 .translate(current_vpn)
328 .unwrap()
329 .ppn()
330 .get_bytes_array()[..src.len()];
331 dst.copy_from_slice(src);
332 start += PAGE_SIZE;
333 if start >= len {
334 break;
335 }
336 current_vpn.step();
337 }
338 }
339}
340
341#[derive(Copy, Clone, PartialEq, Debug)]

Callers 1

pushMethod · 0.80

Calls 6

get_startMethod · 0.80
lenMethod · 0.80
get_bytes_arrayMethod · 0.80
ppnMethod · 0.80
stepMethod · 0.80
translateMethod · 0.45

Tested by

no test coverage detected