| 云翔 的个人资料上善若水照片日志列表 | 帮助 |
|
2007/4/24 Linux内存管理的基本框架 Linux内核的设计需要考虑到在各种不同的CPU上的实现,还要考虑到在64位CPU上的实现,所以要以一种假想的、虚拟的CPU和MMU为基础,设计出一种通用的模型,再把它分别落实到各种具体的CPU上。因此,Linux内核的映射机制设计成三层,在页面目录(PGD)和页面表(PT)中间增设一层“中间目录(PMD)”,这三者均为数组。在逻辑上也把线性地址从高位到低位划分成4个位段。
在i386上,我们需要按照两层的模型进行地址映射,这就需要将虚拟的三层映射落实到具体的两层映射,跳过中间的PMD层。而在CPU的内存管理如果是PAE模式,则需要映射变成三层模式。所以在include/asm-i386/pgtable.h中有如下定义:
#if CONFIG_X86_PAE
# include
#else
# include
#endif
而在pgtable-2level.h中对线性地址有如下定义:
#define PGDIR_SHIFT 22
#define PTRS_PER_PGD 1024
#define PMD_SHIFT 22
#define PTRS_PER_PMD 1
#define PTRS_PER_PTE 1024
PGDIR_SHIFT表示线性地址中的PGD下标位段的起始地址,说明线性地址的23~32位是PGD的下标,一共10位。PTRS_PER_PGD表示每个PGD表中指针的个数,这是和PGDIR_SHIFT相对应的,所以32位系统中PGD表的大小为4KB。PMD_SHIFT表示PMD的起始地址也是22,与PGDIR_SHIFT相同,说明PMD位段的长度为0,而PTRS_PER_PMD说明PMD的指针个数为1,这也是和PMD_SHIFT相对应的。
32位地址意味着有4G的虚存空间,Linux内核将这4G字节的空间分成两部分,将最高的1G字节用于内核本身,称为“系统空间”。而将较低的3G字节用作各个进程的“用户空间”。这样理论上每个进程可以使用的用户空间都是3G,但系统空间却由所有进程共享,每当一个进程通过系统调用进入了内核,该进程就在共享的系统空间中运行,不再有其自己的独立空间。虽然系统空间占据了每个虚存空间中最高的1G字节,在物理的内存中却总是从最低的地址开始。所以,对于内核来说,其地址的映射是很简单的线性映射,0xC0000000就是两者之间的位移量,在page.h中有如下定义:
#define __PAGE_OFFSET (0xC0000000)
...
#define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
也就是说,对于系统空间而言,给定一个虚地址x,其物理地址是从x中减去PAGE_OFFSET。相应的,给定一个物理地址x,其虚地址是x加上PAGE_OFFSET。
在全局段描述表(GDT)中,要有一个表项指向局部段描述表(LDT)的起始地址,每个进程还要有一个任务状态段(TSS)结构,所以每个进程要在GDT中占据两个表项,GDT的位段宽度是13,所以GDT有8192个描述项,除去系统的开销所占用的描述项,还剩8180个表项,所以理论上系统中最大进程数量是4090。
这次写的都是一些基本概念和简单应用,所以有点乱,呵呵。 2007/4/21 Intel X86 系列的寻址方式 当我们说一个CPU是“16位”或“32位”时,指的是处理器中ALU的宽度,数据总线具有和ALU相同的宽度,并且地址总线应该也具有相同的宽度,因为一个地址,也就是一个指针,最好是与一个整数的长度一致,但一个8位的地址只能用来寻访256个不同的地址单元,这显然太小了,所以8位CPU的地址总线都是16位的,这也导致8位的CPU指令系统中都是16位的操作。
当CPU从8位升级到16位,本来数据总线和地址总线的宽度可以一致了,但人们又觉得16位地址总线所决定的空间(64K)太小了,所以Intel结合当时的情况,决定把地址空间增加16倍,即1M。如果地址空间增加到1M,那么地址总线的宽度就要增加到20位,但CPU中的ALU宽度只有16位,也就是说直接加以运算的指针的长度是16位。为了解决这个问题,Intel在8086CPU中设置了四个段寄存器:CS、DS、SS、ES,分别为代码段、数据段、堆栈段、附加段,每个段寄存器都是16位,对应于地址总线中的高16位,每条访问内存指令中的内部地址都是16位的,但是在送上地址总线之前都在CPU内部自动地与某个段寄存器中的内容相加,形成一个20位的实际地址。这样就实现了从16为内部地址到20位实际地址的转换。
但是又发现了新的问题,对于每一个由段寄存器的内容确定的“基地址”,一个进程总是能够访问从此开始64K字节的连续地址空间,而无法加以限制。同时,可以用来改变段寄存器内容的指令也不是什么特权指令,也就是说通过改变段寄存器的内容,一个进程可以随心所欲的访问内存中的任何单元。由于8086的这种内存寻址方式缺乏对内存空间的保护,所以为了区别于后来出现的“保护模式”,就成为“实地址模式”。
针对8086的这个缺陷,Intel从80286开始实现其保护模式,同时不久以后的32位80386CPU也开发成功,从80386以后,虽然又出现了80486、80586,速度上提高了很多,但和80386属于同一种系统结构,所以统称为“i386”结构。80386作为一个产品系列中的一员,虽然已经是32位,但仍必须维持段寄存器,还要同时支持实地址模式和保护模式。Intel选择了在段寄存器的基础上构筑保护模式的构思,并且保留16位的段寄存器。为了实现保护模式,段寄存器中不再是单纯的基地址,而是指向一个地址段描述数据结构的指针。当一条访问内存的指令发出一个内存地址时,CPU就可以这样找到实际数据总线的地址:
(1)根据指令的性质来确定应该使用哪个段寄存器,这点和“实模式”相同。
(2)根据段寄存器的内容,找到相应的“地址段描述结构”。
(3)从地址段描述结构中得到基地址。
(4)将指令中发出的地址作为位移,与地址段描述结构中规定的段长度相比,看看是否越界。
(5)根据指令的性质和地址段描述结构中的访问权限来确定是否越权。
(6)将指令中发出的地址作为位移,与基地址相加得出实际的“物理地址”。
首先,在80386的CPU中增设了两个寄存器,一个是全局性的段描述表寄存器GDTR,另一个是局部性的段描述表寄存器LDTR,分别用来指向存储在内存中的一个段描述结构数组,访问这两个寄存器的专用指令便设计成“特权指令”。在此基础上,段寄存器的高13位用做访问段描述表中具体描述结构的下标,再把这个下标和GDTR/LDTR指针结合,才能得到描述表项的起始地址。段寄存器的低3位分别用来表示使用GDT(0)还是LDT(1),和优先级(2位)。每个段描述表项是64位,里面含有段的基地址和段的大小,和一些其它的信息。如果把每个段积存其都指向同一个描述项,而在该描述项中将基地址设成0,并将段的长度设成最大,这样便形成一个从0开始覆盖整个32位地址空间的一个整段,此时物理地址和逻辑地址相同,CPU放到地址总线上去的地址就是在指令中给出的地址,Intel称其为平面地址。它是段式内存管理的一种特例。
利用80386对段式内存管理的硬件支持,可以实现段式虚存管理。当一个段寄存器的内容改变时,CPU要根据新的段寄存器内容以及GDTR/LDTR的内容找到相应的段描述项并装入CPU中,在这个过程中,CPU会检查该描述项中的p标志位,如果p标志位为0,就表示该描述项所指的那一段内容不在内存中,此时CPU会产生一次异常,而相应的服务程序便可以从磁盘交换区将这一段的内容读入内存,并据此设置描述项中的基地址,再将p标志位设置成1。相应的,内存中暂时不用的存储段也可以写入磁盘,并将其描述项中的p标志位改成0。
段式存储管理机制的灵活性和效率都比较差,一方面,“段”是可变长度的,这就给盘区交换操作带来了不便,另一方面,如果为了增加灵活性而将一个进程的空间划分成很多小段,就势必要求在程序中频繁地改变段寄存器的内容。同时,如果将段分小,虽然一个段描述表中可以容纳8192个描述项,也未必就能保证足够使用。所以,比较好的办法还是采用页式存储管理。本来页式存储管理并不需要建立在段式存储管理的基础之上,这是两种不同的机制。可是在80386中,保护模式的实现是与段式存储密不可分的,因此就无法绕过段式存管来实现页式存管。这也意味着,页式存管的作用是在由段式存管所映射而成的地址上再加上一层地址映射。由于此时由段式存管映射而成的地址不再是物理地址了,Intel就称之为“线性地址”。
线性地址的格式如下(假设指针的ps为1):
typedef struct{
unsigned int dir:10 /*页面目录下标,用于指向页面表。*/
unsigned int page:10 /*页面表下标,用于指向物理页面。*/
unsigned int offset:12 /*在4K字节内的物理页面偏移*/
};
80386把线性地址空间划分成32位的页面,每个页面可以被映射至物理存储空间中任意一块32位的区间。并且不像段式存储,连续的线性地址经过映射后在物理空间不一定是连续的。虽然页式存管是建立在段式存管的基础之上,但一旦启用了页式存管,所有的线性地址都要经过页式映射,连GDTR/LDTR中给出的段描述表起始地址也不例外。
32位的线性地址,31~22位表示页面目录,21~12位表示页面表,11~0位表示页内的偏移。这样,从线性地址到物理地址的映射过程为:
(1)从CR3(指向当前页面目录的指针)中取得页面目录的基地址。
(2)以线性地址中的31~22位为下标,在目录中取得相应页面表的基地址。
(3)以线性地址中的21~12位为下标,在页面表中取得相应页面的描述项。
(4)将页面描述项中给出的页面基地址与线性地址中的11~0位段相加,得到物理地址。
这里有个疑问,就是为什么页式存管要使用两个层次,而不是像在使用段寄存器时那样一步到位呢?这是出于空间效率的考虑,如果将线性地址中的dir和page两个位段合并在一起,就是20位,这样页面表就有1048676个表项,而每个页面的大小为4K,总的空间大小则为4K*1048676=4G,正好是32位地址空间的大小,但是实际上很难有一个进程会用到4G的全部空间,所以大部分表项是空着的,可是一个数组中,即使空着不用的表项也会占用空间,这就造成了浪费。而分成两层,则页表可以视需要而设置,如果目录中某项为空,就不必设立相应的页表,从而剩下了存储空间。另外,一个页面的大小是4K,而每个页面表项或目录项的大小是4个字节,1024个表项正好也是4K字节,恰好可以放在一个页面中。也正因为如此,64位的CPU中的页面大小是8K字节,因为目录表项和页面表项的大小都变成了8个字节。
如前所述,目录项中含有指向一个页面表4的指针,而页面表项中含有指向一个页面起始地址的指针,由于页面表和页面的起始地址总是在4K字节的边界上,所以这些指针的低12位(4K字节大小)永远都是0,这样在目录项和页表项中都只要有20位用于指针就够了,而余下的12位可以用于控制或其他目的使用。用一个结构表示:
typedef struct{
unsigned int ptba : 20; /*页表基地址的高20位*/
unsigned int avail : 3; /*供系统程序员使用*/
unsigned int g : 1; /*是否为全局性页面*/
unsigned int ps : 1; /*页面大小,0表示4K字节,1表示4M字节。*/
unsigned int reserved : 1; /*保留,永远是0。*/
unsigned int a : 1; /*accessed,是否被访问过*/
unsigned int pcd : 1; /*关闭缓冲存储器*/
unsigned int pwt : 1; /*Write-Through*/
unsigned int u_s : 1; /*0表示系统权限,1表示用户权限*/
unsigned int r_w : 1; /*只读或可写*/
unsigned int p : 1; /*0表示页面不在内存中*/
};
其中最低位p用于虚拟内存的管理,在前面已经介绍过。当指针中的ps位为1时,页面大小就成了4M字节,而页表就不再使用了,这时线性地址中的低22位就全部用作在4M字节页面中的位移,这样总的寻址能力还是没有改变,但是映射的过程少了一个层次,随着内存容量和磁盘容量的日益增加,磁盘访问速度显著提高,以及对图像处理要求的日益增加,4M字节的页面大小有可能会成为主流,这是Intel设计上一个很有远见的地方。
这么点儿东西竟写了一夜,还是没想出段寄存器用高13位做索引的原因,改日再议吧~~ 2007/4/11 如再不专心,让作者犹如此文一样烂。 昨天突然发现裤子很松,而皮带已经系到最小的扣了,用手一撑裤腰,发现多出好大一截,毋庸置疑,我瘦了,看来羽毛球真不是白打得。今天洗脸时看到自己的黑眼圈的确很严重,看来这班也真不是白加的。现在每天到家都是23点以后了,还要坚持看1小时的书,胸口的小肉瘤都没空去割,黑眼圈的问题,我看近期是无法解决了。忙归忙,心中还是很愉快的,毕竟这是我的兴趣所在,只是这打基础的日子多少会比较艰苦一些。
我对技术产生兴趣无疑是缘自winamp,当初那个引起我好奇心的东西现在早已算不得什么深奥的东西了。只可惜那时的我被网页所吸引,没有能把C坚持下去,转而去鼓捣html和flash,自知美术水平不高,开始在ActionScript找平衡,而我的第一份工作又不得不让我在短期内掌握JavaScript,在潮流的驱使下又学了XML和PHP,但因网页编程的局限性太大,对其彻底失望,于是转身回到系统编程,这身回的有点猛,一头扎进了ASM,那时觉得最底层才够酷,接触到加、解密,也学着别人脱壳反汇编,耐心是有,但密码学的数学水平要求实在太高,又被迫放弃。后看了《我是一名黑客》,对网络技术产生兴趣,参加了个CCNA,后自知电工电子水平不高,知难而退了。开始寻找适合自己的方向,学习VC++,看了MFC、看了WINAPI,看了C++,但迟迟未能入门,加之工作性质和编程相差甚远,也就渐渐的淡了。至此对自己非常失望,折腾了这么多年,仍旧一事无成,于是决定从最基本的操作系统和数据结构学起,无疑开源的Linux是最合适的,加之c语言,加之网络技术。于是Linux下的C语言网络编程再合适不过了,希望自己这次能坚持下去。 2007/4/8 佛经上181条做人的道理道理不是说说就能懂得... 1、人之所以痛苦,在于追求错误的东西。 3、如果你不给自己烦恼,别人也永远不可能给你烦恼。因为你自己的内心,你放不下。 4、好好的管教你自己,不要管别人。 5、不宽恕众生,不原谅众生,是苦了你自己。 6、别说别人可怜,自己更可怜,自己修行又如何?自己又懂得人生多少? 7、学佛是对自己的良心交待,不是做给别人看的。 8、福报不够的人,就会常常听到是非;福报够的人,从来就没听到过是非。 9、修行是点滴的工夫。 10、在顺境中修行,永远不能成佛。 11、你永远要感谢给你逆境的众生。 12、你随时要认命,因为你是人。 13、你永远要宽恕众生,不论他有多坏,甚至他伤害过你,你1定要放下,才能得到真正的快乐。 14、这个世界本来就是痛苦的,没有例外的。 15、当你快乐时,你要想,这快乐不是永恒的。当你痛苦时你要想这痛苦也不是永恒的。 16、认识自己,降伏自己,改变自己,才能改变别人。 17、今日的执著,会造成明日的后悔。 18、你可以拥有爱,但不要执著,因为分离是必然的。 19、不要浪费你的生命在你1定会后悔的地方上。 20、你什么时候放下,什么时候就没有烦恼。 21、内心没有分别心,就是真正的苦行。 22、学佛第1个观念,永远不去看众生的过错。你看众生的过错,你永远污染你自己,你根本不可能修行。 23、你每天若看见众生的过失和是非,你就要赶快去忏悔,这就是修行。 24、业障深重的人,1天到晚都在看别人的过失与缺点,真正修行的人,从不会去看别人的过失与缺点。 25、每1种创伤,都是1种成熟。 26、当你知道迷惑时,并不可怜,当你不知道迷惑时,才是最可怜的。 27、狂妄的人有救,自卑的人没有救。 28、你不要1直不满人家,你应该1直检讨自己才对。不满人家,是苦了你自己。 29、1切恶法,本是虚妄的,你不要太自卑你自己。1切善法,也是虚妄的,你也不要太狂妄你自己。 30、当你烦恼的时候,你就要告诉你自己,这1切都是假的,你烦恼什么? 31、当你未学佛的时候,你看什么都不顺。当你学佛以后,你要看什么都很顺。 32、你要包容那些意见跟你不同的人,这样子日子比较好过。你要是1直想改变他,那样子你会很痛苦。要学学怎样忍受他才是。你要学学怎样包容他才是。 33、承认自己的伟大,就是认同自己的愚疑。 34、修行就是修正自己错误的观念。 35、医生难医命终之人,佛陀难渡无缘的众生。 36、1个人如果不能从内心去原谅别人,那他就永远不会心安理得。 37、心中装满着自己的看法与想法的人,永远听不见别人的心声。 38、毁灭人只要1句话,培植1个人却要千句话,请你多口下留情。 39、当你劝告别人时,若不顾及别人的自尊心,那么再好的言语都没有用的。 40、不要在你的智慧中夹杂着傲慢。不要使你的谦虚心缺乏智慧。 41、根本不必回头去看咒骂你的人是谁?如果有1条疯狗咬你1口,难道你也要趴下去反咬他1口吗? 42、忌妒别人,不会给自己增加任何的好处。忌妒别人,也不可能减少别人的成就。 43、永远不要浪费你的1分1秒,去想任何你不喜欢的人。 44、多少人要离开这个世间时,都会说出同1句话,这世界真是无奈与凄凉啊! 45、恋爱不是慈善事业,不能随便施舍的。感情是没有公式,没有原则,没有道理可循的。可是人们至死都还在执著与追求。 46、请你用慈悲心和温和的态度,把你的不满与委屈说出来,别人就容易接受。 47、创造机会的人是勇者。等待机会的人是愚者。 48、能说不能行,不是真智慧。 49、多用心去倾听别人怎么说,不要急着表达你自己的看法。 50、同样的瓶子,你为什么要装毒药呢?同样的心理,你为什么要充满着烦恼呢? 51、得不到的东西,我们会1直以为他是美好的,那是因为你对他了解太少,没有时间与他相处在1起。当有1天,你深入了解后,你会发现原不是你想像中的那么美好。 52、这个世间只有圆滑,没有圆满的。 53、修行要有耐性,要能甘于淡泊,乐于寂寞。 54、活着1天,就是有福气,就该珍惜。当我哭泣我没有鞋子穿的时候,我发现有人却没有脚。 56、眼睛不要老是睁得那么大,我且问你,百年以后,那1样是你的。 57、欲知世上刀兵劫,但听屠门夜半声。不要光埋怨自己多病,灾祸横生,多看看横死在你刀下的众生又有多少? 58、憎恨别人对自己是1种很大的损失。 59、每1个人都拥有生命,但并非每个人都懂得生命,乃至于珍惜生命。不了解生命的人,生命对他来说,是1种惩罚。 60、自以为拥有财富的人,其实是被财富所拥有。 61、情执是苦恼的原因,放下情执,你才能得到自在。 62、随缘不是得过且过,因循苟且,而是尽人事听天命。 63、不要太肯定自己的看法,这样子比较少后悔。 64、当你对自己诚实的时候,世界上没有人能够欺骗得了你。 65、用伤害别人的手段来掩饰自己缺点的人,是可耻的。 66、世间的人要对法律负责任。修行的人要对因果负责任。 67、在你贫穷的时候,那你就用身体去布施,譬如说扫地、洒水、搬东西等,这也是1种布施。 68、内心充满忌妒,心中不坦白,言语不正的人,不能算是1位5官端正的人。 69、默默的关怀与祝福别人,那是1种无形的布施。 70、多讲点笑话,以幽默的态度处事,这样子日子会好过1点。 71、与人相处之道,在于无限的容忍。 72、不要刻意去猜测他人的想法,如果你没有智慧与经验的正确判断,通常都会有错误的。 74、人生的真理,只是藏在平淡无味之中。 75、不洗澡的人,硬擦香水是不会香的。名声与尊贵,是来自于真才实学的。有德自然香。 76、与其你去排斥它已成的事实,你不如去接受它,这个叫做认命。 77、佛菩萨只保佑那些肯帮助自己的人。 78、逆境是成长必经的过程,能勇于接受逆境的人,生命就会日渐的茁壮。 79、你要感谢告诉你缺点的人。 80、能为别人设想的人,永远不寂寞。 81、如果你能像看别人缺点1样,如此准确般的发现自己的缺点,那么你的生命将会不平凡。 82、原谅别人,就是给自己心中留下空间,以便回旋。 83、时间总会过去的,让时间流走你的烦恼吧! 84、你硬要把单纯的事情看得很严重,那样子你会很痛苦。 85、永远扭曲别人善意的人,无药可救。 86、人不是坏的,只是习气罢了,每个人都有习气,只是深浅不同罢了。只要他有向道的心,能原谅的就原谅他,不要把他看做是坏人。 87、说1句谎话,要编造0句谎话来弥补,何苦呢? 88、其实爱美的人,只是与自己谈恋爱罢了。 89、世界上没有1个永远不被毁谤的人,也没有1个永远被赞叹的人。当你话多的时候,别人要批评你,当你话少的时候,别人要批评你,当你沈默的时候,别人还是要批评你。在这个世界上,没有1个不被批评的。 90、夸奖我们,赞叹我们的,这都不是名师。会讲我们,指示我们的,这才是善知识,有了他们我们才会进步。 91、你目前所拥有的都将随着你的死亡而成为他人的,那为何不现在就布施给真正需要的人呢? 92、为了赞美而去修行,有如被践踏的香花美草。 93、白白的过1天,无所事事,就像犯了窃盗罪1样。 94、能够把自己压得低低的,那才是真正的尊贵。 95、广结众缘,就是不要去伤害任何1个人。 96、沈默是毁谤最好的答覆。 97、对人恭敬,就是在庄严你自己。 98、拥有1颗无私的爱心,便拥有了1切。 99、仇恨永远不能化解仇恨,只有慈悲才能化解仇恨,这是永恒的至理。 100、你认命比抱怨还要好,对于不可改变的事实,你除了认命以外,没有更好的办法了。 101、不要因为众生的愚疑,而带来了自己的烦恼。不要因为众生的无知,而痛苦了你自己。 102、别人讲我们不好,不用生气、难过。说我们好也不用高兴,这不好中有好,好中有坏,就看你会不会用? 103、如果你自己明明对,别人硬说你不对,你也要向人忏悔,修行就是修这些。你什么事都能忍下来,才会进步。就是明明是你对,你也要向他人求忏悔,那就是修行了。 104、当你的错误显露时,可不要发脾气,别以为任性或吵闹,可以隐藏或克服你的缺点。 105、不要常常觉得自己很不幸,世界上比我们痛苦的人还要多。 106、愚痴的人,1直想要别人了解他。有智慧的人,却努力的了解自己。 107、别人永远对,我永远错,这样子比较没烦恼。 108、来是偶然的,走是必然的。所以你必须,随缘不变,不变随缘。 良师 这次是朕第五次参加羽毛球活动,也是第四次听到“你今天确实进步了。”首先感谢老师的鼓励教学法,但是差距仍旧很明显,比如发球不标准,回球没有杀伤力,漏勺严重所暴露的心理素质不够好。唯一自己感到有进步的就是意识和体能,可以持续打两个小时不觉累了,基本可以猜到对方的下一个球了。和老师用200元打赌说六月份赢她,说实在我要是天天打还行,可按照现在每周2小时的双打练习来说,这个目标基本是个天方夜谭。我这200学费其实也是为强迫自己所交,如果我年底能赢,那就一定要把这个期限提前几个月,人没有点压力是不会进步的。不过六月,貌似这个期限提前的有点多了。
师说:“争强好胜不是错,只要去付之于行动。”
每次一提到计划就有点头疼,因为现在要做的事情实在太多,想把自己积压多年的书都一口气读完,因为每次看到那满满的书架,心中总是不免有些惭愧。经典的书买了不少,能认真看完的确实寥寥无几,计划今年把茶社的那本《Linux内核指导》和1年前买的《UNIX网络编程》看完,后面排队的还有2年前买的《Linux内核源代码情景分析》、2年前就非常想看的《TCP/IP详解》和公司送的《代码大全》,这里每本都书几乎都上千页,里面所讲的东西更不是短期内所能掌握,只能不断的安慰自己,静下心来,一件件的去完成。好在最近的工作不像之前那么手忙脚乱,能渐渐的开始进入状态了,但工作和学习这个尺度有时掌握的不好,或许我该找个人探讨一下。我需要不断的提醒自己那是个公司,不是学校,因为那庞大的架构在我面前犹如一条永远都看不到终点的路,这条路坚实而明确,我总是想把路边的风景全都装到脑子里。Ring说:“只有知道自己的幸福是什么,才能离幸福越来越近。”其实我并不能肯定那条路就是我的幸福,我只是不想原地踏步而已。现在每天过的都很充实,充实到没有时间思考,充实到每次思考都会有些恐惧,那是对时间流逝的恐惧。
师说:“不要太计较得失,那些只会成为你前进路上的绊脚石。”
现在工作和学习是一天当中最重要的事,比工作和学习更重要的是身体的健康,比身体健康更重要的是心灵的健康。在这个人才过剩的年代里,身心的健康显得尤为珍贵。春风吹来的不光是满树的玉兰花,还有美丽善良和勤劳健康。
师说:“幸福就在你面前,去抚摸它就好了。” |
|
|