操作系统:Pintos Project3 详解

前情提要

老样子,代码开源在 http://victoryang00.xyz:5012/victoryang/pintos-team-20 .

这次的实现非常难,如果是课程要拿学分的话,一定要提早开始设计,一个良好的设计思维导图,在实现的时候非常有用,大概需要的是什么时候同步锁,三个 table 之间的关系是什么?在debug的时候一定要围绕着这张思维导图来,这样至少不会全不过。

我画的思维导图。

总之,本次作业要实现的功能是 disk-backed virtual memory. 进入本次的文件可以发现vm 文件夹里什么都没有,那就需要自己创建。我建了这些文件。

需要在 Makefile 里添加:

以及在 makefile.kernel 里面加入你新加的文件。

开始的悲惨境地

一开始 pintos 几乎没有任何对虚存的支持。 有的只是 process 地址和空间分离和userprog 的load。再看一看工具:

1.为了load & save 虚存分页的 swap partition

2.bitmap, 一种有点像两位哈希的数据结构,用于寻找在 swap partition 里面是否有剩余空间。

3. hashtable, 由于实现 page-frame frame-memoryLocation 之间的 O(1) 查找,极大优化性能。(此步可用linked list 代替,只不过查找变成 O(n) )

4.已经实现好的 lock acquire & lock release, 也就是说你不用管 syncronization ,只需要当黑盒api 调用就行。

5.已经全pass 的proj2. (syscall)

6. debug 工具。pintos-gdb,网上有一个更好用的 Docker-for-pintos,不过好像只支持macOS。这次大概的 debug 模式就是,先运行,看报错,如果找不到报错,就一步一步 gdb 来,看看输出某一个输出的时候会先调用什么,确定位置,一般是在 kernel mode 下锁不对的问题。然后确定程序在这个特定的位置应该运行什么,改一下先后顺序。一般调通一个就能过一片。如果你在 debug 用了过多时间,不如重新来一遍思维导图。

P.S. 这些一定要好好看懂。

心态解析&需要做的东西

为 load program binaries 实现 demand-paging,(纯 demand-paging)

为 stack pages 实现 demand-paging, (需要先分配一个frame 给第一个 stack page, 也就是上一个的特例)(写完这个就能拿到除24个testcase以外的所有分数)

stack

和NUS大牛喝咖啡 | a coffee with big giant of NUS

greatness of big giant

I would say that none of a boy in the great university with a decent research background will be a median people. For a people who get NRF in singapore after just getting his Ph.D degree (equivalent to the QianRen Proposal in China), he's just great. Talking a little bit of his CV.

He graduated from IIT Mumbai and still has great research relation with IIT Kunpur. Both of the cities I have been to. I would say most of the people in IIT is super intelligent, but for lack of money, they tend to focus on the theory and mathematical proof. No exception of him and the guy I met in CRVF-2019.

What's his strength? I think he thinks things really fast and directly to the essence. For the SAT-solver part, with the pysuedo-code, he could quickly come up with the useful testcase to test the usability. I think great man should be equipped with insight. He obviously has it. For the EEsolver, a new and fast solver to find negative false bugs in programs. He insists to test the uniformity of the benchmarks. Proof is not just the benchmarks. To find the algorithm inside, we should

被当良久的树莓派软路由

credit: https://mlapp.cn/369.html#more

这是一个非常牛逼的搬运工,他教会了我如何在docker里面编译嵌入式的系统,看看他的其他几个博文,你一定很有收获。

在docker里面跑openwrt有种把linux当作半虚拟环境的赶脚,只是至今为止gpu的科学计算还没有很好地半虚拟,即在宿主机和端机都能使用。

可惜的是brm2835的wifi驱动没有开源,这导致5ghz的很不稳定。大概是安全和利益考量吧。

拿到一块 Hikey970 用于测试

捡到一块宝

学校和华为海思有合作,送了几块卖不出去的板,虽然生态上没有树莓派好,但这性能可不是吹的,kirin970+npu+bt+gps+wifi.

一点来自官方的测试教程

https://doc.bwbot.org/en/books-online/hikey970-doc/

拿到之后可先试试能否打开确定开机开关为on off off off,依次连上hdmi,鼠标键盘,电源,宽边的typec 连上ubuntu 的电脑.

lsusb 可以看到 google Inc. 说明现在bootloader 和 系统都是官方刷的aosp 进去以后能亮.

那我们就开始刷带npu加速的tensorflow的lebian吧.驱动什么的都比aosp全一点.

来自CSDN的教程

先把开机开关变为 on on on off.这相当于fastboot模式. 从96boards下载.

刷入lebian

在ubuntu系统里, 解压,这里把宽边的typec 连接到ubuntu电脑.在终端里输入.

./binaries/xxxx.sh

等结束就刷好了.(如果要用lubuntu一定要重新刷bootloader,因为这样刷是全部覆盖)在所用linux发行版中,由于这个有npu的tensorflow支持,所以就用这个发行版.

拓展空间

进入系统先拓展空间,因为没有充分拓展64g空间,

把开关拨至on off off off,在未上电的情况下连接好鼠标、键盘、网线,在上电后再接设备有时候会没法驱动。给板子上电。
等待系统启动完成,网络连接正常的情况下网口的两个灯会闪烁,两个灯不亮的话检查下网线有没有问题。
正常情况下应该可以看到登陆界面。用户名和密码都是shunya,登进去系统后如下:

apt-get install gparted

gparted-pkexec

按fix
选最大的那个盘
打开后可以看见硬盘的分区,一共有sdd1~15,一共15个分区,其中sdd15是用户分区(userdata),也就是我们要扩展的分区,我们要把灰色未分配的29G全部给sdd15
选中sdd15右键,选择resize选项,弹出对话框,拉动可以调整分区大小,把它拉满,再点resize
接下来点击下图中红框中的绿色按钮执行更改,再点击apply确定
再点击“close”

df -h

ddk转换模型

开机以后就可以搞事情了,有几个可以通过华为ddk转换模型的测试:

https://github.com/shunyaos/gender-recognition-hikey970

https://blog.csdn.net/qqqzmy/article/details/82870377

安装ROS:credit 蓝鲸BBS

https://community.bwbot.org/topic/547/hikey-970-debian-%E9%95%9C%E5%83%8F-%E6%9C%89opencl-%E5%92%8C-tensorflow/19

接下来要做的教程

1.ROS

2.AOSP

ctf全国邀请赛-线下

又是一个躺的比赛,本来就i想着睡觉算了,反正都能那三等奖和那1000块。不过还是花了一点力气,最后第19名。除了清北没来,其他复旦白泽和交大王伊俊组的23333sj都来了,也算打出了一点点小名气。(去年前年因为q7,我们都是第一左右)

行,拿到题目总共一道pwn,三道web。环境开源在http://victoryang00.xyz:5012/victoryang/My_CTF_respo