实现一个进程管理子系统-Linux课程设计1:https://developer.aliyun.com/article/1395395
4 系统功能说明
4.1 系统功能介绍
Shell是种命令解释程序,也可以看作是一种命令语言的解释器。 用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行。
Shell所使用的这种命令语言称为Shell 语言。Shell语言不仅仅是一种交互式语言, 它还是一种可编程的程序设计语言。将若干个Shell命令行写入个文件就构成了一个Shell程序,它可以被Shell逐条地解释执行。用Shell语言编写的Shell程序可以使用各种变量、参数和控制结构来组织命令流程,自动化地完成各种复杂冗繁的处理工作。
Linux系统中广泛使用了Shell程序来实现系统的初启、配置、管理和维护等工作。用户通过Ubuntu运行该程序。需说明的是主函数是实现进程管理的入口,在入口处需输入进程名称,然后输入进程的状态选项,如果完毕后,则通过相应的调度算法进行进程机的调度,同时也将结果显示在屏幕上。
本系统通过模拟多个进程的同步运行,实现了进程就绪,运行,阻塞三个状态的转换,并可以根据用户要求改变进程的状态。
4.2 系统实现原理
通过在Linux系统中,利用Shell语言编译程序,定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制,最终完成有创建、撤销、调度、阻塞、唤醒进程等功能。
4.3 功能实现说明
1.程序运行界面
cout << "\n [------------请用户选择操作------------]\n"; cout << "\n [1、执行进程……2、将阻塞队列中进程调入就绪队列………]\n"; cout << "\n [3、封锁进程…………………4、结束进程 …………………]\n"; cout << "\n [5、退出程序………………………………………………… ]\n选项: "; cin >> n;
2.执行进程
int main() { int n; char a; cout << "\n[-----------操作系统之进程管理模拟系统(先来先服务算法)------------]\n" << endl; queue execute, ready, clog; //执行,就绪,阻塞 cout << "\n[-------请用户输入进程名及其到达cpu的顺序(结束进程数请输入x)------]\n" << endl; char r; r = 'x'; for (int i = 0;; i++) { char e[100]; cout << "输入进程名:" << " "; cin >> e[i]; if (e[i] != r) ready.enqueue(e[i]); else break; }
3.将阻塞队列的进程调入就绪队列
if (n == 2) { if (!clog.isempty()) { a = clog.dequeue(); if (a != r) ready.enqueue(a); goto L; } else goto L; }
4.封锁进程
if (n == 3) { if (!execute.isempty()) { a = execute.dequeue(); if (a != r) clog.enqueue(a); goto L; } else goto L; }
5.结束进程
if (n == 4) { cout << "\n请输入要结束的进程名: "; cin >> a; if (execute.find(a) || ready.find(a) || clog.find(a)) { if (execute.find(a)) { execute.del(a); } else if (ready.find(a)) { ready.del(a); } if (clog.find(a)) { clog.del(a); } cout << "\n结束进程成功!\n" << endl; goto L; } else cout << "没有此进程 " << endl; goto L;
6.界面输出及退出操作
if (n == 1 || n == 2 || n == 3 || n == 4) { cout << "执行队列" << endl; execute.display(); cout << endl; cout << "就绪队列" << endl; ready.display(); cout << endl; cout << "阻塞队列" << endl; clog.display(); cout << endl; goto A; } else if (n == 5) ; else { cout << "\n你的输入错误!\n"; goto A; } } E:; return 0;
5 系统测试
1.Shell命令编译程序,生成可执行文件
2.执行程序
3.进程创建以及实现进程堵塞
4.查看执行进程
5.封锁进程,实现阻塞
6.对堵塞中的进程,选中进程调入就绪队列
7.将就绪队列进程执行
8.结束进程
9.退出程序
6 用户使用说明
1.本程序执行文件为“ProcessManagement”。
2.进入本系统之后,随即显示系统主菜单界面。用户可在该界面下输入各子菜单前对应的数字并按下回车键,执行相应子菜单命令。
(1)创建进程——根据进程的顺序依次放入就绪队列;
(2)执行进程——管理系统将就绪队列中的第一个进程调入运行队列;
(3)将阻塞队列中进程调入就绪队列;
(4)封锁进程——管理系统将就绪队列中的第一个进程调入阻塞队列;
(5)结束进程——管理系统撤销所选进程;
3.根据程序的提示即可完成进程管的各项功能。
7 总结
本次课程设计是实现一个进程管理的系统,该系统包括硬件工作的模拟、模拟中断的种类和中断处理方式、进程控制等,从而观察诸进程的运行过程。 系统通过模拟多个进程的同步运行,实现了进程就绪,运行,阻塞三个状态的转换,并可以根据用户要求改变进程的状态。用户通过Ubuntu运行该程序。需说明的是主函数是实现进程管理的入口,在入口处需输入进程名称,然后输入进程的状态选项,如果完毕后,则通过相应的调度算法进行进程机的调度,同时也将结果显示在屏幕上。
课程设计初期遇到了很多困难,不知道从何下手,在同学的帮助和自己摸索的情况下还是完成了这次课程设计,从中认识到以我们现在的经验,不学到一定的深度和广度是难以在实际工作中应付自如的。因此反映出学习的还不够,缺点疏漏。需在加以刻苦钻研及学习,不断开拓视野,增强自己的实践操作技能。
这次课程设计,加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构等。操作系统的只是很深奥,仅靠课本是远远不够的,我将出现的所有错误都写成了博客发布到CSDN上,总结经验,不断提升自己的能力。