注意:这篇文章上次更新于1092天前,文章内容可能已经过时。
This article was last updated1092 days ago, the content may be outdated.
今天开始开启了人生新阶段,从学生身份转变为社会人儿了。
也从 3 年的 CVer 即将变成 Coder 了。
3 年的 CV 生涯可以说是毫无建树,希望在未来的两年能够有所收获,成为一名工程师。
码农界流传着一种说法,想要获得长足的发展,基础一定要牢固。所以我决定花半年左右的时间学习《操作系统》这门课程,至于为什么是操作系统,因为 jyywiki.cn 的教程制作精良,不学有些可惜了。
本系列的博客主要为 jyywiki.cn 的示例代码作笔记,以便于加深印象。
绪论
Demo: 数学概念的探索与发现
1 | # Life is short; you need Python. |
这是一段 Python 的代码,用于画一个函数的图像,其中 z3 库可以用于解方程(就先这么认为吧), numpy 很熟悉了,现代人工智能的基石,sympy 与 numpy 不同,它是用于符号计算(而不是数值计算)的。
1 | def interpolate(n, xs, ys): |
第二个代码比第一个更加晦涩一些,主要涉及库的使用方法。这个函数的目的是给定一些点,找到一条多项式曲线能够穿过这些点。# 1 的部分构建了一系列关于系数的线性方程组,这可以说是大学线性代数的知识,也可以说是初中的解方程组知识,# 2 的部分是求解方程组获得系数,最后 f 返回符号方程。
其实我看的也很晕。
于是调试了一下看看输出的都是什么东西。
1 | xs = [-1, 0, 1, 2, 3] |
Demo: 模拟数字系统
1 |
|
这是一个模拟数码管的程序,嗯… 记得单片机课程上学过数码管啥的,但是忘没了啊。这段代码实际上就是 VHDL 的写法。
但是这里有一个我已经遗忘了的 C 语言语法,结构体初始化的时候使用.符号来指定初始化成员。
1 | reg b1 = {.in = &X1, .out = &X}; |
为了验证这段程序是正确的,写一个 Python 脚本来解析一下上个程序的输出。
这里涉及到了 Unix 哲学,“管道”。
1 | ./a.out | python3 seven-seg.py # The UNIX Philosophy |
seven-seg.py 的写法如下:
1 | import fileinput |
这里有一个很有趣的想法,是我没有想到的。当看到DISPLAY 的时候我大概知道是要进行替换,我的想法自然是从 a.out 输出的字符串中进行解析,获得 A - G 的值。
而这段代码却直接把 a.out 的输出直接作为 Python 代码执行了。exec(line),然后再通过 globals() 字典获得 A - G 的值。

Demo: 模拟 RISC-V 指令执行
这个Demo就更难了,作了一个模拟指令执行的程序来求解鸡兔同笼问题。
1 | //@file_name: uncore.c |
1 | //@file_name: rvemu.c |
1 | @file_name: ji_tu.txt |
1 | a.out: rvemu.c uncore.c |
这个 Demo 实在看不懂,不过也有所收获,就是这段代码也有一个我遗忘的 C 语法,用 : 来指定结构体的默认值。
1 | typedef struct { u32 op:7, rd:5, f3:3, rs1:5, rs2:5, f7:7; } inst_t; |
看来我的 C 基础不行啊。


