记录DragonOS开发过程中所遇bug及其解决
1 中断上下文内外死锁问题 2 进程调度问题导致网络IO性能下降 这段代码的作用是检测当前进程是否需要被调度,并在满足条件时进行调度。具体来说: current_pcb_flags().contains(ProcessFlags::NEED_SCHEDULE) :检查当前进程控制块(PCB)的标志是否包含 NEED_SCHEDULE标志,表示当前进程需要被调度。 ...
1 中断上下文内外死锁问题 2 进程调度问题导致网络IO性能下降 这段代码的作用是检测当前进程是否需要被调度,并在满足条件时进行调度。具体来说: current_pcb_flags().contains(ProcessFlags::NEED_SCHEDULE) :检查当前进程控制块(PCB)的标志是否包含 NEED_SCHEDULE标志,表示当前进程需要被调度。 ...
关键函数: switch_to_user() (粗略版)步骤: 删除当前进程的kthread的标志 读取指定路径下的trap_frame,执行init进程 这里要用try_to_run_init_process进行封装,因为要判断执行进程失败的原因是无法加载初始化程序还是其他 原因 调用do_execve函数执行init程序 执行arch下的用户态切换,先获取trap...
设备驱动注册函数/设备注册函数 device_driver_init() Driver结构体创建;(new()) 平台设备驱动管理注册。(platform_driver_manager().register()) ` device_init()` device实现逻辑 调用设备管理方法信息设备的默认初始化 device_manager().device_default_ini...
创建socket 在DragonOS中,Socket层是为实现各种Socket系统调用而实现的对smoltcpSocket结构体的封装。 用户程序调用sys_socket调用时,会对应调用系统的socket调用,使用参数address_family 、socket_type 、protocol 创建一个Socket,并使用该socket创建一个socket iNode,添加到文件描述符表中...
重要参考smoltcp LoopBack网卡介绍 Linux LoopBack网卡是一个虚拟的网络接口,主要用于网络软件的测试和调试。它允许主机发送网络流量到自己,而不需要任何物理设备。当数据发送到LoopBack接口时,操作系统网络栈会立即接收这些数据,就像它们从网络上接收的一样。这使得开发人员可以测试和调试网络应用程序,而无需物理网络连接。 lo网卡注册在设备中,了解一个net de...
#![cfg_attr(not(feature = "std"), no_std)] #![allow(unused_mut)] #![allow(clippy::collapsible_if)] #[cfg(feature = "std")] #[allow(dead_code)] mod utils; use core::str; use log::{debug, error, in...
问题描述: 向kernel注册lo网卡驱动后,启动kernel后系统卡滞。 Debug过程: 初步发现系统停滞在用户层,怀疑是内核切换成用户态时出现问题 输出用户态的init程序发现proc_name输出为空,开始怀疑是free before use free before use的原因通常为不能正确使用unsafe代码块操控内存导致内存错误。 开始检查lo网卡实现代码中有...
为什么要使用虚拟内存的技术 abstract memory? 允许系统允许多道程序并且不会相互影响 Static Relocation 优点: 不需要硬件支持 缺点: 加载慢 一旦加载,程序的代码或数据就不能移动到内存中,除非进行进一步的重新定位。 加载程序需要一些方法来判断什么是地址,什么是常量。 Addres...
1 File 挑选难理解的概念进行讲解。 三种文件种类:byte sequence 、 record sequence 、 tree 文件类型: Regular files:普通文件,分为文本文件和二进制文件 Directories:目录 Character special file:特殊字符文件,模拟io设备比如终端、打印机和网络 Block special file...
1 Principle of IO Software 1.1 Goals of IO Software 设备独立性 程序可以访问任何的IO设备 不会提前对设备进行特殊处理 Uniform naming 通用命名 文件和设备的名字是字符串或者数字 不会依赖某个机器 Error ha...