第12章 内存管理
- 格式:doc
- 大小:217.00 KB
- 文档页数:12
注意:1)“本章要点”部分,用红字标注的不是期末考试出题范围。
2)“习题部分”用蓝字标注的是重点习题,期末考试50%的题目是这些习题的原题。
红字标注的习题期末考试不考,仅供考研的同学参考。
3)大部分习题答案只给出要点,同学们可以自行适当补充,但一定要简明扼要。
4)如“本章要点”部分用红字标注的非考试内容,在“习题”部分有相关的重点习题,则对该部分内容只需做该习题即可。
------------------------------------------------------------第四章存储器管理要点4.1 存储器的层次结构理解P116图4-1的存储器层次结构,知道这种结构从经济上考虑,具有好的性能/价格比。
了解P117-118高速缓存CACHE和磁盘缓存,知道它们使用的淘汰算法与虚拟内存的页面置换算法是基本相同的。
4.2 程序的装入和链接这一小节的内容是一些重要的专业常识。
应了解本小节介绍的各种装入和链接方法,要求结合Windows操作系统及C 语言的实际去理解上述装入和链接方法(联系实际部分可上网查询)。
4.3 连续分配方式通用操作系统大都不用连续分配方式,有些嵌入式OS可能使用这种分配方式。
这一小节只需阅读P121-124即可。
4.4 基本分页存储管理方式这是本章最重要的一小节,要求全读。
重点理解页面、物理块、页表、页表的访存、物理地址、逻辑地址、快表(TLB)等概念及相互关系。
4.5 基本分段存储管理方式阅读4.5.1,知道为什么要分段。
阅读4.5.2 知道分段的原理。
考研的同学要知道段表、地址变换,知道分段和分页的主要区别。
阅读4.5.3 知道分段有利于信息共享,知道“纯代码”的概念。
阅读4.5.4 知道什么是段页式存储。
需要补充说明的是:教材说过,分段方便编程,主要是指方便汇编语言程序员,和设计高级语言编译器的程序员。
对使用高级语言进行应用编程的程序员来说,段是透明的,一般不能用高级语言代码去操作段。
第一章操作系统概述课后习题1. 硬件将处理机划分为两种状态,即管态和目态,这样做给操作系统设计带来什么好处 ? 答:便于设计安全可靠的操作系统。
管态和目态是计算机硬件为保护操作系统免受用户程序的干扰和破坏而引入的两种状态。
通常操作系统在管态下运行,可以执行所有机器指令;而用户程序在目态下运行,只能执行非特权指令。
如果用户程序企图在目态下执行特权指令,将会引起保护性中断,由操作系统终止该程序的执行,从而保护了操作系统。
2. 何为特权指令?举例说明之。
如果允许用户执行特权指令,会带来什么后果?答:只能在态下才能执行的指令称为特权指令。
如开关中断、置程序状态寄存器等。
如果允许用户执行特权指令,它将不仅影响当前运行的程序,而且还有可能影响操作系统的正常运行,甚至整个系统。
3. 中断向量在机器中的存储位置是由硬件确定的,还是由软件确定的 ? 答:中断向量在机器中的位置是由硬件确定的。
例如,在 INTEL 80x86 CPU 中,内存空间0x00000——0x003ff为中断向量空间。
4. 中断向量的内容是由操作系统程序确定的还是由用户程序确定的?答:中断向量的内容是由操作系统程序确定的。
向量的内容包括中断处理程序的入口地址和程序状态字(中断处理程序运行环境),中断处理程序是由操作系统装入内存的,操作系统将根据装入的实际地址和该中断处理程序的运行环境来填写中断向量。
5. 中断向量内的处理机状态位应当标明是管态还是目态 ? 为什么? 答:应当标明是管态。
该状态由系统初试化程序设置,这样才能保证中断发生后进入操作系统规定的中断处理程序。
6. 中断和程序并发之间的关系是什么?答:中断是程序并发的必要条件。
如果没有中断,操作系统不能获得系统控制权,无法按调度算法对处机进行重新分配,一个程序将一直运行到结束而不会被打断。
7. 说明“栈”和“堆”的差别.答:栈是一块按后进先出(FIFO)规则访问的存储区域,用来实现中断嵌套和子程序调用的参数和返回断点。
第3章 内存管理(3)一、单项选择题1.虚拟存储技术是 。
A .补充内存物理空问的技术B .补充相对地址空间的技术C .扩充外存空问的技术D .扩充输入输出缓冲区的技术解:虚拟存储技术并没有实际扩充内、外存,而是采用相关技术相对的扩充主存。
本题答案为B 。
2.以下不属于虚拟内存特征的是 。
A .一次性B .多次性C .对换性D .离散性解:多次性、对换性和离散性都是虚拟内存的特征。
本题答案为A 。
3.虚拟内存的基础是 。
A .局部性理论B .代码的顺序执行C .变量的连续访问D .指令局部性解:虚拟内存的基础是局部性理论,包括程序执行的局部性和存储空间访问的局部性。
本题答案为A 。
4.实施虚拟存储器管理的依据是程序的 。
A .局部性原 B .动态性原理 C .并发性原 D .一致性原理 解:同上题说明。
本题答案为A 。
5.实现虚拟内存最主要的技术是 。
A .整体覆盖 B .整体对换 C .部分对换 D .多道程序设计解:虚拟存储器具有多次性、对换性和虚拟性,而内、外存数据交换(对换)是基础。
本题答案为C 。
6.虚拟存储器是 。
A .可以容纳总和超过主存容量的多个作业同时运行的一个地址空间B .可提高计算机运算速度的设备C .容量扩大了的主存D .实际上不存在的存储器解:虚拟存储器的最大容量是由计算机的地址结构确定的,可以运行大于实际内存大 小的作业。
本题答案为A 。
7.若处理器有32位地址,则它的虚拟地址空间为 字节。
A .2GB B .4GB C .100KB D .640KB解:虚拟存储器的最大容量是由计算机的地址结构确定的,其虚拟地址空间=322B=4GB 。
本题答案为B 。
8.设主存容量为1MB ,外存容量为400MB ,计算机系统的地址寄存器有24位,那么虚存的最大容量是 。
A .1MB B .401MBC .1MB+242 B D .242 B解:虚拟存储器的最大容量是由计算机的地址结构确定的,其虚拟地址空间=242B 。
2018-2019学年第一学期的操作系统复习范围选择题第一章1.下面关于并发行的定义中,正确的是()。
A.并发性是指若干事件在同一时刻发生B.并发性是指若干事件在不同时刻发生C.并发性是指若干事件在同一时间间隔内发生D.并发性是指若干事件在同一时间间隔内发生2.如果分时系统的时间片一定,那么(),则响应时间越长。
A.用户数越多B. 用户数越少C. 主存容量越大D. 主存容量越小3.()没有多道程序设计的特点。
A.DOSB. UNIXC. WindowsD. OS/24.实时操作系统追求的目标是()。
A.高吞吐率B. 充分利用内存C. 快速响应D. 减少系统开销5.用户要在程序一级获得系统帮助,必须通过()。
A.进程调度B. 作业调度C. 设备调度D. 系统调度6.系统调用是由操作系统提供的内部调用,它()。
A.是命令接口中的命令B. 只能通过用户程序间接使用C. 是命令接口中的命令D. 与系统的命令一样7.批处理系统的主要缺点是()。
A.CPU的利用率降低B. 失去的交互性B.不具备并行性 D. 以上都错8.硬件设置了()以实现存储保护。
A.基址寄存器B. 指令地址计数器C. 限长寄存器D. 基址寄存器和限长寄存器9.分时操作系统适用于()。
A.控制生产流水线B. 调试运行程序C. 大量的数据处理D. 多个计算机资源共享10.为了让用户满意,在批处理兼分时的系统中,对()应及时响应。
A.批量作业B. 前台作业C. 后台作业D. 网络通信第二章1.进程存在的唯一标志是()。
A.程序B. PCBC. 数据集D. 中断2.CPU分配给进程的时间片用完而强迫进程让出CPU,此时进程的状为()。
A.阻塞状态B. 运行状态C. 就绪状态D. 都不是3.操作系统分配资源的基本单位是()。
A.程序B. 线程C. 作业D. 进程4.在进程管理中,当()时,进程从阻塞态变成就绪态。
A.进程被调度程序选中B. 等待某一事件C. 等待的事件发生D. 事件片用完5.下列进程状态的转换中,哪一个不正确的是()。
假设有一个文件系统,它里面的文件被删除后,当连接到该文件的链接依然存在时,文件的磁盘空间会再度被利用。
如果一个新的文件被创建在同一个存储区域或具有同样的绝对路径名,这会产生什么问题如何才能避免这些问题Answer:令旧的文件为F1,新文件为F2。
用户希望通过存在的链接进入F1,实际上将进入F2。
注意,使用的是文件F1的访问保护,而不是F2的。
这个问题可以通过确保所有被删除文件的链接也被删除来避免。
可以从几个方面来完成:a.保存一份文件所有链接的列表,删除文件时,删除每一个链接b.保留链接,当试图访问一个已删除文件时删除他们c.保存一个文件引用清单(或计数器),只有在文件所有链接或引用被删除后,删除该文件打开文件表被用以保持当前打开文件的信息,操作系统应该为每个用户保持一个单独的表吗或者只是保持一个包含当前所有用户访问文件的引用的表如果两个不同程序或用户访问同样的文件,在打开文件表中应包含单独的条目吗Answer:保持一个中央的打开文件表,操作系统可以执行下列操作,否则不可执行:假设一个当前有一个或一个以上进程访问的文件。
如果该文件被删除,那么应该直到所有正在访问文件的进程关闭它时,它才能从磁盘上删除。
只要有正在访问文件的进程数目的集中核算,该检查就可以执行。
另一方面,如果两个进程正在访问该文件,则需要保持两个单独的状态来跟踪当前位置,其中部分文件正被两个进程访问。
这就要求操作系统为两个进程保持单独的条目。
一个提供强制锁,而非使用由用户决定的咨询锁的进程有何优点和缺点Answer:在许多情况下,单独的程序可能愿意容忍同时访问一个文件,而不需要获得锁,从而确保文件的相互排斥。
其他程序结构也可以确保相互排斥,如内存锁;或其他同步的形式。
在这种情况下,强制锁将限制访问文件的灵活性,也可能增加与访问文件相关的开销。
在文件的属性中记录下创建程序的名字,其优点和缺点是什么(在Macintosh 操作系统中就是这样做的)Answer:记录下创建程序的名字,操作系统能够实现基于此信息的功能(如文件被访问时的程序自动调用)。
(完整版)操作系统课后题答案课本课后题部分答案第⼀章1.设计现代OS的主要⽬标是什么?答:(1)有效性(2)⽅便性(3)可扩充性(4)开放性2.OS的作⽤可表现在哪⼏个⽅⾯?答:(1)OS作为⽤户与计算机硬件系统之间的接⼝(2)OS作为计算机系统资源的管理者(3)OS实现了对计算机资源的抽象13.OS有哪⼏⼤特征?其最基本的特征是什么?答:并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。
14.处理机管理有哪些主要功能?它们的主要任务是什么?答:处理机管理的主要功能是:进程管理、进程同步、进程通信和处理机调度;进程管理:为作业创建进程,撤销已结束进程,控制进程在运⾏过程中的状态转换。
进程同步:为多个进程(含线程)的运⾏进⾏协调。
通信:⽤来实现在相互合作的进程之间的信息交换。
处理机调度:(1)作业调度。
从后备队⾥按照⼀定的算法,选出若⼲个作业,为他们分配运⾏所需的资源(⾸选是分配内存)。
(2)进程调度:从进程的就绪队列中,按照⼀定算法选出⼀个进程,把处理机分配给它,并设置运⾏现场,使进程投⼊执⾏。
15.内存管理有哪些主要功能?他们的主要任务是什么?北京⽯油化⼯学院信息⼯程学院计算机系3/48《计算机操作系统》习题参考答案余有明与计07和计G09的同学们编著 3/48答:内存管理的主要功能有:内存分配、内存保护、地址映射和内存扩充。
内存分配:为每道程序分配内存。
内存保护:确保每道⽤户程序都只在⾃⼰的内存空间运⾏,彼此互不⼲扰。
地址映射:将地址空间的逻辑地址转换为内存空间与对应的物理地址。
内存扩充:⽤于实现请求调⽤功能,置换功能等。
16.设备管理有哪些主要功能?其主要任务是什么?答:主要功能有: 缓冲管理、设备分配和设备处理以及虚拟设备等。
主要任务: 完成⽤户提出的I/O 请求,为⽤户分配I/O 设备;提⾼CPU 和I/O 设备的利⽤率;提⾼I/O速度;以及⽅便⽤户使⽤I/O设备.17.⽂件管理有哪些主要功能?其主要任务是什么?答:⽂件管理主要功能:⽂件存储空间的管理、⽬录管理、⽂件的读/写管理和保护。
《操作系统》课程教学大纲一、课程基本信息课程名称:《操作系统》总学时与学分:72学时 4学分课程性质:专业必修课授课对象:计算机科学与技术专业二、课程教学目标与任务操作系统原理是一门专业基础课程,是涉及考研等进一步进修的重要课程,是计算机体系中必不可少的组成部分。
本课程的目的和任务是使学生通过本课程的学习,理解操作系统的基本概念和主要功能,掌握操作系统的使用和一般的管理方法,从而为学生以后的学习和工作打下基础。
三、学时安排课程内容与学时分配表章节内容学时第一章操作系统引论5第二章进程管理12第三章处理机调度与死锁12第四章存储管理12第五章设备管理10第六章文件管理8第七章操作系统接口4第八章网络操作系统3第九章系统安全性3第十章UNIX操作系统3四、课程教学内容与基本要求第一章操作系统引论教学目标:通过本章的学习,使学生掌握操作系统的概念,操作系统的作用和发展过程,知道操作系统是配置在计算机硬件上的第一层软件,是对计算机系统的首次扩充,是现代计算机系统必须配置的软件。
基本要求:掌握操作系统的目标和作用、发展过程、基本特征及主要功能;了解操作系统的结构设计本章重点:操作系统的概念、作用,操作系统的基本特征以及操作系统的主要功能。
本章难点:操作系统基本特征的理解,操作系统主要功能的体现。
教学方法:讲授与演示相结合1.操作系统的目标和作用:操作系统的目标、作用、推动操作系统发展的主要动力。
2. 操作系统的发展过程:无操作系统的计算机系统、批处理系统、分时系统、实时系统、微机操作系统的发展。
3.操作系统的基本特征:并发性和共享性、虚拟和异步性。
4. 操作系统的主要功能:处理机管理功能、存储器管理功能、设备管理功能、文件管理功能。
5. OS结构设计。
第二章进程管理教学目标:通过本章的学习使学生了解在现代的操作系统中程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。
操作系统所具有的四大特征也都是基于进程而形成的,并可以从进程的观点来研究操作系统。
第12章 内存管理 ..................................................................................................... 1 12.0内存控制块 ...................................................................................................... 2 12.1建立一个内存分区,OSMEMCREATE() ............................................................. 3 12.2 分配一个内存块,OSMEMGET() ...................................................................... 5 12.3 释放一个内存块,OSMEMPUT() ...................................................................... 6 12.4 查询一个内存分区的状态,OSMEMQUERY() .................................................. 7 12.5 USING MEMORY PARTITIONS .................................................................................. 8 12.6 等待一个内存块 ............................................................................................ 9 第12章 内存管理 我们知道,在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。但是,在嵌入式实时操作系统中,多次这样做会把原来很大的一块连续内存区域,逐渐地分割成许多非常小而且彼此又不相邻的内存区域,也就是内存碎片。由于这些碎片的大量存在,使得程序到后来连非常小的内存也分配不到。在4.02节的任务堆栈中,我们讲到过用malloc()函数来分配堆栈时,曾经讨论过内存碎片的问题。另外,由于内存管理算法的原因,malloc()和free()函数执行时间是不确定的。 在µC/OS-II中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块,如同图F12.1。利用这种机制,µC/OS-II 对malloc()和free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。这样一来,malloc()和free()函数的执行时间也是固定的了。 如图 F12.2,在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属于的内存分区。显然,采用这样的内存管理算法,上面的内存碎片问题就得到了解决。
图 F12.1 内存分区——Figure 12.1 12-2 图 F12.2 多个内存分区——Figure 12.2 12.0内存控制块 为了便于内存的管理,在µC/OS-II中使用内存控制块(memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。程序清单L12.1是内存控制块的定义。
程序清单 L12.1 内存控制块的数据结构 typedef struct { void *OSMemAddr; void *OSMemFreeList; INT32U OSMemBlkSize; INT32U OSMemNBlks; INT32U OSMemNFree; } OS_MEM;
.OSMemAddr是指向内存分区起始地址的指针。它在建立内存分区[见12.1节,建立一个内存分区,OSMemCreate()]时被初始化,在此之后就不能更改了。 .OSMemFreeList是指向下一个空闲内存控制块或者下一个空闲的内存块的指针,具体含义要根据该内存分区是否已经建立来决定[见12.1节]。 .OSMemBlkSize是内存分区中内存块的大小,是用户建立该内存分区时指定的[见12.1节]。 .OSMemNBlks是内存分区中总的内存块数量,也是用户建立该内存分区时指定的[见12.1节]。 .OSMemNFree是内存分区中当前可以得空闲内存块数量。 如果要在µC/OS-II中使用内存管理,需要在OS_CFG.H文件中将开关量OS_MEM_EN设置为1。这样µC/OS-II 在启动时就会对内存管理器进行初始化[由OSInit()调用OSMemInit()实现]。该初始化主要建立一个图 F12.3所示的内存控制块链表,其中的常数OS_MAX_MEM_PART(见文件OS_CFG.H)定义了最大的内存分区数,该常数值至少应为2。
图 F12.3 空闲内存控制块链表——Figure 12.3 12.1建立一个内存分区,OSMemCreate() 在使用一个内存分区之前,必须先建立该内存分区。这个操作可以通过调用OSMemCreate()函数来完成。程序清单 L12.2说明了如何建立一个含有100个内存块、每个内存块32字节的内存分区。
程序清单 L12.2 建立一个内存分区 OS_MEM *CommTxBuf; INT8U CommTxPart[100][32]; void main (void) { INT8U err; OSInit(); . . CommTxBuf = OSMemCreate(CommTxPart, 100, 32, &err); . . OSStart(); }
程序清单 L12.3是OSMemCreate()函数的源代码。该函数共有4个参数:内存分区的起始地址、分区内的内存块总块数、每个内存块的字节数和一个指向错误信息代码的指针。如果OSMemCreate()操作失败,它将返回一个NULL指针。否则,它将返回一个指向内存控制块的指针。对内存管理的其它操作,象OSMemGet(),OSMemPut(),OSMemQuery()函数等,都要通过该指针进行。 每个内存分区必须含有至少两个内存块[L12.3(1)],每个内存块至少为一个指针的大小,因为同一分区中的所有空闲内存块是由指针串联起来的[L12.3(2)]。接着,OSMemCreate()从系统中的空闲内存控制块中取得一个内存控制块[L12.3(3)],该内存控制块包含相应内存分区的运行信息。OSMemCreate()必须在有空闲内存控制块可用的情况下才能建立一个内存分区[L12.3(4)]。在上述条件均得到满足时,所要建立的内存分区内的所有内存块被链接成一个单向的链表[L12.3(5)]。然后,在对应的内存控制块中填写相应的信息[L12.3(6)]。完成上述各动作后,OSMemCreate()返回指向该内存块的指针。该指针在以后对内存块的操作中使用[L12.3(6)]。
程序清单 L12.3 OSMemCreate() OS_MEM *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err) { OS_MEM *pmem; INT8U *pblk; void **plink; INT32U i; if (nblks < 2) { (1) *err = OS_MEM_INVALID_BLKS; return ((OS_MEM *)0); } if (blksize < sizeof(void *)) { (2) *err = OS_MEM_INVALID_SIZE; return ((OS_MEM *)0); } OS_ENTER_CRITICAL(); pmem = OSMemFreeList; (3) if (OSMemFreeList != (OS_MEM *)0) { OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList; } OS_EXIT_CRITICAL(); if (pmem == (OS_MEM *)0) { (4) *err = OS_MEM_INVALID_PART; return ((OS_MEM *)0); } plink = (void **)addr; (5) pblk = (INT8U *)addr + blksize; for (i = 0; i < (nblks - 1); i++) { *plink = (void *)pblk; plink = (void **)pblk; pblk = pblk + blksize; } *plink = (void *)0; OS_ENTER_CRITICAL(); pmem->OSMemAddr = addr; (6) pmem->OSMemFreeList = addr; pmem->OSMemNFree = nblks; pmem->OSMemNBlks = nblks; pmem->OSMemBlkSize = blksize; OS_EXIT_CRITICAL(); *err = OS_NO_ERR; return (pmem); (7) }
图 F12.4是OSMemCreate()函数完成后,内存控制块及对应的内存分区和分区内的内存块之间的关系。在程序运行期间,经过多次的内存分配和释放后,同一分区内的各内存块之间的链接顺序会发生很大的变化。
图 F12.4 OSMemCreate()——Figure 12.2 分配一个内存块,OSMemGet() 应用程序可以调用OSMemGet()函数从已经建立的内存分区中申请一个内存块。该函数的唯一参数是指向特定内存分区的指针,该指针在建立内存分区时,由OSMemCreate()函数返回。显然,应用程序必须知道内存块的大小,并且在使用时不能超过该容量。例如,如果一个内存分区内的内存块为32字节,那么,应用程序最多只能使用该内存块中的32字节。当应用程序不再使用这个内存块后,必须及时把它释放,重新放入相应的内存分区中[见12.03节,释放一个内存块,OSMemPut()]。 程序清单 L12.4是OSMemGet()函数的源代码。参数中的指针pmem指向用户希望从其中分配内存块的内存分区[L12.4(1)]。OSMemGet()首先检查内存分区中是否有空闲的内存块[L12.4(2)]。如果有,从空闲内存块链表中删除第一个内存块[L12.4(3)],并对空闲内存块链表作相应的修改 [L12.4(4)]。这包括将链表头指针后移一个元素和空闲内存块数减1[L12.4(5)]。最后,返回指向被分配内存块的指针[L12.4(6)]。