Windows虚拟地址空间分配问题

一般情况下,32位的机器上,地址空间从0x000000~0xFFFFFFFF,总大小为4GB。一般而言,虚拟地址空间分为两个区,即为用户空间和系统空间。虚拟地址低空间,即从0x00000000~0X7FFFFFFF的2GB为用户空间,而高地址0x80000000~0xFFFFFFFF被分配给了系统内核。高地址空间2GB内存是提供系统内核使用的。在这高地址空间中安排了操作系统的系统代码和数据,用户一般无法访问到这个地址空间。用户地址空间使用的是低地址2GB内存,其中包含了用户应用程序、调用的动态链接库、用户栈、用户可使用的空闲内存空间等。从整体上看,Windows虚拟地址空间分配如下表:

虚拟内存地址范围 功能描述
0x00000000~0x0000FFFF 这段内存是空指针区,同时肯定是不能访问的
0x00010000~0x7FFFFFFF 这段提供给进程使用,包括所有的数据,静态或动态加载的exe和dll模块,以及内存映射文件
0x7FFF0000~0x7FFFFFFF 此64KB的区域是禁止访问的,因为紧挨着它就是内核地址,如果中间密友这个阻拦的话,你可以用一个很长的数据信息进行覆盖操作,从而破坏内核的完整性和正确性—-这是不允许的
0x80000000~0xFFFFFFFF 内核区域,用于线程调度、内存管理、文件系统支持、网络支持、所有设备驱动的代码全部在这个分区加载。驻留在这个分区中的一切均可被所有进程共享

用户态低2GB空间分配表
虚拟内存地址范围 功能
0x0~0xFFFF 拒绝访问区域,用于帮助程序员避免引用错误的指针,试图访问这个区域地址的操作将会导致访问越权
0x10000~0x7EFDEFFF 专用进程地址空间
0x7EFDF000~0x7FFDFFFF 进程环境快(PEB)
0x7FFE0000~0x7FFE0FFF 共享的用户数据页,这个只读方式的页面被映射到系统空间中包含系统时间、时钟计数和版本号信息的一个页面。这个页面的存在使数据在用户态下可以直接读取而不必请求核心态的转换。
0x7FFE1000~0x7FFEFFFF 拒绝访问区域(共享用户数据页面以后剩余的64KB)
0x7FFF0000~0x7FFFFFFF 拒绝访问区域,用于防止线程跨越用户/系统空间边界传送缓存区,在变量MmUserProbeAddress中包含此页的起始地址。
核心态高2GB空间分配表
虚拟内存地址范围 功能说明
0x80000000~0xC0000000 内核执行体,HAL和硬件驱动程序
0xC0000000~0xC0800000 进程页表和超空间
0xC0800000~0xCFFBE000 系统高速缓存、分页缓冲池、非分页缓冲池
0xFFBE0000~0xFFC00000 崩溃转储驱动程序区域
0xFFC00000~0xFFFFFFFF 保留给HAL使用

alphaOS
alphaOS is Lightweight, portable and flexible operating system

Description of alphaOS

alphaOS is a simple and minimalistic Linux distribution for the x86-64 architecture, built using Linux Live Kit set of scripts developed by Tomáš Matějíček, the developer of the popular Slax Linux distribution. But, unlike Slax, alphaOS is based on Arch Linux and uses pacman as the default package manager. This operating system features highly configurable and lightweight Openbox window manager. Modular by design, alphaOS makes it easy to add desired functionality.


Intel x86架构的cpu指令一共有0~4四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查。硬件已经提供了一套特权级使用的相关机制,软件自然要好好利用,这属于操作系统要做的事情,对于UNIX/LINUX来说,只使用了0级特权级别和3级特权级。也就是说在UNIX/LINUX系统中,一条工作在0级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权的指令具有CPU提供的最低或者说最基本权力。

在Windows操作系统下面,操作系统运行于0级,而应用程序运行于3级。这是因为Alpha计算机只能够支持两个优先级的指令,windows为了能够便于将编写的应用程序移植到Alpha计算机上面运行。故,Windows操作系统不使用1级和2级这两个优先级。


这里写图片描述

用户态到和核心态的转换是由什么完成的?


计算机通过硬件中断机制完成由用户态到核心态的转换。

猜你喜欢

转载自blog.csdn.net/u014421422/article/details/80813195