2024年3月17日

内存泄漏调试工具

摘要: asan、valgrind、coverity和gpertools都是用于帮助开发人员发现和调试代码中的各种问题的工具,但它们在特定方面有着不同的重点和功能。 ASan (AddressSanitizer): ASan 常用于 C/C++ 代码的静态和动态内存访问错误检测,通过在编译时注入额外的代码来 阅读全文
posted @ 2024-03-17 22:51 未连接到互联网 阅读(79) 评论(0) 推荐(0) 编辑

如何判断操作系统大小端

摘要: 用一个函数判断当前系统是大端序(big-endian)还是小端序(little-endian): #include <stdio.h> int check_endian() { unsigned int num = 1; char *ptr = (char *)&num; return (int)* 阅读全文
posted @ 2024-03-17 21:51 未连接到互联网 阅读(15) 评论(0) 推荐(0) 编辑
2024年3月1日

C++ 类的内存布局

摘要: 基类类内成员的内存分布 常见类内成员大致分为:类内变量、类内函数、静态变量、虚函数等,内存分布遵循: 所有成员会按照声明的顺序布局 类内成员会进行大对齐 类内函数不占用类的内存,存储在代码区 静态变量不占用类的内存,存储在全局/静态区 所有虚函数共用一个虚函数表指针,虚函数表指针不按声明顺序布局,如 阅读全文
posted @ 2024-03-01 21:14 未连接到互联网 阅读(27) 评论(0) 推荐(0) 编辑
2024年2月14日

【XV6】 mmap

摘要: 代码:https://github.com/JasenChao/xv6-labs.git 文件映射到进程地址 题目要求实现两个系统调用:mmap和munmap。主要功能就是将文件映射到进程的内存中。 题目给出了mmap和munmap的声明: void *mmap(void *addr, size_t 阅读全文
posted @ 2024-02-14 19:06 未连接到互联网 阅读(37) 评论(0) 推荐(0) 编辑

【XV6】 file system

摘要: 代码:https://github.com/JasenChao/xv6-labs.git 支持大文件 XV6目前只支持268个blocks大小的文件,一个block(BSIZE)为1024,文件块inode包含12个一级地址和1个二级地址,二级地址指向另一个block,其中存放了256个一级地址,因 阅读全文
posted @ 2024-02-14 19:06 未连接到互联网 阅读(31) 评论(0) 推荐(0) 编辑

【XV6】 locks

摘要: 代码:https://github.com/JasenChao/xv6-labs.git 内存分配器 单个空闲内存列表可能引起多个CPU的频繁锁争用,题目要求设计内存分配器,让每个CPU维护一个空闲内存列表,不同CPU的分配和释放可以并行执行,但如果一个CPU可用列表为空,而其他CPU可用列表不为空 阅读全文
posted @ 2024-02-14 19:05 未连接到互联网 阅读(24) 评论(0) 推荐(0) 编辑

【XV6】 networking

摘要: 代码:https://github.com/JasenChao/xv6-labs.git E1000网络设备驱动 题目已经在kernel/e1000.c中给出了E1000的初始化函数和发送接收函数,要求完善发送和接收的功能。 其他相关的代码,上层的网络协议在kernel/net.c和kernel/n 阅读全文
posted @ 2024-02-14 19:05 未连接到互联网 阅读(64) 评论(0) 推荐(0) 编辑

【XV6】 Multithreading

摘要: 代码:https://github.com/JasenChao/xv6-labs.git 用户级线程切换 题目要求完成用户级线程系统,提示程序要在uthread.c和uthread_switch.S中补充完成。 用户级线程调度和进程的机制是类似的,因此uthread_switch.S可以复制swtc 阅读全文
posted @ 2024-02-14 19:05 未连接到互联网 阅读(17) 评论(0) 推荐(0) 编辑

【XV6】 Copy-on-Write Fork for xv6

摘要: 代码:https://github.com/JasenChao/xv6-labs.git Copy-on-Write Fork 系统调用fork()会复制一个父进程的用户空间到子进程,一方面如果进程较大,复制需要很长的时间,另一方面复制的内存的大部分会被丢弃,造成浪费。 题目要求实现写时复制COW来 阅读全文
posted @ 2024-02-14 19:04 未连接到互联网 阅读(70) 评论(0) 推荐(0) 编辑

【XV6】 traps

摘要: 代码:https://github.com/JasenChao/xv6-labs.git backtrace 题目要求实现backtrace来对堆栈上调用发生错误的地方进行跟踪。寄存器s0包含指向当前堆栈帧的指针,那么返回地址就位于帧指针的固定偏移量-8,前一个fp地址的偏移量为-16。 在risc 阅读全文
posted @ 2024-02-14 19:04 未连接到互联网 阅读(14) 评论(0) 推荐(0) 编辑