0x00000000指令引用的内存不能为written_内存管理系统要求

内存管理涉及重定位、保护、共享和逻辑物理组织等关键任务。重定位允许程序在主存中移动,保护防止进程间干扰,共享促进资源利用,逻辑组织支持模块化编程,物理组织涉及主辅存储器的信息流管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

33d7ae923859adf16b0eab799810bfea.png

内存管理跟踪每个内存位置的状态,无论是已分配还是空闲。它根据请求将内存动态分配给程序,并在不再需要时将其释放以供重用。内存管理旨在满足以下一些要求。

这些内存管理要求是:

1.重定位(Relocation)

可用内存通常在一个多程序系统中的多个进程之间共享,因此在执行程序时无法事先知道哪些其他程序将驻留在主存储器中。 在主内存中交换活动进程可以使操作系统拥有更大的准备执行进程池。

当程序被换出到磁盘存储器中时,由于它仍然可能被另一个进程占用,因此当它被换回到主存储器中时,它并不总是占据先前的存储位置。我们可能需要将进程重新定位到不同的内存区域。因此,有可能由于交换而使程序在主存储器中移动。

268185d15626d4393f32e190cb212c74.png

该图描绘了一个过程映像。过程映像占用主存储器的连续区域。操作系统将需要了解许多内容,包括过程控制信息的位置,执行堆栈和代码输入。在程序中,各种指令中都有内存引用,这些引用称为逻辑地址。

将程序加载到主存储器中后,处理器和操作系统必须能够将逻辑地址转换为物理地址。分支指令包含要执行的下一条指令的地址。数据引用指令包含引用数据的字节或字的地址。

2.保护(Protection)

当我们同时有多个程序时,总会有危险,因为一个程序可能会写入另一个程序的地址空间。因此,当其他进程试图在进程中意外或偶然写入时,必须保护每个进程免受不必要的干扰。在重新安置与保护要求之间会进行权衡,因为重新安置要求的满足会增加满足保护要求的难度。

无法预测程序在主存储器中的位置,这就是为什么无法在编译时检查绝对地址以确保保护的原因。大多数编程语言都允许在运行时动态计算地址。内存保护要求必须由处理器而不是操作系统来满足,因为当操作系统占用处理器时,操作系统几乎无法控制进程。因此可以检查存储器引用的有效性。

3.共享(Sharing)

保护机制必须允许多个进程访问主内存的相同部分。允许每个进程访问程序的同一副本而不是拥有自己的单独副本是一个优势。

例如,多个进程可能使用同一系统文件,并且很自然地将文件的一个副本加载到主内存中,并让这些进程共享它。内存管理的任务是允许在不损害保护的情况下对内存的共享区域进行受控访问。机制用于支持重定位支持的共享功能。

4.逻辑组织(Logical organization)

主存储器组织为线性,也可以是一维地址空间,由字节或字的序列组成。大多数程序可以组织为模块,某些程序不可修改(只读,仅执行),而某些程序包含可以修改的数据。为了有效处理用户程序,操作系统和计算机硬件必须支持基本模块,以提供所需的保护和共享。它有以下优点:

1)模块是独立编写和编译的,从一个模块到另一个模块的所有引用都由系统在运行时解析。

2)不同的模块具有不同的防护等级。

3)有一些机制可以在进程之间共享模块。可以在模块级别提供共享,允许用户指定所需的共享。

5.物理组织(Physical organization)

计算机内存的结构有两个级别,分别称为主内存和辅助内存。与辅助存储器相比,主存储器相对非常快速且昂贵。主存储器易失。因此,提供了辅助存储器用于长期存储数据,而主存储器则保存当前使用的程序。主内存和辅助内存之间主要的系统问题是信息流,对于程序员来说,理解该信息是不切实际的,原因有两个:

1)当程序可用的主存储器及其数据不足时,程序员可能会执行称为覆盖(overlaying)的实践。它允许将不同的模块分配给相同的内存区域。一个缺点是它对于程序员来说很耗时。

2)在多程序环境中,程序员不知道编码时将有多少空间可用,以及该空间将位于内存中的何处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值