从硬件出发,浅谈操作系统的段机制与页机制【转】

简介: 转自:https://www.jianshu.com/p/f4a909f3fd2e 我们写一个程序,经过编译之后会变成一堆的指令。操作系统在执行这个程序的时候,也正是执行这堆指令。 指令可以是 取数据的指令 或 取下一条被执行指令 的指令。

转自:https://www.jianshu.com/p/f4a909f3fd2e

我们写一个程序,经过编译之后会变成一堆的指令。操作系统在执行这个程序的时候,也正是执行这堆指令。

指令可以是 取数据的指令取下一条被执行指令 的指令。但无论是什么指令,都会进行内存的访问和寻址。就像是我们必须找到东西放在哪里,我们才能去使用它。

那操作系统怎样帮我们去寻址呢?答案是 内存寻址涉及到内存的 段机制 和 页机制

让我们从硬件的发展史的角度来看段机制。

1971年,Intel 发布了第一款的微处理器4004。它是一个4位的微处理器。

1972年,Intel 发布了第一款八位处理器8008。它是一个8位的微处理器,地址总线(address bus)是14位的,就是说可以访问到16K的内存空间。

1974年4月,Intel 发布了第二款八位处理器8080。它是8008是增强版,增加了几个累加器,使它可以访问16位(8+8)的内存地址,即64K 范围内的地址空间。而且它也是公认的“第一款真正可用的微处理器”。8080的架构对8086产生了很大的影响,并且为 x86系列奠定了基础。

至此,内存寻址访问仍是绝对地址。就是指令的地址即物理地址,中间没有任何的转换。

1976年开始设计,1978年中旬Intel 发布了8086。标志了x86王朝的开始。它是一款16位的微处理器,却被设计成可以访问1MB 的内存(即20位的地址空间)。问题就产生了,16位的 ALU怎么去取20位的地址呢?因此,的概念 在8086身上被引入了。

段的引入是解决“ 地址总线的宽度一般要大于寄存器的宽度 ”这个问题。

8086的分段寻址,是指一个物理地址由段地址(segment selector)与偏移量(offset)两部分组成,长度各是16比特。其中段地址左移4位(即乘以16)与偏移量相加即为物理地址。例如,06EFh:1234h,表示段地址为06EFh,偏移量为1234h,物理地址为06EF0h + 1234h = 08124h。在计算物理地址时如果发生上溢出,8086处理器舍弃进位。例如,FFFFh:0010h所对应的物理地址为00000h.

这种分段寻址,即 段地址+偏移量 的做法,在以80286开始之后会被称为 实模式

1982年,Intel 的80286面世了。它是第一款采用 保护模式 的 x86微处理器。地址总线增加到24位使它可以访问到16M 的内存空间。即使是可访的内存空间增加了,但它的分段大小依然是64K,程序的规模受限,注定286受不到更多的喜爱。

所以,286很快就被80386所替代了。

1985年,Intel 发布了80386。一个拥有32位的微处理器。并且地址总数(address bus)也是32位的,寻址能力大幅提高到4G。同时,为了向前兼容8086,386中既有保护模式,又有实模式。并且在保护模式下,分段的大小可以到达4G(2**32)。

现在有必要简单交代一下,实模式 与 保护模式 分别是什么了。

实模式: 是 段地址+偏移量 的方式,得到物理地址,进而寻址。

保护模式: 不允许通过段寄存器取值得到段的起始地址,而是把虚拟地址转进一个 MMU 的硬件,经过额外的转换和检查,进而得到一个物理地址。(如下图)。其中的额外检查就可以起到例如保护某段数据的作用。

图1:MMU 转换虚拟地址为物理地址

是时候来一个简单的总结了。

从4004到386,先是直接物理地址寻址,然后是 实模式 形式的寻址,最后变为 保护模式 形式寻址。

最重要的变化是从“实模式”向“保护模式”的转变。这背后实际也是处理器的系统体系结构的变化。虽然386往后的CPU在各方面都有改进,但由于在本质上的结构没有大变化,所以386往后的处理器都统称80x86

 

我们还需要解决小内存运行大作业的问题——页机制的引入

段机制抛开了实际物理内存的大小,从抽象层面提供给开发人员更大的线性空间进行程序开发。但物理内存如果不足时的情况仍需解决。

分页,这时就被提出了。分页很好地解决了小内存的问题。

它通过将 物理内存空间 和 线性地址空间 分成若干相等的页。(一般都为4KB)。这样整个程序就不需要连续存放在物理内存中,更可以按需把页面调进内存,而不需要把整个线性地址空间加载到内存中。正如你将会看到的,这种机制十分巧妙又实用。

要实现分页,需要讨论的问题比分段要多,这里不过多累赘,有兴趣可以移步到《操作系统学习笔记-储存管理》这篇文章阅读。

最后

本文只是一种浅述,没有对段机制和页机制进行深入。只是从历史的角度出发,整理后扼要地介绍这两个机制。

如果顺着这个方向进一步找书和资料会发现 Intel 的设计是越来越细致和周全的。而实际在各种不同处理器上开发操作系统又是有各种的考虑和取舍的。

例如 Linux,它就没有用 Intel 的段机制,而是将其绕过。毕竟不是每个品牌的处理器都支持段的。



作者:wacvk
链接:https://www.jianshu.com/p/f4a909f3fd2e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
25天前
|
存储 消息中间件 算法
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。
|
18天前
|
安全 Linux 数据安全/隐私保护
深入探索Linux操作系统的多用户管理机制
【10月更文挑战第21天】 本文将详细解析Linux操作系统中的多用户管理机制,包括用户账户的创建与管理、权限控制以及用户组的概念和应用。通过具体实例和命令操作,帮助读者理解并掌握Linux在多用户环境下如何实现有效的资源分配和安全管理。
|
2月前
|
存储 资源调度 算法
操作系统的心脏:深入理解内核架构与机制####
【10月更文挑战第16天】 本文旨在揭开操作系统最神秘的面纱——内核,通过剖析其架构设计与关键机制,引领读者一窥究竟。在这篇探索之旅中,我们将深入浅出地讨论内核的基本构成、进程管理的智慧、内存分配的策略,以及那至关重要的系统调用接口,揭示它们是如何协同工作,支撑起现代计算机系统的高效运行。这既是一次技术的深潜,也是对“看不见的手”调控数字世界的深刻理解。 ####
49 3
|
1月前
|
缓存 调度
操作系统的心脏:深入理解内核机制
【10月更文挑战第26天】 在数字化时代,操作系统是计算机系统不可或缺的核心。本文旨在揭示操作系统内核的神秘面纱,探讨其工作原理和重要性。通过深入浅出的语言,我们将一窥究竟,了解内核如何协调硬件与软件,确保计算机系统的稳定运行。
|
3月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
2月前
|
消息中间件 存储 网络协议
操作系统的心脏:深入理解进程间通信(IPC)机制
在现代计算机系统中,操作系统扮演着至关重要的角色,而进程间通信(IPC)作为操作系统的核心功能之一,极大地影响着系统的性能和稳定性。本文将通过浅显易懂的语言,详细探讨进程间通信的基本原理、主要类型及其实际应用,旨在为读者提供一个清晰且全面的理解和认识。 ##
153 1
|
3月前
|
人工智能 Kubernetes 算法
探究操作系统的心脏——进程管理机制
本文深入探讨了操作系统核心组件之一——进程管理机制。进程管理作为操作系统的基础功能,负责协调和控制计算机系统内运行的所有进程,确保系统资源的有效分配与利用。通过详细介绍进程的定义、状态转换、调度算法以及多线程技术等关键概念,本文揭示了进程管理如何支撑起整个操作系统的运行框架,并保障用户任务的顺利执行。同时,文章还讨论了现代操作系统在进程管理方面的创新与挑战,为读者提供了一个全面而深入的理解视角。
49 1
|
3月前
|
算法 调度 UED
探索操作系统的心脏——进程管理机制
本文将深入探讨操作系统中至关重要的部分——进程管理机制。我们将从基本概念入手,逐步解析进程的定义、状态及其在操作系统中的角色。随后,我们会详细讨论进程调度算法,包括先来先服务、短作业优先、时间片轮转和优先级调度等,分析它们的优势与应用情景。最后,通过实例展示这些算法在实际系统运作中的运用,帮助读者更好地理解进程管理的核心原理。
|
3月前
|
消息中间件 Python
深入理解操作系统的进程间通信(IPC)机制
本文将探讨操作系统中的核心概念——进程间通信(IPC),揭示其在系统运作中的重要性及实现方式。通过分析不同类型的IPC手段,如管道、信号、共享内存等,帮助读者更好地理解操作系统的内部工作原理及其在实际应用中的表现。
166 1
|
2月前
|
缓存 Java C语言
MacOS环境-手写操作系统-12-键盘中断机制
MacOS环境-手写操作系统-12-键盘中断机制为键盘建立中断机制
21 0