⑴ 操作系统(三)内存管理 3.2 虚拟内存管理
传统存储管理很多暂时用不到的数据也会长期占用内存,导致内存利用率不高,他们具有以下两个特征
高速缓冲技术的思想:将近期会频繁访问到的数据放到更高速的存储器中,暂时用不到的数据放在更低速存储器中。快表机构就是将近期常访问的页表项副本放到更高速的联想寄存器中,其依赖的就是局部性原理
时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行;如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)
空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为很多数据在内存中都是连续存放的,并且程序的指令也是顺序地在内存中存放的)
基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是 虚拟内存 。虚拟内存是操作系统虚拟性的一个体现,实际的物理内存大小没有变,只是在逻辑上进行了扩充。
虚拟内存有以下三个主要特征:
虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此,虚拟内存的实现需要建立在离散分配的内存管理方式基础上。
虚拟内存的实现有以下三种方式
在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。 [1] 若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。 [2]
请求分页系统建立在基本分页系统之上,为了支持虚拟存储器功能而增加了请求调页和页面置换功能
与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。当内存空间不够时,要实现“页面置换”,操作系统需要通过某些指标来决定到底换出哪个页面;有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中的旧数据覆盖,因此,操作系统也需要记录各个页面是否被修改的信息。因此,请求页表项增加了四个字段
在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
找到对应页表项后,若对应页面未调入内存,则产生缺页中断,之后由操作系统的缺页中断处理程序进行处理
快表中有的页面一定是在内存中的。若某个页面被换出外存,则快表中的相应表项也要删除,否则可能访问错误的页面
页面的换入、换出需要磁盘I/O,会有较大的开销,因此好的页面置换算法应该追求更少的缺页率
最佳置换算法(OPT,Optimal):每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的。
先进先出置换算法(FIFO):每次选择淘汰的页面是最早进入内存的页面。把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。队列的最大长度取决于系统为进程分配了多少个内存块。
只有FIFO算法会产生Belady异常 [3] 。另外,FIFO算法虽然实现简单,但是该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最经常被访问。因此,算法性能差
最近最久未使用置换算法(LRU,least recently used):每次淘汰的页面是最近最久未使用的页面。赋予每个页面对应的页表项中,用访问字段记录该页面自上次被访问以来所经历的时间t。当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。
该算法的实现需要专门的硬件支持,虽然算法性能好,但是实现困难,开销大
时钟置换算法是一种性能和开销较均衡的算法,又称CLOCK算法,或最近未用算法(NRU,NotRecently Used)简单的CLOCK算法实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描)
改进型的时钟置换算法:
简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。如(1,1)表示一个页面近期被访问过,且被修改过。
算法规则:将所有可能被置换的页面排成一个循环队列
由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描
对于分页式的虚拟内存,在进程准备执行时,不需要也不可能把-一个进程的所有页都读入主存。因此,操作系统必须决定读取多少页,即决定给特定的进程分配几个页框。
分配方式有
置换方式有
根据以上,现代操作系统通常采用三种策略:
预调页策略:根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更高效。但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能访问到的页面,将它们预先调入内存,但目前预测成功率只有50%左右。故这种策略 主要用于进程的首次调入 ,由程序员指出应该先调入哪些部分。
请求调页策略:进程 在运行期间发现缺页时才将所缺页面调入内存 。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,而每次调页都要磁盘l/O操作,因此I/O开销较大。
请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换页面的对换区。对换区通常采用连续分配方式,而文件区采用离散分配方式,因此对换区的磁盘I/O速度比文件去的更快
刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动,或颠簸。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)
工作集:指在某段时间间隔里,进程实际访问页面的集合。
操作系统会根据“窗口尺寸”来算出工作集。
工作集大小可能小于窗口尺寸,实际应用中,操作系统可以统计进程的工作集大小,根据工作集大小给进程分配若干内存块。 [4]
一般来说,驻留集大小不能小于工作集大小,否则进程运行过程中将频繁缺页。
⑵ 计算机将文件写入内存的过程是怎么样的
要看你指的文件是什么样的文件。如果只是普通的文本,比如你用一个小程序把一些数据装入内存,那就很简单:c语言里面一般是:
向系统申请内存(内存分配,根据需要申请合适的大小);
打开文件;
读取一行,此时读取的这行就进入内存了。
判断是否到文件末尾,未到,继续读下一行。如此循环。
如果你指的是程序,这个过程将复杂很多。程序要进入内存执行,从你鼠标点击程序开始,操作系统读取程序文件,判断其中的指令及数据,在内存中分配指令段、数据段。将正在执行的程序状态修改为其它状态,然后你启动这个程序设置为运行,它就开始了。有可能还需要将内存中已有的程序换出到硬盘上(页面交换)以空出内存空间给新程序。
⑶ 操作系统如何把程序从磁盘加载到内存并创建进程的
双击执行的时候,就像是去饭店吃饭,首先要进入饭店(打开文件夹),然后服务员会奉上菜单(看到里边有什么文件),然后你点了一道菜(双击可执行文件),服务员去后厨下单(操作系统通过文件系统驱动找到文件的存储位置并开始加载),后厨会切菜、配菜(分解文件,并按数据、代码等不同部分加载到内存),接着炒菜(执行代码)。炒菜过程中会分别加入主料、配料和不同的佐料(调用数据),烹制完成后出锅(执行完毕),端菜上桌(把返回的结果呈现给用户)。大致的流程基本就是这样的,至于快捷方式嘛,你就理解成是外卖单好了。菜单只有饭店里才看的到,外卖单在哪里都能看的到~
至于交换空间,那不是央视的一个家居装修类栏目么…………=。=|||…………我估计你说的应该是页面交换文件吧?那个是虚拟内存技术,按照刚才的比喻来说,相当于要做的菜略多,后厨空间不够了,于是厨师长下令把还没做完但是不着急做的菜先挪到边上放着(将内存中暂时不着急运行的程序做成镜像存储到文件系统中交换文件的位置),等到着急的菜都做完了再说。
再详细的原理细节,我就无法做说明了,题主可以去查阅一些关于操作系统原理的书籍,会更加详细。
⑷ 计算机操作系统知识点
计算机操作系统知识点
网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。下面是关于计算机操作系统知识点,希望大家认真阅读!
4.1.1操作系统的概念
操作系统:是管理计算机软硬件资源的程序,同时它又是用户与计算机硬件的接口。
4.1.2操作系统的构成
进程管理、内存管理、文件管理、输入/输出系统管理、二级存储管理、联网、保护系统、命令解释程序
4.2.1操作系统的类别
经过多年的发展,操作系统多种多样。为提高大型计算机系统的资源利用率,操作系统从批处理,多道程序发展为分时操作系统。为了满足计算机处理实时事件的需要,就有实时操作系统。为适应个人计算机系统的需要又出现了桌面操作系统。为适应并行系统的需要,就有了多处理器操作系统。为满足网络和分布计算的需要,就有了网络操作系统和分布式操作系统。此外,还有为支持嵌入式计算机的嵌入式操作系统。
4.2.2计算环境
从计算机诞生至今,操作系统总是与具体的计算环境相联系,它总是在某种计算环境中设置和使用,就目前来看计算环境可分为以下几类:
1.传统计算环境
指普通意义下的独立或联网工作的通用计算机所形成的计算环境。
2.基于Web的计算环境
互联网的普及使得计算被延伸到Web环境。
3.嵌入式计算环境
嵌入式计算机就是安装在某些设备上的计算部件,其计算相对比较简单。
4.3.1进程的概念
什么是进程?它与程序有什么区别?
程序:用户为完成某一个特定问题而编写的操作步骤。
进程:可以简单地被看作是正在执行的程序。但是进程需要一定的资源来完成它的任务(例如CPU时间、内存、文件和I/O设备)。
进程与程序的区别在于进程是动态的、有生命力的,而程序是静态的。一个程序加载到内存,系统就创建一个进程,程序执行结束后,该进程也就消亡了。
在计算机中,由于多个程序共享系统资源,就必然引发对CPU的争夺。如何有效地利用CPU资源,如何在多个请求CPU的进程中选择取舍,这就是进程管理要解决的问题。
4.3.3进程控制块PCB(略)
为了控制进程,操作系统就必须知道进程存储在哪里,以及进程的一些属性。
进程控制块是进程实体的一部分,是操作系统中记录进程的专用数据结构。一个新的进程创建时,操作系统就会为该进程建立一个进程控制块。操作系统根据进程控制块对并发进程进行控制。
4.3.4进程调度及队列图
计算机采用多道程序的目的是使得计算机系统无论何时都有进程运行,单处理器的计算机在某一时刻CPU只能运行一个进程,如果存在多个进程,其它进程就需要等待CPU空闲时才能被调度执行。
当一个进程处于等待或CPU时间片用完时,操作系统就会从该进程中拿走CPU控制权,然后再交给其它进程使用,这就是进程的调度。
4.3.5CPU调度及其准则
在设计CPU调度程序时主要应该考虑的准则包括:
(1)CPU使用率。让CPU尽可能地忙。
(2)吞吐量。让CPU在一定时间内完成的进程数尽可能多。
(3)周转时间。让进程从提交到运行完成的时间尽可能短。
(4)等待时间。让进程在就绪队列中等待所花时间之和尽可能短。
(5)响应时间。让进程从提交请求到产生第一响应之间的时间尽可能短。
主要的CPU调度算法
1、先到先服务
2、最短作业优先
3、优先权
4、轮转
5、多级队列
6、多级反馈队列
4.3.7进程的同步与互斥
进程的同步就是指相互协作的进程不断调整它们之间的相对速度,以实现共同有序地推进。
换句话说,在操作系统中,允许多个进程并发运行。然而,有些进程之间本身存在某种联系,它们在系统中需要一种协作,以保证进程能正确有序地执行并维护数据的一致性。
在操作系统中,可能存在着多个进程。而系统中一些资源一次只允许一个进程使用,这类资源被称为临界资源。在进程中访问临界资源的那段程序称为临界区。当一个进程进入临界区执行时,其它进程就不允许进入临界区执行,否则就会导致错误结果。由此得出:
多个进程并发执行时,只允许一个进程进入临界区运行,这就是进程的互斥。
例如:多个进程在竞争使用打印机时表现为互斥。
一个文件可供多个进程共享,其中有一个进程在写操作时,其它进程则不允许同时写或读,表现为互斥。
4.3.8进程的死锁及处理方法
在多道程序设计中,多个进程可能竞争一定数量的资源。一个进程在申请资源时,如果所申请资源不足,该进程就必须处于等待状态。如果所申请的资源被其它进程占有,那么进程的等待状态就可能无法改变,从而形成进程之间相互一直等待的局面,这就是死锁。
竞争资源引起死锁
引起死锁的四个必要条件:
互斥:任一时刻只能有一个进程独占某一资源,若另一进程申请该资源则需延迟到该资源释放为止。
占有并等待:即该进程占有部分资源后还在等待其它资源,而该资源被其它进程占有。
非抢占:某进程已占用资源且不主动放弃它所占有的资源时,其它进程不能强占该资源,只有等其完成任务并释放资源。
循环等待:在出现死锁的系统中,一定存在这样一个进程链,其中每个进程至少占有其它进程所必需的资源,从而形成一个等待链。
处理死锁问题的三种方式:
可使用协议预防和避免死锁,确保系统从不会进入死锁状态。
可允许系统进入死锁状态,然后检测出死锁状态,并加以恢复。
可忽略进程死锁问题,并假装系统中死锁从来不会发生。即没有必要把精力花在小概率事件上。
处理死锁优先考虑的顺序:先预防和避免再检测和恢复
4.4内存管理
内存是现代操作系统的核心。内存用于容纳操作系统和各种用户进程,是可以被CPU和I/O设备所共同访问的数据仓库。计算机的所有程序运行时都要调入内存。
内存管理的主要工作是:为每个用户进程合理地分配内存,以保证各个进程之间在存储区不发生冲突;当内存不足时,如何把内存和外存结合起来,给用户提供一个比实际内存大得多的虚拟内存,使得程序能顺利执行。内存管理包括内存分配、地址映射、内存保护和扩充。
4.4.1用户程序执行与地址映射
用户编写程序在执行前,需要多个处理步骤,这些步骤可将源程序转变为二进制机器代码,然后在内存中等待执行。当然有时并非每个步骤都是必需的。
通常,将指令和数据的.地址映射成内存地址可以发生在以下三个执行阶段。(了解)
1.编译阶段:如果在编译时就知道进程将在内存中的什么位置驻留,那么编译器就可以直接以生成绝对地址代码。
2.加载阶段:不知道进程将驻留在什么位置,那么编译器就必须生成程序的逻辑地址,在加载阶段再转变成内存的绝对地址。
3.执行阶段:如果进程在执行时可以从一个内存段移动到另一个内存段,那么进程的绝对地址映射工作只能延迟到执行时进行。
4.4.2物理地址空间与逻辑地址空间
物理地址:是计算机内存单元的真实地址。
物理地址空间:由物理地址所构成的地址范围。
逻辑地址:用户程序地址,从0开始编址。
逻辑地址空间:由逻辑地址所构成的地址范围。
地址映射:用户程序在运行时要装入内存,这就需要将逻辑地址变换成物理地址,这个过程称为地址映射,也称重定位。
用户编写的源程序是不考虑地址的,源程序经CPU编译后产生逻辑地址。从CPU产生的逻辑地址转换为内存中的物理地址的映射是由计算机中被称为内存管理单元的硬件设备来实现的,将逻辑地址与内存管理单元中存放的内存基址相加就得到了物理地址。
4.4.3进程使用内存的交换技术
为了更加有效地使用内存,进程在不运行时,可以暂时从内存移至外存上,直到需要再运行时再重新调回到内存中。也就是说内存管理程序可将刚刚运行过的进程从内存中换出以释放出占用的内存空间,然后将另一个要运行的进程占据前者释放的内存空间。
计算机工作时,为了将多个进程放入到内存就必须考虑在内存中如何放置这些进程。
4.4.4内存分配方案-连续
对于连续内存分配方案,开始时所有内存是一个大的孔,随着内存分配的进行就会形成位置上不连续的大小不一的孔。在连续内存分配方案中,当新进程需要内存时,为其寻找合适的孔,实现内存分配。该方案为每个进程所分配的内存物理地址空间在位置上是连续的。
4.4.5内存分配方案-分页式
分页管理基本思想:
o内存物理地址空间划分为若干个大小相等的块(页框)
o进程的逻辑地址空间也划分为同样大小的块(页面)
o内存分配时每个页面对应地分配一个页框,而一个进程所分得页框在位置上不必是连续的。
页表:操作系统为每个用户程序建立一张页表,该表记录用户程序的每个逻辑页面存放在哪一个内存物理页框。
4.5虚拟内存方案
虚拟内存是一个容量很大的存储器的逻辑模型,它不是任何实际的物理存储器,它一般是借助硬盘来扩大主存的容量。
虚拟内存:对于一个进程来讲,如果仅将当前要运行的几个页面装入内存便可以开始运行,而其余页面可暂时留在磁盘上,待需要时再调入内存,并且调入时也不占用新的内存空间,而是对原来运行过的页面进行置换。这样,就可以在计算机有限的内存中同时驻留多个进程并运行。而对用户来讲感觉到系统提供了足够大的物理内存,而实际上并非真实的,这就是虚拟内存。
4.5.2页面请求与页面置换算法
页面请求:在虚拟内存技术中,进程运行时并没有将所有页面装入到内存,在运行过程中进程会不断地请求页面,如果访问的页面已在内存,就继续执行下去;但如果要访问的页面尚未调入到内存,便请求操作系统将所缺页面调入内存,以便进程能继续运行下去。
页面置换:如果请求页面调入内存时,分配给该进程的页框已用完,就无法立即装入所请求页面。此时,必须将进程中的某个页面从内存的页框调出到磁盘上,再从磁盘上将所请求的页面调入到内存的该页框中。这个过程叫做页面置换。
4.6文件管理
文件管理是操作系统最常见的组成部分。文件管理主要提供目录及其文件的管理。
4.6.1文件的概念
文件:保存在外部存储设备上的相关信息的集合。
文件命名:文件主名+扩展名
文件存取属性:
只读:只允许授权用户进行读操作。
读写:只允许授权用户进行读和写的操作。
文档:允许任何用户进行读写操作。
隐藏:不允许用户直接看到文件名。
文件系统:是对文件进行操作和管理的软件,是用户与外存之间的接口。这个系统将所有文件组织成目录结构保存在外存,一个文件对应其中的一个目录条。目录条记录有文件名、文件位置等信息。
操作系统对文件的基本操作包括:
创建文件、文件写、文件读、文件重定位、文件删除、文件截短。
对文件的其它操作包括:文件复制、重命名、更改属性等。
;⑸ 内存管理
在一段时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局部性原理的 分类 :
将编译后的目标模块装配成一个可执行程序。
可执行程序以 二进制可执行文件 的形式存储在磁盘上。
链接程序的 任务 :
程序的链接,可划分为:
重定位 :将逻辑地址(相对地址)转换为物理地址(绝对地址)的过程。
物理地址 = 逻辑地址 + 程序在内存中的起始地址
程序的装入,可划分为:
任何时刻主存储器 最多只有一个作业 。
每个分区 大小固定不变 :分区大小相等、分区大小不等。
每个分区可以且 仅可以装入一个作业 。
使用 下限寄存器 和 上限寄存器 来保存当前作业的起始位置和结束位置。
使用 固定分区说明表 区分各分区的状态。
分区 大小不是预先固定的 ,而是按作业(进程)的实际需求来划分的。
分区 个数也不是预先固定的 ,而是由装入的作业数决定的。
使用 空闲分区表 说明空闲分区的位置。
使用 空闲分区链 说明空闲分区的位置。
首次适应算法的 过程 :
外部碎片:空闲内存 没有在 分配的 进程 中。
内部碎片:空闲内存 在 分配的 进程 中。
从 上次找到的 空闲分区的 下一个 空闲分区开始查找。
优点:空闲区分布均匀、查找开销较小。
缺点:缺乏大空闲区。
最佳适应算法的 过程 :
优点:提高内存利用率。
注意点:每次在进行空闲区的修改前,需要先进行 分区大小递增 的排序。
页 :将一个 进程 的 逻辑地址空间 分成若干个 大小相等 的 片 。
页框 :将 物理内存空间 分成与页大小相同的若干个 存储块 。
分页存储 :将进程的若干 页 分别装入多个 可以不相邻 的 页框 中。
页内碎片 :进程 最后一页 一般装不满一个页框,形成 页内碎片 。
页表 :记录描述页的各种数据,实现从 页号 到 页框号 的映射。
注意: 页内偏移量 的单位是 字节 。
分页地址变换指是: 逻辑地址 通过 地址变换机构 变换为 物理地址 。
分页地址变换的 过程 :
操作系统在修改或装入页表寄存器的值时,使用的是 特权级 指令。
页大小:512B ~ 4KB,目前的计算机系统中,大多选择 4KB 大小的页。
页大小的 选择因素 :
快表也称为“转换后援缓冲”,是为了提高CPU访问速度而采用的专用缓存,用来存放 最近被访问过的页表项 。
英文缩写:TLB。
组成: 键和值 。
在TLB中找到某一个页号对应的页表项的百分比称为 TLB命中率 。
当 能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 一次访问内存 的时间(访问内存读写数据或指令)
当 不能 在TLB中找到所需要的页表项时:
有效访问时间 = 一次访问TLB 的时间 + 两次访问内存 的时间(一次访问内存页表,一次访问内存读写数据或指令)
将页表再分页,形成两级或多级页表,将页表离散地存放在物理内存中。
在进程切换时,要运行的进程的页目录表歧视地址被写入 页表寄存器 。
在二级分页系统中,为页表再建立一个页目录表的目的是为了能在地址映射时得到页表在物理内存中的地址,在页目录表的表项中存放了每一个 页表 在物理内存中所在的 页框号 。
虚拟存储器 :是指具有 请求调入功能 和 置换功能 ,能 从逻辑上对内存容量进行扩充 的一种存储系统。
请求调入 :就是说,先将进程一部分装入内存,其余的部分什么时候需要,什么时候请求系统装入。
置换 :如果请求调入时,没有足够的内存,则由操作系统选择一部分内存中的进程内容移到外存,以腾出空间把当前需要装入的内存调入。
为了实现请求分页,需要:
保证进程正常运行的所需要的最小页框数。
最小页框数与进程的大小没有关系,它与计算机的 硬件结构 有关,取决于 指令的格式、功能和寻址方式 。
内存不够时,从进程本身选择淘汰页,还是从系统中所有进程中选择?:
采用什么样的算法为不同进程分配页框?:
常用的两种 置换策略 : 局部置换 和 全局置换 。
从分配给进程的页框数量上看,常使用的两种 分配策略 : 固定分配 和 可变分配 。
用新调入的页替换 最长时间没有访问 的页面。
找到 未来最晚被访问 的那个页换出。
,P为缺页率。
有效访问时间与缺页率成 正比 ,缺页率越高,有效访问时间越长,访问效率越低。
工作集 :某段时间间隔里,进程实际要访问的页的集合。
引入工作集的 目的 :降低缺页率,提高访问内存效率。
抖动 :运行进程的大部分时间都用于页的换入换出,几乎不能完成任何有效果工作的状态。
抖动的 产生原因 :
抖动的 预防方法 :
在分段存储管理的系统中,程序使用 二维 的逻辑地址,一个数用来表示 段 ,另一个数用来表示 段内偏移量 。
引入分段的 目的 :
引入分段的 优点 :
进程的地址空间被划分成 若干个段 。
每个段定义了一组逻辑信息,每个段的大小由相应的逻辑信息组的长度确定, 段的大小不一样 ,每个段的逻辑地址从0开始,采用一段 连续的地址空间 。
系统为每个段分配一个 连续的物理内存区域 ,各个 不同的段可以离散 地放入物理内存不同的区域。
系统为 每个进程建立一张段表 ,段表的每一个表项记录的信息包括: 段号、段长和该段的基址 ,段表存放在内存中。
分段的 逻辑地址结构 :
段表是由操作系统维护的用于支持分段存储管理 地址映射 的数据结构。
每个进程有一个段表,段表由段表项构成。每个段表项包括: 段号、段长(段的大小)和该段的基址(段的起始地址) 。
若已知逻辑单元的地址为 S:D (段号:段内偏移量),求相应物理地址的步骤如下:
相同点 :分页和分段都属于 离散 分配方式,都要通过数据结构与硬件的配合来实现 逻辑地址到物理地址 的映射。
不同点 :
将用户进程的逻辑空间 先划分为若干个段 , 每个段再划分成若干个页 。
进程以页为单位在物理内存中 离散 存放,每个段中被离散存放的页具有 逻辑相关性 。
为了实现地址映射,操作系统为 每个进程建立一个段表 ,再为 每个段建立一个页表 。
进程段表的段表项组成:
满足以下条件的两个块称为 伙伴 :
⑹ 如何 将软件装在内存条里
使用RAM DISK,将一块内存虚拟成硬盘分区。
1、内存足够大。你分出作为硬盘分区的内存空间就不能再作为内存使用了。
2、计算机重新启动之后,RAM DISK上的所有信息均丢失。
⑺ 怎样将系统装入内存
太详细的方法我还没学会,没实际用过。
简单描述一下:
1,硬盘安装好系统,各种驱动,各种程序(你要用的程序),设置好各种文件夹位置(下面详细说明)
2,将系统
盘符
制作成
镜像文件
。
3,用winpe等软件虚拟个硬盘盘符(例如
安装系统
时的
B盘
,需要自学一下)。
4,在
载入镜像
文件到虚拟盘符,就可以执行了。
好处:
1、超快,也是最重要的好处,如果你内存够大的话,没有程序开启
进度条
哦,用内存的速度运行系统和程序(你安装在
系统盘
符中
的),
运行速度
超乎想象
。
2、安全,
系统文件
随便改,不用怕损坏,就像
影子系统
一样用。反正都保存不上的。
缺点:
1、安装新程序或更新新软件(杀毒软件更新很频繁)需要重新制作镜像文件,比较繁琐。
2、虚拟出来的盘符不能保存任何东西,所以需要你设置好平时用的
程序文件夹
,当你发现不能保存时就晚了。
3、需要你的内存够大,绝对是
物理内存
,因为把系统加载进内存后win7至少需要6-8G空间(前提是你减肥工作做的好,并且没有大型程序),还要把系统运行的内存预留出来,也是越大越好。而且不能设置
虚拟内存
(虚拟在硬盘上的内存空间,读写速度是硬盘速度)
扩展想法:
1、用u盘做成
启动盘
符,使其自动加载镜像文件,这样只要在开机时插入u盘,就能启动超快系统,比较方便。
⑻ 计算机正在运行的程序存放在
计算机正在运行的程序一般都会存放在RAM(内存中)里,但是如果运用虚拟存储器技术可能会有一部分程序驻留在磁盘中。
RAM是与CPU进行数据交换等一些列操作的重要部件。计算机中程序的运行都离不开内存,因此内存的的好坏在一定程度上决定了计算机的好坏。
它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。
(8)操作系统如何将程序装入内存扩展阅读:
内存的技术指标一般包括奇偶校验、引脚数、容量、速度等。引脚数可以归为内存的接口类型。
程序在计算机中运行经过的步骤:
1、编译:
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成。
2、链接:
把所有编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体。
3、装载:
把程序装入内存的操作系统程序
4、运行:
将可执行目标文件中的代码和数据从磁盘复制到内存中,然后通过跳转到程序的第一条指令或入口点来运行程序。
参考资料来源:网络-计算机
⑼ 操作系统-04-操作系统的存储管理和设备管理
早期的计算机由于结构较为简单,存储容量小,并不需要过多的的存储管理。
随着计算机和程序越来越复杂,使得存储管理成为必要。
单一连续分配是最简单的内存分配方式
只能在单用户、单进程的操作系统中使用
固定分区分配是支持多道程序的最简单存储分配方式
内存空间被划分为若干固定大小的区域
每个分区只提供给一个程序使用,互不干扰
根据进程实际需要,动态分配内存空间
不需要新建空闲链表节点
只需要把空闲区的容量增大为包括回收区的容量即可
将回收区和空闲区合并
新的空闲区使用原来回收区的地址
将两个空闲区和中间的回收区合并
新的空闲区使用空闲区1的地址
为回收区创建新的空闲节点
将该节点插入到相应的空闲区链表中
上面的部分主要是从物理的角度讲解内存管理,这部分主要是讲解操作系统是怎么管理进程的内存空间。
字块 是相对于物理设备的定义, 页面 是相对逻辑空间的定义。
页式存储管理主要是将进程逻辑空间等分成若干大小的页面,相应的把物理内存空间分成与页面大小的物理块,以页面为单位把进程空间装进物理内存中分散的物理块。
页面大小应该适中,过大难以分配,过小内存碎片过多,通常是512B~8K。
页表 记录进程逻辑空间于物理空间的映射
在页式存储管理, 页地址 = 页号 + 页内偏移
现代计算机系统中,可以支持非常大的逻辑 地址空间(2 32~2 64),这样,页表就 变得非常大,要占用非常大的内存空间,如, 具有32位逻辑地址空间的分页系统,规定页 面大小为4KB,则在每个进程页表中的页表 项可达1M(2^20)个,如果每个页表项占用 1Byte,故每个进程仅仅页表就要占用1MB 的内存空间。
为了解决这个问题,引入了多级页表。
多级页表有一个根页表,每一个字块指向了内存中的一片空间,这块空间存储的是二级页表。以此类推,最后一级页表指向的字块才是进程实际使用的内存。通过这种分级机制,大大减少了进程中页表数占用的空间。
段式存储管理将进程逻辑空间划分成若干段(非等分),段的长度由连续逻辑的长度决定。
例如一个程序有主函数MAIN、子程序段X、子函数Y等,这个时候会根据每一个函数的逻辑长度来分配逻辑空间。
页表由 页号 和 基址 组成,但在段式存储管理中由于每一段的长度是不固定的,段表由 段号 、 基址 以及 段长 组成。
在段式存储管理, 段地址 = 段号 + 段内偏移
分页可以有效提高内存利用率(虽然说存在页内碎片)
分段可以更好满足用户需求
两者结合,形成段页式存储管理
先将逻辑空间按段式管理分成若干段,再把段内空间按页式管理等分成若干页。
在段页式存储管理中, 段页地址 = 段号 + 段内页号 + 页内地址
有些进程实际需要的内存很大,超过物理内存的容量。
由于操作系统的多道程序设计,使得每个进程可用物理内存更加稀缺。
不可能无限增加物理内存,物理内存总有不够的时候,于是便有了虚拟内存的概念。
虚拟内存是操作系统内存管理的关键技术,使得多道程序运行和大程序运行成为现实,她通过将进程所使用的内存进行划分,将部分暂时不使用的内存放置在辅存。
根据局部性原理,程序运行时,无需全部装入内存,装载部分即可。如果访问页不在内存,则发出缺页中断,发起页面置换。
从用户层面看,程序拥有很大的空间,即是虚拟内存。
虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存。
置换算法一般有先进先出算法(FIFO)、最不经常使用算法(LFU)、最近最少使用算法(LRU)。
从计算机组成原理篇章中,我们可以知道,CPU的高速缓存没有数据时,需要从主存中加载数据。此时若主存中也没有数据,则需要从辅存中载入页面数据。
内存替换策略发生在Cache-主存层次、主存-辅存层次。Cache-主存层次的替换策略主要是为了解决 速度问题 ,
主存-辅存层次则。主要是为了解决 容量问题 。
顺序文件是指按顺序存放在存储介质中的文件,例如磁带的存储特性使得磁带文件只能存储顺序文件。
顺序文件是所有逻辑文件当中存储效率最高的。
可变长文件不适合使用顺序文件格式存储,索引文件是为了解决可变长文件存储而发明的一种文件格式,索引文件需要配合索引表完成存储的操作。
目录的层级结构是树状的,成为目录树。
目录树中任何文件或目录都只有唯一路径。
对CPU而言,凡是对CPU进行数据输入的都是输入设备,凡是CPU进行数据输出的都是输出设备。
缓冲区主要是解决CPU与IO设备的速率不匹配的问题,减少CPU处理IO请求的频率,提高CPU与IO设备之间的并行性。
专用缓冲区只适用于特定的IO进程,当这样的IO进程比较多时,对内存的消耗也很大,所以操作系统划出可供多个进程使用的公共缓冲区,称之为缓冲池。
SPOOLing技术是关于慢速字符设备如何与计算机主机交换信息的一种技术,利用高速共享设备将低速的独享设备模拟为高速的共享设备,逻辑上,系统为每一个用户都分配了一台独立的高速独享设备,是一种虚拟设备技术。
SPOOLing技术把同步调用低速设备改为异步调用。在输入、输出之间增加了排队转储环节(输入井、输出井),SPOOLing负责输入(出)井与低速设备之间的调度,逻辑上,进程直接与高速设备交互,减少了进程的等待时间。