从0开始回顾操作系统---系列四

简介: 内存管理1、什么是内存管理操作系统对内存的划分和动态分配就是内存管理,主要可以分为:● 内存空间的扩充(实现虚拟性)● 内存空间的分配与回收● 地址转换:操作系统负责实现逻辑地址到物理地址的转换● 存贮保护:保证各进程在自己的内存空间内运行,不会越界访问2、内存管理机制和内存管理方式有哪些? 1. 分块管理● 是连续管理的一种,把内存分为几个大小相等且固定的块,每个进程占用其中一个,如果进程很小的话,会浪费大量的空间。已经淘汰。2. 分页管理● 把内存分为若干个很小的页面,相对比分块的划分力度更大一些。提高内存利用率。减少碎片,页式管理通过页表对应逻辑地址和物理地址。

内存管理

1、什么是内存管理

操作系统对内存的划分和动态分配就是内存管理,主要可以分为:

  • 内存空间的扩充(实现虚拟性)
  • 内存空间的分配与回收
  • 地址转换:操作系统负责实现逻辑地址到物理地址的转换
  • 存贮保护:保证各进程在自己的内存空间内运行,不会越界访问

2、内存管理机制和内存管理方式有哪些?

  1. 分块管理
  • 是连续管理的一种,把内存分为几个大小相等且固定的块,每个进程占用其中一个,如果进程很小的话,会浪费大量的空间。已经淘汰。
  1. 分页管理
  • 把内存分为若干个很小的页面,相对比分块的划分力度更大一些。提高内存利用率。减少碎片,页式管理通过页表对应逻辑地址和物理地址。
  1. 分段管理
  • 把内存分为几个大小不定的有实际意义的段,比如 main 函数段,局部变量段,通过管理段表来把逻辑地址转为物理地址。
  1. 段页式管理
  • 结合了段式管理和页面管理的优点,把主存先分为若干个段,每个段又分为若干个页,也就是说段页式管理的段与段以及段的内部都是离散的。

3、什么是分页?

  • 把内存空间划分为大小相等且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,因此需要一个页表来记录映射关系,以实现从页号到物理块号的映射
  • 访问分页系统中内存数据需要两次的内存访问 (一次是从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;第二次就是根据第一次得到的物理地址访问内存取出数据)。

4、什么是分段?

  • 程序是由若干个逻辑分段组成的,可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就用分段的形式把这些段分离出来。
  • 分段机制下的虚拟地址由两部分组成段号段内偏移量
  • 由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制

5、分页机制与分段机制异同

共同点:

  • 1、分页机制和分段机制都是为了提高内存利用率,减少内存碎片。
  • 2、页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。

区别:

  • 1、分页对用户不可见,分段对用户可见
  • 2、分页地址空间一维,分段地址空间二维。分段更容易实现信息的共享与保护
  • 3、分段会产生外部碎片;分页内存利用率更高,不会产生外部碎片
  • 4、页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序


6、讲一讲虚拟内存

传统存储管理方式的特征、缺点:

  • 一次性作业必须一次性全部装入内存后才能开始运行,这会造成两个问题:
  • 作业很大时,不能全部装入内存,导致大作业无法运行
  • 当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降
  • 驻留性:一旦作业被装入内存,就一直驻留在内存中,直至作业运行结束。
  • 事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。

虚拟内存的定义和特征:

  • 程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,还需换出一些数据;
  • 特征:
  • 多次性︰无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。
  • 对换性︰无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
  • 虚拟性 :  从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量

7、虚拟内存的三种实现技术

  1. 请求分页式存储管理
  • 建立在分页管理的基础之上,为了支持虚拟内存实现了请求调页和页面置换功能。其具体流程是这样的:
  • 首先作业运行时,仅装入当前要执行的部分页面即可。
  • 假如在运行的过程中,发现要请求的页面不在内存中,那么处理器通知操作系统按照对应的页面置换算法把相应的页面调入到内存中。
  • 如果发现在把页面调入内存时,内存已满,同时也可以把不用的页面置换出去,以便腾出空间装入新的页面。
  1. 请求分段式存储管理
  • 和分页是一样的,把页换成段即可。
  1. 请求段页式存储管理

8、缺页中断?

  1. 缺页概念内存管理时我们采用的是虚拟内存,虚拟内存并不能与实际内存建立完全的映射关系。缺页就是虚拟内存无法与实际内存建立映射的一种情况。我们通过页表的状态位判断是否产生缺页。缺页发生时,我们就需要将虚拟内存对应的外存中的那一页调入内存。而整个的实现过程是通过中断进行的。
  2. 这里的缺页中断的流程与普通中断没有区别。就是当系统发现缺页,从而产生中断。需要保存当前的状态,然后进入缺页中断处理程序,之后再恢复原来的状态,继续运行程序。
  3. 具体的缺页中断处理也要分为两类:第一类是此时内存中还有空闲块,我们直接将缺页从外存中调入内存;第二类是内存已满,需要采用页面置换算法淘汰某页再进行调入。

9、页面置换算法有哪些?

在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。

  1. 最佳置换算法(OPT:每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
  2. 先进先出置换算法(FIFO):每次选择淘汰的页面是最早进入内存的页面。
  3. 最近最久未使用置换算法(LRU):每次淘汰的页面是最近最久未使用的页面 。
  4. 时钟(CLOCK)置换算法:
  • 当内存中无对应数据,访问位为0即可置换,再变换访问位为1,然后指针下移。
  • 当内存中无对应数据,访问位为1不置换,再变换访问位为0,然后指针下移。
  • 当内存中有对应数据时,访问位变换,指针下移。

10、讲一讲快表?

快表是一种访问速度比内存快很多的高速缓存,用来存放最近访问的页表项的副本,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表。

引入快表后,地址的变换过程:

  1. 首先根据逻辑地址的高位拿到页号,将页号与快表中的所有页号进行比较
  2. 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。
  3. 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块

号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,

快表未命中,则访问某个逻辑地址需要两次访存注意:在找到页表项后,应同时将其存入快表

以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换)

快表的好处:

  • 由于查询快表的速度比查询页表的速度快很多,因此只要快表命中,就可以节省很多时间。
  • 因为局部性原理,一般来说快表的命中率可以达到 90% 以上。

11、讲讲虚拟地址和物理地址?为什么要有虚拟地址空间?

我们在写程序的时候打交道的都是虚拟地址,比如 C 语言的指针,这个虚拟地址由操作系统决定,而物理地址指的是真实内存地址寄存器的地址。现代处理器通常使用虚拟寻址,用 MMU 把虚拟地址翻译成物理地址才能访问到真正的物理地址。

那么为什么要有虚拟地址呢?

  1. 如果没有虚拟地址空间的话,我们操作的都是直接的物理地址,这样用户程序可以直接访问到底层的物理地址,很容易破坏操作系统,造成操作系统崩溃。
  2. 想要同时运行多个程序特别困难,多个程序可能对同一个寄存器进行操作,会发生崩溃。

通过虚拟地址就会得到如下优势:

  1. 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的内存缓冲区。
  2. 程序可以使用一系列虚拟地址访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小的时候,内存管理器会将物理页面保存到磁盘里。数据或代码页会根据需要在物理内存和磁盘之间移动。
  3. 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一个进程使用的物理内存。
相关文章
|
4月前
|
Java 关系型数据库 Linux
在Linux中,操作系统的主要组成部分有哪些?
在Linux中,操作系统的主要组成部分有哪些?
|
5月前
|
Linux 调度
部署03---Linux操作系统的诞生,Linux操作系统由系统的内核和系统的操作系统所组成
部署03---Linux操作系统的诞生,Linux操作系统由系统的内核和系统的操作系统所组成
|
7月前
|
算法
从0回顾操作系统---系列三
死锁与活锁 1、什么是死锁?死锁产生的条件? 什么是死锁: ● 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。 ● 通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。 死锁产生的四个必要条件:(有一个条件不成立,则不会产生死锁) ● 互斥条件:一个资源一次只能被一个进程使用; ● 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放; ● 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺; ● 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关
|
7月前
|
调度 数据安全/隐私保护 数据格式
从0开始回顾操作系统---系列一
概述 1、什么是操作系统 ● 操作系统简称OS,负责管理协调计算机硬件与软件资源工作的系统软件。 ● 屏蔽了硬件层的复杂性,为上层应用软件与用户提供易用的服务。 2、操作系统主要有哪些功能? 操作系统最主要的功能: ● 处理器(CPU)管理:CPU的管理和分配,主要指的是进程管理。 ● 内存管理:内存的分配和管理,主要利用了虚拟内存的方式。 ● 外存管理:外存(磁盘等)的分配和管理,将外存以文件的形式提供出去。 ● I/O管理:对输入/输出设备的统一管理。 除此之外,还有保证自身正常运行的健壮性管理,防止非法操作和入侵的安全性管理。 3、什么是系统调用?有哪几类? 根据进程访问资源的特点,
|
7月前
|
算法 安全 程序员
从0开始回顾操作系统---系列五
文件管理 1、虚拟文件系统? ● 文件系统的种类众多,而操作系统希望对用户提供一个统一的接口,于是在用户层与文件系统层引入了中间层,这个中间层就称为虚拟文件系统(Virtual File System,VFS)。 ● VFS 定义了一组所有文件系统都支持的数据结构和标准接口,这样程序员不需要了解文件系统的工作原理,只需要了解 VFS 提供的统一接口即可。 2、硬链接和软链接有什么区别? ● 硬链接就是在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。删除任意一个条目,文件还是存在,只要引用数量不为 0。但是硬链接有限制,它不能跨越文件系统,也不
|
7月前
|
消息中间件 缓存 算法
从0开始回顾操作系统---系列二
进程管理 1、进程和线程的区别? 进程:一个正在运行中的程序就是一个进程,进程包括程序段、数据段、PCB三部分。 ● 程序段就是程序的代码; ● 数据段就是程序运行时产生的数据(比如全局变量、局部变量等); ● PCB中包含操作系统对其进行管理的各种信息(如进程标识符PID,进程当前状态,进程优先级) 线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。 主要区别如下: ● 调度:进程是资源分配的基本单位,线程是程序执行的基本单位。 ● 开销:线程上下文切换开销小,进程线程间切换开销大。 ● 切换: 同一进程间线程切换不会引起进程切换,不同进程间线程切换会引
|
7月前
|
存储 Java
从0开始回顾操作系统---系列六
IO多路复用 1、讲一讲IO多路复用? IO多路复用模型指的是:使用单个进程/线程同时处理多个网络连接IO,他的原理就是select、poll、epoll 不断轮询所负责的所有 socket,当某个socket有数据到达了,就通知用户进程。该模型的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。 2、select、poll 和 epoll 之间的区别 1. select:时间复杂度 O(n) ● select 仅仅知道有 I/O 事件发生,但并不知道是哪几个流,所以只能无差别轮询所有流,找出能读出数据或者写入数据的流,并对其进行操作。所以 select 具有 O(n) 的无差
|
7月前
|
Linux Android开发 iOS开发
操作系统的作用与常见操作系统介绍
操作系统的作用与常见操作系统介绍
|
Linux Shell C语言
|
Linux 编译器 C语言
【Linux:程序地址空间--原来操作系统也喜欢画大饼】
【Linux:程序地址空间--原来操作系统也喜欢画大饼】
95 0
下一篇
DataWorks