项目简介
本项目基于C语言开发,是一个操作系统功能模拟项目。它涵盖Shell实现、线程管理、用户程序执行等多方面,实现了cd
、pwd
等命令,支持程序执行、路径解析、输入输出重定向等功能。在线程管理上,实现了线程阻塞、优先级调度、多级反馈调度;在用户程序执行中,支持读取命令行参数、进程控制和文件操作,为理解操作系统核心机制提供实践平台。
项目的主要特性和功能
Shell部分
- 命令支持:实现
cd
和pwd
命令,用于目录切换和显示当前工作目录。 - 程序执行:利用
fork
函数开启新线程执行程序,支持输入输出重定向与后台处理。 - 路径解析:对于需环境变量的命令,能遍历
PATH
环境变量查找可执行程序。 - 信号处理和终端控制:初始化Shell时忽略信号量,新线程中打开信号量默认处理方式。
线程管理部分
- 线程阻塞:修改
timer_sleep
函数设置线程阻塞时间。 - 优先级调度:实现抢占机制和优先级捐赠功能,维护就绪队列为优先级队列。
- 多级反馈调度:依据BSD调度算法动态更新线程优先级。
用户程序部分
- 参数传递:支持从命令行向用户程序传递参数,通过栈实现参数传递。
- 系统调用:提供16个系统调用接口,处理进程控制和文件操作,如文件的创建、打开、读写、关闭等。
- 禁止写入可执行文件:加载可执行文件时禁止写入,退出时允许写入。
安装使用步骤
编译项目
确保已安装C语言编译器(如GCC),进入项目源码所在目录,使用以下命令编译:
sh
gcc -o project_name *.c
其中project_name
是要生成的可执行文件的名称。
运行项目
编译成功后,在终端中运行生成的可执行文件:
sh
./project_name
使用功能
在Shell中输入支持的命令,如cd
、pwd
等;程序执行时,可使用输入输出重定向符号(<
和>
);在多线程部分,观察线程的调度和优先级变化;在用户程序部分,使用系统调用进行进程控制和文件操作。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】