信号量之读者写者问题——写者优先
2025-04-12
本文介绍了读者写者问题中实现写者优先的解决方案,要求写者线程优先级高于读者线程。当写者到来或正在写时,读者线程需被阻塞,直到所有写者完成写操作后才允许读者读取文件;而在没有写者时,读者线程可同时读取文件。通过信号量和互斥锁的配合,伪代码实现了写者优先的调度逻辑,确保线程安全和优先级规则的正确性。
250 words
|
1 minute
Linux内核调试
2025-03-20
本文介绍了Linux内核调试的基本流程,包括源码获取、内核编译、文件系统镜像加载、QEMU启动以及GDB调试。通过关闭内核地址随机化(KASLR)和开启调试信息,确保内核可调试性。文章详细描述了如何使用syzkaller生成文件系统镜像,并通过QEMU启动虚拟机进行调试。最后,通过GDB远程连接到虚拟机内核,完成断点设置和调试操作
387 words
|
2 minutes
fork()系统调用的“一次调用和两次返回”
2025-03-19
本文分析了fork()系统调用的“一次调用和两次返回”现象。fork()用于创建子进程,父子进程共享代码,但通过写时拷贝技术避免完全复制内存。调用fork()后,内核完成内存分配、数据结构复制、进程列表更新及调度操作。父进程返回子进程的PID以便管理子进程,子进程返回0表示自身无子进程。深入内核代码可发现,fork()通过copy_process()和copy_thread()函数分别设置父子进程的返回值,确保进程间通信和调度的正确性。
786 words
|
4 minutes