
大家好,感谢大家的关注,今天继续分享!
日久见人心不古,路遥知马力不足!
今天来聊聊段描述符表,这是操作系统为了配合 CPU 保护模式而建立的一张表,类似的表在操作系统里非常的多。CRUD 不单单是对数据库,其实无处不在~!
0x01:段的产生
Intel 推出的第一款个人 CPU 是 4004,它是 4 位的处理器;后来又推出的 8080 是 8 位的处理器;那时候访问内存就直接是物理内存,也没有段的概念,不过这两 CPU 我都没有接触过。
后来有了 8086 的 16 位 CPU,就有了段这个概念。当然,它也不是凭空出现的,也是有缘由的。8086 的寄存器是 16 位的,而地址总线是 20 位的。
用 16 位的寄存器去访问 20 位的地址是有难度的。16 位的寄存器只能访问 2 的 16 次方的地址,也就是 64K;地址总线是 20 位,那么就是 2 的 20 次方,就是 1M 的范围。
为了让 16 位的寄存器能访问 20 位的地址,就有了 段 这个概念,并且在寄存器中,有了 段 寄存器,当然也是 16 位的;配合段寄存器和段内偏移,通过相应的运算,就可以完成 20 位的内存访问。具体方式为:段寄存器左移四位加上指令指针的段内偏移就构成了 20 位的物理地址了。
这样看段的概念就不是凭空产生的了,是因为 CPU 的寄存器和地址总线的位数不同而产生的。
0x02:段描述符
在 8086 时代,段基址是由段寄存器指定的,比如代码由 CS 指定,数据段由 DS 指定。只要通过改变段寄存器的值,那么就可以访问到内存的任意位置了,这样就产生了安全的问题,内存随便访问了,搞不好会不会破坏掉系统的数据呢?
因此,在 32 位的 80386 时就有了新的概念,叫做“保护模式”;而对于早期的 8086 可以直接操作任意内存地址的方式称为“实模式”。
在 32 位的 CPU 下,段寄存器仍然是 16 位的,而且仍然兼容实模式的工作方式。
如果要使用保护模式的话,那么就不能使用 16 位的段基址左移四位加上段内偏移的方式去访问内存了。因为在这个时候,段不但指定一个基址,而且有了更多的属性,从而对内存的访问有了一定保护。既然段有了这么多的属性,那么 16 位的段寄存器就显得有些短了。
此时,段寄存器中就不再保存段基址了,而是保存了段的索引,所以段寄存器改名叫“段选择子”。
而真正的段则需要用 64 位的结构体来进行定义和描述,所以出现一个“段描述符”的概念。一个段描述符可以描述一个段,系统中有多个段,那么就有多个段描述符,就构成了段描述符表。那么段选择子其实就是段描述符表的下标。通过段选择子来索引段描述符,从而获取段的相关信息与属性。
下图是段描述符的定义,以及各个属性的描述。

段描述符指定了段的起始位置,段的长度,段的各种属性之类的,比如特权级、粒度等。
0x03:64 位模式下的段描述符
到 64 位模式下,也就是 64 位的 CPU 下的 64 位模式,段描述符还是上面的样子,还是使用 64 位来进行描述的。但是很多位都已经不在使用了,比如段的起始位置,段的长度,都不使用了,但是段的属性还是使用的。在上图中的 L 位,也就是高 32 位的第 21 位,在 32 位模式时,它始终是 0 值,在 64 位模式下,此处变成了 1 值。
属性中的 长模式、存在位、特权级、描述符类型和段类型还继续使用,其他位都置为 0 了。
0x04:段描述符表
操作系统启动时,为了配合 CPU 的保护模式,由操作系统建立段描述符表,CPU 为了不频繁的访问段描述符表,它会将其缓存到高速缓存当中。然后,由段选择子来决定程序使用的是哪个段。
创建段描述符表,相当于建表,段选择子是段描述符表的索引,相当于查表。在操作系统中,类似这样的表非常的多,其实操作系统本身也算的上是一个 MIS 系统,只是它管理的是支持操作系统运行的数据,进程、线程的管理,不也是对应的内核数据结构构成的表吗?因此,看来什么地方都离不开 CRUD!其实 CRUD 是一个思路,不局限在数据库中,只要是对数据的管理,都会用得上。
不知道对于段和段描述符是否描述的清楚,不过,都看完了,那就点个赞,支持一下我再走吧!
1. 工业互联网超级干货合集
https://pan.quark.cn/s/ca9487a6f1b0
2. 超赞的40个知识模型分享给你,个个经典总有启发
https://pan.quark.cn/s/f72d47a58abe
3. 国家数据局的首批50个数字中国建设典型案例。反映了近年来数字中国建设的实践和成效,以供学习借鉴
https://pan.quark.cn/s/48d165737267
4. 狂人马斯克分享的“50个思维陷阱”据说是所有人都应该知道的50种认知偏差
https://pan.quark.cn/s/2b6f9d5b65f8
5. OKR 工作法超全合集
https://pan.quark.cn/s/c51ad1c3bb5e