GnoCiYeH

Results 11 comments of GnoCiYeH

> # 问题 > File对象的add_epoll和remove_epoll方法,里面对文件类型进行了特判。 我认为可以统一处理这个事情,给IndexNode这个trait加add_epoll()和remove_epoll()函数会比较好。 > > @Godones 另一个问题,对于代码:https://github.com/DragonOS-Community/DragonOS/pull/894/files#diff-08d0c277f75d9d64222b3634cc6c86f177e35c79e7cda7ca1161a1211cde4922R522 不能认为,“不是pipe,且不是socket的,那么这种inode就是EventFdInode” 这个跟上面Add的时候的语义完全就对应不上,需要修改。 > > 抄送:@GnoCiYeH @Chiichen 只有pollable的iNode才支持epoll,这里感觉统一加在iNode里有点奇怪,是否新加一个trait:``Pollable``来管理这个更好?

> @GnoCiYeH 请问一下在进程进行epoll时,判断是否有就绪事件的代码如下: > > ``` > // 判断epoll上有没有就绪事件 > let mut available = epoll_guard.ep_events_available(); > ``` > > 这只是简单判断了队列是否为空。这意味着如果一个文件有就绪事件,它需要主动把事件放到队列中。这是怎么实现的? 这个目前是暴力实现的,比如我把一个epitem绑定在socket上,那网卡来数据时,就会通知这个socket对应的epoll。

> 这个地方应该感觉需要做一个重构吧,内核中不止socket会产生事件。 是的,要是可以在wq里面注册回调来实现是最好的,但是目前wq没有这样的功能。这种方式rust也不太好设计。。

> 是否可以在poll的时候主动轮询一下? epoll最核心的地方在于:有数据来才唤醒。在poll的时候主动轮询解决不了问题,因为poll这个动作是在唤醒epoll后来做的,但是问题在于该如何唤醒epoll?

这个问题是只有查看status文件的时候会卡?

这个分支应该提交在虚拟化分支,麻烦改一下~

rv的编译不过,可能需要相应的对rv部分补一点TODO。部分地方可能需要加一点注释,以便后续维护

@dragonosbot author

报错`read char error: Os { code: 512, kind: Uncategorized, message: "No error information" }`,只是说这个read被信号打断了,不应该expect,[shell定位](https://code.dragonos.org.cn/xref/NovaShell/src/shell/mod.rs?r=cf3f377b821b86599b3d086da871b5cdfde193a8#150)