第一章:计算机的软硬件基本结构_5

第一章:计算机的软硬件基本结构_5

1.5 内存不够怎么办

操作系统的多任务功能使得CPU能够在多个进程之间很好的共享,从进程角度好像它独占了CPU而不用考虑与其他进程分享CPU。

为了更有效的利用硬件资源,我们必须同时运行多个程序,正如前面的多道程序,分时系统和多任务一样,当我们能够同时运行多个程序时,CPU的利用率较高。但是就会有一个很明显的问题, 如何将计算机上有限的物理内存分配给多个程序使用

在分配内存时会出现的问题。

  • 地址空间不隔离 所有程序直接访问物理地址,程序所使用的内存空间不是相互隔离的。恶意的程序可以很容易改写其他程序的内存数据,以到达破坏的目的。
  • 内存使用效率低 由于没有有效的内存管理机制,通常我们正在运行程序A的时候要是想运行程序B,但是这个时候内存空间其实已经不够用了,于是计算机便会将程序A换出到磁盘或者更多来释放足够的空间来运行程序B。中间有大量的数据在换入换出,导致效率低下。
  • 程序运行的地址不确定 因为程序每次需要装入运行时,我们需要给他从内存中分配一块足够大的空闲区域。这个区域的位置是不确定的。这给程序的编写造成了一定的麻烦,因为跳转和访问数据指令的目标地址是固定的,这涉及程序的 重定位

解决这几个问题的方法就是使用我们前问提到的法宝:增加中间层,即使用一种间接的地址访问方法。整体思想是这样的:

我们把程序给出的地址看做一种 虚拟地址(virtual Address),然后通过某些映射的方法,将这个虚拟地址转换为实际的物理地址。

1.5.1 关于隔离

作为普通程序,他需要的是一个简单的执行环境,有一个单一的地址空间,有自己的CPU,好像整个程序占有整个计算机而不用关心其他程序。

地址空间分为两种:虚拟地址空间和物理地址空间

物理地址空间是实际存在的,其实就是物理内存。

虚拟地址空间是指虚拟的,人为想象出来的地址空间,其实他并不存在,每个进程都有自己独立的虚拟空间,而且每个进程都只能访问自己的地址空间,这样就有效的做到了进程的隔离。

1.5.2 分段(Segmentation)

最开始人们使用的是一种叫做 **分段(Segmentation)**的方法。

基本思路是把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间。
在这里插入图片描述

分段的方法基本上解决了上面提到的隔离和运行程序不确定的问题。但是分段还是以程序为单位,如果发生内存不足,需要大量数据的交换的时候,还是有会降低速度。这种方法还是显得粗糙,粒度比较大。于是人们自然想到了粒度更小的内存分割法和映射方法。使得程序的局部性原理得到充分的利用,(局部性原理:当一个程序在运行时,在某个时间段内,他只是频繁地用到了一小部分数据)大大提高了内存的使用率。这种办法就是 分页(Paging)

1.5.3 分页(Paging)

分页的基本办法是把地址空间人为地等分成固定的大小的页,每一页的大小由硬件决定,或硬件支持多种大小的页,由操作系统决定页的大小。目前几乎所有的PC上的操作系统都使用的是 4KB大小的页。

当我们把进程的虚拟地址空间按页分割,把常用的数据和代码页装载到内存中,把不常用的代码和数据保存到磁盘,当需要用到的时候再把他从内内存中取出来。

在这里插入图片描述

在这里,我们把虚拟空间的页就叫 虚拟页(VP,Virtual Page),把物理内存中的页叫做 物理页(PP , Physical Page),把磁盘中的页叫做 磁盘页(DP, Disk Page)

当进程需要在磁盘页的数据时,硬件便会捕获到这个消息,这就是所谓的 页错误(Page Fault),然后操作系统接管进程,负责将需要的页从磁盘读入内存,以页为单位来交换这些数据非常方便,硬件本身就支持这种以页为单位的操作方式。

,负责将需要的页从磁盘读入内存,以页为单位来交换这些数据非常方便,硬件本身就支持这种以页为单位的操作方式。

保护也是也映射的目的之一,简单地说就是每个页可以设置权限属性,谁可以修改,谁可以访问等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值