操作系统实践报告
- 格式:docx
- 大小:21.47 KB
- 文档页数:31
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。
实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。
三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。
通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。
2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。
通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。
在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。
(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。
通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。
2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。
在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。
(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。
操作系统实习报告一、引言操作系统是计算机系统中的核心软件之一,扮演着管理和控制计算机硬件资源的重要角色。
为了更深入地了解和掌握操作系统的实际应用,我参加了一次为期两个月的操作系统实习。
本报告将对实习的内容、所学到的知识和经验进行总结和分享。
二、实习背景实习期间,我加入了一家知名互联网公司的技术部门,并被分配到操作系统团队。
该团队负责研发和维护公司内部使用的自主开发操作系统,以及对外提供技术支持。
三、实习内容1. 参与操作系统开发和维护:在实习期间,我积极参与公司操作系统的开发和维护工作。
这包括与其他团队成员合作,分析和解决操作系统的bug,以及根据需求进行功能增强和改进。
2. 系统性能优化:我还参与了一些系统性能优化的工作。
通过分析和测试,我学会了如何定位和解决系统性能瓶颈,并提出相应的优化建议。
这让我对操作系统的内部原理和工作机制有了更深入的了解。
3. 用户支持和故障排除:作为操作系统团队的一员,我还负责为公司内部的员工提供操作系统相关的技术支持。
这包括回答用户的问题、解决操作系统相关的故障以及编写相关技术文档。
四、实习收获1. 增强操作系统的理论知识:通过实习,我深入学习和理解了操作系统的核心概念和原理。
在实际应用中,我更加清楚地认识到这些理论知识的重要性和应用场景。
2. 实践操作系统开发技能:在操作系统的开发和维护过程中,我学会了使用一些关键的操作系统开发工具和技术,如调试器、性能分析工具等。
这对我的职业发展将起到积极的促进作用。
3. 增强团队协作能力:在实习中,我和其他团队成员积极合作,并深入参与项目开发和讨论。
通过与其他成员的交流和合作,我不断提升了团队协作的能力和技巧。
五、实习心得这次操作系统实习经历让我受益匪浅。
通过亲身参与操作系统的开发和维护,我对操作系统的原理和实际应用有了更深入的理解。
同时,实习也增强了我的团队协作和解决问题的能力。
六、结语通过这次操作系统实习,我的实践能力和技术水平得到了很大提升。
操作系统实践报告摘要本实践报告基于对操作系统相关理论的学习,结合操作系统实践操作,对操作系统进行了深入了解和学习,主要介绍了操作系统的概念、类型、特点、功能、架构等相关内容,并通过实践操作,进一步加深了对操作系统的认识和理解。
引言操作系统是计算机系统中重要的一部分,作为计算机系统中的内核,承担着诸多任务,如资源管理、进程管理、文件管理等。
操作系统的发展历程漫长而又曲折,但在计算机系统中的地位始终不变。
本实践报告的目的就是通过对操作系统的深入了解和学习,对操作系统进行更全面、深入的掌握。
一、操作系统概述1.1 操作系统的定义操作系统(Operating System,简称OS)是管理计算机硬件与软件资源、控制计算机操作、扩展计算机功能的系统软件。
1.2 操作系统的类型按照系统架构划分,常见的操作系统类型有以下几种:- 单用户单任务操作系统- 单用户多任务操作系统- 多用户操作系统- 实时操作系统- 分布式操作系统1.3 操作系统的特点- 并发性:操作系统能在同一时间内处理多个程序请求。
- 共享性:操作系统能够将计算机系统的硬件资源共享给多个程序使用,按一定的方式进行资源分配。
- 虚拟性:操作系统能够将一部分物理资源抽象成逻辑资源,使其能更加高效地使用。
- 异步性:程序的执行顺序不受人为的约束,由操作系统的规划进行决定。
1.4 操作系统的功能- 进程管理:包括进程的创建、销毁、管理、同步、通信等。
- 存储管理:包括内存分配、虚拟存储、存储保护等。
- 文件管理:包括文件的管理、存取、共享、保护等。
- 设备管理:包括设备的分配、调度、缓冲、驱动程序等。
二、操作系统实践操作在学习操作系统相关理论的基础上,我们组织了实践操作,包括安装和配置虚拟机、安装操作系统和应用软件、操作系统的内核调试和分析等。
通过实践操作,进一步加深了我们对操作系统理论的认识和理解。
2.1 虚拟机的安装和配置虚拟机是一种允许在一台计算机上运行多个操作系统的计算机程序。
计算机实践报告(3篇)计算机实践报告(通用3篇)计算机实践报告篇1今年暑假我来到了上海酷扬计算机科技有限公司售后服务部实习,短短1个月的工作过程使我受益匪浅。
不仅计算机专业知识增长了,最主要是懂得了如何更好的为人处事。
当今社会一直处在加速的发展变化中,所以对人才的要求也越来越高,我们要用发展的眼光看问题,就要不断提高思想认识,完善自我。
师傅说作为一名IT从业者,所受的社会压力将比其他行业更加沉重,要学会创新求变,以适应社会的需要。
如果是在单位,那就更需要掌握全面的计算机知识,因为小到计算机的组装维修,大到服务器的维护与测试,都需要一个人独立完成。
可以说,近1个月的工作使我成长了不少,从中有不少感悟,下面就是我的一点心得:第一是要真诚:你可以伪装你的面孔你的心,但绝不可以忽略真诚的力量。
第一天去服务部实习,心里不可避免的有些疑惑:不知道师傅怎么样,应该去怎么做啊,要去干些什么等等!踏进公司的办公室,只见几个陌生的脸孔用莫名而疑惑的眼神看着我。
我微笑着和他们打招呼,尴尬的局面立刻得到了缓解,大家多很友善的微笑欢迎我的到来。
从那天起,我养成了一个习惯,每天早上见到他们都要微笑的说声:师傅早,那是我心底真诚的问候。
我总觉得,经常有一些细微的东西容易被我们忽略,比如轻轻的一声问候,但它却表达了对老师同事对朋友的尊重关心,也让他人感觉到被重视与被关心。
仅仅几天的时间,我就和师傅们打成一片,很好的跟他们交流沟通学习,我想,应该是我的真诚,换得了老师的信任。
他们把我当朋友也愿意指导我,愿意分配给我任务。
第二是沟通:要想在短暂的实习时间内,尽可能多的学一些东西,这就需要跟老师有很好的沟通,加深彼此的了解,刚到网络中心,老师并不了解你的工作学习能力,不清楚你会做哪些工作,不清楚你想了解什么样的知识,所以跟老师建立起很好的沟通是很必要的。
同时我觉得这也是我们将来走上社会的一把不可获缺的钥匙。
通过沟通了解,师傅我有了大体的了解,一边有针对性的教我一些计算机知识,一边根据我的兴趣给予我更多的指导与帮助,例如我对网络布线,电脑硬件安装,系统、网络或硬件故障排除,工作原理应用等方面比较感兴趣,师傅就让我和他一起完成电脑故障排除工作。
第1篇一、引言操作系统是计算机科学与技术领域的重要基础课程,它涉及计算机系统的资源管理、进程管理、存储管理、文件系统等多个方面。
为了提高学生对操作系统的理解和掌握程度,本文将从教学实践的角度,探讨如何进行操作系统教学。
二、教学目标1. 使学生掌握操作系统的基本概念、原理和关键技术;2. 培养学生分析和解决实际问题的能力;3. 增强学生的团队协作和创新能力;4. 提高学生的编程能力和动手能力。
三、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、分类和特点;2. 进程管理:讲解进程的概念、进程状态、进程调度算法和进程同步与互斥;3. 存储管理:分析内存分配策略、页面置换算法和虚拟内存技术;4. 文件系统:探讨文件系统的概念、目录结构、文件操作和存储设备管理;5. 设备管理:介绍设备的分类、驱动程序、I/O控制方式和中断处理;6. 网络操作系统:讲解网络操作系统的基本概念、网络协议、网络设备管理和网络安全。
四、教学实践1. 案例教学:通过实际案例,引导学生分析操作系统的原理和应用。
例如,以Linux系统为例,讲解进程调度、内存管理和文件系统等知识点。
2. 实验教学:设计实验项目,让学生动手实践操作系统的相关知识。
实验项目包括:(1)进程调度实验:让学生编写进程调度算法,实现进程的创建、调度和同步。
(2)内存管理实验:让学生实现内存分配、页面置换和虚拟内存等技术。
(3)文件系统实验:让学生实现文件系统的目录结构、文件操作和存储设备管理。
(4)设备管理实验:让学生编写设备驱动程序,实现设备的控制和管理。
3. 项目教学:以实际项目为背景,让学生分组完成项目开发。
项目可以包括:(1)操作系统模拟器:让学生模拟操作系统的运行过程,加深对操作系统原理的理解。
(2)嵌入式操作系统开发:让学生了解嵌入式操作系统的特点,掌握嵌入式开发技能。
(3)分布式操作系统开发:让学生了解分布式系统的原理,掌握分布式操作系统的开发方法。
操作系统实践报告在当今数字化的时代,操作系统作为计算机系统的核心组成部分,对计算机的性能和用户体验起着至关重要的作用。
为了更深入地理解操作系统的工作原理和功能,我进行了一系列的实践操作,并在此向大家分享我的实践成果和心得体会。
首先,让我们来了解一下操作系统的基本概念。
操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。
它负责合理地分配资源,为用户提供一个方便、高效、稳定的工作环境。
常见的操作系统有 Windows、Linux、Mac OS 等。
在实践过程中,我选择了 Windows 操作系统作为主要的研究对象。
通过对其系统设置、文件管理、进程管理等方面的操作,我对操作系统的功能有了更直观的认识。
在系统设置方面,我深入研究了控制面板中的各项功能。
例如,通过调整显示设置,我可以改变屏幕分辨率、刷新率和色彩模式,以适应不同的工作需求和视觉体验。
在电源选项中,我可以设置计算机的休眠时间、待机时间和电源计划,从而达到节能和延长电池寿命的目的。
此外,还可以对声音、网络、用户账户等进行个性化的设置,以满足个人的使用习惯。
文件管理是操作系统的重要功能之一。
在 Windows 中,资源管理器为我们提供了方便的文件操作工具。
我学会了如何创建、复制、移动、删除文件和文件夹,以及如何对文件进行重命名和属性设置。
同时,还掌握了搜索文件的技巧,能够快速找到所需的文件。
另外,了解了文件的扩展名及其含义,有助于我们正确地识别和处理不同类型的文件。
进程管理是操作系统确保系统稳定运行的关键环节。
通过任务管理器,我可以查看当前正在运行的进程和程序,了解它们所占用的CPU、内存等系统资源。
在遇到某些程序无响应或占用资源过多的情况时,可以通过任务管理器强制结束进程,以恢复系统的正常运行。
此外,还可以设置进程的优先级,让系统更合理地分配资源。
除了 Windows 操作系统,我也对 Linux 操作系统进行了一定的探索。
windows的实验报告(完整版)实验名称:Windows的实验报告实验目的:通过对Windows操作系统的学习和实践,了解并熟悉Windows操作系统的基本功能、操作方法及常用工具,提高计算机操作和应用能力。
实验要求:熟悉Windows操作系统的基本操作方法、文件管理及常用工具的使用。
实验设备:一台装有Windows操作系统的计算机。
实验步骤:1. Windows操作系统的启动与登录a. 按下计算机的电源按钮,等待计算机启动。
b. 在Windows登录界面输入正确的用户名和密码,点击登录。
2. Windows桌面的基本组成a. 熟悉桌面的各个元素,包括桌面图标、任务栏、开始菜单等。
b. 学习桌面图标的创建、删除、移动和重命名等操作。
3. 文件和文件夹管理a. 学习使用资源管理器打开文件和文件夹。
b. 创建新的文件夹,进行文件和文件夹的复制、剪切、粘贴和删除操作。
c. 学习使用搜索功能在计算机中查找文件和文件夹。
4. 常用工具的使用a. 学习使用文本编辑器编辑文本文件。
b. 学习使用画图工具创建简单的图形。
c. 了解并使用系统自带的计算器、记事本、画图、粘贴板等工具。
5. 网络连接与浏览器使用a. 熟悉网络连接的设置,连接到无线网络或有线网络。
b. 打开浏览器,访问常用的网站,搜索信息等。
6. Windows系统设置a. 了解并设置桌面背景、屏幕保护和分辨率等显示设置。
b. 了解并设置日期、时间和时区等时间设置。
c. 学习设置打印机和其他外部设备的配置。
7. 系统维护与安全a. 学习使用杀毒软件进行病毒扫描和清理。
b. 学习使用Windows自带的系统维护工具,如磁盘清理、磁盘碎片整理等。
8. 实验总结通过本次实验,我对Windows操作系统的基本功能和使用方法有了更深入的了解。
掌握了Windows桌面的基本组成,文件和文件夹的管理方法,以及常用工具的使用。
还学会了网络连接与浏览器的操作,Windows系统的基本设置,以及系统维护与安全等知识点。
《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。
通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。
二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。
b.设计一个简单的进程调度算法,如轮转法或优先级调度法。
c.实现进程间的通信机制,如共享内存或消息队列。
2、线程调度a.实现线程的创建、撤销和调度。
b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。
3、内存管理a.设计一个简单的分页内存管理系统。
b.实现内存的分配和回收。
c.实现一个简单的内存保护机制。
4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。
b.实现文件的存储和检索。
c.实现文件的备份和恢复。
三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。
b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。
可以使用模拟的方法,不需要真实的硬件环境。
c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。
2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。
b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。
同样可以使用模拟的方法。
3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。
b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。
可以使用模拟的方法。
4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。
b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。
操作系统实验报告三存储器管理实验操作系统实验报告三:存储器管理实验一、实验目的本次存储器管理实验的主要目的是深入理解操作系统中存储器管理的基本原理和方法,通过实际操作和观察,掌握内存分配与回收的算法,以及页面置换算法的工作过程和性能特点,从而提高对操作系统资源管理的认识和实践能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验内容1、内存分配与回收算法实现首次适应算法(First Fit)最佳适应算法(Best Fit)最坏适应算法(Worst Fit)2、页面置换算法模拟先进先出页面置换算法(FIFO)最近最久未使用页面置换算法(LRU)时钟页面置换算法(Clock)四、实验原理1、内存分配与回收算法首次适应算法:从内存的起始位置开始,依次查找空闲分区,将第一个能够满足需求的空闲分区分配给进程。
最佳适应算法:在所有空闲分区中,选择能够满足需求且大小最小的空闲分区进行分配。
最坏适应算法:选择空闲分区中最大的分区进行分配。
2、页面置换算法先进先出页面置换算法:选择最早进入内存的页面进行置换。
最近最久未使用页面置换算法:选择最近最长时间未被访问的页面进行置换。
时钟页面置换算法:给每个页面设置一个访问位,在页面置换时,从指针指向的页面开始扫描,选择第一个访问位为0 的页面进行置换。
五、实验步骤1、内存分配与回收算法实现定义内存分区结构体,包括分区起始地址、大小、是否已分配等信息。
实现首次适应算法、最佳适应算法和最坏适应算法的函数。
编写测试程序,创建多个进程,并使用不同的算法为其分配内存,观察内存分配情况和空闲分区的变化。
2、页面置换算法模拟定义页面结构体,包括页面号、访问位等信息。
实现先进先出页面置换算法、最近最久未使用页面置换算法和时钟页面置换算法的函数。
编写测试程序,模拟页面的调入和调出过程,计算不同算法下的缺页率,比较算法的性能。
第1篇实验名称:计算机基本操作与常用软件应用实验日期:2023年3月15日实验地点:计算机实验室实验目的:1. 掌握计算机的基本操作,包括开关机、文件管理、系统设置等。
2. 熟悉常用软件的使用,如文字处理软件、电子表格软件、演示文稿软件等。
3. 提高计算机应用能力,为后续课程学习打下基础。
实验内容:一、计算机基本操作1. 开关机操作(1)打开计算机,等待系统启动完成。
(2)使用鼠标点击屏幕左下角的“开始”按钮,选择“关机”选项。
(3)系统提示是否保存更改,根据实际情况选择保存或取消保存。
(4)点击“确定”按钮,等待计算机完全关闭。
2. 文件管理(1)打开文件资源管理器,了解文件结构。
(2)创建文件夹:点击“文件”菜单,选择“新建”->“文件夹”,输入文件夹名称,按“确定”按钮。
(3)重命名文件或文件夹:选中文件或文件夹,右击鼠标,选择“重命名”,输入新名称,按“Enter”键。
(4)删除文件或文件夹:选中文件或文件夹,右击鼠标,选择“删除”,在弹出的对话框中选择“是”。
3. 系统设置(1)打开“控制面板”,了解系统设置。
(2)调整屏幕分辨率:在“控制面板”中找到“显示”选项,调整分辨率。
(3)设置网络连接:在“控制面板”中找到“网络和共享中心”,设置网络连接。
二、常用软件应用1. 文字处理软件(Microsoft Word)(1)创建新文档:点击“开始”按钮,选择“所有程序”->“MicrosoftOffice”->“Microsoft Word”,打开Word软件。
(2)输入文字:在文档中输入文字,可以使用“格式”工具栏进行文字格式设置。
(3)保存文档:点击“文件”菜单,选择“保存”或“另存为”,设置保存路径和文件名,点击“保存”按钮。
2. 电子表格软件(Microsoft Excel)(1)创建新工作簿:点击“开始”按钮,选择“所有程序”->“Microsoft Office”->“Microsoft Excel”,打开Excel软件。
操作系统实践报告多进程题目: 实现shell程序,要求具备如下功能•支持命令参数•$ echo arg1 arg2 arg3•$ ls /bin /usr/bin /home•实现内置命令cd、pwd、exit•$ cd /bin•$ pwd•/bin思路:说明:首先设置一个死循环模仿shell终端,读取用户的输入,并且根据空格将输入拆分成字符串数组,然后调用excute这个子函数进行处理。
1.echo根据数组第一个元素来判断命令是什么,判断出是ehco后,fork一个新的进程,将其后的内容一个个输出出来,并且父进程等待子进程退出后再执行,确保输出在屏幕上时不被打断。
2.ls3.读取用户输入并且根据拆分的数组判断出是ls命令后,fork一个新的进程,调用execlp函数将/bin/ls下的ls程序装入子进程并将拆分的数组参数部分传递给ls即可,同样的,父进程等待子进程退出,确保输出在屏幕上不被打断。
4.cd5.同样是根据输入并拆分成数组后判断出是cd命令后,fork一个新的进程,然后调用chdir并将拆分数组的参数部分传递给chdir作为实参即可。
6.pwd同样是根据输入并拆分成数组后判断出是pwd命令后,fork一个新的进程,然后调用system("pwd")即可,此命令也可以用来验证上面的cd命令是否正确执行。
7.exit8.根据用户输入逼格拆分的数组判断出是exit命令后,excute子函数返回-1,在循环中检测excute的返回值,如果是-1则直接return,退出模仿的shell终端。
: 实现shell程序,要求在第1版的基础上,添加如下功能•实现文件重定向•$ echo hello >log•$ cat log•Hello思路:接的描述,若判断出是echo命令后,要再次判断拆分的字符串数组中有无“>”出现,如果有,则把“>”之前、echo之后的内容作为输出,把“>”之后到“>”之后的第一个空白字符作为文件名,fopen创建文件并fwrite将输出内容输出到该文件中,并关闭文件。
和的源代码:#include <>#include <>#include <>#include <>#include <sys/>#include <sys/>#include <>#define LEN 256#define WIDTH 256#define HEIGHT 10void split(char source[],char dest[HEIGHT][WIDTH]){char *p;p=strsep(&source," ");int i=0;for(i=0;p[i]!='\0';i++){dest[0][i]=p[i];}dest[0][i]='\0';int j=1;while(p){p=strsep(&source," ");if(p){for(i=0;p[i]!='\0';i++){dest[j][i]=p[i];}dest[j][i]='\0';j++;}}}int execute(char comm[HEIGHT][WIDTH]){if(strcmp(comm[0],"echo")==0){int pid=fork();if(pid==0){int i=0;int is=0;for(i=1;comm[i][0]!='\0';i++){if(comm[i][0]=='>'){is=1;break;}}if(is==1){puts(comm[i+1]);FILE *fp=fopen(comm[i+1],"w+");int j=0;for(j=1;j<i;j++){fseek(fp,0,SEEK_END);fwrite(comm[j],strlen(comm[j]),1,fp);}fclose(fp);}else{int j=0;for(j=1;comm[j][0]!='\0';j++){printf("%s",comm[j]);printf(" ");}printf("\n");}}else{int status;wait(&status);}}else if(strcmp(comm[0],"ls")==0){int pid=fork();if(pid==0){if(comm[1][0]=='\0'){execlp("/bin/ls","ls","./",NULL,NULL,NULL);}else{execlp("/bin/ls","ls",comm[1],NULL,NULL,NULL);}}else{int status;wait(&status);}}else if(strcmp(comm[0],"cd")==0){int pid=fork();if(pid==0){chdir(comm[1]);}else{int status;wait(&status);}}else if(strcmp(comm[0],"pwd")==0){int pid=fork();if(pid==0){system("pwd");}else{int status;wait(&status);}}else if(strcmp(comm[0],"exit")==0){return -1;}return 1;}int main(){while(1){char command[LEN];char splitArray[HEIGHT][WIDTH]={{'\0'}};printf("%s",">>");gets(command);split(command,splitArray);int i=0;if(-1==execute(splitArray)){return 0;}}}: 实现shell程序,要求在第2版的基础上,添加如下功能•实现管道•$ cat /etc/passwd | wc -l•实现管道和文件重定向•$ cat• 3• 2• 1• 3• 2• 1•$ cat < | sort | uniq | cat >•$ cat• 1• 2• 3思路:首先读取用户输入,以“|”为分隔符将输入分割成字符串数组,然后在一个while循环中依次执行下面的动作:代码中通过pipe()函数来创建管道,创建之后父进程和子进程一个只能向管道写内容,一个只能向管道读内容。
然后利用dup()函数来把进程的输入流或者输出流重定向到管道里,这样就能实现管道的操作。
实现的时候注意可以使用多个“|”来迭代进行管道操作,需要使用一个循环来处理。
用system执行每一条命令,同时还要注意最后一个操作的输出流是标准输出(即屏幕),不需要重定向到管道里,需要特殊处理一下。
源代码:#include <>#include <>#include <>#include <>#include <sys/>#include <sys/>#include <>#define LEN 256#define WIDTH 256#define HEIGHT 10void split(char source[],char dest[HEIGHT][WIDTH]) {char *p;p=strsep(&source,"|");int i=0;for(i=0;p[i]!='\0';i++){dest[0][i]=p[i];}dest[0][i]='\0';int j=1;while(p){p=strsep(&source,"|");if(p){for(i=0;p[i]!='\0';i++){dest[j][i]=p[i];}dest[j][i]='\0';j++;}}}main(){char command[LEN];char splitArray[HEIGHT][WIDTH]={{'\0'}};printf("%s",">>");gets(command);split(command,splitArray);int i=0;for(i=0;splitArray[i][0]!='\0';i++){p uts(splitArray[i]);}int p[2];pipe(p);int j=0;for(j=0;splitArray[j+1][0]!='\0';j++){if (fork() == 0) {• . = PI/4•主线程创建1个辅助线程•主线程计算级数的前半部分•辅助线程计算级数的后半部分•主线程等待辅助线程运行结束后,将前半部分和后半部分相加思路:计算公式前1000项,主线程计算前5000项,子线程计算后5000项,主进程等待子进程结束,通过pthread_join(sub,(void **)&result);的result参数获取子进程计算结果再相加即可。
源代码:#include<>#include<>#include<>#include<>#define LEN 10000struct result{float sum;};void *subThread(){int i;float j;struct result *result;float sum1=0,sum2=0,sum=0;for(i=LEN/2+1;i<=LEN;i++){j=i;if(i%2==0){sum1+=1/(2*j-1);}tart=0;myparams[0].end=0;for(i=1;i<=thread_num-1;i++){struct param *myparam;myparam=&myparams[i];myparam->start=myparams[i-1].end+1;myparam->end=myparams[i].start+(LEN/thread_num)-1;pthread_create(&workers[i-1],NULL,compute,myparam);}myparams[thread_num].start=myparams[thread_num-1].end+1;myparams[thread_num].end=LEN;pthread_create(&workers[thread_num-1],NULL,compute,&myparams[thread_num]); int j;float sum=0;for(j=0;j<thread_num-1;j++){struct result *myresult;pthread_join(workers[j],(void **)&myresult);sum+=myresult->sum;free(myresult);}printf("%f\n",sum);return 0;}: 多线程排序•主线程创建一个辅助线程•主线程使用选择排序算法对数组的前半部分排序•辅助线程使用选择排序算法对数组的后半部分排序•主线程等待辅助线程运行结束后,使用归并排序算法归并数组的前半部分和后半部分思路:主线程排序数组的前半部分,辅助线程排序后半部分,pthread_create(&worker_id,NULL,&sort,&pa);中pa传递的是数组的首地址,主线程等辅助线程结束后,再调用merge将数组合并为有序。