Blog

LDT描述符

Content #

尽管局部描述符表(LDT)和全局描述符表(GDT)都用来存放各种描述符,比如段描述符,但这掩盖不了它们也是内存段的事实。简单地说,它们也是段。但是,因为它们用于系统管理,故称为系统的段或系统段。

全局描述符表(GDT)是唯一的,整个系统中只有一个,所以只需要用GDTR 寄存器存放其线性基地址和段界限即可;但LDT 不同,每个任务一个,所以,为了追踪它们,处理器要求在GDT 中安装每个LDT 的描述符。当要使用这些LDT 时,可以用它们的选择子来访问GDT,将LDT 描述符加载到LDTR 寄存器。在一些人看来,这个理由很牵强,这么做也很别扭。但是,如果不这样,处理器将没有机会来做存储器和特权级的保护工作。

如图所示,这是LDT 描述符的格式。

LDT 本身也是一种特殊的段,最大尺寸是64KB。段基地址指示LDT 在内存中的起始地址,段界限指示LDT 的范围;描述符的G 位是粒度位,适用于LDT 描述符,以表示LDT 的界限值是以字节为单位,还是以4KB 为单位。即使是以4KB 为单位,它也不能超过64KB 的大小。 D 位(或者叫B 位)和L 位对LDT 描述符来说没有意义,固定为0。 AVL 和P 位的含义和存储器的段描述符相同。 LDT 描述符中的S 位固定为0,表示系统的段描述符或者门描述符,以相对于存储器的段描述符(S=1),因为LDT 描述符属于系统的段描述符。

在描述符为系统的段描述符时,即,在S=0 的前提下,TYPE 字段为0010(二进制)表明这是一个LDT 描述符。因此,传送到ECX 寄存器的属性值0x00408200 表示这是一个LDT 描述符,描述符特权级DPL 为0,其他无关的位都已清零。

From #

TSS描述符

Content #

和局部描述符表(LDT)一样,也必须在GDT 中安装TSS 的描述符。这样做,一方面是为了对TSS 进行段和特权级的检查;另一方面,也是执行任务切换的需要。当call far 和jmp far 指令的操作数是TSS 描述符选择子时,处理器执行任务切换操作。

TSS 描述符的格式,和 LDT描述符差不多,除了TYPE 位。TSS 描述符中的B 位是“忙”位(Busy)。在任务刚刚创建的时候,它应该为二进制的1001,即,B 位是0,表明任务不忙。当任务开始执行时,或者处于挂起状态(临时被中断执行)时,由处理器固件把B 位置1。

任务是不可重入的。就是说,在多任务环境中,如果一个任务是当前任务,它可以切换到其他任务,但不能从自己切换到自己。在TSS 描述符中设置B 位,并由处理器固件进行管理,可以防止这种情况的发生。

From #

任务状态段TSS的格式

Intel CPU体系中的各个总线

Content #

CPU 和内存以及高速缓存通信的总线,通常有两种总线,称为双独立总线(Dual Independent Bus,缩写为 DIB)。

  1. 快速的本地总线(Local Bus)用来和高速缓存通信。也叫作后端总线(Back-side Bus)。
  2. 速度相对较慢的前端总线(Front-side Bus)。用来和主内存以及输入输出设备通信的。也叫处理器总线(Processor Bus)、内存总线(Memory Bus)。

除了前端总线呢,我们常常还会听到 PCI 总线、I/O 总线或者系统总线(System Bus)。看到这么多总线的名字,你是不是已经有点晕了。这些名词确实容易混为一谈。其实各种总线的命名一直都很混乱,我们不如直接来看一看 CPU 的硬件架构图。对照图来看,一切问题就都清楚了。

CPU 里面的北桥芯片,把我们上面说的前端总线,一分为二,变成了三个总线。

我们的前端总线,其实就是系统总线。CPU 里面的内存接口,直接和系统总线通信,然后系统总线再接入一个 I/O 桥接器(I/O Bridge)。这个 I/O 桥接器,一边接入了我们的内存总线,使得我们的 CPU 和内存通信;另一边呢,又接入了一个 I/O 总线,用来连接 I/O 设备。

事实上,真实的计算机里,这个总线层面拆分得更细。根据不同的设备,还会分成独立的 PCI 总线、ISA 总线等等。

在物理层面,其实我们完全可以把总线看作一组“电线”。

Viewpoints #

From #

42 | 总线:计算机内部的高速公路

cook:Vim

Content #

format json #

:%!jq

Open a vertical terminal #

:vert term

指针数组与指向数组的指针

Content #

下面两个C++的声明有何区别?

int *matrix[10];
int (*matrix)[10];

Answer #

int *matrix[10]; // array of ten pointers
int (*matrix)[10]; // pointer to an array of ten ints

From #

净资产收益率(ROE, Return on Equity)

Content #

净资产收益率(ROE, Return on Equity)指的是什么?

净资产收益率 = 净利润 / 净资产

​​净资产​​:股东权益(总资产 - 总负债),通常取期初与期末的平均值。

接球手与正负反馈

Content #

控制论阐述了反馈的机制原理(Power,1973),并借助垒球外场接球手的例子进行了类比。这个类比是怎样的?正反馈与负反馈又是如何区分的?

比赛中,接球手聚精会神地盯着球在空中的飞行轨迹,同时不断调整手的位置,确保球会落入手中。接球手眼手间的协调就是在不断收集并利用反馈的过程。按照控制论的定义,信息型反馈必定是负反馈,因为只有负反馈能表明现状与目标之间的差距,才具有信息量(请注意,负反馈并不代表惩罚)。另一方面,正反馈则表明一切进展顺利,没什么需要改变的,自然也就不需要学习新事物或改变现有行为。在上面接球手的例子中,正反馈就意味着球会稳稳地落入手中,手保持不动即可。

From #

习惯性思维创造了周围的世界

Content #

我们对周围环境和自己的习惯性思维,创造了自己周围的世界。2005年,作家戴维·福斯特·华莱士在对一群毕业生演讲时说:“两条小鱼在游泳,恰好看到一条大鱼在往另一个方向游,这条大鱼对这群小鱼点头致意说,‘早上好,孩子们,今天的水怎样?’两条小鱼继续往前游了一点儿,最后其中一条看着另一条说,‘水是什么东西啊?’”

水就是习惯,我们每天都被不假思索的选择和无形的决定包围着,而你只要看看它们,你就会发现它们。

威廉·詹姆斯这一辈子一直在描写习惯以及习惯在创造幸福和实现成功中所扮演的核心角色。他最终在他的著作《心理学原理》中用一整个章节讨论了这一主题。他说水是习惯运作方式最贴切的类比。水“先是自己冲出一条路,之后这条水路变得越来越宽,越来越深,在停止流动之后,水会回到原来的地方,重新开始流动之后,这条水路又会沿着原来的轨迹出现”。

你现在知道应该如何改变自己的习惯了吧,如今你已经有了可以让自己自由的力量!

From #

威廉·詹姆斯利用习惯改变自己

Content #

威廉·詹姆斯说过:“我们的生活在某种程度上有其固定的形态,但却是习惯的集合体。有现实生活的习惯,感情生活的习惯,还有思维习惯。这些习惯系统化地构成了我们的喜怒哀乐,让我们走向自己的命运。不管最终命运如何,我们都无法抗拒。”

1910年去世的詹姆斯出生于一个富裕的家庭。他的父亲是一位富有且声名显赫的神学家。他的兄弟亨利则是一位聪明、成功的作家,至今他的小说依然是学界的研究对象。30多岁的威廉·詹姆斯在家中不算是一位成功人士,他像孩子一样多病。他本来想当一名画家,后来去了医学院读书,再后来辍学,要参加去亚马孙河的探险之旅,不过他没去成。他在日记中责骂自己,说自己什么都做不好,而且他不确定自己的身体到底还能不能好起来。在医学院的时候,他去参观过精神病院,看见一个男人不停地撞墙。医生解释说这个病人有着严重的幻觉。相比自己的同事医生们,詹姆斯觉得自己其实更像这些病人。

1870年,28岁的詹姆斯在他的日记中写道:“今天我觉得该结束了,我清楚地明白必须清醒地面对自己的选择,我没有这种天资,我是不是应该直接放弃这份有意义的工作?”

换言之,自杀是更好的选择吗?

两个月后,詹姆斯作了一个决定。为了避免鲁莽草率,他要做一个为期一年的实验。他想用12个月说服自己是可以自控的,也能把握自己的命运,相信自己可以做得更好,他有改变的自由意志。那时没有证据证明他会成功,而且已有证据都证明了相反的结果。不过他会让自己放开思维,相信自己是有可能改变的。他在日记中就自己改变的能力写道:“我认为昨天是我人生中的一次危机,到明年之前我会接受现实,拒绝幻想。我的自由意志行动的第一步应该从相信自由意志开始。”

在接下来的一年里,他每天都在实践对自己的控制。从日记内容来看,他在控制自己和自己的选择方面从来都没遇到问题。后来他结婚了并在哈佛大学执教。他在一个名为上学俱乐部的研讨组中结识了后来的美国最高法院大法官小奥利弗·温德尔·霍姆斯和符号学研究的先驱查尔斯·桑德斯·皮尔士。在开始写日记的两年之后,詹姆斯给长期研究自由意志的哲学家查尔斯·勒努维耶写了一封信:“我必须抓住这个机会告诉你,我在读过你的随笔集后,对你感到非常钦佩与感谢。多亏了你,我第一次能够清晰合理地理解自由意志的理念……我得说通过那个理念,我开始觉得我的生活又有了意义。先生,我可以向你保证,这可是了不得的大事。”

要相信自己可以改变,相信的意志是其中最重要的元素,后来这一思想广为流传。而要让自己相信自身可以改变,最重要的方法之一就是利用习惯。他强调说习惯让我们“第一次做事时有些困难,但很快越来越容易,在经过足够的实践之后,一切将变得半机械化,或者几乎完全不需要意识,你就能做”。一旦我们选择想变成什么,我们就会“越来越熟悉自己实践过的方法,就像一张纸或者一件大衣,一旦折过或者叠过,今后要是再折叠,它们会永远沿着同样的痕迹折叠下去”。

如果你相信你可以改变,如果你将其变成一种习惯,那么改变就是真实可行的。这就是习惯的真正力量:你的选择决定了你的习惯。一旦做出选择,并且成了自发行为,那这个选择不仅真实可行,而且似乎是无法避免的。正如詹姆斯说的一样,这让我们走向自己的命运。不管最终命运如何,我们都无法抗拒。

From #

习惯的力量

差点儿赢的情况诱发了继续下注的习惯

Content #

2010年,一位名叫雷扎·哈比卜的认知神经科学家做了一个实验,他请22个人躺进核磁共振成像机中,让他们看着一台老虎机一轮又一轮地转。其中有11个人是赌博成瘾的人,这些人瞒着家里人去赌,旷工去赌,或者在赌场靠签承诺期票来继续赌;而另一半人只是在交际时玩几把,并没有表现出任何行为问题。所有这些人都躺在机器狭窄的管道里,被要求看着老虎机的幸运玻璃框7秒钟。苹果以及金条的图案在电视屏幕上反复闪过。按照设计,老虎机只会给出三种结果——赢、输以及“差点儿赢”,在最后一种结果中,老虎机几乎让你赢,但最后一刻就是没出现赢钱的组合。所有这些人都没有真的去赌,而是只需要看着屏幕,这个时候通过核磁共振可以记录下他们的神经活动。

哈比卜告诉我说:“我们特别感兴趣的是研究大脑与习惯和成瘾有关的部分的变化。结果,我们发现,从神经学的角度来看,赌博成瘾的人在赢钱的组合出现时会更兴奋。当老虎机赢钱的符号组合出现时,即便他们没有赢,大脑中与情绪和奖赏有关联的区域也会比其他人更为活跃。

“而真正有趣的时候是差点儿赢的时候。对赌博成瘾的人而言,差点儿赢看起来和赢了差不多。他们的大脑对二者的反应几乎一样。但是对非赌博成瘾的人来说,差点儿赢和输掉没什么区别。没有赌博成瘾问题的人更容易承认差点儿赢意味着你还是输了。”

两组人观看的内容完全一样,但是从神经学的角度来看,却又有区别。有成瘾问题的人在差点儿赢的情况中比较激动,哈比卜假设这也许就是他们可以比其他人赌更长时间的原因。因为差点儿赢的情况诱发了那些习惯,让这些人继续下注。而不存在这种问题的人在看到差点儿赢时,心里出现的一丝恐惧感会诱发不同的习惯,也就是让人觉得在输得更惨之前,应该停手。

From #