操作系统中的内存保护
在本文中,我们将讨论操作系统中的内存保护。正如我们所知,不同的操作系统使用不同形式的内存保护或分离,包括 Plan9 和 Inferno、Microsoft Windows 等。
在内存保护中,我们必须保护操作系统免受用户进程的影响,这可以通过使用带有限制寄存器的重定位寄存器来完成。这里,重定位寄存器具有最小物理地址的值,而限制寄存器具有逻辑地址的范围。这两个寄存器有一些条件,比如每个逻辑地址必须小于限制寄存器。内存管理单元用于动态转换逻辑地址与重定位寄存器中的值,然后将转换(或映射)的地址发送到内存。
在上图中,当调度程序为执行进程选择一个进程时,另一方面,调度程序负责为 CPU 生成的每个地址加载具有正确值的重定位和限制寄存器作为上下文切换的一部分根据这两个寄存器进行检查,我们可能会保护操作系统、程序和用户的数据不被此运行进程更改。
需要内存保护:
内存保护可防止进程访问操作系统中未分配的内存,因为它会阻止软件控制过多的内存,并可能造成损害,从而影响当前正在使用的其他软件或可能导致保存的数据丢失。这些内存保护资源还有助于检测恶意或有害应用程序,这些应用程序可能会损坏操作系统的进程。
内存保护方法:
有多种方法可以保护进程不访问尚未分配的内存,下面给出了一些常用的方法:
使用密钥进行内存保护:在大多数现代计算机中都可以找到使用密钥进行内存保护的概念,目的是分页内存组织和并行运行程序之间的动态分配。密钥基于特殊代码的使用,因为我们可以验证使用存储单元阵列和运行程序数量之间的合规性。这种关键方法为用户提供了一个过程来实施基于页面的保护,而无需对页表进行任何修改。
使用环的内存保护:在 CS 中,与有序保护相关的域称为保护环。此方法有助于提高容错能力并提供安全性。这些环按从最高特权到最低特权的层次结构排列。在单级共享操作系统中,每个段都有一个保护环,用于进程的读、写和执行操作。如果该过程使用了更高的环号,则该段的环号会产生故障。但是我们确实有一些方法可以安全地调用程序,这些方法可以在较低的环号中运行,然后返回到较高的环号。
基于能力的寻址:它是一种保护现代商业计算机中看不到的内存的方法。在这里,指针(由内存地址组成的对象)由只能使用受保护指令创建并且只能由内核或授权执行的另一个进程执行的功能对象恢复,因此它具有优势控制未经授权的进程在内存中创建额外的单独地址空间。
使用掩码进行内存保护:掩码用于在组织分页期间保护内存。在这种方法中,在实现之前,页码被指示给每个程序,并保留用于放置其指令。在这里,为程序分配的页面现在以屏蔽码(n 位二进制码)的形式获得操作系统的控制权,该屏蔽码是为每个工作程序形成的,由 OD 页面的位数确定。
使用分段的内存保护:这是一种将系统内存划分为不同段的方法。 OS X86架构的局部描述符表和全局描述符表等数据结构用于内存保护。
使用模拟分段的内存保护:使用这种技术,我们可以监控程序以解释系统架构的机器代码指令。通过这种方式,模拟器可以通过使用该方案的分段和实时验证每条指令的目标地址来帮助保护内存。
使用动态污染的内存保护:动态污染是一种技术,包括在运行时标记和跟踪程序中的某些数据,因为它可以保护进程免受非法内存访问。在污染技术中,我们污染程序来标记两种数据,即数据空间中的内存和指针。