了解计算机系统内部运作:内存、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 等。总线还负责检测,枚举接在其上的设备。

2021年9月30日

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 会将处理器切 换回原来的操作模式。

2021年9月30日

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

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

2021年9月30日

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

在讨论传统文化之前,先来讨论民族。先来看看民族的概念:民族是指经长期历史发展而形 成的稳定共同体,一群基于历史、文化、语言与其它人群有所区别的群体。根据定义可以知 道历史、文化、语言是区本民族别于其他民族的重要的三个元素。而这三个元素并不是相互 独立的,相反,它们是相互影响,相互交融的,谁也离不开谁。 从文化来看,一个民族的文化渗入它的历史之中,影响着本民族个体乃至全体的思维,进而 影响在特定历史条件下本民族面对历史提出的问题所作出的决定。类似地,文化渗入语言, 一个民族的语言的文法,词汇,表达中都有明显的文化痕迹。所以,文化极大地塑造了一个 民族的性格,赋予一个民族它的灵魂,是一个民族区别于其他民族的极为重要的因素。中华 传统文化之于中华民族来说亦是如此。 但是近代以来,中华传统文化在中国人心中逐渐地淡化,甚至于个别个体全然忘却。近来频 繁地出现了种种违反道德的社会事件,从表面看仅仅是违反道德而已。但是深究其根本,则 是社会道德的母体传统文化本身,被本民族个别个体所轻视,淡忘所导致的道德约束力的下 降。本民族的传统文化在民族个体在内心不被认同,将导致中华民族的凝聚力与认同感的下 降,对于中华民族来说将是灾难性的。就像当下,面对日美文化,中国青年热衷接受;面对 传统文化,中国青年则一脸茫然。但这又是为什么?中华传统文化到底是什么?未来将何去 何从? 在近现代中国人的理解中,传统文化似乎制约了社会的发展。诚然,传统文化中三常五纲, 逆来顺受,宗法等级确实在一个现代人看来是落后的。并且传统文化中缺乏对于论断的进行 思维论证的态度也是不可取的。既然对于传统文化产生了这样的疑问。那么在封建时期,传 统文化的状态就是我们应当首先讨论的问题。 中华传统文化在近代为什么不符合社会的发展潮流,是因为传统文化本身被很大程度地封建 化。明清时期,是中国古代的封建社会的晚期。这是封建专制主义中央集权制度的强化的时 期,也是中国的封建皇权走向巅峰的时期。理学的出现与统治阶级对于理学的强化,逐渐束 缚了我们民族的人格与思想。在封建专制主义制度的强力作用下,传统文化很大程度上向着 适应封建统治的方向上发展。为什么中华民族会进入这样一段历史时期。其实这并不是这些 皇帝个人的意志的体现,而是传统文化影响下中华民族的性格与历史大环境所造就的。 其 实,当中国封建制度走到宋代的时候,相对于前代唐代,能很明显地感觉到文化与制度双重 影响下的人格的束缚越来越强。 我认为,出现这种情况的正显现了封建制度已经越来越不能适应于生产力与思想发展后人们 自然产生的对于新兴的生产关系,人格自由的需求。面对新兴的事物,传统封建统治阶级在 落后的世界观与对于落后生产关系的理解的影响下,对接受、利用与管理这些新兴事物显得 力不从心。草率地将这些新兴事物纳入他们熟悉的统治体系是不可能做到的,他们的统治体 系与他们的思想本身并没有这些基因。他们对这种令他们感到纷乱的事物产生了本能的恐 惧,努力让社会与人们的思想重新回到他们认为的样子中去。 于是到了明代,底层农民出身的朱元璋封建文化与历史的巨大惯性的影响下,不可避免地渴 望社会的秩序与道德的重建,建立一个统一的君主专制的封建的王朝。但是,在他的那个时 期,新兴事物与思想的出现让社会变得复杂,社会本身已经不可能恢复到秦汉与隋唐时期。 这让他本能地走向了对于人民更严格的控制。兴八股,造户籍,明律法,这是他采取的措 施。纯粹的以孝治天下的主张,更是希望国家臣民能够在伦理道德的强力约束下接受统治。 选拔国家人才的科举制度,也成为了知识分子思想上的一道重重的枷锁。对于这些知识分子 出身的官员,他们的思想举动被牢牢锁定在私塾五经的范畴。丞相的废除与锦衣卫,东厂的 设立,更加体现了中央皇权的加强,中央皇权对于社会的控制更加牢固。于是在明初这种恐 怖环境下,新兴事物根本无力与已经占据绝对优势的全副武装的封建秩序对抗。 需要注意,古代中国的律法,一直被人民视为对于臣民严重违反社会道德规范的严厉惩罚与 对于臣民行为的在道德以外的严格规定,并不是现代意义上保护人民权利的法律。 在思想 方面,封建化的中华传统的文化逐渐强化了它的“趋同”的特征,在这种环境下新兴事物的传 播本来就缓慢。随着传统的儒家文化的逐渐地封建化与经文化,对于接受这些新兴思想的少 数人,一直被排除在主流社会之中,不仅受到道德与封建法律的联合打压,更受到在封建世 界观影响下成长起来的自己对于自己思想的怀疑。再者,古代中国人对于“天下”,“朝 廷”,“君父”的根生蒂固的认识下,在王朝更替,集权封建制度控制相对较弱的时期,仍然 会自然地选择走向另一个新的集权封建制度的统治。 所以,在被封建地主阶级改造的儒家 思想的巨大惯性下运转中国,两千年的对中华民族的思想的改造与对于儒家文化的单方面阐 释下,使得以儒家思想为主体的传统文化已经变成他们他们维系统治的有力工具。以儒家思 想为主体的中华传统文化在两千年的封建社会的进程中逐渐向它的“趋同”与“秩序”的方向上 倾斜,越来越不利于生产力与新思想的发展,社会进入了相对稳定的停滞时期。 在明朝后期到乾隆时期,皇帝对于西方传来的闻之未闻的科学技术始终是抱着玩的态度的原 因也出自于这。在君君臣臣父父子子的不断的强化中,中国的封建制度走到了它的尽头。 既然前面阐释了传统文化并不能将我们中华民族带入近代的原因,那么我们的传统文化与西 方文化的究竟有没有优劣之分? 西方文化与我们的传统文化绝无优劣之分。西方文化个性化契约化的文化产生有它的历史渊 源。日耳曼首领靠他们的战士为其战斗,但这并不是无偿的。相对地,首领必须定期为战士 们提供他们理应的到的战利品。这是领主应该做的,也是必须做的。这样,首领与战士之间 的关系依靠着这种简单的契约关系维持。在这种关系下,战士的人格本身独立的,而首领无 权直接干涉战士的私人生活。到了中世纪,首领变成了领主,战士变成了封臣,这种习惯仍 然存在。领主分给封臣,封臣也必须履行他们的封建义务。封臣的封臣不是领主的封臣,这 是因为他们在越级之间没有契约关系。农民与封建主的关系大抵如此。在这种社会运作制度 下,个人有相对的独立性。西方的封建制度并不像封建时代的中国一样,形成了相对集中的 中央封建强权。契约观念与罗马法的巨大影响共同作用下产生了西方现代意义上的法律,更 好地保证了人的权利。在中世纪与近代之交的西欧的城市法律下自由的气息更加明显,为新 事物的产生创造了有利的条件,加速了西方的近代化。这是《自由论》的作者密尔所认为有 利于人类社会的发展的趋势。西方比我们提早进入近代,并不是西方的文化就是好的,就该 拿来作为我们的文化。没有相应的历史积累沉淀,生搬硬套注定无法成功,无法与我们的民 族的本性相适应。 ...

2021年9月30日

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 团队提出以下有关于页面生命周 期。 ...

2021年9月7日

为MacOS的终端加上代理设置

MacOS 现在默认采用 Zsh,所以在用户家目录下寻找.zshrc 配置文件,如果没有则自行创 建。 编辑.zshrc 文件,在最后加入下列代码 \# set proxy alias proxy='export all\_proxy=socks5://127.0.0.1:1234' alias unproxy='unset all\_proxy' 添加完毕后,保存,在终端输入以下命令 % source ~/.zshrc 完毕。 如果需要使用代理,则预先输入 proxy 命令。如果需要取消代理,则输入 unproxy 命令。 或者如果需要默认启用代理的话,在.zshrc 配置文件末尾添加 % export https\_proxy=http://127.0.0.1:7890 http\_proxy=http://127.0.0.1:7890 all\_proxy=socks5://127.0.0.1:7890 保存。 % source ~/.zshrc 完毕。

2021年5月25日

HyperV Ubuntu虚拟机开启增强会话 调整分辨率 启用剪切板

在 HyperV 下 Windows 系虚拟机默认就能够开启增强会话。在增强会话下可以方便地和宿 主机共享剪切板与文件,并且在增强会话开启时也能够比较方便地调整分辨率。而 Ubuntu 等 Linux 系统下则默认为基本会话,分辨率的调整需要修改引导文件,而剪切板和宿主机 是独立的非常不方便。 进过查找,找到了一种可以在 Ubuntu 20.04 下开启增强会话的方 法,使用后有效,遂在此记录。 首先需要开启增强会话的话必须先在创建虚拟机的时候开 启第二代虚拟机选项,在首次启动的时候关闭 Secure Boot。记得在安装 Ubuntu 的时候不 要开启自动登录选项。 在终端下输入 % wget https://raw.githubusercontent.com/Hinara/linux-vm-tools/ubuntu20-04/ubuntu/20.04/install.sh % sudo chmod +x install.sh % sudo ./install.sh 在 Windows Power Shell 运行以下命令,然后重启。 \> Set-VM -VMName <your\_vm\_name> -EnhancedSessionTransportType HvSocket 重启后,就能看到链接虚拟机后会话已经为增强会话模式而后 Ubuntu 进入的 XRDP 登录页 面,此时正常输入用户名密码即可。

2021年5月25日

解决oh-my-zsh plugin 'zsh-autosuggestions' not found 与 plugin 'zsh-syntax-highlighting' not found问题

安装 zsh 插件 zsh-autosuggestions 或者 zsh-syntax-highlighting 的时候,我们一般 会遇到 oh-my-zsh plugin ‘xxx’ not found 的问题。现在,我们分析并解决 oh-my-zsh plugin ‘zsh-autosuggestions’ not found 与 plugin ‘zsh-syntax-highlighting’ not found 问题。 问题产生的原因是,没有把插件的代码仓库克隆到本地位置上,所以你想要 的插件其实并没有被安装。 解决问题非常简单,只需要简单输入以下命令: $ git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions $ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting $ source ~/.zshrc 然后,你可以重新打开 shell,可以发现问题已解决。你也可以用该方法解决其他插件的此 类问题。

2021年5月25日

Synology Drive版本控制功能使用心得

经过一段时间对于 Synology Drive 的版本控制功能的使用,总结出以下不建议使用版本控 制的常见使用场景: Synology Drive 版本控制不适用于对音乐库与视频库的版本控制。这两种场景适合使 用回收站机制来管理。因为音乐和视频库的容量变动幅度较大,在一段时间内进行大量 的删除或者格式转换操作后,磁盘可用空间将迅速下降。不建议将音乐库与视频库加入 到版本控制。 版本控制不适用于对于应用程序相关数据文件(例如 Docker 容器的映射目录下的相关 文件)的备份,经过长期观察,版本控制对文件修改并不敏感。我往往发现经常变动的 应用程序数据文件一直维持在较老的版本,并没有在应用程序对该文件作出修改后立即 备份上一版本。建议使用 Cloud Sync 或者 Hyper Backup 对应用程序数据文件进行备 份。 上述问题经过长期使用总结出,如果发现其他问题则会更新此文章。

2021年5月19日

UNIX伪终端

介绍 最近在研究有关 UNIX 的相关理论知识,在此记录相关重要概念备忘。 概述 伪终端是指,对于一个应用程序而言,它看似一个终端,但事实上它并不是一个真正的终 端。 通常一个进程打开伪终端主设备,调用 fork。子进程建立一个新的会话,打开一个相 应的伪终端从设备,将其文件描述符复制到标准输入输出错误,然后调用 exec。伪终端从 设备称为子进程的控制终端。 看起来像一个双向管道,从设备上的终端行规程使得我 们拥有普通管道没有的其他处理能力。 伪终端的典型用途 网络登录服务器 最典型的例子是 telnetd 和 rlogind 服务器。 在 rlogind 服务器和登录 shell 之间有 两个 exec 调用,这是因为 login 程序通常在两个 exec 之间检验用户是否合法。 窗口系统终端模拟 终端模拟器最为 shell 和窗口管理器之间的媒介。每个 shell 在自己的窗口中执行。 shell 将自己的标准输入、标准输出、标准错误连接到 PTY 的从设备端。 script 程序 script 程序将终端会话期间的所有输入和输出信息复制到一个文件中。 使用 script 的不 足是必须处理文件中的控制字符。 expect 程序 在非交互模式中驱动交互模式运行。 运行协同进程 当通过管道与协同进程通信时,标准 I/O 库会完全缓冲标准输入和标准输出,从而引起死 锁。 现在协同进程的标准输入和标准输出就像终端设备一样,所以标准 I/O 库会将这两个 流设置为行缓冲。 观看长时间运行程序的输出 由于重定向到文件时,标准 I/O 库将完全缓冲它的标准输出。 打开伪终端设备 PTY 表现得就像物理终端设备一样,因此应用程序就无需在意它们在使用的是何种设备。 在伪设备可用之前,它的权限必须设置,以便应用程序可以访问它。 ...

2021年2月10日