内存管理(二)

页面置换算法

当发生缺页中断的时候, 系统会在内存中选择一个页面将其换出内存, 而当换出内存的时候如果该页面的内容在内存中发生修改,则必须将该新数据重新写回到磁盘, 然后再将需要换进的数据覆盖掉原来的数据, 而当该数据在内存中没有被修改的时候, 此时就直接用需要换进的内存的内容替换掉要淘汰的数据的内容.注意在换出的时候必须选择一些使用频率较低的页面将其换出.
在大多数计算机中会把最近经常使用的存储块保存到一个高速缓存区中, 当这个高速缓存区装满的时候就需要选择一些存储块将其丢弃

1. 最优页面置换算法

每一个页面用调用该页面前所需要执行的指令数进行标记, 在进行页面置换的时候选择该数字最大的进行换出. 这种算法虽然性能等各方面都比较好, 但是由于操作系统无法获知某个页面要在什么时候被调用, 因此不能实现, 但是可以用来评估一个页面置换算法的性能优劣

2. 先进先出页面置换算法

在先进先出页面置换算法中, 由操作系统维护当前内存中的页面,并且通过链表的形式将其组织起来, 链表的前后顺序按照调入内存的时间排序, 即最先调入内存的页面处于链表的头部, 当有一个新的页面需要访问内存的时候, 此时操作系统将处于链表头部的页面调出, 即在内存中待的最久的页面将其调出, 然后将新的页面插入到链表的尾部

3. 最近未使用页面置换算法

    这里写图片描述
为使得操作系统能够获得更多的有用信息, 系统为每一个页面都设置了两个状态, 当页面被访问的时候设置 R 位, 当页面被写入的时候设置 M 位. 这些位都被放在了一个页表项中(如上图)每次访问的时候更新这些位. 因此有硬件设置这些位是非常有必要的
在系统被启动的时候, 所有的位都被清零. R 位被定期的清零, 为了区别页面是否被访问. 因此利用R位和M位可以将系统中的所有页面划分为以下三种
(0)没有被访问, 没有被修改
(1)没有被访问, 已经被修改
(2)已经访问, 没有修改
(3)已经访问, 已经修改
这样的话, 每一个页面都会有一个编号, 在进行页面置换的时候, 系统往往从当前页面中选择一个编号最小的并且将其淘汰

4. 最近最少使用页面置换算法

在内存中的页面一般在很久的时间内没有使用则该页面在未来的很久时间内也可能被使用的几率会特别小. 根据这个原理, 系统在进行页面置换的时候每次从内存中选择一个未使用时间最长的页面将其换出.

页面置换算法比较

这里写图片描述

局部分配策略和全局分配策略

局部分配策略就是每次在置换的时候选择页面在内存中生存时间最短的页面将其换出, 而全局分配策略则是从内存中随机的换出一个页面. 全局分配策略比局部分配策略要好一点.

1. 页面大小
选择小页面

选择一个正文段, 数据段或者堆栈段很有可能不会恰好转满整个内存, 平均情况下都是最后一个页面时空的. 多余的空间就被浪费, 这个被浪费的空间就叫做内部碎片. 总的来说,选择小的页面比选择大的页面浪费的内存会少一些, 但是选择小的页面也意味着内存中的页表会变得更大, 页面装入页面寄存器所花费的时间就会越长.

2. 未定义外部函数

在任何目标文件中被调用了但没有被定义过的函数就叫做未定义函数. 如 printf 函数

3. 共享库

如果一个程序被启动了两次, 大多数操作系统会自动地共享所有的代码页面. 依赖与不同的进程, 每一个进程都拥有一份私有的副本数据, 如果任何一个进程想要对这个副本数据进行修改, 操作系统变为这个进程将这个副本数据做一个拷贝, 这个拷贝的数据就是该进程私有的数据. 注意当一个共享库被装载或者使用的时候, 此时并不是将共享库中所有的内容装载进内存, 而是根据需要将需要的部分以也为单位将其装入, 因此没有被调用的函数是不会被装载进内存的.
因此共享库可以使得可执行文件更小, 并且节省内存.并且当我们在修改一个 bug 的时候, 如果共享库中的一个函数被更新了, 此时不需要重新编译这个函数程序. 就得二进制文件依然可以使用.

缺页中断处理

(1)硬件陷入内核, 在对应的堆栈中板寸程序计数器. 大多数机器将当前的指令各种信息保存在特殊的 CPU 寄存器中.
(2)启动一个汇编代码例程来保存寄存器和其他易失的信息. 这个例程往往将操作系统作为一个函数来调用.
(3)发生中断的时候, 操作系统会尝试发现需要哪个虚拟页面.
(4)当知道了虚拟地址的时候, 此时操作系统便对这个地址进行检查, 并且检查存取和保护是否一致. 如果不一致, 则操作系统向对应的进程发送一个信号, 将该进程杀死. 如果没有发生任何错误机制, 则操作系统拿着这个虚拟地址去检查时候存在一个空闲的页框, 如果没有一个空闲的页框, 那么操作系统便执行页面置换算法寻找一个页面将其换出.
(5)如果选择换出的页面被修改过, 那么系统将安排该数据写回到磁盘, 挂起缺页中断的进程.
(6)如果该页面shiganjingde,那么操作系统在磁盘中查找需要调入的页面在磁盘中的位置, 然后将该页面装入到内存中. 并将发生缺页中断的进程挂起
(7)当磁盘访问中断的时候, 此时说明该页面已经被调入到内存, 页表已经对该页进行相应的更新, 对应该页表的页框也发生了更新, 即标记为正常状态.
(8)对缺页中断的指令以及程序计数器的内容做以修改.
(9)调度引起缺页中断的进程, 操作系统返回调用它的汇编例程
(10)恢复寄存器, 返回用户态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据链路层:基本概念

数据链路层的定义 对数据链路层有对上的网络层接口. 对下提供物理层的接口. 定义合适的传输差错率 对传输流进行管理, 以免快速的传输的数据被淹没. 比如发送端发送信号太快, 接受方接受速度较慢, 此时数据链路层就需要提供一定的功能解决这个问题 物理层上传输的基本单元是…

数据链路层: 可靠性传输 六个协议

可靠性传输 1. 差错控制 发送方将数据帧发送, 但是当发送方发送的是一个 1的时候此时接受方却接受的是一个 0. (1)校验 接收方如果帧校验接受到的帧没有问题, 则对发送方发送一个肯定性的确认, 当对这个数据帧进行校验发现这个帧有问题的时候, 此时接受方一种是将这个数据帧…

c语言实现配置文件的读写

配置文件的格式如下&#xff1a; key1 value1 key2 value2 . . . 名值对以一个链接&#xff0c;一条记录以换行符分割 头文件&#xff1a; #include<stdio.h> #include<stdlib.h> #include <string.h> 函数原型&#xff1a; void trim(char *strIn, char *…

数据链路层: HDLC

一. 协议机 发送方和接收方. 同时有限状态机把协议形式化为一个四元组 (S,M,I,T), 其中你S表示进程和信道可能进入的集合, M 表示数据帧的状态, I 表示进程的初始状态, T 表示两两状态之间的转化. 每个系统状态可以分为发送状态, 接受状态和信道状态. 把状态用一个点进行表示,…

bob-tong 字符串函数之Strtok()函数

https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函数详解&#xff1a; 该函数包含在"string.h"头文件中 函数原型&#xff1a; char* strtok (char* str,constchar* delimiters ); 函数功能&#xff1a;   切割字符串&#xff0c;将str切分成一个个子…

数据链路层:SLIP(串型线路IP) PPP(点对点协议)

SLIP 没有差错控制, 传输时必须知道对方IP, 传输使用于低速业务 19.2k.应用非常受限 PPP协议 1. PPP协议功能 处理错误检测 支持多协议(IP, IPX, DECnet 等) 连接时允许协商 IP 地址 允许身份验证 2. PPP 的组成 串型链路上封装数据报, 即支持异步链路也支持面向 比特…

strpbrk函数

http://blog.csdn.net/tommy_wxie/article/details/7554332 函数原型&#xff1a;extern char *strpbrk(char *str1, char *str2) 参数说明&#xff1a;str1待比较的字符串&#xff0c;str2为指定被搜索的字符串。 所在库名&#xff1a;#include <string.h> …

网络层网络层服务及其 IP 地址

ARP 协议功能 将 IP 地址通过广播(一个网段, 不能跨路由器), 目标 MAC 地址是FFFFFFFF 解析目标IP地址的 MAC 地址. IP 协议 网络层的一个协议, 是一个协议的统称, 包括 ARP(地址解析协议) 协议, ICMP(网络控制报文协议) 协议, IGMP(网际组管理协议) 协议. 其中 ICMP 和 IG…

传输层:IP 地址解析 路由转发

IP 地址与硬件地址 1. 地址解析 通过IP地址将其如何转换为 MAC 地址.解决同一个局域网上的主机或路由的 IP 地址和硬件地址的映射问题. 即以太网上除了主机还有路由. 即如果发出的请求所有的主机都没有做出相应, 那么该以太网上的路由会对其做出响应. (1) 以太网内部主机与…

网络层:构成超网(CIDR)

CIDR构成超网 CIDR消除了原来的传统的 A,B, C, D类地址, 使用了各种网络前缀来代替原来分类地址中的网络号和子网号, IP 地址由原来的三级分类又变成了两级分类. 其中网络号和子网号是一个随机的长度. 其中 CIDR 也可以使用 / 的形式来表示, 其中在 / 前面写上网络前缀的位数.…

网络层:网关协议

一. 网关 所谓的网管即就是之前路由器的名字, 即路由器和网关是一个东西 二. 内部网关协议 1. RIP协议 路由信息协议 RIP 是内部网关协议 IGP中最先得到的广泛使用的协议. 同时 RIP 是一种分布式基于距离向量的路由选择协议. RIP 协议要求网络中的每一个路由都必须维护自己…

网络基础: 浅析应用层一

应用层 1. http协议 在 http 中协议分为了协议方案名, 登录信息名, 服务器地址, 服务器端口号(http协议绑定的端口号), 文件类型, 查询的字符串, 片段标识位 2. http 请求协议格式 httpp 总共分为三大部分, 其中首行即就是第一部分, 分为三个区域, 第一去个区域是请方法, 第…

socket 编程篇六之IPO多路复用-select poll epoll

http://blog.csdn.net/woxiaohahaa/article/details/51498951 文章参考自&#xff1a;http://blog.csdn.net/tennysonsky/article/details/45745887&#xff08;秋叶原 — Mike VS 麦克《Linux系统编程——I/O多路复用select、poll、epoll的区别使用》&#xff09; 此外&#x…

浅谈传输层

1. 传输层的作用 在传输层中有两个特别重要的协议 TCP/UDP . 以快递员送快递为例说明这个问题吧. 在进行包裹传输的过程中快递员需要根据快递上的目的地址(目的计算机)来投递包裹(IP数据报), 加入在快递单上只写了收件人的所在地, 所在单位, 而只写了收件人的姓没有写收件人的…

I/O复用的 select poll和epoll的简单实现

http://www.cnblogs.com/wj9012/p/3876734.html 一个tcp的客户端服务器程序 服务器端不变&#xff0c;客户端通过I/O复用轮询键盘输入与socket输入&#xff08;接收客户端的信息&#xff09; 服务器端&#xff1a; 1 /*服务器:2 1.客户端关闭后&#xff0c;服务器再向客户端发送…

TCP相关代码

TCP 基础代码 //tcp_server.c #include<stdio.h> #include<error.h> #include<sys/types.h> #include<string.h> #include<unistd.h> #include<sys/socket.h> #include<netinet/in.h> #include <arpa/inet.h> #include<st…

几种并发服务器模型的实现:多线程,多进程,select,poll,epoll

http://www.cnblogs.com/wj9012/p/3879605.html 客户端使用select模型&#xff1a; 1 #include <stdio.h>2 #include <stdlib.h>3 #include <string.h>4 #include <errno.h>5 #include <sys/types.h>6 #include <sys/socket.h>7 #include …

linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)

http://blog.csdn.net/zzyoucan/article/details/9235685 信号&#xff1a;信号是unix中最古老的进程通信的一种方式&#xff0c;他是软件层次上对中断机制的模拟&#xff0c;是一种异步通信方式&#xff0c;信号可以实现用户空间进程和内核空间进程的交互&#xff0c;内核进程…

Linux epoll模型

http://www.cnblogs.com/venow/archive/2012/11/30/2790031.html 定义&#xff1a; epoll是Linux内核为处理大批句柄而作改进的poll&#xff0c;是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利…

Linux IO模式及 select、poll、epoll详解

https://segmentfault.com/a/1190000003063859 同步IO和异步IO&#xff0c;阻塞IO和非阻塞IO分别是什么&#xff0c;到底有什么区别&#xff1f;不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。一 概念…