操作系统
文章平均质量分 83
灯珑
春暖花开谈恋爱,不如专心搞竞赛
展开
-
解决基于kvm的win10虚拟机只识别2个cpu的问题
在使用kvm+qemu创建win10虚拟机的时候,发现尽管我在virt manager里面指定了72个vcpu,但是win10里面只识别2个cpu核心的现象。由于我宿主机有2个cpu,每个是18核,每个核心有2个线程。初步猜测是因为win10对cpu拓扑结构检测的代码有点问题的原因。如果你的机器是1个cpu的,那么套接字(其实就是插槽)写1,然后核心数就是你要分配给cpu的核心数。解决基于kvm的win10虚拟机只识别2个cpu的问题 – 龙进的博客。欢迎关注我的公众号“灯珑”,让我们一起了解更多的事物~原创 2023-05-19 11:37:31 · 2329 阅读 · 0 评论 -
RAII技术:在Rust中实现带有守卫的自旋锁,支持一定程度上的编译期并发安全检查
本文介绍了一种使用了RAII技术的自旋锁,配合Rust的生命周期及所有权机制,能够在减少代码量的同时,很好的解决自旋锁的“忘记放锁”、“双重释放”、“未加锁就访问”的并发安全问题。并且这种自旋锁能够支持编译期的检查,任何不符合以上安全要求的代码,将无法通过编译。原创 2023-01-16 14:51:55 · 546 阅读 · 0 评论 -
一个在关键路径上面隐藏了11个月的BUG:DragonOS进程切换查错
DragonOS是一个从0开始研发内核及用户态环境的,独立自主的,面向服务器领域的开源操作系统,提供Linux兼容性。GitHub - fslongjin/DragonOS: 一个64位的操作系统。加一行printk(“”);,代码就能正常运行读写几个无关的变量,代码就能跑了加一层函数调用,把某个函数wrap一下,代码就能运行10月份的时候,我和同学调试IDR的源代码,有个单元测试用例就是无法通过。并且,出错的位置总是不相同。将测试用例的数据规模减小之后,就不会报错。原创 2023-01-04 13:12:09 · 390 阅读 · 0 评论 -
简单实现posix中规定的memcmp函数
memcmp函数的功能非常简单,传入两个指针s1和s2,以及要比较的字节大小n,比较这两块内存的值的差异(逐字节比较,把每个字节都翻译为unsigned char)。当比较第i位时,如果相等,则返回0, 否则返回不相等的字节的差值(s1[i]-s2[i]).原创 2022-10-25 23:06:34 · 328 阅读 · 0 评论 -
高效的无锁引用计数结构:lockref
lockref是将自旋锁与引用计数变量融合在连续、对齐的8字节内的一种技术。原创 2022-10-07 11:27:06 · 398 阅读 · 0 评论 -
内核线程的fork与普通的fork的区别
用户程序调用fork()和内核下调用fork(),背后的逻辑是不一样的。咱平时如果没有真的去写操作系统的话,应该不会意识到这个问题。原创 2022-08-02 12:48:03 · 371 阅读 · 0 评论 -
实现一个简单的UART驱动程序
在DragonOS中,为了方便调试,实现了一个简单的UART驱动程序。https://github.com/fslongjin/DragonOS/tree/master/kernel/driver/uarthttps://github.com/fslongjin/DragonOS/tree/master/kernel/driver/uart原理不难,就简单讲讲吧。uart驱动程序工作的原理就是往指定的io端口写入数据,每次传送8个bit。其中,io端口与com口的对应关系如下:COM端口原创 2022-04-23 20:42:53 · 762 阅读 · 0 评论 -
DragonOS的中断处理设计
在这里简单记录一下目前DragonOS中的中断处理的设计吧。首先,先上DragonOS的GitHub链接:GitHub - fslongjin/DragonOS: 一个64位的操作系统。A x86_64 operating system.https://github.com/fslongjin/DragonOS写这篇文章的时候,代码版本长这样:update README.md · fslongjin/DragonOS@5ec1b82 · GitHubhttps://github.com/fslo原创 2022-04-23 20:41:46 · 719 阅读 · 0 评论 -
简单实现了DragonOS的块设备驱动模型以及AHCI驱动程序
上周写好了DragonOS的AHCI驱动程序,能够通过DMA读写SATA硬盘,在这里简单记录一下。源代码:https://github.com/fslongjin/DragonOS/tree/cc39911d4db00b9e3890f35ca46f1579e44d5be4/kernel/driver/disk块设备驱动程序模型块设备定义(以下内容来自维基百科)块设备是指与系统间用块的方式移动数据的设备。这些设备节点通常代表可寻址设备,如硬盘、CD-ROM和内存区域。块设备通常支持随机存取原创 2022-04-07 15:29:40 · 404 阅读 · 0 评论 -
如何根据ACPI规范来获取I/O APIC控制寄存器的地址
ACPI这个单词,用电脑用多了的同学应该或多或少能在系统的报错信息等地方见过它。它表示表示高级配置和电源管理接口(Advanced Configuration and Power Management Interface)。通过ACPI规范,就能查询计算机硬件的一些信息。在这里给大家推荐一下我的操作系统项目,希望大家能在GitHub上面给我点个小星星哦~GitHub - fslongjin/DragonOS: 一个64位的操作系统。A x86_64 operating system.事情的起因是这样原创 2022-03-14 21:37:02 · 707 阅读 · 0 评论 -
在软盘上实现一个FAT12文件系统
在操作系统启动的过程中,第一步启动的是Booter,由于我们需要找到Loader.bin这个引导文件,我们需要在软盘上实现一个FAT12文件系统,从而方便我们的文件管理。话不多说,先上最终结果图:已经实现了文件搜索功能,只是因为我还没往软盘中写入loader.bin,因此提示找不到文件。之前我已经了解过FAT文件系统的基本原理,在这里不多赘述。本质上,FAT将一个文件的数据簇以链表的形式进行了管理。FAT文件系统的存储布局引导记录 FAT1 FAT2 根文件夹原创 2022-01-17 11:49:40 · 1167 阅读 · 0 评论