zoukankan      html  css  js  c++  java
  • 操作系统设计与实现 读笔(4)

      第四章,存储器管理,小结:

      交换:系统可以处理比内存所能容纳的更多的进程,得不到空间的进程将被换出到磁盘上。内存和磁盘上的空闲空间可以用位图或空洞表跟踪。

      虚拟存储器:每个进程的地址空间都被划分为同样大小的称为页的块,可以被放到内存中任何可用的页框中去。有许多页面替换算法,最著名的两个是第二次机会和老化算法。为了使分页系统很好的工作,仅仅选择一个好的算法是不够的,还需注意确定工作集、内存分配策略、页面大小等等。

      分段:有助于处理在运行中要改变大小的数据结构、简化链接和共享,为不同的段提供不同的保护。有时分段和分页结合起来构成的两维的虚拟存储器,如MULTICS系统和Intel的Pentium。

      MINIX的内存管理是很简单的。内存在进程执行FORK或EXEC系统调用时被分配。只要进程还存在,这样分配的内存就永远不会增长或减小。在Intel处理器上MINIX使用的内存模型有两种,小程序可以把指令和数据放在同一个内存段中,大程序使用独立的指令和数据空间(独立的I和D)。具有独立I和D空间的进程可以共享他们内存中的正文部分,所以在执行FORK时只有数据和堆栈的内存是必须分配的。这一点在执行EXEC时也可能成立,七条监事有另外一个进程已经在使用EXEC所需要的正文了。

      内存管理器的大部分工作与使用一个空洞表和首次适配算法的跟踪空闲内存的工作没有关系,而是执行与内存管理有关的系统调用。一些系统调用支持POSIX风格的信号,因为大部分信号的缺省动作是结束接收信号的进程,所以在内存管理其中处理他们是比较合适的。所有进程的终止都由它发起。几个与内存没有直接关系的系统调用也由内存管理器处理,因为内存管理器比文件系统小,所以把它们放在这里是最方便的。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    对《分享一下自己用c++写的小地图》一文的补充
    大神的Blog挂了,从Bing快照里复制过来的备份
    如何创建独立的UE4服务端
    打包如何打包额外文件,比如Sqlite数据库的db文件
    关于如何通过定义自己的CameraManager来控制视角
    Slate中绑定动态数据
    分享一下自己用c++写的小地图
    2016.8看到的一些有用的文章
    如何在插件中添加Actor类
    如何使用的Ue4自带的SQLiteSupport
  • 原文地址:https://www.cnblogs.com/nuaalida/p/4256487.html
Copyright © 2011-2022 走看看