coursera 《现代操作系统》 -- 第七周 存储模型(1)
虚拟地址
隔离进程,便于管理。
问:为什么不直接划分物理地址为一块一块,直接管理,而要做一层虚拟地址的映射呢?
栈和堆
Differences between Stack and Heap
Stack is used for static memory allocation and Heap for dynamic memory allocation, both stored in the computer's RAM .
Variables allocated on the stack are stored directly to the memory and access to this memory is very fast, and it's allocation is dealt with when the program is compiled. When a function or a method calls another function which in turns calls another function etc., the execution of all those functions remains suspended until the very last function returns its value. The stack is always reserved in a LIFO order, the most recently reserved block is always the next block to be freed. This makes it really simple to keep track of the stack, freeing a block from the stack is nothing more than adjusting one pointer.
Variables allocated on the heap have their memory allocated at run time and accessing this memory is a bit slower, but the heap size is only limited by the size of virtual memory . Element of the heap have no dependencies with each other and can always be accessed randomly at any time. You can allocate a block at any time and free it at any time. This makes it much more complex to keep track of which parts of the heap are allocated or free at any given time.
You can use the stack if you know exactly how much data you need to allocate before compile time and it is not too big.You can use heap if you don't know exactly how much data you will need at runtime or if you need to allocate a lot of data.
In a multi-threaded situation each thread will have its own completely independent stack but they will share the heap. Stack is thread specific and Heap is application specific. The stack is important to consider in exception handling and thread executions.
伙伴系统

设计思路:
每次分配的时候,我们不要把一个大的空闲块拿来给它分割 拿一个比较合适的空闲块,这样的话系统中可以始终保持一些大的空闲块。
合适的空闲块:
内存管理方案
目的/最佳
内存利用率最大
页式
设计思想

逻辑地址
由页号、页内地址组成

通过页表进行地址转换
页号、页内地址的用法

页表起始地址保存
在系统中只设置一个页表寄存器PTR(Page-Table Register),在其中存放页表在内存的始址和页表的长度。平时,进程未执行时,页表的始址和页表长度存放在本进程的PCB中。当调度程序调度到某进程时,才将这两个数据装入页表寄存器中。因此,在单处理机环境下,虽然系统中可以运行多个进程,但只需一个页表寄存器。
段式
设计思想

段式的逻辑地址
不是自动划分,必须显式给出
段式的逻辑地址准换
与页式的计算方式一样

总结段式与页式
最小单位不同。一个是段,一个是页
段与页
不同:页的大小固定,而段的大小根据程序来划分,不是固定的;逻辑地址都是相邻的;
相同:段与页在内存中都是连续的;不同段或不同页之间在物理内存中可以是不相邻的
段页式管理

转换

先拿到了一个逻辑地址 然后呢,这个逻辑地址是由两部分组成,段号和段内地址 那么它用段号去查段表,得到了所对应的页表的起始地址和长度 然后再把段内地址自动划分成两部分 页号页内地址,用页号去查对应的页表,得到 页框号,然后再和页内地址拼接成最后的物理地址
小结

上述方案中是否存在最佳的内存管理方案?或者说各个内存管理方案适用于什么情况?
那么Linux, windows使用哪种内存管理方案?
错题:
[多选题]下列关于地址重定位的叙述中,哪些是正确的?
地址重定位又称为地址转换或地址映射
动态地址重定位是在进程执行过程中完成的
用户进程中使用的是逻辑地址,且从0开始编址
内存的地址是按照物理地址编址的
静态地址重定位的完成过程必须有硬件支持

问:内存的地址是按照物理地址编址的
这个表述的什么意思?虚拟地址按照物理地址编址的?
[多选题]下列关于紧缩技术的叙述中,哪些是正确的?
紧缩技术可用于可变分区存储管理方案
紧缩技术不能解决内碎片问题
内存中任意一个进程都可以随时移动
完成紧缩会增加处理器的开销
紧缩技术可以合并分散的小空闲区,以形成大的空闲区
在可变分区管理方式下,在回收内存时,若已判断出“空闲区表中某一表项的起始地址恰好等于被回收分区的起始地址与长度之和”,则表示
被回收分区既有上邻空闲区,又有下邻空闲区
被回收分区有上邻空闲区
被回收分区无相邻空闲区
被回收分区有下邻空闲区
这个答案是错的,不知道为什么?
系统为某进程分配了4个页框,该进程已经完成了下列页号序列的访问:
3,1,3,10,4,5,3,8,3,4,9,5,6
假设该进程要访问的下一个页号是8,根据最近最少(LRU)页面置换算法,应该被淘汰的页的页号是
9
5
3
假设使用一级页表,那么该进程的页表大小是多少?
4KB
4MB
32KB
32MB
解析:
P108 3.3.2 页表
页面大小、页面数
地址分为两部分,表示虚拟页号的高位部分以及表示对应虚拟页号的偏移量(低位部分)。比如,对于16位的地址,假设页面大小为4K。那么低位部分就为4K,也就是12位,剩余的16-12=4位
就是高位部分,表示虚拟页号。
一级页表
一个虚拟页面号对应一个页框。虚拟页面号通过页表项找到页框的地址。所以一个虚拟页面号也就对应一个页表项。
页表大小
页表项大小 * 页表项个数
对于本题来说,1024 * 4 = 4 MB
20
题干同19题。如果采用二级页表,且一级页表的大小和二级页表的大小相同(假设一级页表大小是1KB,则一个二级页表的大小也是1KB;假设一级页表大小是2KB,则一个二级页表的大小也是2KB),
那么该进程的两级页表加起来,至少占据____KB?
二级页表
书P111
看书上的概念糊涂了,这里总结一下。
一级页表是,由(页表号,偏移量)组成,页表号对应页框号;
二级页表是,由(一级页表号,二级页表号,偏移量)。由一级页表号找到二级页表号和页框号。
假如需要表达 10^30 个地址,一级需要 10^30 个页表项,二级需要 10^15 个,因为 10^15 * 10^15 = 10^30,三级需要 10^10个。
本题中就需要 2^10/2 = 2^5 个页表项,就是 2^5 * 4 = 128 KB
21 题干同19题。如果采用二级页表,且一级页表的大小是二级页表大小的四倍(假设一级页表大小是4KB,则一个二级页表的大小是1KB;假设一级页表大小是8KB,则一个二级页表的大小是2KB),
那么该进程的两级页表加起来,至少占据____KB?
上面提到,表示 1024个地址,二级页表需要 2^5 个页表项。那么这么多页表项这么分配到一级与二级页表呢?
列出方程: x + y = 5; 求 4x + 2y 的最小值,当 x = 0 时最小,为 10 KB
22 如果需要置换其中一个页面,若采用最近未使用(NRU)页面置换算法,将会置换哪一个页面?
NRU
使用 R位和M位来构建的算法:当启动一个进程时,所有页面的两个位被置为0,R位被定期地清零,来区别最近没有访问的页面。当发生缺页中断时,开始检查所有页面并分类
0:没有被访问,没有被修改
1:没有被访问,已被修改(由3的R位置为0而来)
2:已被访问,没有被修改
3:已被访问,已被修改
然后淘汰数字最小的页面。
可以看出,算法偏向于最近被访问的页面,所以 2>1。
思考:是如何检查所有页面的?如果是遍历,那么当发现 0 分类的时候,直接替换然后就可以终止检查了啊。
coursera 《现代操作系统》 -- 第七周 存储模型(1)的更多相关文章
- coursera 《现代操作系统》 -- 第八周 存储模型(2)
名词解释 页面: 页面大小: 页表: 页表项: 以上名词解释见: coursera <现代操作系统> -- 第七周 存储模型(1) 页表项大小: 问:以上是怎么计算出来的? 32位指什么? ...
- 操作系统学习笔记----进程/线程模型----Coursera课程笔记
操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...
- 2017-2018-1 我爱学Java 第六七周 作业
团队六七周作业 完善版需求规格说明书 制定团队编码规范 数据库设计 后端架构设计 TODOList 参考资料 完善版需求规格说明书 <需求规格说明书>初稿不足之处: 1.开发工具写错 2. ...
- 《Linux内核分析》第七周学习总结 可执行程序的装载
第七周.可执行程序的装载 一.可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码: (2)汇编代码经过gas变成.o目标文件: (3)目标文件变成可执行文件: (4)可执行文 ...
- python金牌班第七周周末总结
python金牌班第七周周末总结 面向对象前戏 1.我们在学习面相对像之前有一个推导过程如何将我们之前写的东西,从一串代码转向给对象服务. 2.实例 我们首先模拟了两个物种进行战斗的场景,然后我们发现 ...
- Linux内核设计第七周 ——可执行程序的装载
Linux内核设计第七周 ——可执行程序的装载 第一部分 知识点总结 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 编译链接的过程 预处理阶段 gcc -E -o XX.cpp ...
- 七牛云存储Python SDK使用教程 - 上传策略详解
文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k ...
- 201521123061 《Java程序设计》第七周学习总结
201521123061 <Java程序设计>第七周学习总结 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 贴上源 ...
- 201521123072《java程序设计》第七周总结
201521123072<java程序设计>第七周总结 标签: java 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源 ...
随机推荐
- homestead虚拟机,通过npm下载依赖包和解决运行gulp报错问题 yarn出错问题
homestead虚拟机,通过npm下载依赖包和解决运行gulp报错问题 yarn出错问题 1. 在虚拟器运行 npm 下载依赖组件时报错: npm ERR! EPROTO: protocol err ...
- Android 必知必会 - 依据包名推断 App 执行状态
假设移动端訪问不佳,请訪问: 掘金版 Github 版 获取指定包名的 APP 是否还在后台执行,推断 APP 是否存活. 背景 能够依据 App 是否有 Service 分两类情况处理: 没有 Se ...
- 【C++基础 03】do...while(0)妙用
我的主题是,有时候知道一些细节会让你写出更好的代码. ============================================ 之前学coocs2d-x的时候,发现有非常多do...w ...
- 基于python的ardrone control源码分析与心得
这里有一段python代码,可用于操控ardrone 2.0.实验室曾经借鉴用过,并添加了部分功能.如今复习一下,顺便理理python的相关知识点. #!/usr/bin/env python # A ...
- <转> lua: userdata的metatable使用
1 如何封装c++的指针 对于c++对象的lua包装,我们可以使用 template<typename T> struct luaUserdataWrapper { luaUserdat ...
- IOS 多播委托(GCDMulticastDelegate)
原文:http://www.cnblogs.com/dagehaoshuang/p/4043264.html 在IOS中为了实现回调一般有如下几个方法: delegate 通知中心 block KVO ...
- ios 中尝试多次请求
-(void)tryRun { tryTimes++; id obj = [ASODataManager getAppleAccount]; if (obj) { __block FirstViewC ...
- 出现蓝屏代码0x0000007b的原因及解决办法
出现蓝屏代码0x0000007b的原因通常是硬盘的存储控制器驱动加载错误,我们可以通过对BIOS界面进行修复来解决这个问题.下面小编将详细介绍解决蓝屏代码0x0000007b的方法,一起来看看吧 导致 ...
- nodejs 获取指定路径下所有的文件夹名
示例:获取 ./components 下所有的文件夹名称 let components = [] const files = fs.readdirSync('./components') files. ...
- Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)
当RadGridView中嵌套RadComboBox,且RadGridView的高度不够出现滚动条时,上下拉动滚动条后,RadComboBox中的选中值将丢失! 如下图: 滚动条未拖动前 滚动条上下拖 ...
