linfeng
7486ad438c
fix bugs in poll and epoll ( #1135 )
...
* fix bugs in poll and epoll
Signed-off-by: Godones <chenlinfeng25@outlook.com>
* fix: wakeup all epitems instead of the first
Signed-off-by: Godones <chenlinfeng25@outlook.com>
* Fix wakeup_epoll error
Signed-off-by: Godones <chenlinfeng25@outlook.com>
* Make test_epoll pass
Signed-off-by: Godones <chenlinfeng25@outlook.com>
---------
Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-05-09 23:08:50 +08:00
LoGin
0b89d7130e
refactor(vfs): 重构statx系统调用的实现 ( #1149 )
...
- 将kstat的获取,与posix statx的获取进行分离.
- 修复statx没有处理dirfd的bug
- 在Metadata结构体中新增btime字段,表示文件的创建时间
- 更新多个文件系统的metadata实现,添加对btime的支持
- 引入derive_builder crate以简化Metadata构建过程
- 重构vfs模块,将core重命名为vcore以避免命名冲突
- 实现vfs_statx和vfs_getattr函数,支持更详细的文件属性查询
- 新增LookUpFlags定义,用于路径查找时的标志位
Signed-off-by: longjin <longjin@dragonos.org>
2025-05-09 14:46:10 +08:00
linfeng
167d272792
refactor epoll related implementation ( #1128 )
...
* Refactor epoll related implementation
Add PollableInode trait
Implement PollableInode for pollable inodes
fix https://github.com/DragonOS-Community/DragonOS/issues/1094
Signed-off-by: Godones <chenlinfeng25@outlook.com>
2025-04-20 16:41:49 +08:00
LoGin
488718dc2e
feat: 实现poll系统调用实现并修复相关bug ( #1098 )
...
feat: 实现poll系统调用实现并修复相关bug
- 实现poll系统调用,增加对EPollEvent的处理逻辑
- 修复LockedPipeInode中epitems的锁管理问题
- 添加RestartBlock支持,处理系统调用重启逻辑
- 修复EventPoll中epoll_wait的超时处理逻辑
- 新增test_poll测试程序,验证poll功能
Signed-off-by: longjin <longjin@DragonOS.org>
2025-03-14 10:48:06 +08:00
LoGin
2b72148cae
feat(syscall): 实现syscall restart ( #1075 )
...
能够在系统调用返回ERESTARTSYS时,信号处理结束后,自动重启系统调用.
TODO: 实现wait等需要restart_block的系统调用的重启
Signed-off-by: longjin <longjin@DragonOS.org>
2024-12-13 00:56:20 +08:00
LoGin
ffa8e88c60
fix:命名管道读行为不符合posix规范问题 ( #1066 )
...
fix(pipe): 增强FIFO管道的读写逻辑,解决问题一:非阻塞模式下的无写端错误返回
feat(test_fifo_write): 增强FIFO写入测试,添加信号处理、非阻塞模式支持和多场景测试
---------
Signed-off-by: xiaolin2004 <1553367438@qq.com>
Co-authored-by: xiaolin2004 <1553367438@qq.com>
2024-11-28 23:57:19 +08:00
GnoCiYeH
c709f79fda
feat(tty): 将tty设备适配epoll,修改串口部分问题 ( #968 )
...
- tty文件适配epoll,使epoll能够监听tty
- 修改串口handle_irq,原有每次只读取一个字节会导致:输入left(esc+[+A)被错误解析为(esc)+([)+(A)三个字符
- 为串口加上vcdata用于控制输入输出的格式问题(未解决,这个pr捎带)
2024-10-13 01:10:36 +08:00
LoGin
dc9b4fea1b
fix: pipe 读取/写入阻塞时,无法kill进程的问题 ( #889 )
2024-08-27 13:01:11 +08:00
linfeng
4afc5b7b7b
feat: 增加tokio异步运行时支持 ( #894 )
...
* fix the EventFdFlags error
* feat: support tokio (Single thread version)
Fix deadlock issue on closing file.
Add function for PipeInode and EventFdInode.
2024-08-19 18:50:17 +08:00
Samuel Dai
1074eb34e7
feat(filesystem): 引入Umount系统调用 ( #719 )
...
* feat(filesystem): 引入Umount系统调用
* 将所有ENOSYS误用更正
* 修复了一个使同一个挂载点可以挂载2个文件系统的bug
* 统一注释,增强程序稳定性,统一接口。注意:Umount时在fatfs的路径要使用大写,此受限于当前文件系统设计。
2024-04-15 13:02:04 +08:00
曾俊
3959e94df3
bugfix: 修复smp启动的时候,损坏0号核心的idle进程的内核栈的问题 ( #711 )
...
---------
Co-authored-by: longjin <longjin@DragonOS.org>
Co-authored-by: heyicong <heyicong@dragonos.org>
2024-04-10 19:00:32 +08:00
Jomo
6fc066ac11
实现SystemV共享内存 ( #690 )
...
* 实现SystemV共享内存
* 测试shm
* 添加测试程序
* 完善细节
* 修正shm的时间数据错误的问题
* fix: devfs的metadata权限为0x777的错误
---------
Co-authored-by: longjin <longjin@DragonOS.org>
2024-04-07 14:04:19 +08:00
GnoCiYeH
f0c87a897f
重写调度模块 ( #679 )
...
## PR:重写调度模块
---
### 完成的部分
- 实现cfs调度策略
- 搭建框架,后续功能可以迭代开发
- 目前能跑,未测试性能
### 需要后续接力的部分
- 实现组内调度(task_group)
- 实现跨核负载均衡(pelt算法)
- 接入sysfs,实现参数动态调节(sched_stat等)
- nice值以及priority等参数的设置及调优
2024-04-05 17:54:48 +08:00
GnoCiYeH
dfe53cf087
实现pty,附带测试程序 ( #685 )
...
* 实现pty,附带测试程序
* fmt ** clippy
* 将file层的锁粒度缩小,从而不使用no_preempt。更改pipe在sleep部分的bug
* 修复拼写错误
2024-04-05 00:21:55 +08:00
LoGin
b5b571e026
修复内核的clippy检查报错 ( #637 )
...
修复内核的clippy检查报错
---------
Co-authored-by: Samuel Dai <947309196@qq.com>
Co-authored-by: Donkey Kane <109840258+xiaolin2004@users.noreply.github.com>
Co-authored-by: themildwind <107623059+themildwind@users.noreply.github.com>
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
Co-authored-by: MemoryShore <105195940+MemoryShore@users.noreply.github.com>
Co-authored-by: 曾俊 <110876916+ZZJJWarth@users.noreply.github.com>
Co-authored-by: sun5etop <146408999+sun5etop@users.noreply.github.com>
Co-authored-by: hmt <114841534+1037827920@users.noreply.github.com>
Co-authored-by: laokengwt <143977175+laokengwt@users.noreply.github.com>
Co-authored-by: TTaq <103996388+TTaq@users.noreply.github.com>
Co-authored-by: Jomo <2512364506@qq.com>
Co-authored-by: Samuel Dai <samuka007@qq.com>
Co-authored-by: sspphh <112558065+sspphh@users.noreply.github.com>
2024-03-22 23:26:39 +08:00
裕依2439
4ad52e57e6
添加socketpair ( #505 )
...
* 添加对socketpair系统调用的处理
---------
Co-authored-by: LoGin <longjin@DragonOS.org>
2024-02-07 18:06:15 +08:00
LoGin
02343d0b5b
增加/dev/fb0,能够在用户程序读写帧缓冲区 ( #485 )
2024-01-02 14:16:10 +08:00
GnoCiYeH
5e948c5650
修正pipe逻辑,将pipe接入epoll。 ( #478 )
2023-12-27 15:02:29 +08:00
LoGin
91e9d4ab55
实现unified-init库,支持收集初始化函数到一个数组,并统一初始化 ( #474 )
...
* 添加“统一初始化”的过程宏,并把SystemError独立成crate
* 使用unified-init来初始化fbmem
* 更新workflow,增加内核自动化静态测试
2023-12-25 23:12:27 +08:00
GnoCiYeH
406099704e
增加epoll机制 ( #455 )
...
* ## 增加epoll机制
- 增加epoll机制
- 添加事件等待队列,提升socket性能
- 优化poll,删除不能poll的文件系统中的poll方法
* 添加细节注释
* 修复文件关闭后epoll还持有对应描述符的文件弱引用的bug
* 将EPollEvent设计为POSIX标准
* 修改s到us转换的计算错误
2023-12-25 18:08:12 +08:00
LoGin
bf4a48994a
新增系统调用,并对照linux-6.1.9改写sys_wait4 ( #440 )
...
* 1. 新增以下系统调用
- SYS_LSTAT
- SYS_READV
- SYS_ACCESS
- SYS_UNLINK
- SYS_CHMOD
- SYS_FCHMOD
- SYS_UMASK
- SYS_SYSINFO
- SYS_CLOCK_GETTIME
- SYS_FCHMODAT
- SYS_FACCESSAT
2. 修改sys_wait4,使得其部分符合Linux的行为(还是有些地方不符合的,详情请对比linux-6.1.9的sys_wait4接口)
2023-11-13 23:02:21 +08:00
GnoCiYeH
876cb89ecf
修复pipe2在读端或写端关闭后还阻塞问题 ( #396 )
...
* 修复pipe2在读端或写端关闭后还阻塞问题。
* update
* update
* 修改cloexec
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
2023-10-03 12:03:34 +08:00
LoGin
6b4e7a2972
增加kernfs ( #386 )
...
* 增加kernfs
* kernfs文档
2023-09-19 19:46:59 +08:00
LoGin
1496ba7b24
进程管理模块重构完成 ( #380 )
...
* 添加新版pcb的数据结构 (#273 )
* 将pcb中的内容分类,分别加锁 (#305 )
* 进程管理重构:完成fork的主体逻辑 (#309 )
1.完成fork的主体逻辑
2.将文件系统接到新的pcb上
3.经过思考,暂时弃用signal机制,待进程管理重构完成后,重写signal机制.原因是原本的signal机制太烂了
* chdir getcwd pid pgid ppid (#310 )
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* 删除旧的fork以及signal的代码,并调整fork/vfork/execve系统调用 (#325 )
1.删除旧的fork
2.删除signal相关代码,等进程管理重构结束之后,再重新写.
3.调整了fork/vfork/execve系统调用
* 实现切换进程的代码 (#331 )
* 实现切换进程的代码
* Patch modify preempt (#332 )
* 修改设置preempt的代码
* 删除rust的list和refcount
* 为每个核心初始化idle进程 (#333 )
* 为每个核心初始化idle进程
* 完成了新的内核线程机制 (#335 )
* 调度器的pcb替换为新的Arc<ProcessControlBlock>,把调度器队列锁从 RwSpinLock 替换为了 SpinLock (#336 )
* 把调度器的pcb替换为新的Arc<ProcessControlBlock>
* 把调度器队列锁从 RwSpinLock 替换为了 SpinLock ,修改了签名以通过编译
* 修正一些双重加锁、细节问题
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* github workflow自动检查代码是否格式化
* cache toolchain yml
* 调整rust版本的waitqueue中的pcb为新版的pcb (#343 )
* 解决设置rust workspace带来的“工具链不一致”的问题 (#344 )
* 解决设置rust workspace带来的“工具链不一致”的问题
更改workflow
* 调整pcb的sched_info和rwlock,以避免调度器死锁问题 (#341 )
* 调整pcb的sched_info和rwlock,以避免调度器死锁问题
* 修改为在 WriterGuard 中维护 Irq_guard
* 修正了 write_irqsave方法
* 优化了代码
* 把 set state 操作从 wakup 移动到 sched_enqueue 中
* 修正为在 wakeup 中设置 running ,以保留 set_state 的私有性
* 移除了 process_wakeup
* 实现进程退出的逻辑 (#340 )
实现进程退出的逻辑
* 标志进程sleep
* 修复wakeup的问题
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* rust 重构 completion (#350 )
* 完成了completion的基本结构,待完善上级调用
* 用SpinLock保护结构体并发安全
* 修改原子变量为u32,修复符号错误
* irq guard
* 修改为具有内部可变性的结构体
* temp fix
* 修复了由于进程持有自旋锁导致的不被调度的问题
* 对 complete 系列方法上锁,保护 done 数据并发安全
* 移除了未使用的依赖
* 重写显示刷新驱动 (#363 )
* 重构显示刷新驱动
* Patch refactor process management (#366 )
* 维护进程树
* 维护进程树
* 更改代码结构
* 新建进程时,设置cwd
* 调整adopt childern函数,降低开销
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* waitqueue兼容C部分 (#351 )
* PATH
* safe init
* waitqueue兼容C部分
* waitqueue兼容C部分
* 删除semaphore.c,在ps2_keyboard中使用waitqueue
* 删除semaphore.c,在ps2_keyboard中使用waitqueue
* current_pcb的C兼容
* current_pcb的C兼容
* current_pcb的C兼容
* fmt
* current_pcb的兼容
* 针对修改
* 调整代码
* fmt
* 删除pcb的set flags
* 更改函数名
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* merge master
* Patch debug process management refactor (#372 )
* 能够调通,执行完textui_init
* 能跑到initial kernel thread
* fmt
* 能够正常初始化所有服务(尚未能切换到用户程序)
* 删除部分无用的extern
* 存在问题:ap处理器启动后,bsp的smp_init函数return之后就出错了,怀疑是栈损坏
* 解决smp启动由于未换栈导致的内存访问错误
* debug
* 1
* 1
* lock no preempt
* 调通
* 优化代码,删除一些调试日志
* fix
* 使用rust重写wait4 (#377 )
* 维护进程树
* 维护进程树
* 更改代码结构
* 新建进程时,设置cwd
* 调整adopt childern函数,降低开销
* wait4
* 删除c_sys_wait4
* 使用userbuffer保护裸指针
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
* 消除warning
* 1. 修正未设置cpu executing的问题
* 修正kthread机制可能存在的内存泄露问题
* 删除pcb文档
* 删除C的tss struct
---------
Co-authored-by: Bullet <93781792+GP-Bullet@users.noreply.github.com>
Co-authored-by: Chiichen <39649411+Chiichen@users.noreply.github.com>
Co-authored-by: hanjiezhou <zhouhanjie@dragonos.org>
Co-authored-by: GnoCiYeH <118462160+GnoCiYeH@users.noreply.github.com>
Co-authored-by: houmkh <1119644616@qq.com>
2023-09-15 14:58:19 +08:00
hanjiezhou
22c9db312a
Patch pipe2 ( #364 )
2023-09-13 00:58:01 +08:00
TingHuang
e0de0fd6a5
根据sysfs完善设备驱动模型 & 添加sysfs官方文档 ( #254 )
...
* 根据sysfs完善设备驱动模型
* 添加sysfs官方文档
2023-04-23 22:55:57 +08:00
hanjiezhou
f678331a33
匿名管道重构&增加IrqArch trait以及IrqFlags及其守卫 ( #253 )
...
* 实现匿名管道
* 增加IrqArch trait以及IrqFlags及其守卫
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
2023-04-23 21:05:10 +08:00