我对操作系统编程很感兴趣,我想白手起家写我自己的内核。我精通C语言,还懂一点汇编。我打算买一本Andrew tanenbaum的书:"Operating systems Design and implementation“,开始读这本书。每个人都告诉我,这只是浪费时间,如果我放弃写自己的内核的想法就好了。但我只是想知道一切是如何在幕后工作的,学习编写自己的内核只是为了教育目的,我没有任何幻想,我的操作系统将是巨大的和可用的。
除了购买A.T OS Design and Implementation之外,还有什么方法可以了解OS在幕后是如何工作的?是否足以构建我自己的linux发行版?学
linux (我不在乎哪个发行版或版本)是否有一个带有读/写钩子的动态文件系统?例如,我想在/dynamic上挂载一个动态文件系统,每当我试图读/写到一个不存在的位置时,就会运行bash脚本或程序。就像我做了tail /dynamic/folder1/file1.log一样,bash脚本将在读取操作之前运行,路径将作为参数可用。有这样的项目吗?
我需要一个静态分析工具的Linux设备驱动程序,我写的ARM为基础的董事会。我正在考虑以下几个工具:
是一种计算机软件工具,已经在Linux上使用,旨在查找Linux内核中可能存在的编码错误。
有两个活动项目,旨在提高可加载内核模块的质量。
- `Linux Driver Verification` (LDV) - a comprehensive toolset for static source code verification of Linux device drivers.
- `KEDR Framework` - an extensible framework for
我对所有这些细节以及它们如何在Linux中相互关联感到有点困惑。"Unix内部“一书指出,lightweight process (LWP)是内核支持的用户线程,内核看不到进程内部的线程。对于Linux,这仍然是正确的吗?
据我所知,用户空间线程被安排在进程内部,通过更高层次的抽象作为pthread库,而不需要内核的干预。我说的对吗?
据我所知。Linux是异步通知。当文件描述符变得可读/可写/可接受时,epoll_wait将返回这个fd。但是读写仍然是同步的,会阻塞线程。因此Redis6.0使用线程池来处理网络io。
Windows IOCP和Linux是预言家。当io_uring_enter返回时,读取的数据已经放置在缓冲区中,写缓冲区全部已经写入。
我的问题是:
负责复制这些缓冲区数据的?仍然会阻塞当前线程?如果是,如何加快线程池的使用?