Amiriox's Storage

Declaration does not declare anything.

amiriox@terminal: ~/journey
$ whoami > /dev/null # RSS: /atom.xml ## Tutorial TLDR 下划以查看博客文章 $ tldr amiriox 折鸦/折鸦夜明け前/無暝; Amiriox Makinohara > 极端社恐, 线上线下基本上是两个人, 但欢迎聊天/交换友链 > 计算机科学狂热爱好者, OS/C++/Rust, Vim 党 $ vim ~/anime.rs const anime_arr: [anime; 10] = [末日三问, 虚构推理, 魔女之旅, 四叠半, 浪客剑心, 葬送的芙莉莲, 我心危, 比翼之吻, 孤独摇滚, GBC]; -- INSERT -- 1, 1 All # cat ~/hobbies.md * 游戏: 空洞骑士/只狼:影逝二度/怪物猎人/赛博朋克2077/明日方舟/丝之歌.unwrap() * 听音乐: * J-POP: 可惜夜/夜鹿/majiko/Reol/Aimer/花谱/结束乐队( * Vocaloid: 洛天依/诗岸/星尘Infinity * R&B: 陶喆/王力宏 * 正在培养的爱好: 板绘/像素画/摄影/文学 ## 不断 refactor 的灵魂 $ objdump -s -j .rodata /usr/bin/amiriox_soul | grep -oP '\s\K[^\0]*' 0x00401000 保持必要的力量与清醒, 去努力维持您自己的宁静与尊严 0x0040104C 水利万物而不争,故万物莫能与之争 0x0040107B He who has a why to live can bear almost any how.

现代计算机通过每一层都是下一层的缓存的抽象构建出存储器的层次结构, 依据程序的局部性原理巧妙解决了存取信息的速度远小于 CPU 处理速度的问题.

前置知识可看: CSAPP3e第六章(存储器层次结构) | Amiriox’s Storage

Cache lab 分为两个部分:

  1. 第一部分写一个模拟程序, 模拟缓存的行为; 如果对缓存的原理和行为理解透了难度不高, 主要难点是必须用 C 写
  2. 第二部分是优化一个矩阵转置的函数, 转置有着鲜明的”两个数组访问模式相反”的特点, 导致必然有一个数组的访问模式缓存不友好. 要理解分块技术和缓存冲突不命中的常见情况及调整措施. 这个 lab 要求比较极端, 给定的缓存组关联度是 \(1\), 也就是说只要是同一组的就会冲突不命中抢夺缓存行.

这是我做起来体感最痛苦的一个, 很多人也有相同的感受. 不过 lab 本身是没什么问题的, CMU 是一款我的问题

阅读全文 »

禁用大量常见运算符, 强制规定特定位运算运算符和运算符数量限制实现特定运算

所谓 Hacker’s Delight

在写 CSAPP Lab 之前一定要仔细阅读文档, 一行要求都不能落下, 比如这个 lab 就有一些无聊的要求:

  1. 要求变量声明必须在开头(这 C89 古董规则太搞了)
  2. 不允许使用大字面量(超过 0xFF 的)

为了您的阅读方便, 本文对于特定位/位模式采用行内引用 (01, 1000, 1101), 对于数字的十进制值, 位的编号等采用 \(\LaTeX\) 的数字字体 (\(3, 4, 5, 6\))

阅读全文 »

本文是 OSTEP (Operating System: Three Easy Pieces) 的简单笔记, 由于 OSTEP 和我写博客的叙述思路很像(日常往自己脸上贴近hhh), 所以这里就只列一个大纲供自己复习.

并且本文建立在 一条操作系统的使命 | Amiriox’s StorageCSAPP3e第六章(存储器层次结构) | Amiriox’s Storage 两篇文章的叙述之上, 仅仅增量补充了必要的内容

一些重要的主题 (如调度和并发) 可能 (几乎是一定) 会单独开一篇文章, 在基于这本书介绍的内容下再补充一些我其他地方学到的相关知识和经验.

OSTEP 是一本无论从知识本身还是讲解技巧上都比较不错的书, 推荐读原书而非总结博客.

阅读全文 »

组件介绍

  • cpu 内存, 系统总线, pci总线
  • 早期简单设备GPIO直接控制
  • PCI/USB总线

I/O 相关概念

I/O传输方式:

  • PIO(PMIO/MMIO轮询), Interrupt, DMA (中断不一定一定比PIO好)

I/O传输内容:

  • 操作系统组件与驱动交互, 驱动与设备交互
  • 驱动传递给设备命令和数据
  • 文件/流/virtio-mmio的共享内存(1, 2略)
阅读全文 »

(六) 7.13:

回顾会议内容, 总结任务目标:

  • arceos/tour/* 添加对其他架构 (aarch64/x86_64/loongarch) 的支持
  • arceos/tour 下新增一些例子, 体现 ArceOS 特定功能, 如图形显示功能/文件系统功能/新调度算法功能

把工具链换到最新的:

  • #[naked] 更改为 #[unsafe(naked)]. 裸函数使得编译器不会为函数生成序言和尾声代码(比如保存/恢复寄存器, 设置栈帧等), 操作系统开发的部分场景要求完全控制寄存器细节

  • 同时将 asm! 改为 naked_asm!. 裸函数内一般没有 Rust 代码, 因为会隐含地依赖序言和尾声, 所以几乎都是内联汇编代码

  • naked_asm! 不支持伪指令和宏(虽然我不知道为什么原来这里要写伪指令, 可能是和 arm 统一?), 所以要把那一段全部改写成 RISC-V 汇编, 好在代码量比较少, 如果多了我还真想不出什么方便的方法

阅读全文 »

…以下计划仅供参考, 不必全部完成, 我估计这计划我得弄到大三结束才能弄完来着 更不要因此有压力

你更应关注的是 current state 的稳定性与质量, 而非整体的计划与进度

无论是学习计划还是玩的计划均不以完成为目的, 以尽可能多地体验和接触为目的, 同时训练和适应学习状态

事实上, 唯一必要的反而是”不以计划完成为目的, 尽可能体验当下”这一点的训练.

从另一个角度来讲, 进度上的最优解也是”不以进度为目的”的心态才能达到的方案.

阅读全文 »

复合数据

在实际的程序设计中(模拟数学或现实系统), 操作(过程)要应用到的数据往往不是一个单独的基本类型数据, 而是多个基本类型数据复合起来的: 例如分数是由分子和分母确定起来的, 单一的分子和分母都不能称为分数. 而将分子和分母以某种方式复合起来比单独管理分子和分母具有更强的可读性, 减少了编码中的精力消耗; 同时加强分子和分母之间的关系(分子和分母的关系应当强于这两个符号之于别的数据的关系)也符合某种(哲学上的)道理.

为此, 我们需要构造一种抽象使得这两个数据被复合起来:

  • 首先要有构造函数, 将这分子和分母复合为另一个新的数据
  • 然后还要有选择函数, 因为在实际操作中我们需要操作分子和分母本身(来模拟分数的运算)而不是分数本身
  • 最后, 分子和分母及其操作应当符合某些规则(即数学上分数运算上的规则)

这就是复合数据的需求: 将数据定义为一组适当的选择函数和构造函数, 以及为了使得这些过程成为一套合法表示, 它们就必须满足一组特定的条件.

阅读全文 »

程序设计需要考虑的基本元素

  1. 基本的表达形式: 基本的数据表达基本的过程表达
  2. 组合的方法: 将基本表达组合起来构成复合的元素, 如 Lisp 的组合式
  3. 抽象的方法: 为复合对象命名, 从一个新的抽象层次操作非基本单元

在 lisp (SICP 使用 scheme 方言) 中有如下体现:

阅读全文 »
0%