网络操作系统课程设计
- 格式:doc
- 大小:114.50 KB
- 文档页数:22
11级网络工程专业《网络操作系统》课程设计教学计划2013-2014学年第一学期一、实习目的与要求1、掌握操作系统基本理论与管理方式;2、在算法基础上,解决实际的管理功能问题,提高学生实际应用、编程的能力;3、涉及编程题目时,要求详细书写文档内容。
二、实习内容项目一、进程机制与并发程序设计(一) linux下生产者与消费者的问题实现1、实验目的(1)掌握基本的同步互斥算法,理解生产者和消费者同步的问题模型。
(2)了解linux中多线程的并发执行机制,线程间的同步和互斥。
2、实验要求(1)创建生产者和消费者线程在linux环境下,创建一个控制台进程,在此进程中创建n个线程来模拟生产者或者消费者。
这些线程的信息由本程序定义的“测试用例文件”中予以指定。
该文件的格式和含义如下:31 P 32 P 43 C4 14 P 25 C 3 1 2 4第一行说明程序中设置几个临界区,其余每行分别描述了一个生产者或者消费者线程的信息。
每一行的各字段间用Tab键隔开。
不管是消费者还是生产者,都有一个对应的线程号,即每一行开始字段那个整数。
第二个字段用字母P或者C区分是生产者还是消费者。
第三个字段表示在进入相应线程后,在进行生产和消费动作前的休眠时间,以秒计时;这样做的目的是可以通过调整这一列参数,控制开始进行生产和消费动作的时间。
如果是代表生产者,则该行只有三个字段。
如果代表消费者,则该行后边还有若干字段,代表要求消费的产品所对应的生产者的线程号。
所以务必确认这些对应的线程号存在并且该线程代表一个生产者。
(2)生产和消费的规则在按照上述要求创建线程进行相应的读写操作时,还需要符合以下要求:①共享缓冲区存在空闲空间时,生产者即可使用共享缓冲区。
②从上边的测试数据文件例子可以看出,某一生产者生产一个产品后,可能不止一个消费者,或者一个消费者多次地请求消费该产品。
此时,只有当所有的消费需求都被满足以后,该产品所在的共享缓冲区才可以被释放,并作为空闲空间允许新的生产者使用。
linux网络操作系统课程设计一、课程目标知识目标:1. 理解Linux网络操作系统的基本概念,掌握其体系结构;2. 学会使用Linux命令行,熟悉常见网络配置与故障排除方法;3. 掌握Linux文件系统管理,了解文件权限与安全策略;4. 了解Linux下的网络服务与进程管理,理解系统启动流程。
技能目标:1. 能够独立安装与配置Linux操作系统,进行基本的网络设置;2. 熟练运用Linux命令行进行文件操作、权限管理及进程控制;3. 能够分析网络问题,利用Linux命令行工具进行故障排查;4. 学会编写简单的Shell脚本,实现自动化网络管理任务。
情感态度价值观目标:1. 培养学生对Linux网络操作系统的兴趣,激发探索精神;2. 培养学生的团队协作意识,学会分享与互助;3. 引导学生树立正确的网络道德观念,遵守网络安全规范;4. 培养学生的自主学习能力,养成良好的学习习惯。
本课程针对高年级学生,结合学科特点,注重理论与实践相结合。
在教学过程中,要求教师以学生为中心,关注个体差异,引导学生在实践中掌握知识,提高技能。
通过本课程学习,使学生具备一定的Linux网络操作系统应用与管理能力,为未来的职业发展打下坚实基础。
二、教学内容1. Linux操作系统概述- 系统特点与优势- 体系结构解析2. Linux命令行操作- 常用基本命令- 文件系统结构与命令- 权限管理命令3. 网络配置与故障排除- 网络接口配置- 路由与网关设置- 常用网络故障排除命令4. 文件系统管理- 文件与目录操作- 文件权限与归属管理- 磁盘空间管理5. 网络服务与进程管理- 常见网络服务原理与配置- 进程查看与管理- 系统启动流程与控制6. Shell脚本编程- 基本语法与结构- 常用命令与控制结构- 实例分析与编写本教学内容依据课程目标,按照系统性与科学性原则进行组织。
教学大纲明确各部分内容的教学安排,结合教材章节,确保学生能够逐步掌握Linux网络操作系统的相关知识。
课程设计网络操作系统课课程设计域的方式管理网络设计专业名称:网络工程年级: 07级学生学号: 12007248266 学生姓名:徐宁生网络操作系统课程设计设计名称域的方式管理网络设计设计要求根据本学校的网络和组织机构的实际情况,设计用域的方式来管理本校的校园网。
要求能够合理地设计组织单位,用户组,为用户设置账户属性等。
设计工具一台标准配置的计算机,操作系统为windows sever 2003或者windows sever 2000设计内容域和活动目录能够在局域网中建立并管理域控制器,并且正确认识和理解活动目录的基本概念和作用,可以为网络中的用户合理地划分用户组,建立用户账号;并且偶那个过账户属性设置来管理用户账户。
能够合理地划分域,根据实际情况建立组织单位,并正确地将组织单位委派控制给用户管理。
能够为域中的用户和计算机创建合理的组策略对象,充分发挥组策略的作用,提高管理效率和管理水平。
域”的真正含义指的是服务器控制网络上的计算机能否加入的计算机组合。
一提到组合,势必需要严格的控制。
所以实行严格的管理对网络安全是非常必要的。
在对等网模式下,任何一台电脑只要接入网络,其他机器就都可以访问共享资源,如共享上网等。
尽管对等网络上的共享文件可以加访问密码,但是非常容易被破解。
在由Windows 9x构成的对等网中,数据的传输是非常不安全的。
不过在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。
域控制器中包含了由这个域的账户、密码、属于这个域的计算机等信息构成的数据库。
当电脑联入网络时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号是否存在、密码是否正确。
如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。
不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式访问Windows共享出来的资源,这样就在一定程度上保护了网络上的资源。
《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
计算机网络课程设计报告一、设计背景。
计算机网络课程设计是计算机专业学生的重要课程之一,通过该课程的学习,学生可以系统地了解计算机网络的基本原理、技术和应用,培养学生的计算机网络设计和应用能力。
本次课程设计旨在通过实际操作,帮助学生深入理解计算机网络的知识,提高他们的实际动手能力和解决问题的能力。
二、设计目标。
1. 理论与实践相结合,通过设计,使学生能够将所学的理论知识应用到实际的网络设计中,提高他们的实际操作能力。
2. 提高解决问题的能力,设计中设置一些难点和问题,引导学生思考和解决,提高他们的问题解决能力。
3. 培养团队协作精神,设计中设置一些需要团队合作的任务,培养学生的团队协作意识和能力。
三、设计内容。
1. 网络拓扑设计,要求学生设计一个小型局域网的网络拓扑结构,包括主机、交换机、路由器等设备的连接方式和布局。
2. IP地址规划,要求学生为局域网中的每台主机和设备规划合理的IP地址,要求考虑到网络的扩展性和管理的便利性。
3. 网络服务配置,要求学生配置局域网中的基本网络服务,如DHCP服务、DNS服务等,使局域网内的主机能够正常通信和访问互联网。
4. 网络安全设置,要求学生设置基本的网络安全策略,包括防火墙配置、访问控制策略等,保障局域网的安全和稳定运行。
5. 网络故障排除,设计一些故障场景,要求学生能够快速定位和解决网络故障,提高他们的故障排除能力。
四、设计要求。
1. 设计报告,学生需要提交完整的设计报告,包括设计思路、实施步骤、配置截图等内容。
2. 实际操作,学生需要在实际的网络设备上进行配置和实验,完成设计要求。
3. 问题解答,学生需要对设计中遇到的问题进行解答和总结,形成经验和教训。
五、设计评价。
1. 设计报告评价,评价学生的设计报告是否完整、清晰、符合要求。
2. 实际操作评价,评价学生的实际操作能力和解决问题的能力。
3. 问题解答评价,评价学生对设计中遇到的问题的解答和总结是否合理、深入。
操作系统课程设计Linux一、教学目标本课程的教学目标是使学生掌握Linux操作系统的核心概念、原理和应用技能。
通过本课程的学习,学生将能够:1.理解操作系统的基本原理,包括进程管理、内存管理、文件系统和输入/输出系统。
2.掌握Linux操作系统的安装、配置和管理方法。
3.熟练使用Linux命令行界面,进行日常操作和系统管理。
4.掌握Linux常用命令、 shell脚本编写和系统监控工具的使用。
5.了解Linux操作系统在服务器、嵌入式设备和云计算等领域的应用。
二、教学内容本课程的教学内容分为五个部分:1.操作系统概述:介绍操作系统的定义、功能和分类,以及Linux操作系统的历史和发展。
2.进程管理:讲解进程的基本概念、进程控制、进程同步和互斥、死锁及其解决方法。
3.内存管理:介绍内存分配与回收策略、内存保护、虚拟内存和分页分段机制。
4.文件系统:讲解文件和目录结构、文件访问控制、文件系统性能优化和磁盘空间分配策略。
5.输入/输出系统:介绍I/O设备管理、中断和DMA机制、设备驱动程序和I/O调度策略。
三、教学方法本课程采用多种教学方法相结合的方式,以提高学生的学习兴趣和主动性:1.讲授法:教师讲解操作系统的核心概念和原理,引导学生掌握基本知识。
2.讨论法:学生针对实际案例和问题进行讨论,培养学生的思考和分析能力。
3.案例分析法:分析Linux操作系统的实际应用案例,使学生了解操作系统的应用场景。
4.实验法:安排实验室课时,让学生亲自动手进行系统安装、配置和调试,提高学生的实践能力。
四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的Linux操作系统教材,如《Linux操作系统原理与应用》。
2.参考书:提供相关的学术论文、技术博客和在线文档,供学生拓展阅读。
3.多媒体资料:制作课件、教学视频和演示文稿,辅助学生理解和记忆。
4.实验设备:提供Linux服务器、虚拟机和实验室环境,让学生进行实际操作。
网络操作系统及配置管理课程设计一、课程设计概述网络操作系统及配置管理课程是计算机科学与技术专业的一门重要课程,旨在培养学生在企业和组织的计算机网络中全面掌握网络操作系统的功能、安装、配置及管理方法。
通过本次课程设计,学生将进一步巩固已有的理论知识,了解网络操作系统的实际应用,并通过实践掌握网络配置管理技术。
二、课程设计要求本次课程设计要求学生掌握以下知识点:1. Windows Server安装与配置•安装Windows Server 2016操作系统;•熟悉Windows Server 2016的基础操作;•配置Windows Server 2016的网络设置;•配置Windows Server 2016的域、用户和组策略。
2. Linux服务器安装与配置•安装Linux服务器操作系统;•熟悉Linux服务器的基础操作;•配置Linux服务器的网络设置;•配置Linux服务器的域和用户权限。
3. VMware虚拟化技术•熟悉VMware虚拟化技术;•使用VMware搭建Windows Server和Linux服务器;•配置虚拟机网络设置;•对虚拟机进行备份和恢复。
三、课程设计步骤本次课程设计包含如下步骤:1. 实验环境配置学生需要在实验室或自己的计算机上,安装好Windows Server虚拟机、Linux 服务器虚拟机和VMware虚拟化软件。
确保虚拟机可以正常运行,并且虚拟机之间可以互相通信。
2. Windows Server安装与配置学生需要安装Windows Server 2016操作系统,并且在服务器上配置域、用户和组策略等。
2.1 安装Windows Server 2016操作系统•创建新的虚拟机,安装Windows Server 2016;•配置网络设置,确保虚拟机能够通过网络连接其他虚拟机;•安装Windows Server自带的管理工具,包括远程桌面服务、Hyper-V 和Active Directory Domn Services等。
网络操作系统应用课程设计1. 简介网络操作系统是一种可以被多个用户同时访问和共享的操作系统。
它可以运行在一台或多台计算机上,并且可以支持多用户同时工作。
本课程设计将要求学生使用网络操作系统来完成一项任务并进行评估。
该任务将包括服务器端和客户端的设置与功能。
2. 任务描述在本次课程设计中,学生将需要实现以下任务:•首先,需要设置服务器和客户端。
•之后,将需要创建多个用户账户并分配权限。
•尝试进行文件共享,包括上传和下载文件,以及远程访问。
•最后,需要实现该系统的管理和监控,例如查找并解决故障以及保护系统安全。
3. 实现细节下面将具体介绍该任务的实现细节。
3.1 服务器端服务器端是网络操作系统的核心部分,它将负责管理和分配资源。
学生需要安装和设置服务器端,并确保其正常运行。
该服务器端将运行Windows操作系统,并要求学生按照计划分配各种服务和配置。
3.1.1 用户和权限学生需要在服务器端创建多个用户账户,并根据任务需求设置他们的权限。
这将包括文件和目录访问、安全性和网络连接等方面的权限。
3.1.2 文件共享学生需要在服务器端上设置文件目录,并允许客户端共享这些文件。
要实现文件共享,学生需要创建共享文件夹并授权给指定用户。
该操作将使用Windows的共享文件夹功能。
3.1.3 远程访问学生要通过Internet或Intranet实现远程访问,允许远程客户端访问服务器上的共享文件和应用程序等。
这个过程需要安装和设置远程桌面连接,进行端口映射,同时保证系统的安全性。
3.1.4 系统管理和监控学生需要维护服务器的系统安全和稳定性。
这将包括查找和解决故障,防止恶意攻击和数据泄漏等方面的任务。
该过程需要使用Windows Server的管理和监控工具。
3.2 客户端客户端是用户接入网络操作系统的入口,学生需要实现一个客户端界面,并且能够与服务器端相互通信。
3.2.1 用户登录和权限从客户端访问服务器需要登录验证。
操作系统安全课程设计一、课程目标知识目标:1. 理解操作系统的基本安全原理,掌握操作系统安全的核心概念。
2. 学习操作系统安全机制,包括身份认证、访问控制、加密和审计等。
3. 了解常见操作系统漏洞及攻击手段,掌握安全防护策略。
技能目标:1. 能够分析操作系统安全配置,提出有效的安全优化建议。
2. 学会运用操作系统安全工具进行安全检查和加固。
3. 掌握基本的安全编程技巧,避免编写带有安全风险的代码。
情感态度价值观目标:1. 培养学生的信息安全意识,认识到操作系统安全的重要性。
2. 激发学生对计算机安全的兴趣,引导他们关注网络安全领域的最新发展。
3. 培养学生的团队协作精神和责任感,使他们能够在实际工作中发挥积极作用。
针对课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够列举并解释操作系统安全的核心概念。
2. 学生能够分析操作系统漏洞,并提出相应的安全防护措施。
3. 学生能够独立完成操作系统安全配置和加固任务,提高系统安全性。
4. 学生能够关注网络安全领域的发展,了解最新的操作系统安全技术和趋势。
5. 学生能够在团队项目中发挥积极作用,共同提高操作系统安全水平。
二、教学内容1. 操作系统安全概述- 了解操作系统的基本概念、发展历程和常见类型。
- 掌握操作系统安全的重要性及安全风险。
2. 操作系统安全机制- 学习身份认证、访问控制、加密和审计等核心安全机制。
- 分析各类安全机制的原理和作用。
3. 常见操作系统漏洞与攻击手段- 列举常见的操作系统漏洞,如缓冲区溢出、权限提升等。
- 了解攻击手段,如病毒、木马、拒绝服务和网络攻击等。
4. 安全防护策略与工具- 学习操作系统安全防护策略,如最小权限原则、安全配置等。
- 了解并运用操作系统安全工具,如防火墙、入侵检测系统等。
5. 安全编程与最佳实践- 掌握安全编程技巧,避免编写带有安全风险的代码。
- 学习操作系统安全最佳实践,提高安全意识和能力。
网络操作系统的课程设计一、课程目标知识目标:1. 让学生理解网络操作系统的基本概念、功能及作用;2. 掌握网络操作系统的体系结构、常见类型及其特点;3. 学会网络操作系统的安装、配置及维护方法;4. 了解网络操作系统中资源共享、网络安全等方面的知识。
技能目标:1. 培养学生具备安装、配置网络操作系统的实际操作能力;2. 培养学生能够运用网络操作系统进行资源共享、权限管理的能力;3. 培养学生解决网络操作系统中常见问题及故障的能力;4. 提高学生的网络操作系统管理与维护技能。
情感态度价值观目标:1. 培养学生热爱计算机网络技术,增强学习兴趣;2. 培养学生具备良好的团队协作精神和沟通能力;3. 培养学生尊重知识产权,遵循法律法规,养成良好的网络道德;4. 培养学生具备网络安全意识,关注网络信息安全。
课程性质:本课程为计算机网络技术专业核心课程,旨在培养学生的网络操作系统应用与管理能力。
学生特点:学生已具备一定的计算机基础知识和网络知识,具有较强的学习兴趣和动手能力。
教学要求:结合学生特点,注重理论与实践相结合,强调实际操作能力的培养,提高学生的网络操作系统应用与管理水平。
通过本课程的学习,使学生能够达到课程目标,为今后从事计算机网络相关工作奠定基础。
二、教学内容1. 网络操作系统概述- 网络操作系统的基本概念与功能- 网络操作系统的体系结构与发展历程- 常见网络操作系统类型及特点2. 网络操作系统的安装与配置- 网络操作系统安装前的准备工作- 网络操作系统的安装过程与方法- 常见网络操作系统配置技巧3. 网络资源管理与共享- 文件系统与磁盘管理- 用户与权限管理- 网络资源共享设置4. 网络操作系统维护与优化- 系统监控与性能调整- 系统故障排查与处理- 网络安全防护措施5. 网络操作系统的高级应用- 网络存储技术- 虚拟化技术- 网络操作系统在云计算中的应用教学大纲安排:第一周:网络操作系统概述第二周:网络操作系统的安装与配置第三周:网络资源管理与共享第四周:网络操作系统维护与优化第五周:网络操作系统的高级应用教学内容进度安排:每周安排一次理论课,一次实验课,理论与实践相结合。
操作系统课程设计(完整规范版)一、设计目的操作系统课程设计旨在让学生深入了解操作系统的基本原理,掌握操作系统设计与实现的基本方法,培养学生在操作系统领域的实际动手能力和创新思维。
通过本次课程设计,学生应能够:1. 理解操作系统的功能、结构和关键技术;2. 学会分析实际操作系统的性能和特点;3. 设计并实现一个简单的操作系统模块或功能;4. 提高团队协作和沟通能力。
二、设计要求1. 设计内容:根据课程所学,选择一个具有实际意义的操作系统模块进行设计与实现。
模块可包括:进程管理、内存管理、文件系统、设备管理等。
2. 设计规范:遵循软件工程的基本原则,确保代码的可读性、可维护性和可扩展性。
3. 团队协作:本次课程设计以小组为单位进行,每组35人。
小组成员需明确分工,共同完成设计任务。
(2):包括所有设计文件、代码及相关文档;(3)演示PPT:汇报课程设计成果,阐述设计思路、实现过程及创新点。
三、设计流程1. 需求分析:分析所选操作系统模块的功能需求,明确设计目标。
2. 系统设计:根据需求分析,设计系统架构,划分模块,确定各模块的功能和接口。
3. 编码实现:按照系统设计,编写代码,实现各模块功能。
4. 测试与调试:对实现的系统模块进行功能测试、性能测试和兼容性测试,确保系统稳定可靠。
5. 优化与改进:根据测试结果,对系统进行优化和改进。
7. 演示与答辩:制作演示PPT,汇报课程设计成果,回答评委提问。
四、评分标准1. 设计报告(30%):内容完整、结构清晰、表述准确、格式规范。
2. 代码质量(40%):代码可读性、可维护性、可扩展性、创新性。
3. 演示与答辩(20%):PPT制作、汇报效果、回答问题。
4. 团队协作(10%):分工明确、协作高效、沟通交流。
五、预期成果1. 理论与实践相结合:将课堂上所学的操作系统理论知识运用到实际设计中,加深对操作系统的理解。
2. 技能提升:提高编程能力,掌握操作系统核心模块的设计与实现技巧。
计算机网络课程设计[五篇范文]第一篇:计算机网络课程设计摘要本课程设计主要是介绍通过用winsock技术来设计ping应用程序,包括winsock的背景和功能的介绍因为SOCKET是一种应用程序接口,所以也是目前的TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的API。
SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。
应用程序在网络上传输,接收的信息都通过这个SOCKET接口来实现。
在应用开发中就像使用文件句柄一样,可以对SOCKET句柄进行读,写操作。
本设计是通过用winsock的VC编程语言来实现ping应用程序的,其中包括ping命令的工作原理和一些相关功能,以及网际控制协议(ICMP)的数据报格式和IP数据报的格式,根据这些格式和相关的功能及原理设计出的ping命令的测试程序,程序通过分析ICMP报文的结构,在结构体中定义相应的字段来存储对应的信息。
程序主要难点是定义对应的字段来存储报文的相应字段。
程序通过send_packet(); /*发送所有ICMP报文*/ recv_packet(); /*接收所有ICMP报文*/函数来实现报文的发送和接收。
另外,通过实验可以理解在网络中,报文的结构和网络传输协议。
如:ICMP数据报的数据发送前需要两级封装:首先添加ICMP报头形成ICMP报文,再添加IP报头形成IP数据报。
这正好是网络中各层的相互关系。
网络中数据通过ICMP数据报的数据的各个字段来判断路由,和选择虚电路。
目录1. 摘要...............................................................4 2.SOCKET简介......................................................6 3.基于WINDOWS SOCKET的应用开发介绍。
计算机网络系统课程设计一、教学目标本课程旨在让学生了解和掌握计算机网络系统的基本概念、原理和技术,培养学生运用计算机网络知识解决实际问题的能力。
具体目标如下:1.知识目标:(1)了解计算机网络的定义、发展历程和分类;(2)掌握计算机网络的基本组成部件,包括硬件和软件;(3)理解计算机网络的体系结构,包括OSI七层模型和TCP/IP四层模型;(4)熟悉常见的网络协议和算法;(5)掌握网络编程的基本方法和技术。
2.技能目标:(1)能够运用网络协议分析工具分析实际网络数据包;(2)具备简单的网络设备配置和调试能力;(3)能够使用网络编程语言编写简单的网络应用程序;(4)掌握网络故障排查和网络安全防护方法。
3.情感态度价值观目标:(1)培养学生对计算机网络技术的兴趣和好奇心;(2)培养学生团队合作精神和自主学习能力;(3)使学生认识到计算机网络技术在现代社会中的重要性和应用广泛性;(4)培养学生具备良好的网络道德和法律意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.计算机网络概述:计算机网络的定义、发展历程、分类和应用场景;2.计算机网络组成:硬件设备、软件设备及网络协议;3.计算机网络体系结构:OSI七层模型、TCP/IP四层模型及常见协议;4.网络互联设备:交换机、路由器、网关等设备的原理和配置;5.网络协议分析:TCP/IP协议族、HTTP协议、FTP协议等;6.网络编程技术:Socket编程、HTTP编程等;7.网络安全:防火墙、加密技术、攻击与防护手段等。
三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:讲解基本概念、原理和协议;2.案例分析法:分析实际网络应用案例,加深对知识点的理解;3.实验法:动手实践,培养实际操作能力;4.讨论法:分组讨论,激发学生思考和团队合作精神。
四、教学资源1.教材:《计算机网络》(谢希仁版);2.参考书:《TCP/IP详解卷1:协议》(W. Richard Stevens著);3.多媒体资料:网络教学视频、PPT课件等;4.实验设备:交换机、路由器、防火墙等网络设备;5.网络编程工具:Wireshark、Python等。
网络操作系统课程设计
课程设计(论文)任务书
院专业班
一、课程设计(论文)题目网络操作系统安全设置及web服务的配置与测试
二、课程设计(论文)工作自2022年6月11日起至2022年6月16日止。
三、课程设计(论文)地点:创新大楼402、405机房。
四、课程设计(论文)内容要求:
1.本课程设计的目的
通过课程设计,达到:1)加深网络操作系统中安全概念的了解;
(2)深入了解Linu某系统的安全设置,并完成相关操作;(3)巩固相关的理论知识;
(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)熟悉Linu某系统环境,掌握Linu某系统安全设置的理论;
(2)掌握Linu某环境下安全设置的深入配置方法;
(3)了解Linu某环境服务器安全运行的要点,掌握相关软件的管理技术。
2)课程设计论文编写要求
(1)理论设计部分以课程设计论文的形式提交,格式必须严格按照课程设计论文标准格式进行书写和装订。
(2)课程设计报告(论文)包括目录、绪论、正文、设计小结、参考文献、附录等
3)课程设计评分标准:
(1)考勤与学习态度:20分
(2)理论理解与课程设计报告论文:30分;
(3)动手操作与程序设计:30分;
(4)设计论文答辩:20分。
广东省国防科技技师学院《网络操作系统》课程设计一、课程名称:网络操作系统二、内容简介:网络操作系统课程在计算机网络专业课程体系中是构建、管理和维护计算机网络的核心,是计算机网络系统运行、控制与管理的核心,在“建网、管网、用网”等职业岗位领域具有不可缺少的地位,它负责分配、协调和安全管理各种网络资源以及应用服务等任务,培养具备运行、管理和维护基于Windows的网络系统的技能人才,符合职业岗位的需求特点。
同时是计算机网络技术专业的一门职业技能课,具有很强的实用性和可操作性。
该课程是计算机网络技术专业网络工程方向的专业课程,主要包含Windowsserver2008在网络服务器管理的最常用技术,也是网络管理员执业资格考试的重要内容,在整个课程体系中具有重要的作用。
三、课程定位按照企业对网络技术专业人才的技能需求和学院的实际情况,网络专业的人才培养目标定位在面向系统集成行业和各企业的网络管理岗位,办学理念上以“掌握一定的计算机网络原理、设计安装、调试等方面理论知识,又具有较强实践动手能力,能够从事计算机网络工程与网络管理相关工作的高素质、高技能人才”为培养目标,以训练职业能力为本位的新型教育教学模式,在质量评价上,注重学生是否具备适应职业岗位的核心职业能力,包括关键性的技术应用能力及创新、创业能力。
《网络操作系统》课程是计算机网络技术专业的一门专业课,具有很强的实用性和可操作性。
该课程是网络技术专业网络管理方向的专业课程,主要包含WINDOWSSERVER2008在网络服务器管理最常用技术,也是网络管理员执业资格考试的重要内容,在整个课程体系中具有重要的作用。
?结合计算机网络专业的人才培养目标,我们将“网络操作系统”课程定位于网络管理员的工作岗位,旨在培养网络管理中、高级技能专业人才,通过本课程的学习,学生能掌握当前先进和实用的网络操作系统,并能熟练利用Windows?2008提供的各种网络服务搭建和管理中小企业网络,能为企业提供成功的网络设计、开发和管理方案。
网络操作系统教程-WindowsServer2008管理与配置课程设计1. 背景与概述网络操作系统(Network Operating System)是指能够提供网络服务并管理网络资源的操作系统。
网络操作系统在服务器端运行,可以支持多个用户同时使用一些软件和硬件资源。
WindowsServer2008是一种非常知名的网络操作系统,由微软公司推出。
本文将介绍WindowsServer2008的管理与配置方法,以供IT从业人员参考。
2. 课程目标本课程的目标是使学生能够了解WindowsServer2008操作系统的基本概念和管理与配置技能,掌握WindowsServer2008网络管理的基本方法。
3. 课程大纲本课程分为以下几个部分:3.1 WindowsServer2008介绍•什么是WindowsServer2008•WindowsServer2008的历史和版本•WindowsServer2008支持的硬件3.2 WindowsServer2008安装与配置•准备安装WindowsServer2008•安装WindowsServer2008•WindowsServer2008的初始配置•WindowsServer2008的升级和修复3.3 用户管理•WindowsServer2008用户帐户和组•创建和管理用户帐户和组•密码策略设置3.4 文件与共享管理•文件共享基础知识•共享文件夹的创建和管理•NTFS权限和共享权限的管理3.5 网络服务管理•DNS(Domn Name System)配置•DHCP(Dynamic Host Configuration Protocol)配置•Web服务器(IIS)配置•FTP(File Transfer Protocol)配置3.6 网络安全管理•WindowsServer2008的安全性•防火墙与远程桌面•安全政策和审计策略•WindowsServer2008更新和维护4. 课程考核学生需完成以下任务:•搭建WindowsServer2008实验环境•进行WindowsServer2008安装与配置•创建和管理用户帐户和组•共享文件夹的创建和管理•配置DNS、DHCP、IIS、FTP等服务•制定WindowsServer2008安全政策和审计策略•对WindowsServer2008进行更新和维护所有实验均需在规定时间内完成,并提交相应的报告。
操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。
本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。
二、课程目标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. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。
操作系统的课程设计实验(shell程序)用C语言编写一个简单的shell程序,希望达到以下目的:用C语言编写清晰易读、设计优良的程序,并附有详细的文档。
熟悉使用Linux下的软件开发工具,例如gcc、gdb和make。
在编写系统应用程序时熟练使用man帮助手册。
学习使用POSIX/UNIX系统调用、对进程进行管理和完成进程之间的通信理解并发程序中的同步问题。
锻炼在团队成员之间的交流与合作能力。
熟悉虚拟机软件VMWare的操作与使用熟悉Linux操作系统的基本操作与命令的使用掌握gcc编译器的基本使用,并能使用gcc编译器编写简单的程序实验环境本实验的程序用C语言编写,使用makefile文件编译整个程序,生成一个名为ysh可执行程序,在终端输入“./ysh”即可执行。
makefile文件的内容如下:ysh:ysh.c1.2 实验要求1.2.1 ysh解释程序的重要特征本实验要实现一个简单的命令解释器,也就是Linux中的shell程序。
实验程序起名为ysh,要求其设计类似于目前流行的shell解释程序,如bash、csh、tcsh,但不需要具备那么复杂的功能。
ysh程序应当具有如下一些重要的特征:l 能够执行外部程序命令,命令可以带参数。
.。
l 能够执行fg、bg、cd、history、exit等内部命令。
l 使用管道和输入输出重定向。
l 支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前台/后台状态,以及控制作业的挂起、中止和继续运行。
除此之外,在这个实验中还须做到:l 使用make工具建立工程。
l 使用调试器gdb来调试程序。
l 提供清晰、详细的设计文档和解决方案。
1.2.2 ysh解释程序的具体要求1. Shell程序形式本实验的ysh程序设计不包括对配置文件和命令行参数的支持。
如果实现为像bash那样支持配置文件,当然很好,但本实验并不要求。
ysh应提供一个命令提示符,如ysh>,表示接收用户的输入,每次执行完成后再打印下一个命令提示符ysh>。
当用户没有输入时,ysh需要一直处于随时等待输入状态,同时在屏幕上显示一些必要的信息。
2. 外部命令和内部命令在大多数情况下,用户输入的命令是执行存储在文件系统中的可执行程序,我们叫做外部命令或外部程序。
ysh应当支持在执行这些程序时可以将输入输出重新定向到一个文件,并允许若干个程序使用管道串联起来。
从本实验的角度来讲,我们把由管道连接起来的复合命令以及单独使用的命令统称为作业。
外部命令的形式是一系列分隔的字符串。
第一个字符串是可执行程序的名字,其他的是传给这个外部程序的参数。
如果第一个字符串所声明的可执行文件并不存在或者不可执行.则认为这个命令是错误的。
解释器还须支持一些内部命令,这些命令在ysh程序内部实现了特定的动作,下面是一些内部命令,如果用户提交了一个内部命令,ysh 应当按照下面的描述执行相应动作。
l exit:结束所有的子进程并退出ysh。
l jobs:打印当前正在后台执行的作业和挂起的作业信息。
输出信息应采用便于用户理解的格式。
jobs自身是一条内部命令,所以不需要显示在输出上。
l fg %<int>:把<int>所标识的作业放到前台运行。
如果这个作业原来已经停止,那么让它继续运行。
shell应当在打印新的命令提示符之前等待前台运行的子进程结束。
l bg %<int>:在后台执行<int>标识的已挂起的进程。
3.命令行当用户在提示符后面输入命令时,输入的整行内容叫做“命令行字符串”,ysh应当保存每一条命令行字符串,直到它表示的作业执行结束,其中包括后台作业和被挂起的作业。
ysh应当给每一个命令行字符串赋一个非负整数标识符。
这个整数用来标识存储作业的数据结构,作业的数据结构应包含整个命令行字符串所表示的内容。
一旦命令行字符串代表的作业执行结束,ysh就要删掉表示这个作业的数据结构。
标识符可以循环使用。
对于包含内部命令的命令行字符串,不需要为它们建立作业的数据结构,因为它们本身的内容全部包含在ysh程序中。
4.前台和后台作业ysh应当能够执行前台和后台作业。
shell在前台作业执行结束之前要一直等待。
而在开始执行后台作业时要立刻打印出提示符ysh>,让用户输入下一条命令。
前台作业的执行总是优先于执行一个后台作业,ysh不需要在打印下一个提示符前等待后台作业的完成,无论是否有后台作业的执行,只要完成一个前台作业,便立即输出提示符ysh>。
一个后台作业结束时,ysh应当在作业执行结束后立刻打印出一条提示信息。
下面语法中会在命令语法分析程序中介绍相应的语法来支持后台作业。
5.特殊键又称组合键。
通过终端驱动程序,特殊的组合键可以产生信号给ysh,程序应当对这些信号做出适当的响应。
l Ctrl+Z:产生SIGTSTP信号,这个信号不是挂起ysh,而是让shell挂起在前台运行的作业,如果没有任何前台作业,则该特殊键无效。
l Ctrl+C:产生SIGINT信号,这个信号不是中止ysh,而是通过ysh发出信号杀死前台作业中的进程。
如果没有任何前台作业,则该特殊键无效。
6.分析用户输入1) 分隔符和特殊字符分析用户输入的语法分析器应具有下面介绍的功能,它能够检查用户的输入错误。
如果用户输入的某些地方出错了,ysh应提供合理的出错信息。
就像商业级别的shell一样,ysh每次接受用户输入的一行命令,在用户按下回车键(Enter)后开始执行分析动作。
空命令不产生任何操作,而只是打印一个新提示符。
定义空格符为分隔符,ysh应能处理命令行中间和前后出现的重复空格符。
某些字符被称做“元字符",它们在用户输入的上下文中具有特定的含义。
这些字符包括“&、| 、<、>“。
shell假设这些字符不会出现在程序名、参数名和文件名中,它们是ysh的保留字符。
下面几小节会解释这些元字符的含义。
2) 内部命令如果命令行字符串符合前面介绍的内部命令的格式,它就作为一个内部命令被解释。
如果不是,就要考虑可能是外部程序的执行,或者是错误的。
3) I/O重定向一个程序命令后面可能还跟有元字符“<”或“>”,它们是重定向符号,而在重定向符号后面还跟着一个文件名。
在“<”的情况下,程序的输入被重定向到一个指定的文件中。
在“>”的情况下,程序的输出被重定向到一个指定的文件中。
如果输出文件不存在,需要创建一个输出文件。
如果输入文件不存在,则认为是出现了错误。
4) 管道和协同程序在一条命令行中当若干个命令被元字符“|”分隔开时,这个元字符代表管道符号。
在这种情况下,ysh为每一个子命令都创建一个进程,并把它们的输入/输出用管道连接起来。
例如下面这条命令行:progA argA1 argA2<infile | progB argB1>outfile应生成progA和progB两个进程,progA的输入来自文件infile,progA的输出是progB的输入,并且progB的输出是文件outfile。
这种命令行可以通过进程间通信中的管道来实现。
含有一个和多个管道的命令会在如下几种情况下产生错误:l 当其任何一个子程序执行出错时。
l 除了第一个子程序以外的其他子程序的输入被重定向。
l 除了最后一个子程序以外的其他子程序的输出被重定向。
由管道连接的多个进程所组成的作业只有当其所有的子进程都执行完毕后才算结束。
5)后台作业当用户需要在后台执行一个作业时,可以在作业命令的后面加上元字符“&”。
用户以该种方式输入的作业命令都必须放在后台执行,同时并不影响用户与终端的交互。
6)语法下面给出的语法规则描述图提供了控制用户输入的一种更规范的描述形式。
如果使用Linux中的现有工具lex和yacc来建立命令行分析器,还需要对这个语法进行修改,以便使它支持LALR(1)(Look Ahead Left Reduction)分析方法。
这个语法并不包括特殊键,因为它们不会在用户输入时显示出来,而是需要单独处理。
CommandLine代表用户的合法输入,它作为ysh要执行的一条“指令”。
这里假设存在一个词法分析器,它将空格符作为分隔符,并识别元字符作为一个词法记号等。
CommandLine := NULLFgCommandLineFgCommandLine&FgCommandLine := SimpleCommandFirstCommand MidCommand LastCommandSimpleCommand := ProgInvocation InputRedirect OutputRedirectFirstCommand := ProgInvocation InputRedirectMidCommand := NULL| ProgInvocation MidCommandLastCommand := |ProgInvocation OutputRedirectProgInvocation := ExecFi le Args .InputRedirect := NULL,<STRINGOutputRedirect := NULL>STRINGExecFile := STRINGArgs := NULLSTRING ArgsSTRING := NULLCHAR STRINGCHAR := 0 |1 |…| 9| a |b |…| z | A | B |…| Z7.实验步骤建议(1)阅读关于fork、exec、wait和exit系统调用的man帮助手册。
(2)编写小程序练习使用这些系统调用。
(3)阅读关于函数tcsetpgrp和setpgid的man帮助手册。
(4)练习编写控制进程组的小程序,要注意信号SIGTTIN和SIGTTOU。
(5)设计命令行分析器(包括设计文档)。
(6)实现命令行分析器。
(7)使用分析器,写一个简单的shell程序,使它能执行简单的命令。
(8)增加对程序在后台运行的支持,不必担心后台作业运行结束时要打印一条信息(这属于异步通知)。
增加jobs命令(这对于调试很有帮助)。
(9)增加输入输出重定向功能。
(10)添加代码支持在后台进程结束时打印出一条信息。
(11)添加作业控制特征,主要实现对组合键Ctrl+Z、Ctrl+C的响应,还有实现fg和bg命令功能。
(12)增加对管道的支持。
(13)实现上面的所有细节并集成。
(14)不断测试。
(15)写报告。
cc ysh.c—o ysh主要代码:#include <stdio.h>#include <ctype.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/wait.h>#include <math.h>#include <signal.h>#include <stdlib.h>#include "ysh.h"#define NO_PIPE -1#define FD_READ 0#define FD_WRITE 1int is_founded(char * cmd){int k = 0;while(envpath[k] != NULL){ strcpy(buf,envpath[k]);strcat(buf,cmd);if(access(buf,F_OK) == 0){ return 1;}return 0;}void getenviron(int n,char * s){ int i = 0,j = 0,k = 0;char c;char buff[80];char * p;while((c=s[i]) != '=') { buff[i++] = c;} buff[i++] = '\0';if(strcmp(buff,"PATH") == 0) {while(s[i] != '\0'){ if(s[i] == ':') {buff[j++] = '/';buff[j] = '\0';p = (char *)malloc(strlen(buff) + 1);strcpy(p,buff);envpath[k++] = p;envpath[k] = NULL;j = 0;i++;} else {buff[j] = s[i];j++;i++;}}} elsefprintf(stderr,"No match");}int getline(int fd,char * buf){ int i = 0;while(read(fd,& c,1)) {buf[i++] = c;if(c == '\n') {buf[i-1] = '\0';return i;}} return i;}void init_environ(){int fd,n;char buf[80];if((fd = open("ysh_profile",O_RDONLY,660)) == -1) { printf("init environ variable error!\n");exit(1);}while((n = getline(fd,buf)) != 0) {getenviron(n,buf);}envhis.start = 0;envhis.end = 0;head = end = NULL;}int pipel(char * input,int len){ char * argv[10][30];char * filename[0];int i,j,k,is_bg = 0;int li_cmd = 0;int fd[10][1],pipe_in = -1;int pipe_out = -1,flag = 0;pid_t pid;for(i = 0,j = 0,k = 0;i <= len;i++) {if((input[i] == ' ') || (input[i] == '\t') || (input[i] == '\0') || (input[i] == '|') || (input[i] == '>') || (input[i] == '\n')){if((input[i] == '|') || (input[i] == '>')){if(input[i] == '>') {flag =1;}if(j > 0 ) {buf[j++] = '\0';argv[li_cmd][k] = (char *)malloc(sizeof(char) * j);strcpy(argv[li_cmd][k],buf);k++;}argv[li_cmd][k] = (char *)0;li_cmd++;k = 0;j = 0;}if(j == 0) {continue;} else {buf[j++] = '\0';if(flag == 0) {argv[li_cmd][k] = (char *)malloc(sizeof(char) * j);strcpy(argv[li_cmd][k],buf);k++;} else{filename[0] = (char *)malloc(sizeof(char) * j);strcpy(filename[0],buf);}}j = 0;if((input[i] == '&') && (input[i] == '\0')) {is_bg = 1;continue;}buf[j++] = input[i];}}argv[li_cmd][k++] = NULL;for(i = 0;i <= 10;i++) {fd[i][FD_READ] = NO_PIPE;fd[i][FD_WRITE] = NO_PIPE;}for(i = 0;i < li_cmd;i++) {if(pipe(fd[i]) == -1) {printf("Can not open pipe!\n");return 0;}}for(i = 0;i < li_cmd;i++) {if(is_founded(argv[i][0]) == 0) {printf("Can not found command!\n");break;}}if(i != 0) {pipe_in = fd[i - 1][FD_READ];} else {pipe_in = NO_PIPE;}if(i != li_cmd) {pipe_out = fd[i][FD_WRITE];{ if(flag == 1) {if((pipe_out = open(filename[0],O_WRONLY | O_CREAT | O_TRUNC,S_IRUSR | S_IWUSR)) == -1) {printf("Can not open %s\n",filename[0]);return 0;}} else {pipe_out = NO_PIPE;}}if((pid = fork()) < 0) {printf("Fork failed!\n");return 0;}if(pid == 0) {if(pipe_in == NO_PIPE) {close(pipe_in);}if(pipe_out == NO_PIPE) {close(pipe_out);}if(pipe_out != NO_PIPE) {dup2(pipe_out,1);close(pipe_out);}if(pipe_in != NO_PIPE) {dup2(pipe_in,0);close(pipe_in);}execv(buf,argv[i]);} else {if(is_bg == 0) {waitpid(pid,NULL,0);}close(pipe_in);close(pipe_out);}return 0;}void add_history(char * inputcmd){envhis.end = (envhis.end + 1) % HISNUM;if(envhis.end == envhis.start) {envhis.start = (envhis.start + 1) % HISNUM;}strcpy(envhis.his_cmd[envhis.end],inputcmd); }void history_cmd(){int i,j = 0;if(envhis.start == envhis.end) {return;}else if(envhis.start < envhis.end) {for(i = envhis.start + 1;i <= envhis.end;i++) { printf("%d\t%s\n",j,envhis.his_cmd[i]);j++;}} else {for(i = envhis.start + 1;i < HISNUM;i++) { printf("%d\t%s\n",j,envhis.his_cmd[i]);j++;}for(i = 0;i <= envhis.end;i++) {printf("%d\t%s\n",j,envhis.his_cmd[i]);j++;}}}void cd_cmd(char * route){if(route != NULL) {if(chdir(route) < 0)printf("cd;%s Error file or directory!\n",route);}}void jobs_cmd(){struct NODE * p;int i = 1;p = head;if(head != NULL) {do{printf("%d %d %s\t%s\n",i,p -> pid,p -> state,p -> cmd);i++;p = p -> link;}while(p != NULL);}elseprintf("No jobs!\n");}void add_node(char * input_cmd,int node_pid){struct NODE * p;p = (struct NODE *)malloc(sizeof(struct NODE));p -> pid = node_pid;strcpy(p -> state,input_cmd);strcpy(p -> state,"running");p -> link = NULL;if(head == NULL) {head = p;end = p;} else {end -> link = p;end = p;}}void del_node(int sig,siginfo_t * sip){struct NODE * q;struct NODE * p;int id;if(sig_z == 1) {sig_z = 0;goto out;}id = sip -> si_pid;p = q = head;if(head == NULL)goto out;while(p -> pid != id && p -> link != NULL) {p = p -> link;}if(p -> pid != id)goto out;if(p == head)head = head -> link;else {while(q -> link != p) {q = q -> link;}if(p == end) {end = q;q -> link = NULL;} else {q -> link = p -> link;}}free(p);out:return;}void setflag(){sig_flag = 1;}void ctrl_z(){struct NODE * p;int i = 1;if(pid1 == 0) {goto out;}if(head != NULL) {p = head;while((p -> pid != pid1) && (p -> link != NULL)) {p = p -> link;}if(p -> pid == pid1) {strcpy(p -> state,"stopped");} else{add_node(input,pid1);strcpy(end -> state,"stopped");}}else{add_node(input,pid1);strcpy(end -> state,"stopped");}sig_z = 1;kill(pid1,SIGSTOP);for(p = head;p -> pid != pid1;p = p -> link){i++;}printf("[%d]\t%s\t%s\n",i,end -> state,end -> cmd);pid1 = 0;out:return;}void bg_cmd(int job_num){struct NODE * p;int i = 0;p = head;for(i = 1;i < job_num;i++){p = p -> link;}kill(p -> pid,SIGCONT);strcpy(p -> state,"running");}void fg_cmd(int job_num){struct NODE * p;int i = 0;p = head;for(i = 1;i < job_num;i++){p = p -> link;}strcpy(p -> state,"running");strcpy(input,p -> cmd);pid1 = p -> pid;signal(SIGTSTP,ctrl_z);kill(p -> pid,SIGCONT);waitpid(p -> pid,NULL,0);}int main(){init_environ();while(1){char c;char * arg[20];int i = 0,j = 0,k = 0;int is_pr = 0,is_bg = 0;int input_len = 0,path;int pid = 0,status = 0;struct sigaction action;action.sa_sigaction = del_node;sigfillset(& action.sa_mask);action.sa_flags = SA_SIGINFO;sigaction(SIGCHLD,& action,NULL);signal(SIGTSTP,ctrl_z);path = get_current_dir_name();printf("ysh@%s ",path);while(((c = getchar()) == ' ') || (c == '\t') || (c == EOF)) {;}if(c == '\n'){continue;}while(c != '\n'){buf[input_len++] = c;c = getchar();}buf[input_len] = '\0';input = (char *)malloc(sizeof(char) * (input_len + 1)); strcpy(input,buf);for(i = 0,j = 0,k = 0;i <= input_len;i++){if((input[i] == '<') || (input[i] == '>') || (input[i] == '|')) {if(input[i] == '|'){pipel(input,input_len);add_history(input);free(input);}elseredirect(input,input_len);add_history(input);free(input);}is_pr = 1;break;}}if(is_pr == 1){continue;}for(i = 0,j = 0,k = 0;i <= input_len;i++){if((input[i] == ' ') || (input[i] == '\0')){if(j == 0){continue;}else{buf[j++] = '\0';arg[k] = (char *)malloc(sizeof(char) * j);strcpy(arg[k++],buf);j = 0;}}else{if((input[i] == '&') && (input[i + 1] == '\0'))is_bg = 1;continue;}buf[j++] = input[i];}}if(strcmp(arg[0],"exit") == 0){add_history(input);printf("Bye bye!\n");free(input);break;}if(strcmp(arg[0],"history") == 0){add_history(input);history_cmd();free(input);continue;}if(strcmp(arg[0],"cd") == 0){add_history(input);for(i = 3,j = 0;i <= input_len;i++){buf[j++] = input[i];}buf[j] = '\0';arg[1] = (char *)malloc(sizeof(char) * j);strcpy(arg[1],buf);cd_cmd(arg[1]);free(input);continue;}if(strcmp(arg[0],"jobs") == 0){add_history(input);jobs_cmd();free(input);continue;}if(strcmp(arg[0],"bg") == 0){add_history(input);for(i = 0;i <= input_len;i++){if(input[i] == '%'){break;}}i++;for(;i <= input_len;i++){buf[j++] = input[i];}buf[j] = '\0';arg[1] = (char *)malloc(sizeof(char) * j);strcpy(arg[1],buf);bg_cmd(atoi(arg[1]));free(input);continue;}if(strcmp(arg[0],"fg") == 0){add_history(input);for(i = 0;i <= input_len;i++) {if(input[i] == '%'){break;}}i++;for(;i <= input_len;i++){buf[j++] = input[i];}buf[j] = '\0';arg[1] = (char *)malloc(sizeof(char) * j);strcpy(arg[1],buf);fg_cmd(atoi(arg[1]));free(input);continue;}if(is_pr == 0){arg[k] = (char *)malloc(sizeof(char));arg[k] = NULL;if(is_founded(arg[0]) == 0){printf("This command is not founed!\n");for(i = 0;i <= k;i++){free(arg[i]);}continue;}}add_history(input);if((pid = fork()) == 0){if(is_bg == 1){while(sig_flag == 0){signal(SIGUSR1,setflag);}sig_flag = 0;}}else{pid1 = pid;if(is_bg == 1) {add_node(input,pid1);kill(pid,SIGUSR1);pid1 = 0;} if(is_bg == 0){waitpid(pid,& status,0);}}if(is_bg == 1) {sleep(1);}for(i = 0;i < k;i++) {free(arg[i]);free(input);}}return 0;}。