期末 操作系统实验课程设计
操作系统课程设计(小型的操作系统)
操作系统课程设计报告题目:一个小型的操作系统班级:计122(杏)学号:1213023075姓名:贾苏日期:2014/06/231.实验平台(1)软件平台:开发系统平台:Windows 7 (64)Microsoft visual c++ 6.0测试系统平台:Windows 7 (64)(2)硬件平台:cpu:AMD A6-3420 APU内存:4GB硬盘:500G2.所需实现的功能及相应的阐述:(1)进程调度管理为了贴切现实中的os,采用RR(轮转调度算法),且不提供用户显式的选择调度算法,即对用户是透明的。
现实中的处理器主频为1Ghz~3Ghz,选取中间点为1.5Ghz,得时间片大小为0.7ns ,为方便计算*10,则时间片大小定为7ns。
假设进程之间的调度和切换不耗费cpu时间。
(2)死锁的检测与处理检测当然采用的是银行家算法处理:让用户选择kill一个进程,释放他所占有的所有资源。
(3)虚拟分页调度管理虚拟分页:给出的是逻辑值访问磁盘将那个数据块放入到内存中内存中的地址采用一定的算法相对应于磁盘的地址。
特规定访存采用的是按字节寻址内存的大小128KB外存的大小1MB即整个系统可以提供1MB的逻辑地址空间供进程进行访问(在地址总线足够扫描内存的情况下)。
虚拟地址映射采用:直接映射法规定的8kB为一个页面,故内存有16个页面,外存有128个页面。
如果产生了内存已满,便会产生缺页中断,淘汰采用FIFO算法,利用一个队列来做。
部分内外存的对应表0 0,128,2*128+0.......1 1,129,2*128+1.......2 2,130,2*128+2.......16 127,128+16,2*128+16.........(4)I/O中断处理设中断来自两个方面:1.DMA输送开始和结束时的中断设定一个宏定义为DMA一次传输的数据量的大小->DmaNum 假定为10kb每次DMA开始:耗费1ns cpu时间进行中断处理DMA 结束:耗费2ns cpu 时间进行中断处理由操作系统课程知,DMA 传输数据时不需要CPU 的干预。
操作系统课程设计实验报告(以Linux为例)
《操作系统课程设计》实验报告学号:姓名:苏州大学计算机科学与技术学院2014年9月操作系统课程设计实验报告目录目录 (1)一、实验环境 (2)二、实验报告总体要求 (2)实验一编译L INUX内核 (3)实验二观察L INUX行为 (7)实验三进程间通信 (14)操作系统课程设计实验报告一、实验环境Linux平台◆硬件平台:普通PC机硬件环境。
◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动管理器使用GRUB。
◆编译环境:伴随着操作系统的默认gcc环境。
◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。
二、实验报告总体要求在2013年11月25日前提交实验报告。
实验报告至少要求包含以下内容:1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意义。
2.问题提出:叙述本篇报告要解决什么问题。
注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。
3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2…等分开。
这是实验报告的关键部分,请尽量展开来写。
注意,这部分是最终课程设计的基本分的部分。
这部分不完成,本课程设计不会及格。
4.实验结果:按照自己的解决方案,有哪些结果。
结果有异常吗?能解释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。
本课程设计要得高分,应该在这部分下功夫。
5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。
6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:2,即10行源程序,至少要给出5行注释。
操作系统课程设计实验报告实验一编译Linux内核实验时间6小时实验目的认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。
实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。
操作系统课程设计
操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型和结构,掌握操作系统的五大核心功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口);2. 掌握操作系统的发展历程、主要操作系统(如Windows、Linux、Mac OS)的特点及应用场景;3. 了解操作系统的设计与实现原理,包括进程管理、内存管理、设备管理、文件系统等关键技术;4. 学会使用操作系统提供的命令行或图形界面进行基本的系统操作与维护。
技能目标:1. 培养学生对操作系统的实际操作能力,能够熟练使用至少一种操作系统进行日常管理与维护;2. 培养学生运用操作系统原理解决实际问题的能力,如分析系统性能、诊断故障、优化配置等;3. 提高学生的编程能力,使其能够编写简单的系统程序或脚本,实现特定功能。
情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学生学习计算机科学的热情;2. 培养学生的团队合作意识,使其在讨论、分析、解决问题的过程中学会倾听、交流、协作;3. 培养学生具备良好的信息素养,关注操作系统领域的最新发展,增强信息安全意识。
课程性质:本课程为计算机科学与技术专业(或相关领域)的必修课,具有较强的理论性和实践性。
学生特点:学生已具备一定的计算机基础知识,具有较强的学习兴趣和动手能力,但可能对操作系统原理的理解和应用尚有不足。
教学要求:注重理论与实践相结合,以案例驱动、任务导向的方式进行教学,注重培养学生的实际操作能力和问题解决能力。
通过本课程的学习,使学生能够掌握操作系统的基本原理,提高实际应用水平,为后续专业课程学习打下坚实基础。
二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能、类型,比较不同操作系统的特点,分析操作系统的发展趋势。
教材章节:第一章 操作系统概述2. 进程与线程管理:讲解进程与线程的概念、状态与转换,进程调度算法,同步与互斥,死锁与饥饿问题。
教材章节:第二章 进程管理3. 存储管理:介绍内存分配与回收策略,虚拟内存技术,页面置换算法,内存保护机制。
《操作系统》课程设计
《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
操作系统实验2-计算机操作系统(第3版)-郁红英-清华大学出版社
操作系统实验
(课程设计)实验报告
学院
专业
班级/学号
学生姓名
成绩
实验地点_
实验日期___ __
指导教师_____ ___ _____
(课程上机)实验报告
1.实验名称、实验目的、实验内容、实验要求由教师确定,实验前由教师事先填好,然后作为实验报告模版供学生使用;
2.实验准备由学生在实验或上机之前填写,教师应该在实验前检查;
3.实验过程由学生记录实验的过程,包括操作过程、遇到哪些问题以及如何解决等;
4.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;
5.源程序、代码、具体语句等,若表格空间不足时可作为附录另外附页。
操作系统课程设计实验报告用C实现银行家算法
操作系统实验报告2学院:计算机科学与技术学院班级:计091学号:姓名:时间:2011/12/30目录1.实验名称 (3)2.实验目的 (3)3.实验内容 (3)4.实验要求 (3)5.实验原理 (3)6.实验环境 (4)7.实验设计 (4)数据结构设计 (4)算法设计 (6)功能模块设计 (7)8.实验运行结果 (8)9.实验心得 (9)附录:源代码部分 (9)一、实验名称:用C++实现银行家算法二、实验目的:通过自己编程来实现银行家算法,进一步理解银行家算法的概念及含义,提高对银行家算法的认识,同时提高自己的动手实践能力;各种死锁防止方法能够阻止发生死锁,但必然会降低系统的并发性并导致低效的资源利用率;死锁避免却与此相反,通过合适的资源分配算法确保不会出现进程循环等待链,从而避免死锁;本实验旨在了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生;三、实验内容:利用C++,实现银行家算法四、实验要求:1.完成银行家算法的设计2.设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源;五、实验原理:系统中的所有进程放入进程集合,在安全状态下系统收到进程的资源请求后,先把资源试探性的分配给它;之后,系统将剩下的可用资源和进程集合中的其他进程还需要的资源数作比较,找出剩余资源能够满足的最大需求量的进程,从而保证进程运行完毕并归还全部资源;这时,把这个进程从进程集合中删除,归还其所占用的所有资源,系统的剩余资源则更多,反复执行上述步骤;最后,检查进程集合,若为空则表明本次申请可行,系统处于安全状态,可以真正执行本次分配,否则,本次资源分配暂不实施,让申请资源的进程等待;银行家算法是一种最有代表性的避免的算法;在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待;为实现银行家算法,系统必须设置若干;要解释银行家算法,必须先解释操作系统安全状态和不安全状态;安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi1≤i≤n,它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj j < i 当前占有资源量之和;安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态;安全状态一定是没有死锁发生;不安全状态:不存在一个安全序列;不安全状态不一定导致死锁;我们可以把看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款;为保证资金的安全,银行家规定:1 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;2 顾客可以分期贷款,但贷款的总数不能超过最大需求量;3 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;4 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配;当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量;若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配;六、实验环境:Win-7系统Visual C++七、实验设计:1.数据结构设计定义结构体:struct Process0, 0, 0;}}};class DataInit法设计class FindSafeListdb->available; db->pdb->ruleri.currentAvail db->pdb->ruleri-1.currentAvail;db->pdb->ruleri-1.allocation;db->pdb->ruleri.currentAvail{ return false; }db->sum{ return false; }}return true; laim_allocation{ return 1; }Source sdb->pi.allocation; db->ask;db->pi.db->ask;ifexsitSafeListdb db->ask;db->pi.db->ask;return 2;}db->0,0,0; 能模块设计class Data0, 0, 0;}}};class DataInitr1,r2,r3;cout<<'p'<<i<<" max allocationclaimR1,R2,R3: ";r1,r2,r3;r1=db->pi.>pi.;pi.;r3=db->pi.>pi.;db->pi.r1, r2, r3;}}};class Displaylaim;cout<<"\t\t";displaySourcepi.allocation;cout<<endl;}cout<<endl;}void displaySafeListData db urrentAvail;cout<<" ";displaySourcedb->pdb->ruleri.claim;cout<<" ";displaySourcedb->pdb->ruleri.allocation;cout<<" ";displaySourcedb->pdb->ruleri.claim_allocation;cout<<" true";cout<<endl;}}void displayAskResultData db,int n db->available;db->pdb->ruleri.currentAvail db->pdb->ruleri-1.currentAvail;db->pdb->ruleri-1.allocation;db->pdb->ruleri.currentAvail{ return false; }db->sum{ return false; }}return true; laim_allocation{ return 1; }Source sdb->pi.allocation; db->ask;db->pi.db->ask;ifexsitSafeListdb db->ask;db->pi.db->ask;return 2;}db->0,0,0; //找到安全序列,将请求资源置零,返回3return 3;}};void main{Data db;db=new Data;ifdb{ cout<<"errorno enough memory space"; return; } DataInit dataInit;db; //设置进程个数db; //设置系统总资源量db; //设置当前系统可获得资源量db; //设置t0时刻进程基本状态Display display;FindSafeList findSafeList;int r1=0,r2=0,r3=0;int c;db->r1,r2,r3; //设置请求资源为0,即无请求c=db,0; //寻找安全序列,返回结果ifc=3{ cout<<"t0时刻的进程组不存在安全序列\n"; return; }int choice=1;int pi;whilechoice{cout<<"\n 选择操作:\n 1 查看进程情况\n 2 请求分配资源\n 0 退出\n ";cin>>choice;switchchoice{case 1:{cout<<"当前资源量availableR1,R2,R3:\n ";db->available;cout<<endl;cout<<"\n当前进程资源分配情况piR1,R2,R3: \n";cout<<" 进程\tclaim\t\tallocation\n";db->p,db->pLength;break;}case 2:{cout<<"输入请求资源进程序号:";cin>>pi;cout<<"输入请求资源R1,R2,R3: 0,0,0表示当前进程组无请求\n";cin>>r1>>r2>>r3;db->r1,r2,r3;c=db,pi;db,c;cout<<endl;break;}case 0:{ break; }default:{ cout<<"input errortry again\n"; break; }}}}。
linux期末课程设计
linux期末课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握Linux操作系统的基本概念、原理和常用的命令行操作。
具体包括Linux的历史、特点和常用发行版;文件系统结构;基本命令行操作;用户和权限管理;进程管理;网络配置和应用服务等。
2.技能目标:学生能够熟练使用Linux操作系统,进行日常的系统管理和维护工作。
具体包括文件操作、目录管理、文本处理、软件安装和更新、系统设置和网络配置等。
3.情感态度价值观目标:学生通过课程的学习,能够理解Linux开源精神的重要性,培养团队合作和分享的意识,提高自主学习和解决问题的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Linux概述:介绍Linux操作系统的起源、发展和特点,以及常用的Linux发行版。
2.文件系统:讲解Linux的文件系统结构,包括目录、文件权限和文件操作命令等。
3.命令行操作:深入学习Linux的命令行操作,包括基本命令、文本处理命令和软件包管理命令等。
4.用户和权限管理:介绍Linux的用户管理、组管理和文件权限控制等知识。
5.进程管理:讲解Linux的进程概念、进程控制命令和进程监控工具等。
6.网络配置:包括网络配置命令、网络文件共享和远程登录等知识。
7.应用服务:介绍Linux下的常用服务,如Apache、MySQL和Samba 等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解Linux的基本概念、原理和命令操作。
2.案例分析法:通过实际案例,引导学生学会解决实际问题。
3.实验法:安排实验课,让学生亲自动手操作,加深对知识的理解和记忆。
4.小组讨论法:学生进行小组讨论,培养团队合作和沟通能力。
四、教学资源本课程的教学资源包括以下几个方面:1.教材:选用权威、实用的Linux教材,为学生提供系统的学习资料。
2.参考书:提供丰富的参考书籍,方便学生深入研究。
操作系统课程设计题目
-操作系统性能调优策略
-多处理器系统
-多处理器系统的基本概念
-并行与分布式计算
-实时操作系统
-实时操作系统的特点与需求
-实时调度算法
-操作系统中的并发控制
-并发的基本概念
-互斥与同步机制
-课程设计进阶项目
-设计并实现一个简单的实时操作系统
-研究并发控制策略在操作系统中的应用
-分析多处理器系统中的负载均衡问题
4.章节四:内存管理
-内存分配与回收策略
-虚拟内存与分页机制
5.章节五:设备管理
-设备管理的基本原理
- I/O调度策略
6.章节六:文件系统
-文件与目录结构
-文件存储与访问控制
2、教学内容
-文件系统性能优化
-磁盘空间分配策略
-磁盘碎片整理方法
-操作系统安全性
-访问控制机制
-加密与认证技术
-操作系统实例分析
-探索操作系统在移动设备、物联网等新兴领域的应用案例
4、教学内容
-操作系统接口与用户交互
-命令行接口(CLI)与图形用户界面(GUI)
-操作系统提供的系统调用与服务
-操作系统的网络功能
-网络协议栈的基础知识
-操作系统在网络通信中的作用
-操作系统的虚拟化技术
-虚拟化技术的原理与应用
-虚拟机监控器(VMM)的作用与分类
-探讨操作系统在人机交互方面的未来发展趋势
-评估开源操作系统的标准化程度及其对行业的影响
操作系统课程设计题目
一、教学内容
本章节内容来自《操作系统》课程,针对高二年级学生,选择以下课程设计题目:
1.章节一:操作系统概述
-操作系统Hale Waihona Puke 基本概念-操作系统的历史与发展
UCOSII操作系统课程设计
UCOSII操作系统课程设计一、课程目标知识目标:1. 理解UCOSII操作系统的基本原理和核心概念,包括任务管理、时间管理、通信与同步机制;2. 掌握UCOSII的移植方法和配置过程,学会在不同硬件平台上搭建UCOSII 操作系统环境;3. 学会使用UCOSII提供的API进行多任务编程,了解实时操作系统的任务调度和资源管理策略。
技能目标:1. 能够运用C语言在UCOSII环境下编写多任务应用程序,实现任务间的同步与通信;2. 能够分析并解决实际嵌入式系统开发中与操作系统相关的问题,提高系统稳定性和可靠性;3. 掌握UCOSII调试技巧,能够运用调试工具对操作系统运行状态进行跟踪和分析。
情感态度价值观目标:1. 培养学生对操作系统知识的好奇心和探索精神,激发学习兴趣和热情;2. 培养学生具备良好的团队合作精神和沟通能力,提高解决实际问题的能力;3. 增强学生的创新意识,鼓励他们在实际项目中积极尝试和应用所学知识。
课程性质:本课程为高年级专业课,以实际应用为导向,注重理论与实践相结合。
学生特点:学生已具备一定的C语言编程基础和嵌入式系统知识,具有较强的学习能力和实践能力。
教学要求:教师需采用项目驱动教学法,引导学生通过实际案例掌握UCOSII 操作系统的应用与开发。
在教学过程中,关注学生的个体差异,提供个性化指导,确保课程目标的实现。
同时,注重培养学生的自主学习能力和创新能力,为将来的职业发展打下坚实基础。
二、教学内容1. UCOSII操作系统概述:介绍实时操作系统的基本概念、特点及应用场景,引出UCOSII的背景、架构和优势。
教材章节:第一章 实时操作系统概述2. UCOSII内核原理:讲解UCOSII的核心组件,包括任务管理、时间管理、通信与同步机制等。
教材章节:第二章 UCOSII内核原理3. UCOSII移植与配置:介绍在不同硬件平台上移植和配置UCOSII的方法,以实际案例为例进行讲解。
操作系统课程设计报告
实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。
能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。
如果不能计算出相应的物理地址,说明原因。
⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。
能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。
⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。
能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。
⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。
能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。
⑸段式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
⑹段页式存储管理中逻辑地址到物理地址的转换。
操作系统实验报告三大问题之生产者与消费者问题
计算机操作系统实验报告题目三大经典问题之生产者与消费者问题一、课程设计的性质与任务1、加深对并发协作进程同步与互斥概念的理解。
通过编写程序实现进程同步和互斥,使学生掌握有关进程(线程)同步与互斥的原理,以及解决进程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥等有关的内容。
2、掌握进程和线程的概念,进程(线程)的控制原语或系统调用的使用。
3、了解Windows2000/XP中多线程的并发执行机制,线程间的同步和互斥。
学习使用Windows2000/XP中基本的同步对象,掌握相应的API函数。
4、培养学生能够独立进行知识综合,独立开发较大程序的能力。
5、培养提高学生软件开发能力和软件的调试技术。
6、培养学生开发大型程序的方法和相互合作的精神。
7、培养学生的创新意识。
8、培养学生的算法设计和算法分析能力。
9、培养学生对问题进行文字论述和文字表达的能力。
二、课程设计的内容及其要求在Windows?XP、Windows?2000等操作系统下,使用的VC、VB、Java或C等编程语言,采用进程(线程)同步和互斥的技术编写程序实现生产者消费者问题或哲学家进餐问题或读者-写者问题或自己设计一个简单进程(线程)同步和互斥的实际问题。
要求:(1)经调试后程序能够正常运行。
(2)采用多进程或多线程方式运行,体现了进程(线程)同步互斥的关系。
(3)程序界面美观。
三、实验原理本实验要求利用PV操作实现解决生产者——消费者问题中的同步问题。
此问题描述的是一群生产者进程在生产产品并将这些产品提供给消费者进程去消费,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区,消费者进程可从缓冲区中取走产品去消费,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满且尚未取出的缓冲区中投放产品,并且生产者消费者互斥使用缓冲区。
四、实验原理图五、算法实现(1)有一个生产者线程ProduceThread,有1个消费者进程CustomerThread;缓冲区为shareList。
武汉工程大学《计算机操作系统课程设计报告》附录源码
武汉工程大学计算机科学与工程学院综合设计报告设计名称:操作系统综合设计设计题目:进程同步与死锁学生学号:专业班级:学生姓名:学生成绩:指导教师(职称):张立(讲师)完成时间:14年2月17日至14年2 月28日武汉工程大学计算机科学与工程学院制说明:1、报告中的第一、二、三项由指导教师在综合设计开始前填写并发给每个学生;四、五两项(中英文摘要)由学生在完成综合设计后填写。
2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。
3、指导教师评语一栏由指导教师就学生在整个综合设计期间的表现、设计完成情况、报告的质量及答辩等方面,给出客观、全面的评价。
4、所有学生必须参加综合设计的答辩环节。
凡不参加答辩者,其成绩一律按不及格处理。
答辩小组成员应由2人及以上教师组成。
5、报告正文字数一般应不少于5000字,也可由指导教师根据本门综合设计的情况另行规定。
6、平时表现成绩低于6分的学生,其综合设计成绩按不及格处理。
7、此表格式为武汉工程大学计算机科学与工程学院提供的基本格式(适用于学院各类综合设计),各教研室可根据本门综合设计的特点及内容做适当的调整,并上报学院批准。
答辩记录表成绩评定表学生姓名:学号:班级:五、Abstract:Process synchronization and deadlock is the operation of the main learningsystem research, synchronization between the process system process is a direct interaction between processes, is a cooperative process conscious behavior.However, there is a sync relationship between consumers and producers oftypical example, only by producers to produce products, consumer to consumer,between consumers and producers of action need certain coordination. Similarly,the two process is sometimes also have such a dependency, it should be certainthat their synchronization mechanism execution order.Bankers algorithm Dijkstra is the most representative of the algorithm to avoid deadlock, this algorithm can be used for the banking system because of its cashloans. Bankers algorithm is advancing in the premise to ensure the system security. The first securitycheck to process requests, to determine the allocation of resources or not, so as to ensure the safety of the system, avoid deadlock.Research on resource allocation strategies in the operating system also have similar problems, the system of limited resources for multiple processes, mustguarantee the resources of the process to return the resource in limited time, for other processes resources. If the resource is not allocated by the process ofcircular waiting for resources will occur, the process cannot continueto executethe deadlock phenomenon.On the understanding and analysis of the essential meaning of process synchronization and deadlock the core thought as well as the state of thealgorithm, the realization of design in general, including in the design ofalgorithms, and each algorithm module ideas through a flow chart, block code,and test, and finally program test. The design is a simple simulation program by compiling and debugging a system dynamic allocation ofresources,synchronization and deadlock observation conditions, and by using the appropriate algorithm, effectively prevent and avoid deadlock occurred目录摘要 (II)Abstract (III)第一章课题背景 (1)1.1 课题背景及目的 (1)1.2 课题内容及分析 (1)第二章设计简介及设计方案论述 (2)2.1 设计简介 (2)2.2 设计方案论述 (2)2.3 设计流程图 (3)第三章详细设计 (6)3.1 算法思想 (6)3.1.1基本思想 (6)3.2算法描述及数据结构 (6)3.2.1生产者/消费 (6)3.2.2银行家算法 (6)第四章设计结果及分析 (7)4.1 生产者/消费者调试界面 (7)4.1.1 主程序界面 (7)4.1.2 菜单界面 (7)4.2 银行家算法调试界面 (9)4.2.1 主程序界面................................................................................................ . (9)4.2.2 菜单界面 (10)总结 (12)致谢 (13)参考文献 (14)附录主要程序代码 (15)摘要进程同步与死锁是操作系统研究中主要的学习课题,多进程的系统中进程之间的同步关系是进程之间直接的相互作用,是合作进程间有意识的行为。
操作系统课程设计模拟文件系统
操作系统课程设计模拟文件系统学院: 计算机科学技术专业: 计算机科学与技术(工)班级: 计10- 1班**: ***学号: ****************: ***2013年07月16日《操作系统原理》课程设计任务书(计算机科学与技术专业10-1)一、课程设计题目(任选一个题目)1.模拟进程管理2.模拟处理机调度3.模拟存储器管理4.模拟文件系统5.模拟磁盘调度二、设计目的和要求1.设计目的《操作系统原理》课程设计是网络工程专业实践性环节之一, 是学习完《操作系统原理》课程后进行的一次较全面的综合练习。
其目的在于加深对操作系统的理论、方法和基础知识的理解, 掌握操作系统结构、实现机理和各种典型算法, 系统地了解操作系统的设计和实现思路, 培养学生的系统设计能力, 并了解操作系统的发展动向和趋势。
2.基本要求:(1)选择课程设计题目中的一个课题, 独立完成。
(2)良好的沟通和合作能力(3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识(4)充分运用调试和排错技术(5)简单测试驱动模块和桩模块的编写(6)查阅相关资料, 自学具体课题中涉及到的新知识。
(7)课题完成后必须按要求提交课程设计报告, 格式规范, 内容详实。
三、设计内容及步骤1.根据设计题目的要求, 充分地分析和理解问题, 明确问题要求做什么。
2.根据实现的功能, 划分出合理的模块, 明确模块间的关系。
3.编程实现所设计的模块。
4.程序调试与测试。
采用自底向上, 分模块进行, 即先调试低层函数。
能够熟练掌握调试工具的各种功能, 设计测试数据确定疑点, 通过修改程序来证实它或绕过它。
调试正确后, 认真整理源程序及其注释, 形成格式和风格良好的源程序清单和结果;5.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
目录1.课程设计的目的 (1)2.课程设计的要求 (1)3.需求分析 (1)3.1问题描述 (1)3.2数据结构 (2)3.2.1 类 (2)3.2.2 结构 (2)3.2.3 函数 (2)3.3系统运行环境 (3)4.概要设计 (3)4.1创建文件操作 (3)4.2删除文件操作 (4)4.3查看文件块号 (4)5 详细设计 (4)5.1创建文件 (4)5.2删除文件 (7)5.3查看文件块号 (10)6.总结 (12)参考文献 (13)附录 (15)1.课程设计的目的掌握模拟文件系统的设计方法, 具备初步的独立分析和设计能力。
大学课程设计linux
大学课程设计linux一、教学目标本课程的目标是使学生掌握Linux操作系统的基本原理和使用方法,包括Linux的文件系统、进程管理、用户管理、网络配置等,培养学生具备独立安装、配置和管理Linux系统的能力。
在知识目标方面,要求学生了解Linux操作系统的历史、特点和发展趋势,掌握Linux的基本命令和操作,理解Linux的文件系统结构和磁盘管理,熟悉Linux 的用户和群组管理,了解Linux的网络配置和系统安全。
在技能目标方面,要求学生能够独立安装Linux操作系统,熟练使用Linux的基本命令,掌握文件和目录的管理、文本处理和进程监控,能够配置用户和群组,设置文件权限和所有权,能够配置和管理Linux的网络,了解系统安全和防火墙的基本设置。
在情感态度价值观目标方面,要求学生通过课程的学习,培养对Linux操作系统的兴趣和好奇心,增强自主学习和解决问题的能力,培养良好的编程习惯和团队合作精神,提高信息素养和职业道德。
二、教学内容本课程的教学内容主要包括Linux操作系统的基本原理和使用方法,具体包括以下几个方面:1.Linux概述:介绍Linux操作系统的历史、特点和发展趋势,Linux的发行版和安装方法。
2.Linux基本命令:讲解Linux的基本命令和使用方法,包括文件和目录管理、文本处理和进程监控。
3.Linux文件系统:介绍Linux的文件系统结构和磁盘管理,包括文件权限和所有权的设置,文件系统的挂载和卸载。
4.Linux用户和群组管理:讲解Linux的用户和群组管理,包括用户和群组的创建、删除和权限设置。
5.Linux网络配置:介绍Linux的网络配置和管理,包括网络接口的配置、IP地址的分配、网络服务的开启和关闭。
6.Linux系统安全:讲解Linux的系统安全和防火墙的设置,包括用户权限的控制、文件安全的保护、网络安全的防范。
三、教学方法本课程的教学方法主要包括讲授法、实践法和讨论法,通过多样化的教学方法,激发学生的学习兴趣和主动性。
linux课程设计要求
linux课程设计要求一、教学目标本节课的教学目标是让学生掌握Linux操作系统的基本概念、命令和操作方法。
具体包括:1.知识目标:了解Linux操作系统的历史、特点和应用场景;掌握Linux的基本命令和文件系统结构;了解Linux的用户管理和权限控制。
2.技能目标:能够熟练地在Linux环境下进行基本操作,如文件创建、删除、复制和移动;掌握文件权限的设置和用户管理;能够使用Linux命令行工具进行系统信息的查看和基本配置。
3.情感态度价值观目标:培养学生对Linux操作系统的兴趣,提高学生对计算机操作的熟练程度,培养学生的动手能力和解决问题的能力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Linux操作系统的基本概念:介绍Linux的历史、特点和应用场景,让学生了解Linux操作系统的基本情况。
2.Linux的基本命令:讲解Linux环境下的基本命令,如文件操作命令、权限设置命令和用户管理命令等,让学生能够熟练地在Linux环境下进行操作。
3.Linux文件系统结构:介绍Linux的文件系统结构,让学生了解Linux系统中的文件和目录方式。
4.用户管理和权限控制:讲解Linux系统中的用户管理和权限控制方法,让学生掌握如何设置文件权限和用户管理。
5.Linux命令行工具:介绍Linux环境下的命令行工具,如系统信息查看工具和基本配置工具,让学生能够使用命令行工具进行系统信息的查看和基本配置。
三、教学方法为了达到本节课的教学目标,我们将采用以下教学方法:1.讲授法:讲解Linux操作系统的基本概念、命令和操作方法,让学生掌握Linux的基本知识。
2.讨论法:学生进行小组讨论,让学生在讨论中解决问题,提高学生的动手能力和解决问题的能力。
3.案例分析法:通过分析实际案例,让学生了解Linux操作系统在实际应用中的作用和价值。
4.实验法:安排学生进行上机实验,让学生在实际操作中掌握Linux操作系统的使用方法。
课程设计文件操作系统
课程设计文件操作系统一、教学目标本课程的教学目标是使学生掌握操作系统的基本原理和常用操作系统的使用方法。
具体包括:1.了解操作系统的定义、功能和分类。
2.掌握操作系统的基本原理,如进程管理、内存管理、文件管理和设备管理。
3.熟悉常用操作系统的特点和使用方法,如Windows、Linux和macOS。
4.能够熟练使用操作系统进行日常计算机操作。
5.能够掌握操作系统的基本配置和优化方法。
6.能够运用操作系统的基本原理解决实际问题。
情感态度价值观目标:1.培养学生对操作系统的兴趣和好奇心,提高学生主动学习的积极性。
2.培养学生团队合作精神,学会与他人分享和交流操作系统的知识和经验。
3.培养学生对操作系统的安全意识,提高学生保护个人隐私和数据的能力。
二、教学内容本课程的教学内容主要包括操作系统的基本原理和常用操作系统的使用方法。
具体安排如下:1.操作系统概述:介绍操作系统的定义、功能和分类。
2.进程管理:讲解进程的概念、进程的状态、进程控制块、进程调度算法等。
3.内存管理:介绍内存的概念、内存分配与回收策略、虚拟内存等。
4.文件管理:讲解文件和目录的概念、文件系统的结构、文件访问控制等。
5.设备管理:介绍设备的概念、设备驱动程序、输入输出控制等。
6.Windows操作系统:讲解Windows操作系统的特点、界面布局、基本操作和高级功能。
7.Linux操作系统:介绍Linux操作系统的特点、界面布局、基本操作和高级功能。
8.macOS操作系统:讲解macOS操作系统的特点、界面布局、基本操作和高级功能。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过讲解操作系统的原理和概念,使学生掌握基本知识。
2.讨论法:学生分组讨论操作系统的实际应用场景和问题解决方案,培养学生的团队合作精神。
3.案例分析法:分析实际案例,使学生更好地理解操作系统的基本原理和常用操作系统的特点。
操作系统课程设计(完整规范版)
操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。
本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。
二、课程目标1. 理解操作系统的基本原理和功能。
2. 掌握进程管理、内存管理、文件系统等核心模块的设计和实现。
3. 熟悉操作系统调度的基本算法。
4. 提高学生的编程能力和系统设计能力。
三、课程内容1. 操作系统概述操作系统的定义、功能和发展历程操作系统的基本组成和结构操作系统的类型和特点2. 进程管理进程的定义、状态和转换进程控制块(PCB)的结构和作用进程同步与互斥进程通信进程调度算法3. 内存管理内存管理的目标连续内存管理技术非连续内存管理技术页面置换算法4. 文件系统文件系统的定义和功能文件的结构和类型文件存储空间管理文件目录管理文件操作5. I/O系统I/O系统的功能和组成 I/O设备管理I/O调度算法缓冲管理6. 系统调用系统调用的定义和类型系统调用的实现机制常用系统调用分析7. 实验与课程设计实验目的和要求实验内容和步骤课程设计题目和要求课程设计报告格式四、课程考核1. 平时成绩(30%):包括课堂表现、实验报告和作业完成情况。
2. 实验成绩(30%):包括实验操作和实验报告。
3. 课程设计成绩(40%):包括设计报告、代码实现和答辩表现。
1. 《操作系统概念》作者:亚伯拉罕·西尔伯斯查茨等2. 《现代操作系统》作者:安德鲁·S·塔嫩鲍姆3. 《操作系统导论》作者:威廉·斯托林斯六、附录1. 课程设计报告模板2. 实验报告模板3. 课程设计答辩评分标准七、课程安排1. 理论学习操作系统概述(2课时)进程管理(4课时)内存管理(4课时)文件系统(4课时)I/O系统(2课时)系统调用(2课时)2. 实验与课程设计进程管理实验(2课时)内存管理实验(2课时)文件系统实验(2课时)I/O系统实验(2课时)课程设计(8课时)课程考核(2课时)八、实验与课程设计指导1. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。
操作系统课程设计存在问题及改进意见
操作系统课程设计存在问题及改进意见一、问题分析1.课程设计内容单一目前的操作系统课程设计主要围绕实验性质的操作系统部分展开,缺少对操作系统概念、原理、架构等相关理论知识的探讨。
学生只是被要求完成操作系统的实验任务,缺乏对操作系统的整体认识和深入理解。
2.缺乏实际应用场景现有的操作系统课程设计大多只是停留在模拟简单场景下的实验,无法满足学生对操作系统在实际应用中的需求。
学生无法从课程中获得将操作系统应用于实际工程项目中的经验和技能。
3.缺乏与其他课程的整合操作系统是计算机专业的基础课程,但目前很少与其他课程进行融合。
课程设计应该能够与计算机组成原理、计算机网络等相关课程相结合,通过跨课程设计来提升学生的综合能力。
4.实验资源有限由于操作系统实验需要较高的计算资源和设备,学校往往无法提供足够的实验资源。
这导致学生在实验中的操作受到限制,不能充分发挥他们的创造性和实践能力。
二、改进意见1.拓展课程设计内容除了操作系统实验,课程设计还应该添加一些理论探讨的内容,包括操作系统的基本概念、原理、架构等方面的知识。
学生应该通过理论学习来获得对操作系统的整体认识,进一步探讨操作系统与其他领域的关联性。
2.引入实际应用案例课程设计应该引入一些实际应用场景,让学生能够将操作系统的知识应用于实际项目中。
可以通过与企业合作,或者模拟真实项目来设计操作系统课程,培养学生的实践能力和解决实际问题的能力。
3.与其他课程整合操作系统课程应该与其他计算机专业的相关课程进行整合,通过跨课程设计来提高学生的综合能力。
例如,可以与计算机组成原理课程结合,设计一个综合性的项目,让学生在设计操作系统的同时了解计算机硬件的工作原理。
4.提供更多实验资源学校应该增加对操作系统实验的投入,提供更多的计算资源和设备,以便学生能够自由地进行操作系统的实验设计。
在实验中,学生应该有足够的空间来尝试新的想法和创新,激发他们的创造力和实践能力。
5.强化交互与讨论课程设计应该注重学生与教师之间的交互与讨论。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验课程设计(二)(参照实验五)学院:计算机科学与工程专业:信息管理工作与信息系统学号:2008142118 姓名:丁建东一、实验题目:设计一个Shell解释器二、实验目的:本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。
三、实验内容:实现一个简单的shell(命令行解释器),类似于bash, csh等。
要求实现的shell支持以下内部命令:1.cd <目录>更改当前的工作目录到另一个<目录>。
如果<目录>未指定,输出当前工作目录。
如果<目录>不存在,要求有适当的错误信息提示。
改命令应能够改变PWD的环境变量。
2.echo <内容>显示echo后的内容且换行。
3.help简短概要地输出你的shell的使用方法和基本功能。
4.jobs输出shell当前的一系列子进程,要求提供子进程的命名和PID号。
5.quit, exit, bye退出shell。
所有的内部命令应当优于在$PATH中同名的程序。
任何非内部命令必须请求shell创建一个新进程,且该子进程执行指定的程序。
这个新进程必须继承shell的环境变量和指定的命令行参数。
要求实现的shell支持以下内部命令:Batch Processing 如果shell启动带有一个文件名作为参数,打开该文件并执行文件里所有命令。
待所有进程全部结束退出shell。
四、实验思路:1.所用到的系统函数(1)打开目录void cd()API调用:int chdir(dir);getcwd(dir,dir_max);实现:改变当前目录,并判断目录是否存在。
(2)回应void echo()实现:用户输入字符串,以回车结束输入。
char echo_string[echo_len][echo_max];//用户输入命令,以空格符隔开,存为字符串数组按顺序输出用户输入的字符串。
(3)输出当前子进程Void jobs()API调用:shmget(),shmat()实现:开辟一个共享内存区,一旦创建一个子进程,就把该进程的进程ID和名字记字共享区里,在子进程结束的时候消除该记录。
这样,调用jobs时只要读取共享区里的记录并输出就可以知道当前运行的子进程了。
(4)输出当前路径void pwd()API调用:getcwd();五、程序流程图。
六、程序代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#define MAXLENGTH 25#define SUBLENGTH 5#define LINELENGTH 40#define ECHO "myshell#"#define QUIT "exit"char * readline;typedef enum{EXEC,REDI,REDIS,PIPE,NOHUP,BACKGROUND }TokenType;typedef void (*fun)(char *);void analyse(void);void exec(char*);void redi(char*);void piped(char*);void bgtask(char*);sigset_t *set;int main(void){readline = (char *) malloc(MAXLENGTH*sizeof(char)); set = (sigset_t *)malloc(sizeof(sigset_t));sigemptyset(set);if( sigaddset(set,SIGINT) == -1){printf("sigset error1~!\n");exit(0);}if(sigprocmask(SIG_BLOCK,set,NULL) == -1){printf("sigset error2~!\n");exit(0);}while(1){//signal(SIGINT,SIG_IGN); //ctrl+c is ignoredfputs(ECHO,stdout);//printf echogets(readline);//gets readlineif(strncmp(readline,QUIT,4) == 0) //equal exit then exit {free(readline);return 0;}analyse();//analyse}}//analyse the readlinevoid analyse(void){TokenType type = EXEC; //command style int i = 0;char c ;//function mappingfun fun_array[] ={exec,redi,NULL,piped,NULL,bgtask};//the 'nohup ' is amazing//test if contains nohupif(!strncmp(readline,"nohup ",6)){printf("nohup~!\n");signal(SIGHUP,SIG_IGN);// SIGHUP is ignored int j = 6;c = *(readline+j);//deal with the readlinewhile(c != '\0'){*(readline+i) = c;i++;j++;c = *(readline+j);}*(readline+i) = '\0';i = 0;}*/c = *(readline+i);//control the TokenTypewhile(c != '\0')if(c == '>'){type = REDI;*(readline+i) = '+';}else if(c == '<'){type = REDIS;*(readline+i) = '+';}else if(c == '|'){type = PIPE;*(readline+i) = '+';}else if(c == '&'){type = BACKGROUND;*(readline+i) = '+';}i++;c = *(readline+i);}//with the function array ,do it(*fun_array[type])(readline);}//execute simple commandvoid exec(char * p){printf("%s\n",p);char ** tmp = (char **)malloc(SUBLENGTH*sizeof(char*)); int num = 0;pid_t pid;//split the stringtmp[num] = strtok(p," ");while(tmp[++num] = strtok(NULL," "));pid = fork();if(pid == 0){if(sigprocmask(SIG_UNBLOCK,set,NULL) == -1){printf("sigset error~!\n");exit(0);}//execute itint error = execvp(tmp[0],tmp);if(error < 0){printf("Command not found~!\n");//exit(0);}free(tmp);exit(0);}elsewait(NULL);}//command contains '>'void redi(char *p){char * str = strtok(p,"+");char * file_name = strtok(NULL," ");char **tmp = (char **)malloc(SUBLENGTH*sizeof(char*)); int num = 0;int file,file_old,file_new;pid_t pid;tmp[num] = strtok(str," ");while(tmp[++num] = strtok(NULL," "));// open the filefile = open(file_name,O_WRONLY | O_CREAT);if(file == -1){printf("open file error!\n");free(tmp);}// inorder to recoverfile_old = dup(STDOUT_FILENO);// redirect the streamfile_new = dup2(file,STDOUT_FILENO);if(file_new == -1){printf("dup error~!\n");close(file);return ;}pid = fork();if(pid == 0){int error = execvp(tmp[0],tmp);if(error < 0){printf("Command is not found~!\n");exit(0);}close(file);free(tmp);exit(0);}else{wait(NULL);//recover the streamif(dup2(file_old,file_new)== -1){printf("dup2 error\n");}}}//command contains '|'void piped(char *p){char *str1 = strtok(p,"+");char *str2 = strtok(NULL,"+");char line[LINELENGTH];// use pipe implements the '|'FILE *in = popen(str1,"r");FILE *out = popen(str2,"w");if(in == NULL||out == NULL){printf("popen error~!\n");return ;//read the string and write to outwhile(fgets(line,LINELENGTH,in) != NULL)if(fputs(line,out) == EOF)printf("fputs error~!\n");pclose(in);pclose(out);}// implements background taskvoid bgtask(char *p){char *str = strtok(p,"+");char **tmp = (char **)malloc(SUBLENGTH*sizeof(char *)); int num = 0;pid_t pid;//splittmp[num] = strtok(str," ");while(tmp[++num] = strtok(NULL," "));if((pid = fork())< 0 ){printf("fork error~!\n");return ;if(pid == 0){if(fork())exit(0); //parent diedelse{int error = execvp(tmp[0],tmp);if(error < 0){printf("commamd not found");exit(0);}exit(0);}}}。