Linux 存储管理3——地址映射全过程

简介: 假定一条程序已经运行,整个映射机制都已建立好,并且cpu正在执行main()中的:call 08048368 这条指令,要转移到虚拟地址0x08048368去。接下来我们分析整个地址映射的过程: 首先是段式映射阶段。

假定一条程序已经运行,整个映射机制都已建立好,并且cpu正在执行main()中的:call 08048368 这条指令,要转移到虚拟地址0x08048368去。接下来我们分析整个地址映射的过程:

首先是段式映射阶段。由于地址0x08048368是一个程序的入口,更重要的是在执行的过程中是由cpu中的“指令指针寄存器(用于存储下次将要执行的指令在代码段中的偏移量)”EIP所指向的代码段中。因此i386 CPU使用代码段寄存器CS的当前值来作为段式映射的“选择码”,也就是用它作为在段描述表中的下标。

什么是段描述表呢?什么是全局段描述表GDT?什么是局部段描述表LDT?

我们先回顾一下保护模式下段寄存器的格式:


也就是说,bit2(TI=Table Indicator:指示器)为0时表示用GDT,为1时表示用LDT。intel的设计意图是内核用GDT而各个进程都用其自己的LDT,最后两位RPL为所要求的特权级别,分为4个级别,0为最高级。(一般内核为0级,用户未3级)

现在可以来看看CS的内容了,内核在建立一个进程时都要将其段寄存器设置好,有关代码如下:


这里reg->xds 是段寄存器DS的映像,一次类推,这里可以看到一个有趣的事,就是除了CS被置成USER_CS之外,其他所有的段寄存器都设置成USER_DS,你看,比如堆栈寄存器SS,也被设置成了USER_DS,这说明了什么呢?这说明:虽然Intel的意图是将一个进程映像分成代码段、数据段、和堆栈段,但是,linux内核却并不买这个帐,在linux中堆栈段和数据段式不分的。

上面说寄存器的映像,被设置成了USER_CS和USER_DS到底是什么:


也就是说,Linux内核中只使用四种不同的段寄存器数值,两种用于内核本身,两种用于所有的进程。现在我们讲这四种数值用二进制展开并与段寄存器的格式相对照:


首先TI都是0,也就是说全部使用GDT。这就与Intel的设计意图不一致了。实际上,在Linux内核中基本上不使用局部段描述表LDT。LDT只是在VM86模式中运行wine以及其它在Linux上模拟Windows软件或DOS软件的程序中才使用。

再看RPL,只用了0和3两级,内核为0级而用户(进程)为3级。

回到我们的程序中。我们的程序显然不是内核程序,所以在进程的用户空间运行,内核在调度该进程进入运行时,把CS设置成_USER_CS即0x23。所以,CPU以4为下标,从全局扫描表GDT中找对应的段描述项








相关文章
|
3月前
|
存储 关系型数据库 MySQL
Linux 安装 mysql 及配置存储位置
Linux 安装 mysql 及配置存储位置
103 3
|
2月前
|
存储 安全 Linux
在Linux中,日志文件通常存储在哪些目录?
在Linux中,日志文件通常存储在哪些目录?
|
2月前
|
存储 网络协议 搜索推荐
在Linux中,如何配置和管理虚拟机的网络和存储?
在Linux中,如何配置和管理虚拟机的网络和存储?
|
2月前
|
存储 Linux 文件存储
Linux 存储管理 (二)创建文件系统
【8月更文挑战第13天】使用`fdisk`创建分区后,通过`mkfs`命令创建文件系统,支持多种类型如ext4、XFS等。创建前确认分区无重要数据,示例命令为`mkfs.ext4 /dev/sdc1`。之后使用`mount`命令将分区挂载至指定目录,如`mount /dev/sdc1 /w`。为实现开机自动挂载,可在`/etc/fstab`文件中添加相应条目。这些步骤有助于高效管理和利用存储空间。
55 2
|
2月前
|
存储 运维 安全
Linux中,如何配置iSCSI存储?
Linux中,如何配置iSCSI存储?
|
2月前
|
存储 安全 Linux
Linux存储安全:数据加密的实践与策略
【8月更文挑战第19天】数据加密是Linux存储安全的基石之一。通过使用LUKS进行磁盘加密和使用GnuPG进行文件加密,可以显著提高数据的安全性。
55 0
|
2月前
|
存储 监控 安全
Linux存储安全:访问控制的实践与策略
【8月更文挑战第18天】Linux存储安全:访问控制的实践与策略
41 0
|
2月前
|
存储 安全 Linux
Linux存储安全:深入实践与案例分析
【8月更文挑战第18天】Linux存储安全是一个多层次、多维度的问题,需要从物理安全、访问控制、数据加密、审计监控、系统更新、备份策略等多个方面综合考虑。通过本文介绍的具体措施和案例代码,读者可以更好地理解如何在Linux系统中实施存储安全措施。安全是一个持续的过程,需要不断地评估、更新和改进策略。
68 0
|
2月前
|
网络协议 Ubuntu Linux
会Linux系统上配IPv6地址的网工,那真是老6了!
会Linux系统上配IPv6地址的网工,那真是老6了!
|
2月前
|
存储 数据管理 Linux
Linux 存储管理 (一)存储方式
【8月更文挑战第13天】在Linux中,存储管理方式多样,包括文件系统如Ext4、XFS,支持高效数据管理;磁盘分区实现数据隔离;逻辑卷管理(LVM)提供灵活的存储池;网络文件系统(NFS)及网络附加存储(NAS)实现远程文件共享;存储区域网络(SAN)提供高性能块级访问;RAID技术增强数据冗余与读写速度。分区类型含主分区、扩展分区、逻辑分区及引导分区,利用`lsblk`可查看磁盘信息,而`fdisk`则用于创建与管理分区。这些技术可根据需求灵活组合,优化存储效率与安全性。
31 0
下一篇
无影云桌面