**BCST (Bilibili Computer Science Topics) Project**
*Copyright Declaration*
This repository is a part of BCST project. BCST project contains the source code and videos produced by yangminz. The videos are published publicly on the bilibili by [yaaangmin](https://space.bilibili.com/4564101). The source code is published on github [yangminz](https://github.com/yangminz). Any repository or video under BCST project is exclusively owned by yangminz and shall not be used for commercial and profiting purposes without yangminz's permission.
**Build**
```bash
[python3 | py3 | <nothing>] ./cmd.py build [project name]
```
**Run**
```bash
[python3 | py3 | <nothing>] ./cmd.py run [project name]
```
**计算机系统 - Computer System A Programmer's Perspective (CSAPP)**
Hello 观众朋友们大家好,这个Repo是我在做《深入理解计算机系统》(CSAPP)视频时所用到的代码,还包括一本设计手册,设计手册还在慢慢更新。代码、手册以及视频都是为了给大家介绍CSAPP这本书,帮助大家阅读和理解最基础的计算机系统知识。特别是本科低年级的同学(大一大二),准备转专业的同学,以及跨专业考研的同学,通常会掌握一些基本的编程语言,但是可能对计算机系统本身并不足够了解。我的视频、代码以及手册就是希望帮助大家学习,尽量通过代码实现CSAPP上的知识点,然后再通过视频讲解,将基础的计算机系统知识连贯起来。
下面是目录:
#### Chapter 02 - Representing and Manipulating Information
计算机可以看作对Bit串的翻译器,为了了解计算机系统,我们首先需要了解Bit在计算机中是如何被表达与解释的,简单了解这些位运算的操作,背后的代数结构。
**2020-09-29** 关于有符号与无符号整数,以及它们背后的代数结构。我设计了一张环形图,方便观众理解Bit串到有符号与无符号整数的映射。这张环形图在手册里更加精美: [bilibili-video](https://www.bilibili.com/video/BV1mp4y1a7X4/)
**2020-10-01** 我们第一次动手写C语言代码。一些简单的位操作运算,例如判断一个十六进制数中是否全部都是字母,使用卡诺图对布尔代数进行化简。一个基于位运算的数据结构:树状数组。[bilibili-video](https://www.bilibili.com/video/BV1Hi4y1E7Bn/)
**2020-10-16** 浮点数的四种类型:规格化、非规格化、无穷大、非数。`uint32_t`到`float`的数值转换,特别是关于约分的规定:[bilibili-video](https://www.bilibili.com/video/BV1vy4y1C75t/)
#### Chapter 03 - Machine-Level Representation of Program
拥有Bit构成的基本数据类型以后,我们开始考虑构造一台原始的冯诺依曼结构的计算机。其实,我们是在做一个计算机的模拟器。为此,我们需要模拟CPU中的寄存器与内存等硬件,在这些硬件的基础上编写指令集。我们的指令集是通过字符串写成的,就像我们通常所写的高级语言代码一样,其实都是文本。我们用一些编译的基础知识来解析字符串指令集,将它们翻译成指令的数据类型,然后按照操作符与操作数解释执行这些代码。
在这里,我们其实做了一层抽象:文本与字符串指令就像一台虚拟机,类似于JVM中的字节码,CLR中的IL,我们解释执行的是虚拟机指令。字符串指令集上,我们实现一些简单的指令,例如`add`,`sub`,`mov`,最重要的是关于过程控制,也就是函数调用的几个指令:`call`,`push`,`pop`,`ret`,我们对内存栈的控制蕴含在这几条指令之中。
**2020-10-22** CPU寄存器的模拟器,这是我们模拟器的第一行代码。我们利用结构体与联合等异构的数据类型来描述寄存器:[bilibili-video](https://www.bilibili.com/video/BV1vy4y1C75t/)
**2020-10-31** 指令的数据结构,用来描述一条汇编指令的操作符,源操作数以及目的操作数,包括操作数中的立即数、寄存器等:[bilibili-video](https://www.bilibili.com/video/BV1Na4y1s7m6/)
**2020-11-05** 一个CPU的指令周期,我们第一次执行了一条汇编指令:[bilibili-video](https://www.bilibili.com/video/BV1sZ4y1V7uu/)
**2020-11-06** 模拟器的运行若干条指令,形成一个程序。为了访问内存资源,我们需要设计内存访问接口。完成`call`指令:[bilibili-video](https://www.bilibili.com/video/BV1vK4y1E7sy/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/27311bd90c7fe7971aeb9cda41fa9e7fee96e787)
**2020-11-18** 递归与树与栈之间的关系,实现`push`指令:[bilibili-video](https://www.bilibili.com/video/BV1tz4y1y7JZ/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/31eeb74aa3489a3f9fac02b9c65b202f6a13ee55)
**2020-12-04** 完成`pop`与`ret`指令,至此,我们已经在内存栈上实现了函数的过程控制。我们开始第一次代码重构,将in-memory的结构体指令数组转换为字符串指令数组,并且开始解析字符串指令:[bilibili-video](https://www.bilibili.com/video/BV1WK41137JT/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/004c77a87c6e26ca7a232f72661e099f7bae8b75)
**2020-12-08** 为了解析字符串指令,特别是其中所要用到的立即数,我们开始写字符串到十进制与十六进制数的转换。我们使用确定有限自动状态机去扫描字符串,设计状态机的状态转移:[bilibili-video](https://www.bilibili.com/video/BV1ty4y1S7z1/), [git-commit](https://github.com/yangminz/bcst_csapp/tree/997cf33cd40fbdfc81e71d9d029163e5df80ecc1)
**2020-12-18** 解析字符串操作数中的内存与寄存器格式:[bilibili-video](https://www.bilibili.com/video/BV1zT4y1M7GE), [git-commit](https://github.com/yangminz/bcst_csapp/tree/34beeb4bde0cf5b80757977acff63f8faed6b696)
**2020-12-27** 完成字符串指令的解析,并且在字符串指令上运行了程序。设计状态码,支持条件判断:[bilibili-video](https://www.bilibili.com/video/BV1Qf4y1e73j), [git-commit](https://github.com/yangminz/bcst_csapp/tree/7ec8dbed8ba8362d94508c507b4e535c24d7fa8a)
**2021-01-04** 实现`jmp`,`jne`,`leave`指令。到此为止,我们已经可以模拟函数的递归调用了:[bilibili-video](https://www.bilibili.com/video/BV1Ey4y1v7aG), [git-commit](https://github.com/yangminz/bcst_csapp/tree/17a1d75fdf410fd9456ab6316044ffc3c0331703)
**2021-01-15** 总结与回顾我们到此为止所做的一切工作,关于数据类型和冯诺依曼计算机,一个简化的计算模型——URM:[bilibili-video](https://www.bilibili.com/video/BV1LU4y14792/)
**2021-01-23** 除了冯诺依曼计算机,我们还有另一种计算模型:λ演算。冯诺依曼计算机中,函数是数据;λ演算中,数据是函数:[bilibili-video](https://www.bilibili.com/video/BV1Wv411s7yU/)
#### Chapter 07 - Linking
模拟了计算机的硬件基础以后,我们准备开始在模拟器上运行程序。因此,我们需要设计自己的程序。考虑到我们将指令集用字符串实现,因此我们的程序也是字符串的汇编指令。这一步工作可以由编译器为我们实现,我们需要做的是完成一个简陋的链接器,将可执行的文件链接起来。
正如我们在上一部分所说的,字符串指令可以看作一种在字符串与文本上实现的虚拟机,因此我们的链接也是在`.txt`文本上实现的,一个可执行可链接的文本格式,`.elf.txt`。为了设计这个文本格式,我们需要理解Linux中是如何处理ELF文件的。
**2021-02-06** ELF文件从它的Header开始,我们用`readelf`与`hexdump`去看ELF文件的二进制数据,按照Byte去理解ELF文件的Header:[bilibili-video](https://www.bilibili.com/video/BV1MX4y1576E/)
**2021-02-21** Se
没有合适的资源?快使用搜索试试~ 我知道了~
A C language repo to implement CSAPP.zip
共70个文件
c:43个
h:12个
txt:4个
需积分: 5 0 下载量 108 浏览量
2024-01-05
14:27:45
上传
评论
收藏 142KB ZIP 举报
温馨提示
A C language repo to implement CSAPP.zip
资源推荐
资源详情
资源评论
收起资源包目录
A C language repo to implement CSAPP.zip (70个子文件)
sss
files
swap
README.md 56B
exe
main.elf.txt 1KB
sum.elf.txt 1KB
print.elf.txt 1KB
output.eof.txt 909B
.github
workflows
run-test.yaml 347B
scripts
run_tests.sh 145B
src
hardware
cpu
interrupt.c 13KB
sram.c 9KB
inst.c 28KB
isa.c 11KB
README.md 658B
mmu.c 6KB
memory
dram.c 5KB
swap.c 3KB
tests
test_context.c 6KB
test_convert.c 2KB
test_fork.c 8KB
test_pagefault.c 8KB
test_malloc.c 8KB
test_run_isa.c 8KB
test_cache.py 7KB
test_rbt.c 18KB
test_bst.c 13KB
test_trie.c 1KB
test_inst.c 8KB
mains
false_sharing.c 3KB
tsh.diff 29KB
shell.c 17KB
mesi.c 11KB
linker
staticlink.c 31KB
parseElf.c 15KB
linker.c 3KB
process
schedule.c 2KB
syscall.c 3KB
process.c 970B
pagefault.c 15KB
vmarea.c 9KB
fork.c 10KB
common
convert.c 10KB
algorithm
bst.c 29KB
linkedlist.c 11KB
array.c 3KB
hashtable.c 8KB
trie.c 5KB
rbt.c 13KB
malloc
implicit_list.c 3KB
small_list.c 4KB
segregated_list.c 3KB
explicit_list.c 7KB
mem_alloc.c 15KB
block.c 15KB
README.md 8KB
redblack_tree.c 9KB
headers
color.h 777B
memory.h 4KB
cpu.h 6KB
process.h 2KB
allocator.h 2KB
linker.h 3KB
syscall.h 492B
common.h 2KB
instruction.h 2KB
algorithm.h 13KB
interrupt.h 5KB
address.h 3KB
cmd.py 10KB
config.json 14KB
.gitignore 3KB
README.md 21KB
共 70 条
- 1
资源评论
Lei宝啊
- 粉丝: 1945
- 资源: 1331
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
- Linux线程同步机制深度解析与实用指南.zip
- PTA题库C语言解题策略与实战.rar
- SVPWM控制技术的simulink建模与仿真【包括simulink模型,参考文献,操作步骤】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功