`
kongweile
  • 浏览: 520991 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

分页和分段内存的区别

 
阅读更多

转:http://www.cnhonkerarmy.com/forum.php?mod=viewthread&tid=118503

今天看了一下linux0.01的内核开发。虽然仅有8000行的代码。但涉及的知识面还是有点多。但万事开头难嘛。现在和大家分享一下在网上看到的一篇内存分页和分段的区别。感觉看了这篇文章能对这方面有个较为直观的印象了。


一. 分页存储管理

1.基本思想

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

2. 分页存储管理的地址机构

15          12         11                  0

     页号P                 页内位移量W

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

若给定一个逻辑地址为A,页面大小为L,则

页号P=INT[A/L],页内地址W=A  MOD  L

3. 页表

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

页表:

页号 物理块号 存取控制   

  0        2    

  1       15(F)    

  2       14(E)    

  3       1  

4. 地址变换

(1) 程序执行时,从PCB中取出页表始址和页表长度(4),装入页表寄存器PTR。

(2)由分页地址变换机构将逻辑地址自动分成页号和页内地址。

例:11406D=0010|110010001110B=2C8EH

      页号为2,位移量为C8EH=3214D

或11406  DIV  4096=2

     11406  MOD  4096=3214

(3) 将页号与页表长度进行比较(2<4),若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

(4)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。

(5)取出页描述子得到该页的物理块号。  2       14(E)

(6) 对该页的存取控制进行检查。

(7)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。

例:0010|110010001101B

1110|110010001101B=EC8EH=60558D

或 14*4096+3214=60558D

5. 具有快表的地址变换机构

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



二.分段存储管理

1.基本思想

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

2. 分段存储方式的引入

方便编程

分段共享

分段保护

动态链接

动态增长

3. 分段地址结构

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

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

15           12   11                  0

       段号            段内位移量

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

4. 段表

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

0     1K     4096    

1     4K     17500    

2     2K     8192  

5. 地址变换

(1). 程序执行时,从PCB中取出段表始址和段表长度(3),装入段表寄存器。

(2). 由分段地址变换机构将逻辑地址自动分成段号和段内地址。

例:7310D=0001|110010001110B=1C8EH

段号为1,位移量为C8EH=3214D

(3). 将段号与段表长度进行比较(1<3),若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

(4). 将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。

(5). 取出段描述子得到该段的起始物理地址。1         4K             17500

(6). 检查段内位移量是否超出该段的段长(3214<4K),若超过,产生越界中断。

(7). 对该段的存取控制进行检查。

(8). 将该段基址和段内地址相加,得到实际的物理地址。

例:0001|110010001101B

起始地址17500D+段内地址3214D=20714D

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

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

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

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

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

四.段页式存储管理

1.基本思想:

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

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

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

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

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

2.地址变换的过程:

(1)程序执行时,从PCB中取出段表始址和段表长度,装入段表寄存器。

(2)由地址变换机构将逻辑地址自动分成段号、页号和页内地址。

(3)将段号与段表长度进行比较,若段号大于或等于段表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

(4)将段表始址与段号和段表项长度的乘积相加,便得到该段表项在段表中的位置。

(5)取出段描述子得到该段的页表始址和页表长度。

(6)将页号与页表长度进行比较,若页号大于或等于页表长度,则表示本次访问的地址已超越进程的地址空间,产生越界中断。

(7)将页表始址与页号和页表项长度的乘积相加,便得到该页表项在页表中的位置。

(8)取出页描述子得到该页的物理块号。

(9)对该页的存取控制进行检查。

(10)将物理块号送入物理地址寄存器中,再将有效地址寄存器中的页内地址直接送入物理地址寄存器的块内地址字段中,拼接得到实际的物理地址。



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

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

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

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


再粘贴一个帖子:

分页概念:逻辑空间分页,物理空间分块,页与块同样大,页连续块离散,用页号查页表,由硬件做转换,页面和内存块大小一般选为2的若干次幂(便于管理)
页表作用:实现从页号到物理地址的映射

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

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

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

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

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

分享到:
评论

相关推荐

    操作系统考试分页及分段的区别.doc

    操作系统中,分页存储管理和分段存储管理是两种不同的存储管理机制,它们之间的区别是操作系统考试中的一个重要知识点。下面,我们将对分页存储管理和分段存储管理进行详细的介绍,并对比它们之间的差异。 一、分页...

    4.4-4.5 分页、分段存储管理(1).4-4.5 分页、分段存储管理.pptx

    纯粹的分页和分区存储管理将程序视为与内存一致的线性结构,即使程序实际上为分段的二维逻辑结构,这样就导致内存中的程序不易按程序逻辑组成访问。 **解决问题的办法** - 采用分段存储管理,依照程序的逻辑结构...

    linux 分页分段机制及储存分析

    总的来说,Linux的分页分段机制是其内存管理的核心,通过这种方式,Linux能够提供高效、安全的内存服务,支持多任务并行运行,同时保证了各个进程之间的隔离性。理解和掌握这一机制对于任何深入研究Linux内核的人来...

    Linux的分段和分页机制

    - **存储器管理**:支持内存分段和分页机制,提高了内存的灵活性和安全性。 - **多任务支持**:允许同时运行多个任务,提高系统的并发性能。 - **权限级别**:提供4个权限级别,增强系统的安全性和稳定性。 总之,...

    基本分段和分页管理系统实现

    首先,让我们了解一下分段内存管理。分段是基于逻辑结构的内存分配方式,它将程序分解成多个独立的段,每个段代表一个逻辑单位,如数据、代码、堆栈等。在描述中提到的实现中,段式内存管理使用链表来存储段的信息。...

    linux x86内存管理之分段与分页

    Linux 操作系统在 x86 架构上实现了内存管理机制,主要通过分段和分页两种机制来管理内存。以下是对 Linux x86 内存管理之分段与分页的详细介绍。 逻辑地址、线性地址和物理地址 在 x86 架构上,内存地址可以分为...

    操作系统模拟:基本分页式的地址变换

    通过这个Java模拟项目,不仅可以加深对分页式内存管理的理解,还可以实践操作系统的内存管理机制,为后续的学习和开发打下坚实的基础。同时,这也是一个很好的练习,有助于提升编程能力和问题解决能力。

    Linux内存分页机制原理

    由于物理内存容量有限,Linux采用了两种内存管理机制来提高内存利用率:内存分段系统和分页系统。 - **内存分段系统(Segmentation System)**:通过将内存分为不同的段来管理内存。每个段都有自己的属性,如访问...

    liunx分段分页机制

    Linux操作系统在内存管理方面采用了分段和分页两种机制,以高效、安全地分配和管理内存资源。这两种机制是80386处理器在保护模式下工作的重要特性。 首先,让我们了解一下分段机制。80386处理器在保护模式下可以...

    计算机操作系统课件:第5章存储器管理02-分页分段.ppt

    在第五章中,我们将重点讨论三种离散分配方式:分页式、分段式和段页式存储管理。 首先,我们来看分页式存储管理。这种方法将进程的逻辑地址空间划分为固定大小的页,而物理内存则被划分为相同大小的块,称为内存块...

    基本分段存储管理系统

    而分页与分段结合的系统则可以同时利用分页的内存管理和分段的数据组织优势。 综上所述,基本分段存储管理系统是一种有效的内存管理方案,它通过段表和地址变换机构实现程序的逻辑地址到物理地址的映射,从而支持...

    操作系统lab-内存分配与分段分页机制

    First fit, best fit and worst fit 操作系统lab-内存分配与分段分页机制

    操作系统模拟器:具有内存管理和Round Robin Scheduler的OS模拟器

    操作系统模拟器 带有内存管理和Round Robin Scheduler的OS模拟器 用Java编写 由三个版本组成: Naive OS:是单个交互... 带有内存管理和调度程序的OS:是具有循环调度程序以及分页和分段内存管理的多批作业运行程序。

    内存管理--操作系统练习

    总的来说,这个项目提供了深入了解操作系统内存管理的机会,通过实践加深对分页、分段、虚拟内存、内存分配算法等核心概念的理解,并对比不同系统间的实现差异。这不仅有助于提升对操作系统原理的认识,也有助于解决...

    分页存储管理方式原理、分段存储管理方式原理、段页式存储管理方式原理

    本篇文章将深入探讨三种主要的存储管理方式:分页存储管理、分段存储管理和段页式存储管理,以及它们在Java编程环境中的应用。 ### 分页存储管理 分页存储管理方式是将内存分割成固定大小的块,称为“页”(Page)...

    操作系统及软件工程1、 多道程序技术的特点在分页式存储管理中,什么叫快表,说明其工作原理和过程,画出具有快表的地址变换机构。

    5、 在存储管理中分页与分段的主要区别是什么?分页与分段两种方法中,哪个更易于实现共享,为什么? 6、 在分页式存储管理中,什么叫快表,说明其工作原理和过程,画出具有快表的地址变换机构。 7、 系统抖动 8、 ...

    The_Holy_Book_of_X86:x86体系结构,汇编,内存管理,分页,分段,SMM,BIOS的简单指南。

    - Memory Management:广义的内存管理,包括了分页、分段等各种内存组织和管理策略。 - Virtual Memory:虚拟内存,让每个进程都有自己独立的地址空间,且能使用超出物理内存的地址。 - x86-32:32位的x86架构,与64...

    最强悍的操作系统学习资料

    全面操作系统资料!课程教授指导 专业:04级计算机专业 目的:确定本课程(操作系统)要...重点: 四种页替换算法,使用分页、分段和分页分段相结合的三种虚拟内存技术 难点:虚拟内存的硬件和控制结构,四种页替换算法

    模拟设计段式存储管理的分配与回收

    - 通过合理的内存调整策略,如动态重定位、分页和段的合并,可以缓解碎片问题。 5. **安全性与并发** - **权限控制**:段式存储管理可以设置段的读写权限,防止非法访问。 - **并发执行**:多道程序环境下,段式...

    超大xml解析导入数据库、千万级别大数据导出到Excel 实现核心高性能、分段、分页循环读取-写入-清空内存 解决传统方式的超大数据导致内存溢出.zip

    实现核心高性能、分段、分页循环读取-写入-清空内存。解决传统方式的超大数据导致内存溢出大XML转换数据库超大xml解析导入数据库、千万级别大数据导出到Excel。实现核心高性能、分段、分页循环读取-写入-清空。解决...

Global site tag (gtag.js) - Google Analytics