分页与分段

简介:

一,分页

    1,基本思想

     用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块(称为"帧"),页和块的大小相等。可将用户程序的任一页放在内存的任一块中,实现了离散分配。

    2,地址结构

    页号  -  页内位移量

    页号4位,每个作业最多2^4 = 16页,表示页号从0000~1111(2^4-1),页内位移量的位数表示页的大小,若页内位移量的大小是12位则2^12=4k,即页的大小为4k,页内地址为000000000000~111111111111

    3,页表

    分页系统中允许将进程的每一页离散的存储在任一物理块中,为了能在内存中找到每个页对应的物理块,,系统为每个页面建立一张页面映射表,即页表。页表的作用是实现从页号到物理块号的映射。

    4,块表

    分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为“联想存储器”或“快表”,存放当前访问的页表项。

二,分段

    1,基本思想

    将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

    2,地址结构

作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。例程序段、数据段等。每个段都从0开始编址,并采用一段连续的地址空间。

段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。整个作业的地址空间是二维的。

段号4位,每个作业最多24=16段,表示段号从0000~1111(24-1);段内位移量12位,212=4k,表示每段的段内地址最大为4K(各段长度不同),从000000000000~111111111111

    3段表

段号 段长 起始地址 存取控制   

0     1K     4096    

1     4K     17500    

2     2K     8192  

三.分页与分段的主要区别

分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:

(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.

(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.

(3)分页的作业地址空间是一维的.分段的地址空间是二维的.

段页式存储管理

1.基本思想:

分页系统能有效地提高内存的利用率,而分段系统能反映程序的逻辑结构,便于段的共享与保护,将分页与分段两种存储方式结合起来,就形成了段页式存储管理方式。

在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每段分成若干个大小相等的页。对于主存空间也分成大小相等的页,主存的分配以页为单位。

段页式系统中,作业的地址结构包含三部分的内容:段号      页号       页内位移量

程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换机构将段内位移量分解为页号和页内位移量。

为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块号。

五、在网上找到了一个比较形象的比喻,挺不错的,呵呵,列出来如下:

 

打个比方,比如说你去听课,带了一个纸质笔记本做笔记。笔记本有100张纸,课程有语文、数学、英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择。


第一种是,你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记,最后在第一张纸做个列表,记录着三门笔记各自的范围。这就是分段管理,第一张纸叫段表。


第二种是,你从第二张纸开始做笔记,各种课的笔记是连在一起的:第2张纸是数学,第3张是语文,第4张英语……最后呢,你在第一张纸做了一个目录,记录着语文笔记在第3、7、14、15张纸……,数学笔记在第2、6、8、9、11……,英语笔记在第4、5、12……。这就是分页管理,第一张纸叫页表。你要复习哪一门课,就到页表里查寻相关的纸的编号,然后翻到那一页去复习

请求分页的基本思想
1.请求分页=分页+请求
2.请求分页提供虚拟存储器
3.页表项中的状态位指示该页面是否在内存,若不在,则产生一个缺页中断

页面置换:把一个页面从内存调换到磁盘的对换区中
抖动:在具有虚存的计算机中,由于频繁的调页活动使访问磁盘的次数过多而引起的系统效率降低的一种现象
页面走向:

常用的页面置换算法:
先进先出法:(置换次数比较多)
最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现)
最近最少使用置换法(LRU):当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以淘汰
最近未使用置换法(NUR):是LRU算法的近似方法,选择在最近一段时间里未被访问过的页面予以淘汰

段式管理的基本思想是:把程序按内容或过程(函数)关系分成段,每个段有自己的名字(编号)。一个作业或进程的虚拟存储空间都对应于一个由段号(段号:段内偏移)构成的二维地址,编译程序在编译链接过程中就直接形成这样的二维地址形式。段式管理以段为单位分配内存,然后通过地址变换将段式虚拟地址转换成实际的内存物理地址。页式管理一样,段式管理也采用只把那些经常访问的段驻留内存,而把那些将来一段时间不被访问的段放入外存,待需要时自动调入的方法实现虚拟存储器。

段式管理把一个进程的虚拟地址空间设计成二维结构,即段号(段号:段内偏移)的形式。前面己经谈到,与页式管理编译程序产生一维连续地址不同,段式管理系统中的编译程序编译形成多个段及段的名字或编号,各个段号之间无顺序关系。与页式管理页长度相同不一样,段的长度是不同的,每个段定义一组逻辑上完整的程序或数据。例如,在DOS操作系统中,一个程序内部被分为了正文段、数据段、堆栈段等。每个段是一个首地址为O并连续的一维线性空间

本文转自   Taxing祥   51CTO博客,原文链接:http://blog.51cto.com/12118369/1964957

相关文章
|
人工智能 前端开发 JavaScript
房屋租赁|基于JavaWeb实现一个房屋租赁平台系统
本系统基于JavaWeb开发实现了一个在线房屋租赁平台系统。系统前端用户实现用户注册登录、查看房源信息、在线租赁、签定合同、在线留言、查看新闻等相关功能。后台管理员主要实现对相关信息的基本数据管理,完成用户管理、房源管理、房型管理、新闻管理、租赁管理、合同管理、系统管理、轮播图和友情链接管理等。#计算机毕业设计
745 0
|
11月前
|
安全 Java API
【JavaEE】——CAS指令和ABA问题
CAS指令,伪代码,原子类,CAS中ABA问题,CAS底层分析
|
Web App开发
【自主探索】发现答案:为何自己寻找解答比直接获取更有效?
这篇文章探讨了自主探索问题答案的重要性,并通过解决Edge浏览器无头模式配置的问题来说明这一点,同时提醒读者要勇于怀疑和验证每个答案,包括自己的答案。
189 1
|
关系型数据库 MySQL Linux
【Linux】安装Mysql(附加service mysql启动失败 提示unit not found 解决办法)
【Linux】安装Mysql(附加service mysql启动失败 提示unit not found 解决办法)
1092 0
|
存储 分布式计算 Apache
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper 的架构通过冗余服务实现高可用性。 本文主要讲解: 1. 如何在Windows环境下搭建和配置Zookeeper 2. Zookeeper配置文件配置与解析 3. 常见错误及解决方案
5689 1
Windows环境下安装和配置Zookeeper环境及常见错误解决方案
|
分布式计算 Hadoop 大数据
数据工程师必须掌握的7个大数据实战项目
值得收藏,数据工程师必须掌握的7个大数据实战项目
8144 1
数据工程师必须掌握的7个大数据实战项目
|
Java 调度
用Java代码打造每日任务系统
用Java代码打造每日任务系统
561 0
|
Dragonfly Kubernetes 调度
P2P镜像分发:Harbor+Dragonfly优化k8s集群镜像拉取速度(二)
本篇文章则分享在大规模的kubernetes集群中,通过Harbor与Dragonfly来优化镜像的拉取速度。
2140 0
|
Linux
Linux中执行cp命令复制时候出现错误及解决方法
Linux中执行cp命令复制时候出现错误及解决方法
1555 2
|
机器人 Python
利用itchat搭建微信机器人详解(附三个实用示例)(上)
2011年1月21日,微信推出第一个正式版本,到现在已有7个年头。从一开始的不被看到好,到现在的用户量超10亿,大众的日常生活越来越离不开微信。人生苦短我用Python,有没有办法通过Python来对我们使用微信提供一些便利呢? 答案肯定是有的,在Github上有一个基于微信网页版接口微信开源库:itchat,通过几十行的代码就能轻松实现一个微信机器人。本章我们就来了解学习这个库,然后通过三个实用案例来帮大家玩转这个库。
2619 0