linux 发明分页机制,Linux之分段机制和分页机制

linux是实时操作系统吗?

实时操作系统的设计原则:是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点——摘自“百度百科”。其设计原则——采用各种算法和策略,始终保证系统行为的可预测性(predictability)。可预测性是指在系统运行的任何时刻,在任何情况下,实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。

通用操作系统的设计原则:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的为用户请求提供服务。如对于整个系统来说,注重所有任务的平均响应时间而不关心单个任务的响应时间,对于某个单个任务来说,注重每次执行的平均响应时间而不关心某次特定执行的响应时间。(比如内存管理中的LRU替换策略,可以确保大部分的数据在较短的时间内被访问,减少平均访问时间;cache等也是遵循这个原则),所以linux属于通用操作系统

内存寻址

物理地址,虚拟地址和线性地址的区别是什么?

物理地址:插在主板上的内存条所提供的内存叫做物理内存

虚拟地址:将应用程序员看到的内存空间定义为虚拟地址空间,其中地址就叫做虚拟地址(逻辑地址),一般采用段:偏移量来描述

线性地址:指一段连续的,不分段的,范围从0-4G的地址空间,一个线性地址就是线性地址空间的一个绝对地址

段机制(虚拟地址转换成线性地址),“段”是虚拟地址空间的基本单位,一般情况下虚拟地址的表示方法为段基址:偏移量,但是有些平台不支持段机制,只支持分页机制,为了增加linux的可移植性,linux创造性的提出了段基址为0,此时偏移量 == 线性地址。所以linux中也保存了段机制,增加了可移植性。在linux中虚拟地址==线性地址。

分页机制(线性地址转换成物理地址)

页面

页表

把线性地址分为若干大小相等的片称为“页”

把物理地址空间分成与页大小相等的若干存储块称为“页面”

“页表”是把线性地址映射成物理地址的一种数据结构

大小为4K

大小为4K

大小为4Byte称为页表项

以32位的操作系统为例:二级分页中也目录的大小为4K,4K(1个页面)的页目录能—->找到4M大小的页表(1K个页)—->找到4G(1M个页)的地址

线性地址到物理地址的转换

80x86有四个32位的控制寄存器,它们是CR0,CR1,CR2,CR3

01255532c0b350884efa5dbdebb24569.png

下表是CR0的工作方式:

PG

PE

方式

0

0

实模式,8080操作

0

1

保护模式,但不允许分页

1

0

出错

1

1

允许分页的保护模式

* CR1是未定义的控制寄存器,供将来的处理器使用

* CR2是缺页线性地址寄存器,保存最后一次出现缺页的全32位线性地址

* CR3是页目录基址寄存器,保存页目录的物理地址,页目录总是放在以4K为单位的存储器边缘上,因此,其地址的低12位一直是0,即使写上内容也不会被理会。

017e8c766c89a6fe64c084cfd8dad60b.png

第一步,用32位的线性地址的高10位作为页目录项的索引,将它乘以4(因为1个页目录项占4个字节),与CR3中页目录的起始地址相加,获得相应的页目录项所在的内存地址

第二步:从这个页目录项地址开始读取32位页目录项,取出其高20位,再给低12位补0,形成的32位就是页表在内存的起始地址

第三步:用32位线性地址中的第21~12位作为页表中页表项的索引,将它乘以4(一个页表项占4个字节),与页表的起始地址相加,获得相应的页表项所在的内存地址

第四步:从这个地址开始读取32位页表项,取出其高20位,再将线性地址的第0~11位放在低12位,最终形成32位的页面物理地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值