mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 12:16:31 +00:00
feat(mm): 简单实现fat文件系统的文件映射 (#840)
- 添加文件映射相关接口,目前已简单实现fat文件系统的私有映射和共享映射 - 添加msync系统调用(由于当前未实现脏页自动回写,需要手动调用msync进行同步) - 简单实现PageCache(暂时使用HashMap进行文件页号与页的映射) - 添加新的PageFlags标志结构,原PageFlags改名为EntryFlags - 参考linux使用protection_map映射表进行页面标志的获取 - 添加页面回收机制 - 添加页面回收内核线程 - 缺页中断使用的锁修改为irq_save; 添加脏页回写机制 - 修复do_cow_page死锁问题 - 访问非法地址时发送信号终止进程 - 修复重复插入反向vma表的错误 - 添加test_filemap文件映射测试程序
This commit is contained in:
@ -3,7 +3,7 @@ use crate::arch::mm::kernel_page_flags;
|
||||
use crate::arch::MMArch;
|
||||
|
||||
use crate::mm::kernel_mapper::KernelMapper;
|
||||
use crate::mm::page::{page_manager_lock_irqsave, PageFlags};
|
||||
use crate::mm::page::{page_manager_lock_irqsave, EntryFlags};
|
||||
use crate::mm::{
|
||||
allocator::page_frame::{
|
||||
allocate_page_frames, deallocate_page_frames, PageFrameCount, PhysPageFrame,
|
||||
@ -25,7 +25,7 @@ pub fn dma_alloc(pages: usize) -> (usize, NonNull<u8>) {
|
||||
// 清空这块区域,防止出现脏数据
|
||||
core::ptr::write_bytes(virt.data() as *mut u8, 0, count.data() * MMArch::PAGE_SIZE);
|
||||
|
||||
let dma_flags: PageFlags<MMArch> = PageFlags::mmio_flags();
|
||||
let dma_flags: EntryFlags<MMArch> = EntryFlags::mmio_flags();
|
||||
|
||||
let mut kernel_mapper = KernelMapper::lock();
|
||||
let kernel_mapper = kernel_mapper.as_mut().unwrap();
|
||||
|
@ -10,7 +10,7 @@ use crate::{
|
||||
spinlock::SpinLock,
|
||||
},
|
||||
mm::{
|
||||
allocator::page_frame::PageFrameCount, kernel_mapper::KernelMapper, page::PageFlags,
|
||||
allocator::page_frame::PageFrameCount, kernel_mapper::KernelMapper, page::EntryFlags,
|
||||
MemoryManagementArch,
|
||||
},
|
||||
time::timer::{Timer, TimerFunction},
|
||||
@ -95,7 +95,7 @@ impl VideoRefreshManager {
|
||||
let count = PageFrameCount::new(
|
||||
page_align_up(frame_buffer_info_guard.buf_size()) / MMArch::PAGE_SIZE,
|
||||
);
|
||||
let page_flags: PageFlags<MMArch> = PageFlags::new().set_execute(true).set_write(true);
|
||||
let page_flags: EntryFlags<MMArch> = EntryFlags::new().set_execute(true).set_write(true);
|
||||
|
||||
let mut kernel_mapper = KernelMapper::lock();
|
||||
let mut kernel_mapper = kernel_mapper.as_mut();
|
||||
|
@ -3,7 +3,7 @@ use crate::arch::mm::kernel_page_flags;
|
||||
use crate::arch::MMArch;
|
||||
|
||||
use crate::mm::kernel_mapper::KernelMapper;
|
||||
use crate::mm::page::{page_manager_lock_irqsave, PageFlags};
|
||||
use crate::mm::page::{page_manager_lock_irqsave, EntryFlags};
|
||||
use crate::mm::{
|
||||
allocator::page_frame::{
|
||||
allocate_page_frames, deallocate_page_frames, PageFrameCount, PhysPageFrame,
|
||||
@ -32,7 +32,7 @@ unsafe impl Hal for HalImpl {
|
||||
// 清空这块区域,防止出现脏数据
|
||||
core::ptr::write_bytes(virt.data() as *mut u8, 0, count.data() * MMArch::PAGE_SIZE);
|
||||
|
||||
let dma_flags: PageFlags<MMArch> = PageFlags::mmio_flags();
|
||||
let dma_flags: EntryFlags<MMArch> = EntryFlags::mmio_flags();
|
||||
|
||||
let mut kernel_mapper = KernelMapper::lock();
|
||||
let kernel_mapper = kernel_mapper.as_mut().unwrap();
|
||||
|
Reference in New Issue
Block a user