请教:所有内存都映射之后是不是都可以访问了

本人新手小白,在代码里看到这个:DragonOS/kernel/src/arch/x86_64/mm/mod.rs at 0e7c46939604a02e739546200bea847f4951a963 · DragonOS-Community/DragonOS · GitHub
发现在初始化时把所有的内存都进行了映射,这样不是所有的内存都可以使用了吗?如果0x12是一个合法的地址,是不是可以随便向0x12地址写入数据了,这样安全吗?

可以先去osdev wiki了解一下内存分页相关内容。以及相应的权限校验的内容。

在osdev wiki上面看过了,没看到说在初始化时把所有的内存都进行映射,方便指个路吗,发个osdev wiki的链接

我的意思是映射了内存,但它也会设置权限的,你去看一下相关的权限控制的这些介绍你就明白了

看了这里的代码,设置的是可写的权限

而且,全部映射之后,page_fault会在什么情况下触发呢?

user权限是false

image

就DragonOS的实现来说,由于已经全部映射,第一条压根不会成立,我的理解对吗

不对。因为只是在内核空间线性映射了相关的页面。但是你仍然可以使用unsafe{}构造各种空指针去访问不合法的页面.

没看懂,代码里不是全部都映射了吗,为啥这里说只是在内核空间线性映射

这里说的是映射到页表,不是映射到虚拟内存地址,使用这里面的内存之前仍需要alloc