操作系统课程实习2013
操作系统实习报告

操作系统实习报告一、引言操作系统是计算机系统中的核心软件之一,扮演着管理和控制计算机硬件资源的重要角色。
为了更深入地了解和掌握操作系统的实际应用,我参加了一次为期两个月的操作系统实习。
本报告将对实习的内容、所学到的知识和经验进行总结和分享。
二、实习背景实习期间,我加入了一家知名互联网公司的技术部门,并被分配到操作系统团队。
该团队负责研发和维护公司内部使用的自主开发操作系统,以及对外提供技术支持。
三、实习内容1. 参与操作系统开发和维护:在实习期间,我积极参与公司操作系统的开发和维护工作。
这包括与其他团队成员合作,分析和解决操作系统的bug,以及根据需求进行功能增强和改进。
2. 系统性能优化:我还参与了一些系统性能优化的工作。
通过分析和测试,我学会了如何定位和解决系统性能瓶颈,并提出相应的优化建议。
这让我对操作系统的内部原理和工作机制有了更深入的了解。
3. 用户支持和故障排除:作为操作系统团队的一员,我还负责为公司内部的员工提供操作系统相关的技术支持。
这包括回答用户的问题、解决操作系统相关的故障以及编写相关技术文档。
四、实习收获1. 增强操作系统的理论知识:通过实习,我深入学习和理解了操作系统的核心概念和原理。
在实际应用中,我更加清楚地认识到这些理论知识的重要性和应用场景。
2. 实践操作系统开发技能:在操作系统的开发和维护过程中,我学会了使用一些关键的操作系统开发工具和技术,如调试器、性能分析工具等。
这对我的职业发展将起到积极的促进作用。
3. 增强团队协作能力:在实习中,我和其他团队成员积极合作,并深入参与项目开发和讨论。
通过与其他成员的交流和合作,我不断提升了团队协作的能力和技巧。
五、实习心得这次操作系统实习经历让我受益匪浅。
通过亲身参与操作系统的开发和维护,我对操作系统的原理和实际应用有了更深入的理解。
同时,实习也增强了我的团队协作和解决问题的能力。
六、结语通过这次操作系统实习,我的实践能力和技术水平得到了很大提升。
操作系统实验报告3篇

课程设计说明书设计题目:操作系统课程设计班级:信息管理与信息系统2011级学号:姓名:山东科技大学2013年12 月25 日课程设计任务书学院信息科学与工程专业信息学管理与信息系统班级2011-1姓名一、课程设计题目:操作系统课程设计二、课程设计主要参考资料(1)Abraham Silberschatz & Peter Baer Galvin & Greg Gagne. Operating System Concepts(第七版影印版). 高等教育出版社. 2007.3.(2)计算机操作系统(第三版)西安电子科技大学出版社(3)三、课程设计应解决的主要问题:(1)CPU调度算法的模拟实现(2)死锁相关算法的实现(3)磁盘调度算法的实现四、课程设计相关附件(如:图纸、软件等):(1)程序源代码(2)五、任务发出日期:2013-10-1 课程设计完成日期:2014-1-1指导教师签字:指导教师对课程设计的评语成绩:指导教师签字:年月日设计1 CPU调度算法的模拟实现一、设计目的1、根据系统的资源分配策略所规定的资源分配算法2、利用编程语言,模拟实现先来先服务(FCFS)、最短作业优先(非抢占SJF)、非抢占优先调度算法、时间片轮转调度算法(RR)3、针对模拟进程,利用CPU调度算法进行调度4、进行算法评价,计算平均周转时间和平均等待时间二、设计要求1、调度所需的进程参数由输入产生(手工输入或者随机数产生)2、输出调度结果3、输出算法评价指标三、设计说明1、定义public类:class program{public:char name;//进程名int atime;//进程到达的时间int stime;//进程服务的时间int btime;//进程开始执行的时间int ftime;//进程完成的时间int rtime;//进程的周转时间float qrtime;//进程的带权周转时间};2、冒泡排序:class program t;for( i=1;i<m;i++)for(int j=0;j<m-i;j++)if(p[j].atime>p[j+1].atime){t=p[j];p[j]=p[j+1];p[j+1]=t;}3、流程图:(1)①先来先服务调度流程图:②主要程序p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(float)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}①短作业优先进程(非抢占优先权)调度流程图:②(SJF)主要代码int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].stime<p[min].stime){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}③优先权调度算法(非抢占):int k=0,x=0;for(i=k+1;i<m;i++){for(j=k+1;j<m;j++){if(p[j].atime<p[k].ftime){x++;}elsebreak;}int min=k+1;if(x>1){for(j=k+2;j<=x+k;j++){if(p[j].youxianquan<p[min].youxianquan){min=j;}}t=p[min];p[min]=p[k+1];p[k+1]=t;p[k+1].ftime=p[k].stime+p[k+1].stime;}k++;x=0;}①时间片轮转调度算法:②主要算法int time=p[0].atime;int Max=p[0].stime1;for(i=0; i<m; i++){p[i].stime2=p[i].stime1;if(p[i].stime1>Max)Max=p[i].stime1; }for(int j=0; j<Max; j++){for(i=0; i<m; i++){if(p[i].stime2==0)continue;if(p[i].atime<=time){p[i].stime2-=1;time+=1;}elsei=-1;if(p[i].stime2==0)p[i].ftime=time;}}4、输出p[0].btime=p[0].atime;p[0].ftime=p[0].atime+p[0].stime;p[0].rtime=p[0].ftime-p[0].atime;p[0].qrtime=(double)p[0].rtime/p[0].stime;for(i=1;i<m;i++){if(p[i].atime>p[i-1].ftime){p[i].btime=p[i].atime;}else{p[i].btime=p[i-1].ftime;}p[i].ftime=p[i].btime+p[i].stime;p[i].rtime=p[i].ftime-p[i].atime;p[i].qrtime=(float)p[i].rtime/p[i].stime;}cout<<"进程******到达时间**服务时间**开始执行时间*完成时间**周转时间**带权周转时间"<<endl;for(i=0;i<m;i++){cout<<setiosflags(ios::left)<<setw(10)<<p[i].name<<setw(10)<< p[i].atime<<setw(10)<<p[i].stime<<setw(13)<<p[i].btime<<setw(10) <<p[i].ftime<<setw(10)<<p[i].rtime<<setw(13)<<p[i].qrtime<<endl;}}四、运行结果及分析1、先来先服务(FCFS)测试数据2、短作业优先(SJF)测试数据3、优先权(非抢占)测试数据4、时间片轮转(RR)测试数据五、总结通过这次试验,我进一步的理解了冒泡排序的算法,而且,对进程作业先来先服务、短进程优先、非抢占优先、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!了解到算法很重要,又更加明白算法本身可以节约时间。
操作系统实习报告

操作系统实习报告在当今数字化的时代,操作系统作为计算机系统的核心,起着至关重要的作用。
为了更深入地了解操作系统的工作原理和实际应用,我进行了一次操作系统的实习。
通过这次实习,我不仅巩固了所学的理论知识,还获得了宝贵的实践经验。
一、实习目的本次实习的主要目的是通过实际操作和观察,深入理解操作系统的基本概念、原理和功能。
具体包括:1、熟悉常见操作系统的安装、配置和使用方法,如 Windows、Linux 等。
2、掌握操作系统的进程管理、内存管理、文件系统管理等核心功能的实现机制。
3、学会运用操作系统提供的工具和命令,进行系统性能监测、故障诊断和优化。
4、培养解决实际问题的能力,提高对操作系统相关知识的综合运用水平。
二、实习环境在实习过程中,我使用了以下硬件和软件环境:1、计算机硬件:一台配备英特尔酷睿 i7 处理器、16GB 内存、512GB 固态硬盘的台式计算机。
2、操作系统:Windows 10 专业版和 Ubuntu 2004 LTS 双系统。
3、开发工具:Visual Studio Code、GCC 编译器、GDB 调试器等。
三、实习内容(一)操作系统的安装与配置首先,我学习了 Windows 10 专业版的安装过程。
在安装过程中,我了解了如何设置分区、选择安装版本、输入产品密钥等操作。
安装完成后,我进行了系统的基本配置,如安装驱动程序、更新系统补丁、设置网络连接等。
接着,我尝试安装了 Ubuntu 2004 LTS 操作系统。
与 Windows 不同,Ubuntu 的安装需要对分区进行更细致的设置,并且需要了解一些Linux 系统的基本命令。
安装完成后,我通过命令行终端配置了网络、安装了必要的软件包,并对系统进行了个性化设置,如更改桌面主题、安装输入法等。
(二)进程管理在进程管理方面,我通过 Windows 任务管理器和 Ubuntu 中的 top命令,观察了系统中正在运行的进程。
我了解了进程的状态(如运行、就绪、阻塞等)、优先级、CPU 占用率、内存使用情况等信息。
操作系统实习报告

操作系统实习报告一、引言操作系统是计算机系统中重要的组成部分,承担着管理计算机硬件和软件资源的重要任务。
本次实习旨在深入了解操作系统的基本原理和实践操作,以提高我们在实际工作中解决问题的能力和应对挑战的能力。
二、实习过程1. 实习前准备在正式开始实习前,我们对操作系统的相关知识进行了系统性的学习和复习,包括操作系统的基本概念、进程管理、内存管理、文件系统等内容。
同时,我们还熟悉了Linux系统的基本使用方法和常用命令,以便能够更好地进行实际操作和问题解决。
2. 实习内容在实习过程中,我们通过以下几个方面对操作系统进行了深入研究和实践操作。
(1)进程管理:我们通过编写代码,实现了进程创建、销毁、调度等基本功能,并通过实验验证了进程调度算法对系统性能的影响。
(2)内存管理:我们学习了虚拟内存的原理和实现方法,并结合实际案例,通过编写代码实现了虚拟内存管理的基本功能,并进行了性能测试和优化。
(3)文件系统:我们深入了解了文件系统的基本结构和实现原理,编写了文件系统的相关代码,并进行了文件读写、目录管理等操作的测试和验证。
3. 实习成果通过此次实习,我们加深了对操作系统相关知识的理解和掌握,掌握了操作系统的基本原理和实践操作技巧。
我们不仅能够熟练使用Linux系统进行开发和调试工作,还能够通过代码实现对操作系统的基本功能进行定制和优化。
此外,在实习过程中,我们还培养了良好的沟通合作能力和解决问题的能力,提高了团队合作效率和个人综合素质。
三、实习感悟通过参与操作系统实习,我深刻认识到操作系统在计算机系统中的重要性和作用。
操作系统是计算机系统的核心,它负责管理计算机的硬件和软件资源,为应用程序提供必要的支持和保护。
在实习过程中,我不仅学到了很多理论知识,更重要的是通过实际操作和解决问题,我对操作系统的工作原理和实践操作有了更深入的理解和体验。
同时,在实习过程中,我还意识到一个良好的团队合作非常重要。
由于操作系统相关的知识较为复杂和庞杂,一个人很难完全掌握和解决所有的问题,而团队合作能够充分发挥各自的优势,共同解决问题,提高工作效率。
操作系统教学实践(3篇)

第1篇一、引言操作系统是计算机科学与技术领域的重要基础课程,它涉及计算机系统的资源管理、进程管理、存储管理、文件系统等多个方面。
为了提高学生对操作系统的理解和掌握程度,本文将从教学实践的角度,探讨如何进行操作系统教学。
二、教学目标1. 使学生掌握操作系统的基本概念、原理和关键技术;2. 培养学生分析和解决实际问题的能力;3. 增强学生的团队协作和创新能力;4. 提高学生的编程能力和动手能力。
三、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、分类和特点;2. 进程管理:讲解进程的概念、进程状态、进程调度算法和进程同步与互斥;3. 存储管理:分析内存分配策略、页面置换算法和虚拟内存技术;4. 文件系统:探讨文件系统的概念、目录结构、文件操作和存储设备管理;5. 设备管理:介绍设备的分类、驱动程序、I/O控制方式和中断处理;6. 网络操作系统:讲解网络操作系统的基本概念、网络协议、网络设备管理和网络安全。
四、教学实践1. 案例教学:通过实际案例,引导学生分析操作系统的原理和应用。
例如,以Linux系统为例,讲解进程调度、内存管理和文件系统等知识点。
2. 实验教学:设计实验项目,让学生动手实践操作系统的相关知识。
实验项目包括:(1)进程调度实验:让学生编写进程调度算法,实现进程的创建、调度和同步。
(2)内存管理实验:让学生实现内存分配、页面置换和虚拟内存等技术。
(3)文件系统实验:让学生实现文件系统的目录结构、文件操作和存储设备管理。
(4)设备管理实验:让学生编写设备驱动程序,实现设备的控制和管理。
3. 项目教学:以实际项目为背景,让学生分组完成项目开发。
项目可以包括:(1)操作系统模拟器:让学生模拟操作系统的运行过程,加深对操作系统原理的理解。
(2)嵌入式操作系统开发:让学生了解嵌入式操作系统的特点,掌握嵌入式开发技能。
(3)分布式操作系统开发:让学生了解分布式系统的原理,掌握分布式操作系统的开发方法。
操作系统实习报告

操作系统实习报告在大学的学习生涯中,操作系统作为计算机科学的核心课程,为我们揭示了计算机系统运行的神秘面纱。
为了更深入地理解操作系统的原理和机制,我参加了一次操作系统的实习。
这次实习不仅让我将理论知识应用到实际中,更让我对计算机系统的运行有了全新的认识。
实习的开始,我们首先对操作系统的基本概念进行了回顾。
操作系统是管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。
它负责诸如进程管理、内存管理、文件系统管理、设备管理等重要任务。
这些概念在课堂上虽然已经学习过,但在实际操作中,才真正感受到它们的重要性和复杂性。
在进程管理方面,我们通过编程实现了进程的创建、调度和终止。
进程是操作系统中最基本的执行单元,理解其工作原理对于优化系统性能至关重要。
通过实际编写代码,我学会了如何使用系统调用创建新的进程,以及如何设置进程的优先级和调度策略。
例如,在多任务环境中,合理地分配 CPU 时间片可以确保各个进程都能得到及时的处理,从而提高系统的整体响应速度。
内存管理是操作系统的另一个关键领域。
我们学习了如何实现内存的分配和回收,以及虚拟内存的概念。
在实际编程中,使用动态内存分配函数(如malloc 和free)时,需要特别注意内存泄漏和碎片问题。
虚拟内存技术使得计算机能够运行比物理内存更大的程序,通过将暂时不使用的内存页面交换到磁盘上,有效地扩展了内存空间。
然而,这也带来了页面置换算法的挑战,如何选择最优的页面进行置换,以减少磁盘 I/O 操作,提高系统性能,是一个需要深入思考的问题。
文件系统是操作系统用于组织和管理数据的重要机制。
我们实现了简单的文件创建、读写和删除操作。
了解文件的存储结构、目录的组织方式以及文件权限的设置,对于保证数据的安全性和完整性非常重要。
同时,文件系统的缓存机制和磁盘调度算法也会影响文件操作的性能,需要在设计和实现中进行优化。
设备管理方面,我们学习了如何与外部设备进行通信和控制。
操作系统上机实验报告(13版)

编者说明《操作系统》是计算机科学与技术专业的一门核心专业基础课。
学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使自身更好的掌握操作系统的基本概念、基本原理及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。
《操作系统实验指导书》是针对这门课的实验编写的,书中设计了三个操作系统原理实验。
三个实验难易层次分明,重点突出,其中实验一(Windows操作系统)和实验二(进程管理)为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。
所有实验共8学时,采用C语言作为编程语言模拟设计完成相关程序。
限于编者的水平,难免有疏漏与错误,敬请读者批评指正。
编者:李可实验一Windows操作系统一、实验题目计算机管理、任务管理、察看了解注册表二、实验目的Windows是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。
三、实验内容1.Windows提供了那些人机交互的界面?2.观察Windows对应用程序运行的支持。
●Windows提供了几种方式启动应用程序?●Windows提供了几种方式让用户改变应用程序外观?●Windows提供了几种方式结束程序的运行?3.了解windows对应用程序的运行时对I/O支持。
系统中有多少个I/O设备?多少种I/O控制方式?能否确信应用程序I/O需要操作系统支持?能体会到“设备独立性”吗?4.观察资源管理器,记录你使用的机器的资源情况:CPU、内存、磁盘分区及容量、文件目录树及文件属性。
操作系统实习报告

操作系统实习报告操作系统实习报告一、实习背景为了更好地理解和掌握操作系统的原理,我在大学期间参加了一项操作系统实习课程。
实习内容主要包括学习操作系统的概念、原理、设计和实现方法,并在此基础上完成一定的编程任务。
二、实习任务1.学习概念和原理在实习开始前,我们首先需要学习操作系统的基本概念和原理,包括进程管理、内存管理、文件系统等内容。
我们通过阅读相关文献和视频教程,学习了操作系统的体系结构、运行机制和主要功能。
2.设计操作系统在掌握了基本概念和原理后,我们需要对操作系统进行设计。
我们选择了Unix-style操作系统进行设计和实现,该操作系统采用了模块化结构,可以方便的进行扩展和定制。
我们设计了进程管理模块、内存管理模块、文件系统模块等,在整个实习期间,不断地对操作系统设计进行改进和完善。
3.实现操作系统在完成操作系统的设计后,我们开始进行实现。
我们采用了C++编写操作系统的代码,并在Ubuntu上进行了测试。
我们使用了Linux内核的某些部分,并在此基础上进行了修改和扩展,使得我们的操作系统可以在不同的硬件平台上运行。
4.测试操作系统在对操作系统进行实现工作之后,我们对其进行了详细的测试。
我们使用了各种测试用例来测试操作系统的各个模块的正确性和性能。
在测试过程中,我们发现一些问题,并进行修改和优化。
5.提交实习报告在实习结束后,我们需要撰写一份操作系统实习报告,包括操作系统的设计、实现和测试过程等内容。
我们需要详细地描述设计思路、代码实现、测试结果和问题解决流程等,以方便其他人学习和研究。
三、实习心得操作系统实习课程是一门非常有挑战性的课程,需要较高的理论和实践能力。
在实习过程中,我收益颇丰,主要有以下几点体会。
1.理论基础很重要操作系统实习是一门需要较高的理论基础的课程,需要对操作系统原理有比较深刻的理解。
在实习之前,需要充分学习并理解操作系统相关的概念和原理,才能更好地进行设计和实现。
2.实践能力很重要除了理论基础,实践能力也是操作系统实习的关键。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本次课程实习的要求:1.总学时为36学时,要求每位同学确保在此时间内完成实验。
2.实习结束时,由老师上机验收,并上交实习报告。
验收成绩占75%,实习报告成绩占25%。
3.实习报告内容(电子文档):(1)实习题目。
(2)实习内容及设计思想:设计思路、主要数据结构、主要代码结构及代码段分析。
(3)上机实验所用平台及相关软件。
(4)调试过程:测试数据设计、测试结果分析。
(5)总结:实习中遇到的问题及解决方法、实习中产生的错误及原因分析、实习体会及收获。
本实验提示代码均采用Linux环境。
实习一进程创建一、实习内容利用fork()系统调用创建进程。
二、实习目的了解进程的创建过程,进一步理解进程的概念,明确进程和程序的区别。
三、实习题目编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个子进程在活动。
每一个进程在屏幕上显示一个字符,其中父进程显示字符A,子进程分别显示字符B和字符C。
试观察、记录并分析屏幕上进程调度的情况。
[提示]:(1)可用fork()系统调用来创建一个新进程。
系统调用格式:pid=fork()fork()返回值意义如下:=0:在子进程中,表示当前进程是子进程。
>0:在父进程中,返回值为子进程的id值(唯一标识号)。
-1:创建失败。
如果fork()调用成功,它向父进程返回子进程的pid,并向子进程返回0,即fork()被调用了一次,但返回了两次。
此时OS在内存中建立一个新进程,所建的新进程是调用fork()父进程的副本,称为子进程。
子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。
父进程与子进程并发执行。
(2)编译和执行的方法:gcc 源文件名-o 执行文件名最后,在shell提示符下输入:./执行文件名就可执行该文件。
(3)使用fork()系统调的实例。
#include <stdio.h>int myvar=0;int main(){int pid;pid = fork(); //系统调用,创建进程if (pid < 0 ) { //创建不成功,出错printf(“fork failed.”);exit(1); //系统调用}else if (pid == 0 ) { //子进程执行printf(“child process executing…\n”);myvar = 1;}else { //父进程执行wait(); //系统调用,等待子进程完成printf(“child complete.”);myvar ++;printf(“father,myvar=%d”,myvar);} exit(0);}实习二进程同步一、实习内容模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。
二、实习目的进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。
我们把若干个进程都能进行访问和修改的那些变量称为公共变量。
由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。
为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。
一般说,同步机构是由若干条原语——同步原语——所组成。
本实验要求学生模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。
三、实习题目模拟P、V操作实现同步机构,且用P、V操作解决生产者——消费者问题。
[提示]:(1) P、V操作同步机构,由P操作原语和V操作原语组成,它们的定义如下:P操作原语P (s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信号量s的状态。
V操作原语V (s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。
这两条原语是如下的两个过程:procedure p (var s: semaphore);begin s: = s-1;if s<0 then W (s)end {p}procedure v (var s: semaphore);egin s: = s+1;if s 0 then R (s)end {v}其中W(s)表示将调用过程的进程置为等待信号量s的状态;R(s)表示释放一个等待信号量s的进程。
在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可把上述的semaphore直接改成integer。
(2) 生产者——消费者问题。
假定有一个生产者和一个消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用。
消费者每次从缓冲器内取出一件产品去消费。
禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内以产品。
假定缓冲器内可同时存放10件产品。
那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序如下:B: array [0..9] of products;s1, s2; semaphore;s1: =10, s2: =0;IN, out: integer;IN: =0; out: =0;cobeginprocedure producer;c: products;beginL1:Produce (c);P (s1);B[IN]: =C;IN: =(IN+1)mod 10;V (s2);goto L1end;procedure consumer;x: products;beginL2: p (s2);x: =B[out];out: =(out+1) mod10;v (s1);consume (x);goto L2end;coend.其中的semaphore和products是预先定义的两个类型,在模拟实现中semaphore用integer 代替,products可用integer或char等代替。
(3) 进程控制块PCB。
为了记录进程执行时的情况,以及进程让出处理器后的状态,断点等信息,每个进程都有一个进程控制块PCB。
在模拟实验中,假设进程控制块的结构如图2-1。
其中进程的状态有:运行态、就绪态、等待态和完成态。
当进程处于等待态时,在进程控制块PCB中要说明进程等待原因(在模拟实验中进程等待原因是为等待信号量s1或s2);当进程处于等待态或就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当进程处于完成状态,表示进程执行结束。
(4) 处理器的模拟。
计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。
为了模拟生产者和消费者进程的并发执行,我们必须模拟一组指令和处理职能。
模拟的一组指令见图2-2,其中每条指令的功能由一个过程来实现。
用变量PC来模拟“指令计数器”,假设模拟的指令长度为1,每执行一条模拟指令后,PC加1,提出下一条指令地址。
使用模拟的指令,可把生产者和消费者进程的程序表示为图2-3的形式。
定义两个一维数组PA[0..4]和SA[0..4],每一个PA[i]存放生产者程序中的一条模拟指令执行的入口地址;每个SA[i]存放消费者程序中的一条模拟指令执行的入口地址。
于是模拟处理器执行一条指令的过程为:取出PC之值,按PA[PC]或SA[PC]得模拟指令执行的入口地址,将PC之值加1,转向由入口地址确定的相应的过程执行。
(5) 程序设计本实验中的程序由三部分组成:初始化程序、处理器调度程序、模拟处理器指令执行程序。
各部分程序的功能及相互间的关系由图2-4至图2-7指出。
输入一个字符放入C中打印或显示x中的字符图2-2 模拟的处理器指令消费者程序p (s2)GETv (s1)consumegoto 0图2-3 生产者和消费者程序·初始化程序:模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量s1、s2赋初值,对生产者、消费者进程的PCB初始化。
初始化后转向处理调度程序,其流程如图2-4。
图2-4 初始化流程·处理器调度程序:在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条指令后就有可能被打断而让出处理器由其它进程运行。
故在模拟系统中也类似处理,每当执行一条模拟的指令后,保护当前进程的现场,让它成为非运行态,由处理器调度程序按随机数再选择一个就绪进程占用处理器运行。
处理器调度程序流程见图12-5。
图12-5 模拟处理器调度图2-6 模拟处理器指令执行·模拟处理器指令执行程序:按“指令计数器”PC之值执行指定的指令,且PC加1指向下一条指令。
模拟处理器指令执行程序的流程图见图2-6和图2-7。
(a) 模拟P (s) (b) 模拟V (s)图2-7 模拟PV操作的执行另外,为了使得模拟程序有一个结束条件,在图2-6中附加了“生产者运行结束”的条件判断,模拟时可以采用人工选择的方法实现。
2-7给出了P(s)和V(s)模拟指令执行过程的流程。
其它模拟指令的执行过程已在图2-2中指出。
实习三处理器调度一、实习内容选择一个调度算法,实现处理器调度。
二、实习目的在采用多道程序设计的系统中,往往若干个进程同时处于就绪状态。
当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占有处理器。
本实习模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作。
三、实习题目设计一个按优先数调度算法实现处理器调度的程序。
[提示]:(1)假定系统有5个进程,每个进程用一个PCB来代表。
PCB的格式为:进程名、指针、要求运行时间、优先数、状态。
进程名——P1~P5。
指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。
要求运行时间——假设进程需要运行的单位时间数。
优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。
状态——假设两种状态,就绪,用R表示,和结束,用E表示。
初始状态都为就绪状态。
(2) 每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”。
(3) 处理器总是选队首进程运行。
采用动态改变优先数的办法,进程每运行1次,优先数减1,要求运行时间减1。
(4) 进程运行一次后,若要求运行时间不等于0,则将它加入队列,否则,将状态改为“结束”,退出队列。
(5) 若就绪队列为空,结束,否则,重复(3)。
实习四主存空间的分配和回收一、实习内容主存储器空间的分配和回收。
二、实习目的通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。
三、实习题目在可变分区管理方式下采用首次适应算法实现主存分配和回收。
[提示]:(1)可变分区方式是按作业需要的主存空间大小来分割分区的。
当要装入一个作业时,根据作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。