<操作系统>内存管理
单道程序设计:内存被划分为两部分:一部分供操作系统使用,另一部分供当前正在执行的程序使用。
多道程序设计:内存中进一步细分用户部分,以满足多个进程的要求。
内存管理的需求:
- 重定位:程序从磁盘换入内存中时,可以被装载到内存中不同位置。
- 逻辑组织
- 物理组织
- 保护:每个进程应该受到保护,避免被其它进程有意或者无意的干扰。
- 共享:任何保护机制必须具有一定的灵活性,以允许多个进程访问内存的同一部分。
内存管理中的地址
- 逻辑地址:指与当前数据在内存中物理分配地址无关的访问地址。
- 相对地址:逻辑地址的一个特例,相对于某些已知点的存储单元
- 物理地址:数据在内存中的实际位置。
- 虚拟地址:虚拟内存中的逻辑地址。
内存管理单元:将虚拟地址转换成实际物理地址。
内存管理中的数据块:
- 页框:内存中一个固定长度的块
- 页:二级存储中一个固定长度的数据块
- 段:二级存储中一个变长的数据块
内存分区:
- 固定分区:内存被划分成许多静态(大小,容量固定不变)分区。
- 分区大小相等。
- 分区大小不等。
对于分区大小相等的固定分区,只要存在可用分区,就可以分配给进程。
对于分区大小不等的固定分区,每个进程分配到能够容纳它的最小分区;每个进程分配到能容纳它的最小可用分区。
此种方法会存在内部碎片(数据块大小小于分区大小),并且活动进程数目固定。
2.动态分区
并不事先预先分区,在每次需要为进程分配时动态划分。这种方式会产生外部碎片。

图中的空白处就是外部碎片。外部碎片可以使用压缩算法解决,但是非常耗时。
分页:内存被划分为大小固定的块,且块相对较小,每个进程也被划分为同样大小的小块。那么进程中称为页的块可以指定到内存中称为页框的可用块。和固定分区的不同在于:一个程序可以占据多个分区,这些分区不要求连续
分段:段有一个最大长度限制,但不要求所有程序的所有段长度都相等。分段类似于动态分区,区别在于:一个程序可以占据多个不连续的分区。
<操作系统>内存管理的更多相关文章
- C++内存管理(effective c++ 04)
阅读effective c++ 04 (30页) 提到的static对象和堆与栈对象.看了看侯老师的内存管理视频1~3.有点深. 了解一下. 目录 1 内存管理 1.1 C++内存管理详解 1.1.1 ...
- effective OC2.0 52阅读笔记(五 内存管理)
第五章:内存管理 29 理解引用计数 30 以ARC简化引用计数 总结:ARC通过命名约定将内存管理规则标准化.其他编程语言很少像OC这样强调命名.ARC通过设置全局数据结构(此数据结构的具体内容因处 ...
- 《Effective C++》内存管理
如果global new-hander没有成功配置,会抛出一个std::bad_alloc的exception. #include<iostream> #include<new> ...
- Objective-C:内存管理
1 传统内存管理 Objective-C对象的生命周期可以分为:创建.存在.消亡. 1.1 引用计数 类似Java,Objective-C采用引用计算(reference counting)技术来管理 ...
- 揭开Java内存管理的面纱
前言 相对于C.C++这些高性能语言,Java有着让此类程序员羡慕的功能:内存自动管理.似乎这样,Java程序员不用再关心内存,也不用去了解相关知识.但结果真的是这样吗?特别对于我们这种Android ...
- Linux内存管理 (13)回收页面
专题:Linux内存管理专题 关键词:LRU.活跃/不活跃-文件缓存/匿名页面.Refault Distance. 页面回收.或者回收页面也即page reclaim,依赖于LRU链表对页面进行分类: ...
- <Linux内核源码>内存管理模型
题外语:本人对linux内核的了解尚浅,如果有差池欢迎指正,也欢迎提问交流! 首先要理解一下每一个进程是如何维护自己独立的寻址空间的,我的电脑里呢是8G内存空间.了解过的朋友应该都知道这是虚拟内存技术 ...
- 进程,内存,管理 ps,pstree,top,free,vmstat,iftop,lsof,查看网速
一些基础 不同进程之间,进行数据访问 同一主机:pipe 管道 socket 套接字文件 signal 信号 shm shared memory semaphore 信号量,一种计数器 不 ...
- C++内存管理学习笔记(2)
/****************************************************************/ /* 学习是合作和分享式的! /* Auth ...
- c++内存管理学习纲要
本系列文章,主要是学习c++内存管理这一块的学习笔记. 时间:6.7-21 之下以技术内幕的开头语,带入到学习C++内存管理的技术中吧: 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题 ...
随机推荐
- [android] androidPN开源项目介绍
打开androidPN项目,会看到server和client两份代码 server部分 找到server的代码,开启服务,双击 bin/run.bat ,服务启动后监听127.0.0.1:7070端口 ...
- Android开发day-01
http://note.youdao.com/noteshare?id=b7f0d55c1e5eab20bb47e5c58e683611
- hive的行列转换
行转列(把多个行合并) 比如把: id tag 1 12 1 23 2 67 2 78 2 76 行转列之后: id tag 1 12,23 2 67,78,76 使用函数为:concat_w ...
- 小程序webview应用实践
原文:小程序webview实践 作者:张所勇(转转开放业务部前端负责人) 公众号:大转转FE Fundebug经授权转载,版权归原作者所有. 大家好,我是转转开放业务部前端负责人张所勇,今天主要来跟大 ...
- meta的日常设置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 终端复用软件 tmux
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权. Tmux 所使用的快捷键前缀默认是组合键 Ctrl-b(同时按下 Ctrl 键和 b 键). 技巧 ...
- Docker 启动遇到 Error starting daemon: Error initializing network controller 错误
docker 版本 1.10.3 一台装有 docker 的机器重启后,没法启动,/var/log/messages 展示如下错误信息: May 17 11:11:14 gziba-hc03 syst ...
- Mysql数据库的(行记录)详细操作
在Mysql管理软件中, 可以通过sql语句中的dml语言来实现数据的操作, 包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据 ...
- 从gitHub上拉取并运行项目
今天我们来试一下如何从gitHub上拉取一个项目并且运行起来,话不多说,我们直接开搞可好 1.首先我们先获取到项目地址(此处我以自己的项目地址作为示例) 我们选择红圈处的clone or downlo ...
- id、name、setter方法注入、构造方法注入、工厂方法注入、注解注入、方法注入、方法替换、Web作用域、普通bean引用Web作用域的bean
spring IoC的id和name id的命名需要满足XML对id的命名规范,必须以字母开始,后面可以是字母.数字.连字符.下画线.句号.冒号等等号,但逗号和空格是非法的.如果用户确实希望用一些特殊 ...