计算机的定时和计数

计算机的定时和计数通常是一回事。 提供定时和计数能力的芯片是 8253/8254 三个计数器结构相同,相互独立 CLK 外部时钟信号 Gate 门控制信号 Out 对外输出信号 CPU 通过数据总线控制总线和 8253 挂接。 $A_1$ $A_0$ 功能 0 0 Counter0 0 1 Counter1 1 0 Counter2 1 1 控制端 对 8253/8254 编程 写入方式字 写入初值 $D_7$ $D_6$ $D_5$ $D_4$ $D_3$ $D_2$ $D_1$ $D_0$ 计数器 读写格式 工作方式 数制 读写格式 00 锁存当前值 01 写低8位,高8位置0 10 写高8位,低8位置0 11 先写低8位,再写高8位 数制: 0 二进制 1 BCD 当初值为类似 2000 时,使用 BCD 有效提高写入速度(低8位为0,高8位为 0010 0000) 计算初值 $$ \text{定时时间} T_{out} = \text{计数初值}n \times 计数时钟周期 T_{CLK} $$ $$ \text{计数初值} n = \frac{T_{out}}{T_{CLK}} = \frac{f_{CLK}}{f_{out}} $$ 写入端口 使用 IN 和 OUT 命令进行编程...

2024/01/10 · updated 2024/01/10 · 166 words · Finley Ge

中断和8259A中断控制器

在之前学习计算机组成原理的时候就曾经研究过中断: TD-CMA下计算机组成实验:带中断的复杂模型机 | Finley’s Blog 今年学习了汇编和微机接口,这是一篇对中断机制和中断控制器 8259A 的总结性文章。 术语 中断:暂停当前程序,转去处理异常或外设请求程序 主程序 中断服务程序 ISR: Interrupt Service Routine 断点:中断时,主程序中被终止指令的下一条指令地址,被压入栈中进行保护。 中断源:引发中断的事件或设备。 内部中断: CPU执行程序错误,例如除法错 外部中断:CPU外部的中断,外设提出的中断,如电源故障 中断类型号:每个中断源分配一个编号,即中断类型号 中断接口:实现中断管理的逻辑电路被称为中断接口。8259A 可编程中断控制器 中断识别:CPU确定哪一个中断源发出中断请求的过程。找到中断源对应的中断服务程序的入口地址,转去进行处理 查询法: 软件查询,确定中断源 硬件法:硬件法,由可编程中断寄存器提供中断类型号 中断向量:中断服务程序的入口地址: CS:IP 中断向量表:将系统中的所有中断向量集中起来,按照中断类型号从小到大的顺序存放在内存某区域。(数据段0段中) 中断响应:收到中断请求,CPU满足响应条件则进入中断响应周期。接受响应的条件 CPU当前指令执行结束 没有更高级的中断请求正在执行 CPU处于开中断状态,(IF = 1) 改变 IF 的状态: STI 开中断 SeT Interrupt CLI 关中断 CLear Interrupt 中断响应周期需要完成的动作:(CPU 硬件自动完成) 清IF, TF标志 将 FLAGS、CS、IP 压桟保存 查找中断向量表,获得 ISR 入口地址,转而去执行 ISR 8086/8088 微机中断系统 8 位二进制数表示一个中断类型号 一共支持 256 个中断源, 放置在 0 数据段的 0 ~ 3FFH (1KB)...

2024/01/08 · updated 2024/01/10 · 417 words · Finley Ge

obsidian dartaview 插件的使用技巧

Obsidian Obsidian - Sharpen your thinking是一款很强大的笔记软件。 它的 强大 之一就在于有着丰富的第三方插件系统。 本文要介绍的是 Obsidian 的一个重量级插件,名为 Dataview GitHub - blacksmithgu/obsidian-dataview: A high-performance data index and query language over Markdown files, for https://obsidian.md/. 你可以通过 Obsidian 自带的社区插件市场中安装。 Dataview 消歧义 需要注意的一个是对于前端开发者而言,你可能认为的 Dataview 是 DataView - JavaScript | MDN。这和 Obsidian-dataview 无关,本文为了简洁,下文中所说的 dataview 都是指 obsidian-dataview Dataview 是一个用来索引和查询你的 vault 中的 md 文件的插件。它提供了两种强大的语法支持,一种称为 DQL (Dataview Query Language),是一种类似与 SQL 的语言。除此之外还支持 JavaScript 语法。 DQL DQL 四种类型 Table List Task Calendar 分别生成不同的片段 一个最简单的DQL应当如下 1 2 3 4 ```dataview [Table/List/Task/Calendar] from ["path"/"#tag"] where [expression] 除此之外还包括 sort 用于排序, group by 用于分组。 例如我要做一张表格,用来筛选我的电影目录中没有看过的电影,按照创建时间升序...

2024/01/07 · updated 2024/01/07 · 259 words · Finley Ge

为什么 Golang

序言 本文是为了 《编译原理》期末大作业而准备的。 本文将讨论 Golang 的特点 直观 —— 奇怪而严格的语法 还记得在高中的时候,接触到 Golang 只觉得这个语言的语法很奇怪 例如变量声明,要使用 var 标识符声明,变量名竟然在类型名前面 1 var Variable int 而语法又莫名严格 例如如下语句是无法编译的: 1 2 3 4 5 func function(a int) error { // ERROR! // ... return nil } 因为强制要求大括号不换行 如下语句也是不行的 1 2 3 4 5 a := [ 1, 2, 3 // error! ] 需要改成 1 2 3 4 5 a := [ 1, 2, 3, // end comma is nessceary ] 对于访问控制也是很奇怪,首字母大写就是 Public,小写就是 private...

2024/01/01 · updated 2024/01/07 · 1082 words · Finley Ge

在Linux环境下的汇编语言测试环境的搭建

学汇编语言肯定还是要练习的,ZJUT 的汇编课程使用的汇编语言是微软的 MASM。 最理想的实验环境就是 DOS 系统。 Dos 模拟器 哥们的这篇文章中用的 dosbox 其实并不好用: 例如无法迅速调整界面字体大小,导致在高分辨环境下十分瞎眼。 笔者推荐使用 dosbox-staging. 在 Archlinux 下安装: 1 paru -S dosbox-staging-bin 开箱即用,十分方便。 配置 下载常用工具 (上述连接也是哥们的服务,笔者比较懒hhh) 解压到某一个文件夹中,例如笔者是 ~/Learn/asm/tools Dos模拟器需要手动挂载盘符,而且没有添加 PATH 变量的情况下十分甚至九分的难用。 在配置文件 ~/.copfig/dosbox-staging.conf 最后(autoexec块)后加上 1 2 3 MOUNT C: path/to/your/dir C: SET PATH=%PATH%;C:\TOOLS 上述命令假设你的工作目录下的tools目录中为masm.exe等 DOS 系统不区分大小写 除此之外 masm 在进行汇编以及 link 进行链接的时候还需要敲一堆回车,为了方便笔者编写了以下的 bat 批处理文件 1 2 3 4 5 echo compile and run %1 masm %1.asm %1.obj nul.lst nul.crf link %1.obj, %1.exe, , , , %1....

2023/12/04 · updated 2023/12/13 · 118 words · Finley Ge

Typst 0.9.0 发布了,参考文献格式大更新

昨天(2023年10月31日) Typst 发布了 0.9.0 版本。 我最关注的更新内容是参考文献格式的更新,引入了 CSL (Cite Style Language)支持,理论上可以自定义参考文献格式。而且默认支持了中国国标 GB/T 7714-2015 和 GB/T 7714-2005 格式。 但是同时引入了几个 Breaking Change Changelog: https://github.com/typst/typst/releases/tag/v0.9.0 也对 hayagriva 引入了几个 Breaking Change 如何使用自定义的参考文献格式 只需要在 #bibliography中制定 style 属性即可: 1 2 3 something something @test #bibliography("bib.yaml", style:"gb-7114-2015-numeric") 然而在笔者试用的过程中发现GB/T 7714-2015 的格式存在问题,自己去下了一个 .csl 文件也是错的。(渲染结果可看issue) 于是应该是 typst 编译器存在问题了,笔者已经提交了一份 issue: https://github.com/typst/typst/issues/2548 静待修复罢(

2023/11/01 · updated 2023/11/01 · 50 words · Finley Ge

2023 11月的 Neovim 最新配置

近期 Neovim 生态变化 最近几个月(2023下半年) Neovim 的插件生态发生了很大的变化. Packer.nvim 停止维护 首先是高达 7.2k stars 的插件管理器 Packer.nvim 在今年八月宣布停止维护. 而笔者在使用 neovim 的时间内都在使用 packer.nvim. 作为现代 neovim 的最重要的工具之一, 插件管理器必须使用被长期维护的, 因而笔者决定切换到 lazy.nvim lazy.nvim 的界面更为美观, 而且有高度灵活可以自定义的懒加载 hook, 从而大大提高启动速度. null-ls.nvim 停止维护 之前依赖 null-ls 的诸多功能可能在未来一段时间后 break. 所以必须找到一个可以替换 null-ls 的工具. Neovim 配置思路 笔者并不认为读者 应当 照抄某人的配置, 因为其按键绑定, 插件的使用习惯等等都会不同. 因而笔者写作本文旨在描述一个具有拓展性的配置. 笔者总结了以下几个原则: 1. 使用 Lua 作为配置的脚本语言 作为一个 neovim 用户, 自然要使用作为 一等公民 的 lua 作为配置脚本语言. 这将保证配置文件的长期可用性. 所有配置的入口文件则是在nvim 配置目录的根目录下的 init.lua 文件中. 2. 模块化配置 笔者认为作为一个具有在无图形化界面条件下对服务器进行运维功能的编辑器, 应该拥有一个 “最小模式”. 最小模式应当包括所有的按键绑定和其他基础的界面等等的配置. 并且不能配置特殊的字体, 不能配置插件(毕竟你的设备可能由于种种原因无法正常使用国际互联网) 此外不同 种类 的配置应该被放置在不同的文件中, 以供检索和修改....

2023/10/30 · updated 2023/10/31 · 360 words · Finley Ge

写在离开德国前

今年八月我参加了我校的游学项目。 项目分为两部分,前半个月参观了欧洲德国、比利时、意大利、奥地利、捷克、斯洛文尼亚等国的几个城市。 后一部分是在亚琛工业大学进行的 Python 有关的课程,也有一些校方安排的活动。 本文写在即将离开亚琛,即将结束这段行程前,对我,半个也到一个月在德国“准生活”的一个回顾。 气候 最直接的感受是气候:德国的气候整体偏凉爽,个人感觉是很舒服的,确实不需要安装空调。甚至入秋以后,晚上睡觉会感觉到冷,在最后这几天(八月份下旬)我每天的服装已经是必须要穿衬衫的了。 德国的雨水很大,雨水来的快去的快,雨过后天晴很快。 雨伞在德国是必需品。 所以在这边,风衣、夹克等是很常见并且很实用的。 德国的纬度高,日照时间很长,夏天九点天才会大黑。不过德国人基本上很少有夜生活,晚上在外面基本上没多少人。 生活 公共交通 在亚琛,公共交通相当发达。 公交车可以坐到任何一个地方。 公交车上也很少有拥挤的情况, 说一个细节:公交车上有划定给婴儿车和轮椅放置的位置, 除此之外德国的公交车可以向右边倾斜,以便于婴儿车、轮椅等上下。 我亲眼所见的是一个妈妈推着两个婴儿车坐公交。 饮食 饮食其实每个人有每个人的主观感受,我个人的感受是完全能适应西餐。 德国的肉类、奶制品的质量比国内要高。香肠、肉饼、各种奶酪、各种酸奶。 欧洲的早餐似乎都很统一:各种面包+各种香肠+各种酸奶+咖啡/茶 等等 我觉得我是能吃得惯的:我在这边的早餐一般都是两个欧包或者是一个欧包+两片面包,再加n杯果汁,一碗酸奶,一杯咖啡。 欧包我会从中间破开,夹入2、3片不同的香肠,夹入一点奶酪,还有一片芝士片。 德国香肠很棒,德国的猪排等等也很棒。 本人滴酒不沾,所以无法对德国啤酒做出评价。 吃饭的价格很便宜,一顿很好的餐(例如一个猪排、沙拉、薯条,再配一杯可乐)最多10欧。 实际上我最喜欢的 Döner Sandwich 或者是 Döner Wrap 只需要 6,7欧(就能吃饱)^[1]在大学食堂就更便宜了。 [1]:FYI, 德国最低时薪13€ 楼层 这个标题似乎看起来很奇怪, 不过德国这边的楼大多数都是从0层开始计数的,和国内不同。 支付 很少有地方只收现金,但是还是有的。 来德国不管是旅行还是留学必须要有的一样东西就是钱包:而且有可以装零钱的夹层的钱包 因为欧元5元以下是没有纸币只有硬币的。 RWTH 亚琛工业大学,实际上叫 RWTH (Rheinisch-Westfälische Technische Hochschule) RW似乎是莱茵-威斯特法伦, T就是工业/技术 Hochschule 是高度学院, 可以感受到的是这里的华人留学生很多, 在市中心的学校旁边,有连续好几家中餐馆, 我去吃的时候里面坐满了中国人。 德国人 印象深刻的德国人 在亚琛主火车站(Aachen Hauptbahnhof) 旁边的一家 Döner Haus, 里面有个很可爱的大叔,留着一字胡,打破了对德国人不懂幽默的刻板印象。 第一次进去点单,点了一个 Döner Sandwich,大叔用不知道什么语言(很可能是德语)问我要什么酱料,指着辣酱做了一个手舞足蹈的表情,很可爱。...

2023/09/01 · updated 2023/10/31 · 77 words · Finley Ge

TypeScript 中有关"空"的类型

在 TypeScript & JavaScript 中有众多的有关“空”、“未定义”的类型: null undefined void never unknown 本篇文章将辨析以上这些类型。 TypeScript 的类型 需要注意的是 TypeScript 只是将 ts 语句翻译为 js。换言之 ts 并没有运行时的类型强制。 因此在运行时使用 typeof 并不会显示 void, never 等 ts 特有的类型。 Null & Undefined Null 和 Undefined 是 JavaScript(ECMAScript) 中就存在的两个类型。 众所周知的是一个变量(or 对象)必然由两个元素组成: 数据和结构(即类型)。 在 ECMASCript6 标准中 Undefined 和 Null 是两个基本数据类型,而他们分别之对应了一个值,即为 undefined 和 null. 二者的区别细微: null 的本质是一个 object,而 undefined 不是 1 2 3 4 5 6 7 let a; // undefined let b = null; // undefined a == b; // true typeof a; // undefined typeof b; // object let c = Number(a); // c == NaN let d = Number(b); // d == 0 Void 表示空,通常定义到没有返回值的函数上。...

2023/08/28 · updated 2023/10/31 · 286 words · Finley Ge

PostgreSQL 和 MySQL 的关键区别(转,翻译)

原作者 Mark Smallcombe 原文 PostgreSQL vs MySQL: The Critical Differences | Integrate.io 数据类型支持:PG支持更多的类型(数组、JSON、哈希表、地理数据) SQL 规范性 PG 对高阶的SQL标准有更好的遵循 MySQL 过去有一些与严格的SQL标准的偏差,不过在最新的版本中提升了规范性,并且在继续弥合这种偏差 性能: MySQL 已被证明适合读取密集型工作,这使得它更适合web应用和网页 PG 的架构更适合复杂的查询和分析工作,适合在需要高级SQL特性的场景下工作 复制和高可用: MySQL 提供多种复制方法,包括主从复制,但是它的一些聚类解决方案可能需要第三方工具。 PG 提供内置的同步复制,更容易实现高可用和数据冗余 全文搜索: PG 包含了开箱即用的鲁棒的全文搜索能力,允许复杂的文本搜索操作 MySQL 也支持全文搜素,但需要额外的配置以及外部引擎例如InnoDB或者MyISAM 外键约束和触发器: PG有对外键约束和触发器的高级支持,使得它是有复杂的数据完整性和业务规则的程序的更好选择 MySQL 也有外键约束和触发器,但是过往并不严格执行这些 许可证: PG 使用 PostgreSQL License MySQL 使用 GPL,但是现在也提供商业许可

2023/07/29 · updated 2023/10/31 · 46 words · Finley Ge
晋ICP备2022008114