intel 64 体系常见内存管理方式

内存管理是操作系统中非常重要的一个部分。随着计算机技术的不断发展,内存管理的方式也在不断演变。本文将介绍 intel 64 体系几种常见的内存管理方式。 平板式内存管理是一种比较简单的内存管理方式。它采用页式管理,屏蔽掉段式管理。具体来说,它将逻辑地址直接映射为线性地址,定义一个代码段和一个数据段,两个段的大小都是4GB。这种方式的好处是简单易懂,但是它的缺点是不能进行多进程的内存隔离。 为了解决多进程内存隔离的问题,可以采用保护平板式内存管理的方式。具体来说,它定义了内核代码段、内核数据段、用户代码段和用户数据段,每个段的基地址都是0,大小为4GB。进程执行内核代码时使用内核段,执行用户代码时使用用户段。这种方式的好处是可以进行多进程的内存隔离,但是它的缺点是需要进行地址转化,影响效率。 多段式内存管理是一种完全采用段式管理的方式,屏蔽掉页式管理。它可以进行多进程的内存隔离,但是需要进行地址转化,也会影响效率。 基于物理地址拓展的页式内存管理是一种支持更大物理地址空间的方式。它引入了物理地址拓展(PAE)机制以支持36位物理地址。该管理模式中,物理地址空间被扩充到了64GB,但线性地址空间仍然为4GB。页目录和页表项被扩充到了64位,因而一个页目录或者页表中的项数变成了512,一个页目录仅能描述1GB线性地址空间。所以引入了一个只有四个表项的页目录指针表(PDP)。CR3指向PDP。地址转换机制被修改。当页目录项中的PS位被设置为1时,它描述的页变成了2MB页。 在64位模式中,段通常被关闭,不再做段界限检查。CS,DS,ES,SS的基地址处理器统统看作0。但FS和GS可以不是0,将逻辑地址转换为先行地址的时候要加上FS或者GS的基地址。FS和GS的基地址位64位地址,兼容模式中只使用它的低32位,记录在MSR中。在64位模式中,对于内存的管理完全依靠分页机制。Intel64体系结构扩展了PAE机制,使之能够支持64位线性地址和52位物理地址。拓展包括: 页目录指针表被扩充到了512项。 引入了一个第四级页映射表PML4,它的每一个表项可以指向一个PDP。 所有的四级页表表项被扩充到了64位。 页目录项中的PS标志用于控制4KB和2MB页。 所有页表项在第63位上新增了一个执行禁止标志EXB。

九月 30, 2021

段页式内存管理概要

段页式内存管理中,段的线性地址被分割成大小相等的线性页(4KB,4MB或者2MB等)。物理内存空间同样也被分成相同大小的物理页。操作系统维护一个页表,用于管理线性页到物理页的映射。页表在IA-32体系结构中分为两级,即页目录和页表 页目录是一个数组,其元素叫做页目录项(PDE),每个页目录项描述一个页表。页目录的大小为一页(4KB),一个页目录中有1024个页目录项。页目录项的大小为4字节。页表大小为一页(4KB)。页表项的大小为4字节,所以一个页表最多可以描述1024个线性页。 物理页是预先划分好的,其开始位置一定在4KB(2^12)的边界上。所以低12位全部是零。然后低12位就可以储存而外的信息。 P是存在位。R/W是读写标志位。U/S是用户标志位,0表示超级用户。A是存取标志位。D是脏标志位。 在页目录项中PAT标志换成了PS标志,表示物理页尺寸。 CR3寄存器专门存放当前使用的页目录的物理地址,因此CR3又叫做页目录基地址寄存器。只要进程在活动,它的页目录就应该一直驻留在内存。 页目录项也可以直接指向物理页,加快地址转换速度,通常将操作系统内核所占用的页设置为4MB页。该页目录项的PS地址为1事,它所描述的是一个4MB的页而不再是一个页表。 页式管理机制是操作系统内核启动的,启动方法是将CR0中的PG标志设置为1。 启动分页机制后,每个线性地址都需要经过页目录和页表的转换。IA-32体系结构加入了一个高速缓存TIB,其中储存最近使用的页目录和页表项。TIB的经常的刷新工作由操作系统内核负责。当页目录和页表项改变时,内核必须使得TIB相应的项失效。当CR3改变时,TIB中的所有内容(Global页除外)会自动失效。INVLPG指令可以将TLB中的指定项设置为无效。

九月 30, 2021

段内存管理概要

IA-32体系中提供了段页式内存管理机制,先分段再分页。提供页式是为了支持虚拟内存。 段:处理器的可寻址的线性内存空间被划分成了若干个大小不同的段。一个段是线性地址空间中的一个连续的区间。段中可保存代码、数据、堆栈或者其他数据结构。段的属性信息由与之对应的段描述符描述。段描述符是一个数据结构。Intel用段描述符表来管理。段描述符表最大可达64KB。 当G为0时,段以字节为单位,最大的段长为1MB。当G为1时,段以页(4kb)为单位。最大的段长为4GB。 DPL是段的特权级,其值在0~3之间。 S是系统标志,用于区分段的类别。0表示系统段,1表示用户段。 Type是段的类型: 对于系统段。类型域由4位组成,可表示16个系统段类型之一。 对于用户段。 第三位为0表示数据段,此时第二位表示地址的拓展方向(0表示大扩展方向),第一位表示段是否可写。 第三位为1表示代码段,此时第二位是相容标志(0表示非相容)。第一位是可读位。 第0位是存取位。0表示段尚未存取过。 D/B标志表示有效地址和操作数长度。 L标志仅出现在IA-32e模式的代码段中。1表示64位模式 堆栈段通常是向下扩展的、可读写的数据段。 段描述符表: 全局描述符表(GDT)。在系统进入保护模式前必须为其定义一个GDT。IA-32体系结构专门定义了一个GDTR寄存器来存放当前的GDT的信息。 局部描述符表(LDT)是系统段,其中可以存放局部描述符,如进程自己的代码段,数据段等。IA-32体系专门提供了一个LDTR寄存器,用于保存当前使用的LDT信息。 可以用段描述符在段描述符表中的索引来标识它,标识称作段选择符。段选择符是16位标识符。第二位是指示器(TI)表示索引所对的描述符表(0表示GDT)。第3-15位示索引,标定位置。第0、1位是请求特权级RPL。一个段选择符加上一个偏移量可以唯一地标识一个逻辑地址。逻辑地址是程序使用的地址,不是线性地址,也不是物理地址。 IA-32体系提供了6个段寄存器,即CS,SS,DS,ES,FS和GS。每一个段寄存器可以缓存一个段描述符。

九月 30, 2021

了解计算机系统内部运作:内存、I/O设备、总线和外存是如何协同工作的?

内存是处理器可以直接访问的储存空间。为了加快内存访问速度,计算机系统中通常提供了一些高速缓存(Cache),高速缓存通常由硬件管理。 I/O设备由I/O控制器和物理设备组成,处理器通过I/O控制器管理物理设备。I/O控制器主要由控制与状态寄存器(CSR)和数据寄存器组成。处理器通过读CSR来获得设备状态,通过写CSR来控制设备动作,通过读写数据寄存器来交换数据。内核通常将I/O设备抽象成一组寄存器,并给一个寄存器一个I/O地址。处理器通过I/O地址访问I/O寄存器。 现代计算机系统中许多设备寄存器可以被映射到物理地址空间中。此时,每个设备寄存器都有一个物理内存地址。这种方式的I/O称为内存映射I/O。使用方便但是会消耗物理内存地址。 通常把外存抽象成一个数据块的数组,每个数据块都有一个序号处理器可以通过序号随机读、写外存中的任何一个数据块。对于外存的操作通常以块为单位,因此又称外存为块设备。对应地,其他I/O设备称为字符设备。简而言之,块设备以块为单位进行数据的读写操作,如硬盘、闪存等;字符设备以字符为单位进行数据的读写操作,如键盘、鼠标、打印机等。 总线负责将处理器,内存,I/O控制器连接起来。常用的总线有ISA、PCI、PCI-E、AGP、ATA、SCSI等。总线还负责检测,枚举接在其上的设备。

九月 30, 2021

IA-32体系概要

IA-32体系结构中由三种模式和一种准操作结构: 实模式:与8086兼容的操作模式,有一些拓展。 保护模式:处理器的一种最基本的操作模式,在这种模式中,处理器的所有指令及体系结构中的所有特色都是可用的,并且能够达到最高性能。 系统管理模式,提供给操作系统的一种透明的管理机制,用于实现电源管理等特殊操作。 虚拟8086模式是一个准操作模式,允许处理器在保护模式中执行实模式的程序。 Intel 64体系结构新增一种IA-32e操作模式包含两个子模式 兼容模式,在该模式下可以不加修改地运行大多数IA-32体系结构的程序 64位模式,可以使用64位线性地址空间和一些新增加的特性。IA-32e不再支持虚拟8086模式 处理器加电或者Reset后默认操作模式是实模式。 实模式和保护模式之间的转换由控制寄存器CR0中的PE位控制。 保护模式和IA-32e模式之间的转换由IA32_EFER寄存器中的LME和CR0中的PE位控制。 兼容模式和64位模式之间的转换由代码段寄存器CS和L位控制。 保护模式和虚拟8086模式之间的转换由标志寄存器EFLAGS中的VM位控制。 进入系统管理模式的唯一途径是SMI中断,在系统管理模式中执行指令RSM会将处理器切换回原来的操作模式。

九月 30, 2021

中华传统文化能否带领封建制度中的中华民族走向近代

明清时期,是中国古代的封建社会的晚期。这是封建专制主义中央集权制度的强化的时期,也是中国的封建皇权走向巅峰的时期。另一方面,这也是中华民族逐渐落后与历史潮流的时期。理学的出现与统治阶级对于理学的强化,逐渐束缚了我们民族的人格与思想。 为什么中华民族会进入这样一段历史时期。其实这并不是这些皇帝个人的意志的体现,而是传统文化影响下中华民族的性格与历史大环境所造就的。当中国封建制度走到宋代的时候,相对于前代唐代,能很明显地感觉到文化与制度双重影响下的人格的束缚越来越强。我认为,出现这种情况的正显现了封建制度已经越来越不能适应于生产力与思想发展后人们自然产生的对于新兴的生产关系,人格自由的需求。这类新兴事物,在明王朝对于社会的思想控制统治相对薄弱的中后期可以窥见,在这个时期涌现了一大批思想家,像李贽、黄宗羲。李贽将矛头直指封建礼教和整个正统思想,在一定程度反映了基本主义萌芽时代的要求。黄宗羲,他主张的“天下为主,君为客”之说,反映了由生产力发展所导致的传统社会生产关系的变化。具有反专制主义的特征。 面对新兴的事物,传统封建统治阶级同他们所设计的集权化的封建制度感到眼花缭乱。在落后的世界观与对于落后生产关系的理解的影响下,他们对接受、利用与管理这些新兴事物显得力不从心。草率地将这些新兴事物纳入他们熟悉的统治体系是不可能做到的,他们的统治体系与他们的思想本身并没有这些基因。他们对这种令他们感到纷乱的事物产生了本能的恐惧,所以他们要清除这些让他们感到烦心的事物,让社会与人们的思想重新回到他们认为的样子中去。只有这样这样人民的一举一动才能在他们的掌握之中,他们才能在既定框架下更有效地实现他们的统治 。 于是到了明代,底层农民出身的朱元璋对于元末的混乱有深刻的体会。在中国传统文化影响下,他的不可避免地渴望社会的秩序与道德的重建,建立一个秩序的王朝。但是,在他的那个时期,新兴事物与思想的出现让社会变得复杂,社会本身已经不可能恢复到秦汉与隋唐时期。这让他本能地走向了对于人民更严格的控制。兴八股,造户籍,明律法,这是他采取的措施。以孝治天下的主张,更是希望国家臣民能够在伦理道德的强力约束下接受统治。选拔国家人才的科举制度,也成为了知识分子思想上的一道重重的枷锁。对于这些知识分子出身的官员,他们的思想举动被牢牢锁定在私塾五经的范畴。丞相的废除与锦衣卫,东厂的设立,更加体现了中央皇权的加强,中央皇权对于社会的控制更加牢固。于是在明初这种恐怖环境下,新兴事物根本无力与已经占据绝对优势的全副武装的封建秩序对抗。需要注意,古代中国的律法,一直被人民视为对于臣民严重违反社会道德规范的严厉惩罚与对于臣民行为的在道德以外的严格规定,并不是现代意义上保护人民权利的法律。 在思想方面,中华传统的文化本身具有它的“趋同”的特征,在这种环境下新兴事物的传播本来就缓慢。随着传统的儒家文化的逐渐地封建化与经文化,在人们的思想中面对这些新兴的东西时是麻木的,不理解的。对于接受这些新兴思想的少数人,一直被排除在主流社会之中,不仅受到道德与封建法律的联合打压,而且受到主流思想的排挤与污蔑,更受到在封建世界观影响下成长起来的自己对于自己思想的怀疑。再者,古代中国人对于“天下”,“朝廷”,“君父”的根生蒂固的认识下,在王朝更替,集权封建制度控制相对较弱的时期,仍然会自然地选择走向另一个新的集权封建制度的统治。 从制度与文化两方面看,如果不受到外力,在相当长的历史时期,中华民族会生活在在这种集权封建体制与封建化的文化中。在这段时期,新兴事物的传播是及其缓慢的。而恰恰是这些新兴制度,很自然的代表了人类社会发展的根本方向。但不能否认,随着生产力的继续发展,新兴的生产关系与相对应产生的思想绝不会被扑灭扼杀。相反,在不断积累中,它的力量会越来越强大,直到在未来某个历史时期,它将取代传统的封建生产关系。

九月 30, 2021

中华传统文化与民族近代命运的关系

在讨论传统文化之前,先来讨论民族。先来看看民族的概念:民族是指经长期历史发展而形成的稳定共同体,一群基于历史、文化、语言与其它人群有所区别的群体。根据定义可以知道历史、文化、语言是区本民族别于其他民族的重要的三个元素。而这三个元素并不是相互独立的,相反,它们是相互影响,相互交融的,谁也离不开谁。从文化来看,一个民族的文化渗入它的历史之中,影响着本民族个体乃至全体的思维,进而影响在特定历史条件下本民族面对历史提出的问题所作出的决定。类似地,文化渗入语言,一个民族的语言的文法,词汇,表达中都有明显的文化痕迹。所以,文化极大地塑造了一个民族的性格,赋予一个民族它的灵魂,是一个民族区别于其他民族的极为重要的因素。中华传统文化之于中华民族来说亦是如此。 但是近代以来,中华传统文化在中国人心中逐渐地淡化,甚至于个别个体全然忘却。近来频繁地出现了种种违反道德的社会事件,从表面看仅仅是违反道德而已。但是深究其根本,则是社会道德的母体传统文化本身,被本民族个别个体所轻视,淡忘所导致的道德约束力的下降。本民族的传统文化在民族个体在内心不被认同,将导致中华民族的凝聚力与认同感的下降,对于中华民族来说将是灾难性的。就像当下,面对日美文化,中国青年热衷接受;面对传统文化,中国青年则一脸茫然。但这又是为什么?中华传统文化到底是什么?未来将何去何从? 在近现代中国人的理解中,传统文化似乎制约了社会的发展。诚然,传统文化中三常五纲,逆来顺受,宗法等级确实在一个现代人看来是落后的。并且传统文化中缺乏对于论断的进行思维论证的态度也是不可取的。既然对于传统文化产生了这样的疑问。那么在封建时期,传统文化的状态就是我们应当首先讨论的问题。 中华传统文化在近代为什么不符合社会的发展潮流,是因为传统文化本身被很大程度地封建化。明清时期,是中国古代的封建社会的晚期。这是封建专制主义中央集权制度的强化的时期,也是中国的封建皇权走向巅峰的时期。理学的出现与统治阶级对于理学的强化,逐渐束缚了我们民族的人格与思想。在封建专制主义制度的强力作用下,传统文化很大程度上向着适应封建统治的方向上发展。为什么中华民族会进入这样一段历史时期。其实这并不是这些皇帝个人的意志的体现,而是传统文化影响下中华民族的性格与历史大环境所造就的。 其实,当中国封建制度走到宋代的时候,相对于前代唐代,能很明显地感觉到文化与制度双重影响下的人格的束缚越来越强。我认为,出现这种情况的正显现了封建制度已经越来越不能适应于生产力与思想发展后人们自然产生的对于新兴的生产关系,人格自由的需求。面对新兴的事物,传统封建统治阶级在落后的世界观与对于落后生产关系的理解的影响下,对接受、利用与管理这些新兴事物显得力不从心。草率地将这些新兴事物纳入他们熟悉的统治体系是不可能做到的,他们的统治体系与他们的思想本身并没有这些基因。他们对这种令他们感到纷乱的事物产生了本能的恐惧,努力让社会与人们的思想重新回到他们认为的样子中去。 于是到了明代,底层农民出身的朱元璋封建文化与历史的巨大惯性的影响下,不可避免地渴望社会的秩序与道德的重建,建立一个统一的君主专制的封建的王朝。但是,在他的那个时期,新兴事物与思想的出现让社会变得复杂,社会本身已经不可能恢复到秦汉与隋唐时期。这让他本能地走向了对于人民更严格的控制。兴八股,造户籍,明律法,这是他采取的措施。纯粹的以孝治天下的主张,更是希望国家臣民能够在伦理道德的强力约束下接受统治。选拔国家人才的科举制度,也成为了知识分子思想上的一道重重的枷锁。对于这些知识分子出身的官员,他们的思想举动被牢牢锁定在私塾五经的范畴。丞相的废除与锦衣卫,东厂的设立,更加体现了中央皇权的加强,中央皇权对于社会的控制更加牢固。于是在明初这种恐怖环境下,新兴事物根本无力与已经占据绝对优势的全副武装的封建秩序对抗。需要注意,古代中国的律法,一直被人民视为对于臣民严重违反社会道德规范的严厉惩罚与对于臣民行为的在道德以外的严格规定,并不是现代意义上保护人民权利的法律。 在思想方面,封建化的中华传统的文化逐渐强化了它的“趋同”的特征,在这种环境下新兴事物的传播本来就缓慢。随着传统的儒家文化的逐渐地封建化与经文化,对于接受这些新兴思想的少数人,一直被排除在主流社会之中,不仅受到道德与封建法律的联合打压,更受到在封建世界观影响下成长起来的自己对于自己思想的怀疑。再者,古代中国人对于“天下”,“朝廷”,“君父”的根生蒂固的认识下,在王朝更替,集权封建制度控制相对较弱的时期,仍然会自然地选择走向另一个新的集权封建制度的统治。 所以,在被封建地主阶级改造的儒家思想的巨大惯性下运转中国,两千年的对中华民族的思想的改造与对于儒家文化的单方面阐释下,使得以儒家思想为主体的传统文化已经变成他们他们维系统治的有力工具。以儒家思想为主体的中华传统文化在两千年的封建社会的进程中逐渐向它的“趋同”与“秩序”的方向上倾斜,越来越不利于生产力与新思想的发展,社会进入了相对稳定的停滞时期。在明朝后期到乾隆时期,皇帝对于西方传来的闻之未闻的科学技术始终是抱着玩的态度的原因也出自于这。在君君臣臣父父子子的不断的强化中,中国的封建制度走到了它的尽头。 既然前面阐释了传统文化并不能将我们中华民族带入近代的原因,那么我们的传统文化与西方文化的究竟有没有优劣之分? 西方文化与我们的传统文化绝无优劣之分。西方文化个性化契约化的文化产生有它的历史渊源。日耳曼首领靠他们的战士为其战斗,但这并不是无偿的。相对地,首领必须定期为战士们提供他们理应的到的战利品。这是领主应该做的,也是必须做的。这样,首领与战士之间的关系依靠着这种简单的契约关系维持。在这种关系下,战士的人格本身独立的,而首领无权直接干涉战士的私人生活。到了中世纪,首领变成了领主,战士变成了封臣,这种习惯仍然存在。领主分给封臣,封臣也必须履行他们的封建义务。封臣的封臣不是领主的封臣,这是因为他们在越级之间没有契约关系。农民与封建主的关系大抵如此。在这种社会运作制度下,个人有相对的独立性。西方的封建制度并不像封建时代的中国一样,形成了相对集中的中央封建强权。契约观念与罗马法的巨大影响共同作用下产生了西方现代意义上的法律,更好地保证了人的权利。在中世纪与近代之交的西欧的城市法律下自由的气息更加明显,为新事物的产生创造了有利的条件,加速了西方的近代化。这是《自由论》的作者密尔所认为有利于人类社会的发展的趋势。西方比我们提早进入近代,并不是西方的文化就是好的,就该拿来作为我们的文化。没有相应的历史积累沉淀,生搬硬套注定无法成功,无法与我们的民族的本性相适应。 中国在19世纪的近代落后于西方并不是传统文化本身的过错,其根本原因是封建化的社会制度与思想的阻碍。新兴思想的仍然在不断地产生与发展,在明王朝对于社会的思想控制统治相对薄弱的中后期可以窥见,在这个时期涌现了一大批思想家,像李贽、黄宗羲。李贽将矛头直指封建礼教和整个正统思想,在一定程度反映了基本主义萌芽时代的要求。黄宗羲,他主张的“天下为主,君为客”之说,反映了由生产力发展所导致的传统社会生产关系的变化。具有反专制主义的特征。通过上面的举例我们可以窥见中国封建时代晚期的社会仍然不可阻挡地产生了新的社会生产关系,相应的产生了一些带有人文特征的思想。这种大的趋势只能通过加强专制主义制度及其思想控制来延缓,但是并不能阻挡。在没有外力影响下,随着生产力的发展,中华民族也将会在稍微后一些的历史时期进入近代。所以,中国在19世纪的近代落后于西方并不是传统文化本身的过错,其根本原因是封建化的社会制度与思想的阻碍。 所以,不能由这些历史遗留的糟粕的存在将整个中华传统文化看做陈旧而理应被抛弃的文化。在文化进化过程中,文化的形式会改变,但文化的核心内涵是难以改变的。诚然,作为传统文化主体的儒家文化核心中带有一些宗法特征,但是这是产生于那个时代不可避免的。而恰恰是文化的内涵决定了文化的特点,从而塑造了民族的性格。中华传统文化以儒家文化为主体,所以解决儒家文化的形式与现代社会的矛盾并加以改造,找到儒家文化的根本内涵并取其中最重要的进行现代阐释而后加以弘扬,才能抓住振兴中华传统文化之关键。 打过预防针之后,接下来的问题是,我们的传统文化的核心到底是什么?该怎样抓住它? 中华传统文化以儒家思想为主体,研究儒家思想的核心意义,解决儒家思想与现代社会文化的种种问题,才能从根本上解决中华传统文化的传承问题。儒家思想的核心分别为仁、义、礼、智、信、恕、忠、孝、悌。其中仁与义是儒家思想的核心中的核心。忠、孝与礼是核心中与现代文化观念矛盾与冲突比较大的部分。那首先来看,“仁”与“义”的是什么?在《论语》等文献中,孔子对于“仁”的阐释如下: 1. 克己復禮為仁。 一日克己復禮,天下歸仁焉。為仁由己,而由人乎哉? 2. 出门如见大宾,使民如承大祭;己所不欲,勿施于人;在邦无怨,在家无怨。 3. 仁者先难而后获,可谓仁矣。 4. 居处恭,执事敬,与人忠。虽之夷狄,不可弃也。 5. 爱人。 6. 恭、宽、信、敏、惠。 7. 仁者,其言也讱。 由以上孔子对仁的阐述,我们可以归纳为以下三点: 1. 仁代表了美好的德行。 2. 仁代表了对社会秩序的遵守。 3. 仁代表了对于社会的其他成员的爱。 应该注意的是,其中的第三点中的爱,并不是无差别的爱。根据孔子原本的思想,这种爱是分三等级的,首先是父母,这就对应了“孝”;接着是家族中的其他成员;最后才是其他无血缘关系的人。第二点与第三点合起来看,儒家的仁的思想中透露出了一种希望:在一种在温和高尚友爱的环境下,人人对于社会秩序都自觉遵守,对于等级也自觉维护。把第一与第三点合起来看,这些社会秩序与等级的维护可以通过恭、宽、信、敏、惠、忠等德行在社会中教育与提倡来使人在内心中认同直至与自觉维护。孔子与后世的儒家不仅仅提倡用德行风尚的提倡来使人们自觉向仁靠拢,他们还提倡“礼”的道德规范作用。从这三点来分析,“仁”的灵魂在于社会中的人对于社会秩序等级的遵守,在于社会的和谐友爱。从逻辑上来讲“仁”,逻辑的起点是宗法等级中的血缘情爱,逻辑的展开是“爱人”,逻辑的准则是礼,逻辑的最终结果是对自我人格的体知语修炼,以达到知天命、耳顺、从心所欲不逾矩的完美境地。 那“义”又是什么?在先秦时期,“义”主要有以下含义: 1. 义为仪。《说文》:“义者,己之威仪也。”《尚书大传》“尚考太室之义,唐为虞宾”,郑玄注曰:“义,当为仪;仪,礼仪也。” 2. 适宜、适当。《释名·释言语》:“义,宜也。裁制事物使合宜也。” 3. 道德原则的总称。《孟子·公孙丑上》:“其为气也,配义与道。”赵歧注曰:“义谓仁义,所以立德之本也。” 4. 有利、利益。《墨子·经说下》:“义,利也。”由此可以看出,“义”从祭祀礼仪之威仪的本义,被引申为合宜、有利等伦理道德的意义。 而孔子所言的“义”,其实便是通过个体的自觉来约束自己的行为,使之合乎礼制。“义”成为一种行为规范和道德、价值的原则和标准。在核心中智、信、恕、忠,可以由“义”阐发出来。 由此看来,“仁”与“义”相结合,奠定了儒家思想的基本格调。“温和下的秩序”在我看来能够简要地概括儒家的思想。而“礼”则作为这种“社会秩序”在道德上的约束,规范人们的行为。相较于“法”的外在的残酷与刚硬,儒家的“礼”显得内柔却不失其锋利,因为“礼”的着力点是人的思想。“礼”的教化,与其所代表的社会道德,对于一个人的影响是终生的。所以,“仁义”与“礼”,在古代思想道德方面对于社会的稳定的维护作用是巨大的。这是古代中国统一多民族大封建国家在相对落后的交通条件与现代国家与民族观念缺乏下能够维系的秘诀,也是汉民族乃至于中华民族在如此长的复杂的历史时期中能够长期存在并维持相对的团结状态的关键。 在儒家思想及其影响下形成的文化下,中华传统文化有鲜明的包容性与温和性。中华文化本身也融合了许多的其他的文化思想。中国人向来以和为贵,“和”很大程度上收到了这种影响。这就让中华传统文化能够不断吸收其他文化内涵,不断丰富自己的内涵。相较于西欧与东方的穆斯林长期的相互征战,中华大地上和谐的氛围与民族间的相互融合向来是主流。 我们面对传统文化,我们在现代该怎样对待?怎样让它从封建时代脱离出来,获得现代生命? 让传统文化获得现代生命的唯一途径就是让传统文化获得其现代的阐释。让传统文化获得现代阐释的途径是研究传统文化的核心本质,发掘本质内涵中与中国现代社会相适应的部分进行重新阐释与发扬。对于传统文化的封建化与一些落后的元素,我们应该淡化其影响。进行重新阐释时必须把握我们传统文化的核心,所进行的阐释才能不偏离传统文化的根本,才能根本适应我们民族的灵魂性格。在传统文化的核心的价值观中在现代仍然能够适应的与重新阐释的,我认为有基本的两个观点,礼仪道德的约束与社会成员之间的爱。 礼仪道德的约束在现代法治社会建设中仍然有不可替代的作用,在中国人眼里,礼是可以凝聚不同民族和地域的一种精神习惯,是社会生活中一切行为的准则。因此,以礼为核心的中国传统礼仪蕴含着特殊的意义,涉及政治、道德和社会等各个方面。周公制礼,作为周王朝最根本的国家制度,对政治稳定产生了重要作用。特别是《周礼》、《礼记》等书的出现,使礼和礼仪具有系统的文本形态,从而用来教化人民。另外,中国传统礼仪也是一种道德文化,学习和遵守礼仪是达成善良人格的重要途径。相对于法律,礼相对灵敏与迅速。再者,礼仪与道德的教化能够深入到社会的底层,相对于冷冰冰与不易学习的法律,群众在日常生活中也更加希望用温情的礼仪与道德来与其他人打交道。面对社会中的一些事件,群众也首先从社会道德方面对其做评判。礼与道德在中国社会中有很深的基础,是社会主流舆论的导向。所以在今天提倡礼与道德,特别是在人的成长阶段,对于培养一个健全公民是有现实意义的。提倡礼与道德,必须先在人的头脑中树立正确的价值观,这样才能对现行的道德产生共鸣。现代社会的新道德与新礼仪应当与我们的“八荣八耻”与“社会主义核心价值观” 相结合,吸纳现代社会的平等,开放,个性的元素。在生活的细微处贯穿新的礼与礼仪的教育,养成讲礼的习惯,耳濡目染,内心才能真正地接受礼的教化。新礼、新道德与新的正确价值观的相互作用才能真正在让人形成良好的人格,做一位人格健全的公民。这不同于传统文化中纯粹的“忠”,礼与道德像法律,不以个人的意志为转移,它们也像法律,维护着每个人的尊严。结合中华民族的具体情况,这对于维系一个人与社会的关系,形成良好的社会氛围,维系社会与政治的稳定有着重要作用。 社会成员之间的相互的爱也非常重要,这个有差别的爱在现代应当阐释为对父母的敬爱,对于妻子孩子的亲爱,对于其他成员的友爱。对于现代社会中的冷漠与欺骗,一方面我们需要法律与道德的规范与约束,另一方面对于社会成员间的爱的提倡将形成一种温情,和谐的社会氛围来感化这样的黑暗。这对于我们现在所倡导的和谐社会建设有巨大的现实意义。在友爱的教育下,社会成员相互之间的第一反应将会是友善的,在友善的第一印象下,很难会产生大恨。再者,己所不欲,勿施于人。将心比心,将更好地化解人民内部矛盾。对于父母的敬爱不同于传统纯粹的“孝”,它不是上而下的封建的义务与长辈一言堂,而是现代社会的父母与孩子之间最真挚的爱。对于妻子与孩子的亲爱,当然不会是“夫为妻纲”,“父为子纲”。这种亲爱的是由现代社会的平等与和睦来阐述的,其形式是自由的。这些新的阐述在摒弃了封建的糟粕的同时,也能让传统文化更好地适应与服务与现代社会的建设。 发挥好传统文化的这两个作用,顺应我们社会的特点,对于社会的积极健康向上发展,提升文化软实力有着不可替代的作用。中华传统文化不是一成不变的,它不和特定的政治经济绑定,它需要不断顺应生产力与社会的发展,永远地伴随我们中华民族

九月 30, 2021

Life of a Pixel Chromium浏览器内核渲染原理 学习笔记

Chromium浏览器内核中,来自前端的内容如何在最终转换成为屏幕上的各个像素点,也就是浏览器内核渲染过程,这是一个复杂的工程上的一系列步骤。对于这些复杂的步骤我们需要把握的方面包括该过程每个阶段的设计思想、数据模型、数据模型的交互。深入而仔细地理解上述内容,有利与我们阅读庞大源码中始终保持清醒找准定位。下面我将基于我对Life of a Pixel的理解仔细来讨论这个过程。 Life of a Pixel输入与输出 首先需要谈谈输入与输出,这一系列步骤的输入成为Web Content。它由一系列现有协议所定义的一套描述Web内容的文本主要组成,当然也包括其他引用内容。现有的协议(我们常称为编程语言),通常是HTML、CSS与JavaScript。这三者分别有定义了Web内容的结构内容、样式、逻辑。但这并非严格分工,在当下流行的前端设计思想(前后端分离)中JavaScript正在承担着越来越多的职责。JavaScript本身也正在不断地变得独立,近年来逐渐跳出浏览器这个平台来独立发挥其作用(node.js、react-vr)。 另一方面,谈谈输出。如何绘制屏幕上的像素,涉及到计算机图形学方面的理论与工程。在传统上,我们可以认为计算机向屏幕输出内容经历了以下步骤。应用软件将其想要表达的图形内容转换成为对操作系统与图形相关的函数库的调用(OpenGL、Direct X等),这些函数库通过操作系统中安装驱动程序及其他操作系统有关服务向硬件(GPU等)传送数据与指令,并操纵硬件的计算核心与存储器(GPU等)完成光栅化等步骤、最终将硬件(GPU等)存储器中的最终内容转化为向屏幕输出的信号。在这方面,由函数库(OpenGL)所提供的API都是比较低级的。 举个例子,原来我也做过OpenGL相关的编程,虽然现代OpenGL提供一些模型与协议(如管线等)来简化工作,但是其提供的模型以及依照模型设计的API带有明显的硬件气息。对于OpenGL来说,调用者要精确输入预设的或者利用GPU程序计算出的数据其所绘制内容的在几何坐标系下的位置、颜色以及绘制顺序。 由输入输出来大致推断,浏览器的工作是按照先行前端协议(前端编程语言)及其附属多媒体、数据等方面的内容精确理解前端开发者对于Web页面的描述,并通过数据的层层流动与转换计算推断出图形函数库所需的各类信息。现行前端协议的复杂性与兼容性与鲁棒性要求使得这一步骤的实现十分复杂与庞大。而对于性能与稳定的要求更提升了设计与实现上的难度。实现这一系列不仅仅是技术上,而且也是软件工程上的难题。 页面生命周期综述 由上述对于输入与输出的讨论,我们可以理解Chromium团队提出以下有关于页面生命周期。 基于Web Content经过若干步骤产生相关数据模型。 数据模型随时间、交互等因素的不断更新。 其中,对于第二点要求尽可能少地快速地修改由初由第一步骤产生的数据模型,尽可能降低计算成本。其原因在于,第一步骤产生数据模型所进行的相关计算与数据模型的交互对于现有平均性能水平来说依然十分昂贵,所以不断重复执行第一步骤在实际环境中不可取。 初步渲染步骤概论 对于上面提及过的在输入与输出之间的相关步骤,我们将在下面按照前后顺序进行有关论述。 DOM 对于HTML来说,其语法规则有着明显的树状特征。这使得利用HTML能够方便地描述出文档结构并附带部分内容。所以我们需要提取出其中地结构信息与内容信息。在这一步中,HTML文档解析器将解析HTML文档中的文本并转换其为DOM树。 有关于DOM树,不得不提的是JavaScript对于DOM树的操作能力,我认为这也是JavaScript的核心内容之一。JavaScript借由该能力能够对页面进行控制、更新与内容添加、更改、删除等操作,我认为这是前后端分离思想的技术基础。上述能力对DOM树的实际操作由V8引擎具体完成,该引擎实现了JavaScript的操作DOM树的API,使得JavaScript具备该能力。 CSS(style) CSS有着两方面的主要作用,筛选或者指定其作用的HTML标签,定义其所对应HTML标签的内容。对于我们来说,其本质在于筛选或者查找出DOM节点,并将样式信息与DOM节点对应起来。 其中有个问题需要注意,在CSS文件对于某一个或者几个DOM节点的样式的描述中,可能存在着未定义、重复定义、冲突、无效的样式定义。针对这个问题,Chromium团队引入了重计算(recalc)针对DOM树每一个节点计算所有对应的Computed Style。 Layout 有了上面两个步骤提供的信息,我们需要进一步的转换。将DOM节点与Compute Style一道转换为视觉几何结构(Layout)。在这一步中我们需要解决的问题包括文字、表格、布局等等元素的在页面最终位置、排布及大小。为了能够对这些信息进行有效计算并且整理,Chromium构造了Layout Tree。这个数据结构旨在容纳结构有关信息并且进行上述工作。 在代码中,以下结构描述了有关信息。 // A LayoutRect contains the information needed to generate a CGRect that may or // may not be flipped if positioned in RTL or LTR contexts. |boundingWidth| is // the width of the bounding coordinate space in which the resulting rect will // be used. |position| is used to describe the location of the resulting frame, // and |size| is the size of resulting frame. struct LayoutRect { CGFloat boundingWidth; LayoutRectPosition position; CGSize size; }; Layout树与DOM树的节点关系并非一对一,有一些情况下DOM节点并不需要有其对应的Layout对象或者其可以放入其他有关的Layout对象中(通常为父节点对应的Layout对象)。其中有一点正在变化的内容需要注意,legacy layout object与LayoutNG。LayoutNG的提出,是为了解决当前的Layout对象中输入输出及其他中间内容混杂并且在计算过程中父子节点相互引用的问题。原先的设计首先带来了节点数据有效性的确定的问题,正在计算的节点需要判断其引用的数据是其需要的最终状态,不然节点当前所计算出的数据依然可能要在稍后重新计算,这提升了算法设计的复杂度。与此对应,LayoutNG的输入与输出分离,而且输出一旦产生其状态就已经确定且不可以修改,结构清晰,所以在算法设计上相对简单有效率。 ...

九月 7, 2021

方便快速地写好.gitignore

如果你建立了一个Git仓库,.gitignore是你需要考虑的一个选项。 如果你想套用模板的话,推荐使用如下仓库地址中提供的模板: 进入仓库地址: https://github.com/github/gitignore 各种模板覆盖比较全,可以根据你的具体需求组合使用。

五月 26, 2021

正确地进行SSH的相关配置文件的权限设置

如果当导入外部的SSH公私密钥之时,可能需要在家目录下新建.ssh文件夹并将公私密钥移动到该文件夹下。但如果没有将权限问题配置正确的话,会导致密钥无法使用的问题。 这里给出一组命令对分别配置文件夹、公私密钥的权限进行设置: % chmod 700 ~/.ssh % chmod 600 ~/.ssh/id\_rsa % chmod 600 ~/.ssh/id\_rsa.pub % chmod 600 ~/.ssh/authroized\_keys

五月 26, 2021