XV6 0x12
视频结尾论文部分VM FOR APPLICATION原语论文论述的(primitive)原语及在linux上的实现 trap 中断处理函数 ——> sigaction prrt1 减少访问权限 ——> mprotect portN 节省TLB刷新 ——> mprotect unport增加访问权限 ——> mprotect dirty脏页 map2 ——> mmap unix/linux today mmap,unmap 将文件映射到虚拟内存,允许用指针来操作文件 mprotect,修改页权限 sigaction,定义信号处理程序 USER-LEVEL...
vue3学习
VUE3VUE3:Typescript + 组合式API + setup语法糖 这里主要是来自b站尚硅谷VUE3的官方课堂笔记,有一些自己的修改。 介绍vite 创建项目 由原生 ES 模块提供支持的现代前端开发与构建工具。 Vite 利用现代浏览器的原生 ES 模块导入和构建时预编译功能。 模块热更新。当文件更改时,Vite 只需要重建一小部分模块。 123npm create vue@latest 创建项目npm install 安装依赖npm run dev 开启项目 目录结构 12345678910111213.├── README.md├── env.d.ts //环境类型声明文件,定义文件类型├── index.html //应用的入口 HTML 文件├── node_modules //npm install下载的项目依赖├── package-lock.json //锁定依赖版本,确保每次安装依赖时的一致性。├── package.json //项目的配置文件├──...
XV6 0x10
lab10mmap(hard)系统调用的添加过程这里就不赘述了,首先,我们先添加vma结构体。 1234567891011121314151617181920struct VMA{ uint64 addr; //起始地址 uint64 size; //大小 uint64 prot; //权限 int fd; //文件描述符 int used ; //引用计数 int offset; //偏移 struct file* file; //文件名 int flag; //标志};// Per-process statestruct proc { struct spinlock lock;... struct VMA vma[16];};//在进程创建初始化memset(&p->vma, 0,...
XV6 0x11
lab11networks arp:将互联网协议(IP)地址解析为对应的媒体访问控制(MAC)地址。 ip:定义了数据包的格式以及如何在源和目的地之间传输这些数据包。 udp、tcp:UDP和TCP都是传输层协议,它们在IP层之上,负责应用间的数据传输。 网卡与处理线程之间有接收队列、和发送队列,以控制网络流量。 DMA(直接内存访问)环允许硬件(如网络接口卡NIC)直接访问系统内存,而无需CPU的干预。 考虑一个路由器接收和转发包 随着输入数据包的增多,转发的数据包也增多 受限于cpu等因素达到最大值 因中断活锁不断产生中断,导致cpu时间全部用于处理中断 解决方案:通过设置一个中断线程轮询,当有数据包到达时产生中断,唤醒线程,处理数据包;当数据包处理完成时,再重新打开中断,线程休眠。 Your...
Codeforces Round 960 (Div. 2)
A 这题在一次操作中,玩家可以执行以下操作: 选择一个索引 iii (1 ≤ i ≤ n),使得 a[i] ≥ mx,并将 mx 设为 a[i]。然后,将 a[i] 设为 0。 Alice先手,判断 Alice 是否有必胜策略。 刚开始我兴冲冲取最大值,判断是否为奇数,然后就WA了。 其实这题属于博弈论,只要有一个数的数量为奇数,则Alice获胜 Alice选择最大的奇数,取走一个数,该数的数量变为偶数。 此时该数后的数后的数的数量都为偶数,则该问题转变为对手的问题,我们易推断出对手必输。 1234567891011121314151617181920212223242526272829303132333435363738#include <algorithm>#include <iostream>using namespace std;const int N = 105;int main() { int t; cin >> t; while (t--) { int arr[N]; for...
2024_7_17暑期集训
序言还得是黄神!比赛直接AC四题!挽救了我们队! 2488: Reposts 这题有点像食物链,即第二人转发消息(repost)到第一个人,再以此类推。要求求最大的传播链长度,由于我们不需要考虑该网民不知道消息转发的情况。因此可以采用队列来存储传递信息,用map存储食物链 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <algorithm>#include <iostream>#include <queue>#include <string>#include <unordered_map> #include <utility> //pairusing namespace std;typedef pair<string, string> PII; //二元组queue<PII>...
XV6 0x9
lab9文件系统文件系统API 文件描述符必须与文件名无关(修改文件名后仍然可以通过文件描述符操作文件) 记录offset(当前读写位置) 友好的文件名 在用户/进程间共享文件 持久性 inode满足以下两种条件时可以删除文件 link count == 0 open fd count ==...
Codeforces Round 957 (Div. 3)
A 题目大意是对输入的a,b,c三个数,每个数可以自增,但是总自增值不得大于5。求$abc$的最大值。 这题直接使用暴力做法 1234567891011121314151617181920212223242526272829#include <iostream>#include <algorithm>using namespace std;int num[3][1005];int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> num[0][i] >> num[1][i] >> num[2][i]; } for (int i = 0; i < n; i++) { int maxnum = 0; for (int a = 0; a <= 5; a++) { for (int...
2024_7_11暑期集训
3900: 两袋面包 我们只需要按照题意解出即可。 12345678910111213141516171819202122#include <iostream>using namespace std;#define int long longsigned main() { int y, k, n; while (cin >> y >> k >> n) { bool flag = false; for (int i = 1; i < n - y; i++) { if ((i + y) % k == 0) { flag = true; cout << i << " "; } } if (!flag) cout << "-1" << endl; else cout <<...
XV6 0x8
lab8多进程coordination ——sleep/wake pipes disk read wait broken sleep:在无锁状态下,中断处理提前调用了 wakeup(void *chan),当 sleep(void* chan, struct spinlock *lk) 执行时,wakeup(void *chan) 已经执行完毕,导致进程持续睡眠。因此sleep(void* chan, struct spinlock *lk)是原子的,在释放锁的同时将进程睡眠。 进程结束,父进程为什么要wait: 因为子进程无法释放自己的堆栈。 父进程可以获取子进程的退出码,并根据退出码决定接下来的操作。例如,如果子进程出现错误,父进程可能需要重新启动子进程或执行一些错误处理逻辑。 方便进行进程同步 Memory allocator(moderate)我们将内存分配器的锁分配给每个CPU,同时,初始化锁。 12345678910111213141516struct { struct spinlock lock; struct run...