# 手撕基于x86的32位linux系统 **Repository Path**: zhangxiao1997/my-linux ## Basic Information - **Project Name**: 手撕基于x86的32位linux系统 - **Description**: self-made 32-bit Linux OS - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-02-07 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自制基于x86的32位Linux系统 ## 系统基本完成(虽然有很多不足),欢迎正在学习的同学加入本项目。不知从何做起的同学可以查看“暂未解决的问题”。 ### 目前已经完成boot loader, 中断处理程序,虚拟内存,多进程分时间片执行,进程和系统特权级分离,显示屏和shell命令行可以输出,命令行解释器,设备文件系统, 磁盘文件系统(FAT16).支持shell读取磁盘上的程序执行.支持子进程异常时强制.支持部分命令。 #### 介绍 这是我自制的基于x86的32位Linux系统。从boot loader开始,linux内核,系统调用,虚拟内存管理,一直到文件系统。  #### 实现功能 1. boot loader加载二进制文件 2. 简化版的Linux内核(参考Linux 0.11)    ★ 支持多进程运行,支持时间片调度算法(已完成)     ★ 支持shell加载磁盘上应用程序运行(已完成)     ★ 支持虚拟内存管理,进程隔离(已完成)     ★ 支持信号量和锁机制(已完成)     ★ 支持键盘和显示器(已完成)     ★ 支持C运行库newlib(已完成)     ★ 支持系统调用:fork()、execve()、open()、write()、read()、exit()(已完成)     ★ 支持进程与操作系统不同特权级分离(已完成)     ★ 挂载FAT16文件系统(已完成)     ★ 目前仅支持echo,ls,less,help,clear,touch命令,cp命令  #### 暂未解决的问题 1. echo命令问题。echo命令可以正常识别-x的参数,但无法识别以-开头的需输出信息。如echo -h可以正常输出help命令,但echo ------ 无法正常输出。  >该问题可在source/kernel/shell/main.c do_echo()函数中解决  -------------------------- 2. wait()问题。系统调用sys_wait()是通过wait()调用的。但wait()是不能有返回值的。虽然我已经将wait()设置为void,但还是会报警告。  >该问题可在source/applib/lib_syscall.c wait()中解决。如可以在后面添加类似于for(;;)的死循环避免警告。不知道还有没有其他办法。 ----------------------- 1. 进程资源回收问题。为了简单,子进程结束时,通过将父进程重新放入就绪队列,唤醒子进程。并不是常见的发送信号唤醒父进程。 3.1 父进程通过fork()创建子进程,并调用wait()等待子进程执行完毕。 3.2 子进程调用exit(),唤醒父进程回收资源。 3.3 当子进程退出,但子进程也有子进程(孙子进程)时,孙子进程被移交给爷爷进程(first task)。 > 该问题可在wait()函数中解决,位置参考问题2。 -------------------- #### 安装教程(之后会彻底补充这部分) 1. 安装vscode和qumu 2. 下载gcc编译器 3. 编译程序 4. 运行 #### 使用说明 1. 暂无 #### 参与贡献 1. 暂无 #### 特技 1. 暂无