第一篇:20秒进入Windows XP操作系统
一、影响启动速度的硬件因素
笔者通过实践,发现影响电脑启动速度的主要配件是主板和硬盘,而与CPU关系不大。也就是说在其他条件相同的情况下,价格昂贵的奔腾4电脑与廉价的赛扬4的启动速度是一样的。
主板是各种电脑配件的“基地”,在开机时要做的工作很多,比如自检、搜索各种端口、各种外接设备。因此减少自检时间、减少外接设备、提高效率才能提高启动速度。如果电脑连接了扫描仪、USB硬盘等外设,就可能降低系统的启动速度。建议大家在需要用到这些外设时才连接上,USB设备可以在启动后连接。
网卡若设置不当,会明显减缓系统启动速度。如果你的电脑用不着网卡,那就直接将PCI网卡拔掉,集成网卡可以通过BIOS屏蔽掉,以免影响启动速度。很多主板对集成网卡的检测远快于独立网卡,这也是一些电脑启动后“假死”,过了一分多钟才能正常上网的原因之一。
决定主板性能的主要因素是主板芯片组,决定启动速度的主要因素是主板芯片组的磁盘性能及驱动程序性能。目前主板芯片组的主要品牌有Intel、SiS、VIA、ATi、nVIDIA五个厂商,磁盘性能最好的是Intel与SiS。Intel是IT巨头,IT界无人不晓,它占据了主板芯片组60%以上的市场份额。而SiS知名度较低,主板芯片组的市场份额不足10%,这可能与宣传不够有关,然而在AMD平台,它的磁盘性能却是最好的,价格也是最便宜的。
为了减少开机自检时间,某些主板厂商会做一些特殊设计,最大能使BIOS自检时间缩短至5秒。我们可以按自己的需要选择不同的主板厂商,而不是一味地听从经销商的推荐。
除了开机自检外,电脑启动的时间主要用在从硬盘读取系统文件。硬盘的工作是通过移动磁头读写高速旋转的盘片上的数据。那么盘片转速越高,单位时间内磁头读到的数据就会越多,对系统启动非常有利。另外,寻道时间快、缓存大的硬盘也能明显提升启动时间。资金充裕的购机者或DIY们可以考虑西数的“猛禽”系列硬盘,资金紧张或普通用户可选择经常获性能奖的日立大缓存硬盘。
电脑是“软硬兼施”的高科技产品,配件设置与系统优化也是启动提速不可缺少的武器。
二、配件的设置与优化
1.主板的BIOS优化设置
关闭多余的IDE通道、USB设备等硬件,可用“None”屏蔽掉。用“IDE HDD AUTO DETECTION”自动检测硬盘。不进行内存检测,把各项cache打开,进入“Advanced CMOS Setup”,将“Quick Boot”设为“Enable”,可不检测1MB以上的内存。
“IDE 0 Master/Slave PIO/DMA Mode,IDE 1 Master/Slave PIO/DMA Mode”硬盘顺序(模式)全部设为“Auto”。
进入“Advanced BIOS Features”选项,将光标移到“First Boot Device”选项,选“HDD-0”直接从硬盘启动,这样启动就快上好几秒。将光标移到“Quick Power On Self Test”(快速开机自检)设为“Enabled”。对于“Boot UP Floppy Seek”(开机自检软驱)设为“Disabled”。对于内存品质好的内存条建议在“SDRAM CAS Latency”选项中设置为“2”。
小提示:对于一项效果相同的设置,在不同的主板BIOS中其英文名称可能不一样。
2。网卡设置
在进入操作系统时,系统会进行网卡IP地址的搜索。如果网卡的IP地址设置为自动获取,则系统会在网络中搜索DHCP服务器以获得IP地址,无形中就会延长启动时间。若不是必要的情况,最好将网卡的IP地址进行指定(尤其是局域网中的客户。
3.开启硬盘的DMA传输方式
在桌面右击“我的电脑→属性→硬件→设备管理器→IDE ATA/ATAPI控制器→找到硬盘所在的IDE通道→属性→高级设置”,打开硬盘DMA的传送方式以加快数据读写速度。Win98与WinME的设置基本相同,只需在DMA选项前打钩。
4.给BIOS ROM瘦身
主板BIOS ROM中有一些文件是我们用不上的,可以用CBROM、AwardFlash等BIOS编辑工具去除。注意:这是有一定危险的操作,菜鸟还是不动为好。
三、Windows系统优化
1.去除多余的自启动程序
这是见效很明显的方法。点击“开始”→“运行”,在出现的对话框中输入“msconfig”,然后点击“确定”,就会调出“系统配置实用程序”(只限于Win98和WinXP系统,Win2000用户需要拷贝MSCONFIG.EXE到系统文件夹下使用或使用后文讲述的注册表编辑方法)。
点击其中的“启动”标签,将不需要自动启动的程序前面的“√”去掉就可以了。一般只需留下ctfmon(输入法图标)、systemtray(音量图标)以及杀毒程序。笔者的电脑只留下“ctfmon”这一项,如此可将启动时间缩短10秒左右。
2.优化组件的系统属性(Win98/WinME)
右击“我的电脑”,选择“属性→性能→文件系统”,选择“软盘”,去掉“每次启动电脑时搜索新的软盘驱动器”;选择“硬盘”,将“主要用途”改为“网络服务器”,“预读式优化”调至全速;选择“CD-ROM”,缓存调至最大,选“四倍或更高速”。
3.修改IDE通道控制(WinXP)
右击我的电脑→属性→硬件→设备管理器→展开“IDE ATA/ATAP控制器”,双击“次要IDE通道”选项,在弹出的对话框中选择“高级设置”选项卡,在“设备0”与“设备1”中的“设备类型”中,将原来的“自动检测”改为“无”(图6),“确定”后退出。“主要IDE通道”的修改方法也相同。重启后,滚动条滚动的时间会明显减少。
4.使用BootVis软件提升启动速度
BootVis(下载地址:)是微软公司专为WinXP开发的启动加速软件,使用比较安全,能明显提高启动速度。因篇幅关系,这里就不介绍具体使用方法了,有兴趣的朋友可查看其帮助文件。
5.去除华丽臃肿的外观
去掉“墙纸”、“屏幕保护”,删除多余的桌面图标。如果是WinXP,还可右击“我的电脑”,选择“属性→高级”,在“性能”项目单击“设置”,选中“调整为最佳性能”。
主流配置的电脑在经过以上设置与优化后,一般情况下WinXP的开机启动时间就可以控制在20秒左右了。
第二篇:快马加鞭20秒进入winXP操作系统
快马加鞭20秒进入winXP操作系统(1)
电脑中CPU的处理速度在摩尔定律这根魔棒的指挥下突飞猛进,然而我们发现电脑的启动速度却未有进步,从按开机按钮到WinXP任务栏右边的图标全部显示出来,一般要40秒以上。这与电视机一按开关就能听到声音、看到图像相比,真是相形见绌。
一、影响启动速度的硬件因素
笔者通过实践,发现影响电脑启动速度的主要配件是主板和硬盘,而与CPU关系不大。也就是说在其他条件相同的情况下,价格昂贵的奔腾4电脑与廉价的赛扬4的启动速度是一样的。
主板是各种电脑配件的“基地”,在开机时要做的工作很多,比如自检、搜索各种端口、各种外接设备。因此减少自检时间、减少外接设备、提高效率才能提高启动速度。如果电脑连接了扫描仪、USB硬盘等外设,就可能降低系统的启动速度。建议大家在需要用到这些外设时才连接上,USB设备可以在启动后连接。
网卡若设置不当,会明显减缓系统启动速度。如果你的电脑用不着网卡,那就直接将PCI网卡拔掉,集成网卡可以通过BIOS屏蔽掉,以免影响启动速度。很多主板对集成网卡的检测远快于独立网卡,这也是一些电脑启动后“假死”,过了一分多钟才能正常上网的原因之一。
决定主板性能的主要因素是主板芯片组,决定启动速度的主要因素是主板芯片组的磁盘性能及驱动程序性能。目前主板芯片组的主要品牌有Intel、SiS、VIA、ATi、nVIDIA五个厂商,磁盘性能最好的是Intel与SiS。Intel是IT巨头,IT界无人不晓,它占据了主板芯片组60%以上的市场份额。而SiS知名度较低,主板芯片组的市场份额不足10%,这可能与宣传不够有关,然而在AMD平台,它的磁盘性能却是最好的,价格也是最便宜的。
为了减少开机自检时间,某些主板厂商会做一些特殊设计,最大能使BIOS自检时间缩短至5秒。我们可以按自己的需要选择不同的主板厂商,而不是一味地听从经销商的推荐。
除了开机自检外,电脑启动的时间主要用在从硬盘读取系统文件。硬盘的工作是通过移动磁头读写高速旋转的盘片上的数据(图1)。那么盘片转速越高,单位时间内磁头读到的数据就会越多,对系统启动非常有利。另外,寻道时间快、缓存大的硬盘也能明显提升启动时间。资金充裕的购机者或DIY们可以考虑西数的“猛禽”系列硬盘,资金紧张或普通用户可选择经常获性能奖的日立大缓存硬盘。
二、配件的设置与优化
1.主板的BIOS优化设置
关闭多余的IDE通道、USB设备等硬件,可用“None”屏蔽掉。用“IDEHDDAUTODETECTION”自动检测硬盘。不进行内存检测,把各项cache打开,进入“AdvancedCMOSSetup”,将“QuickBoot”设为“Enable”,可不检测1MB以上的内存。
“IDE0Master/SlavePIO/DMAMode,IDE1Master/SlavePIO/DMAMode”硬盘顺序(模式)全部设为“Auto”。
进入“AdvancedBIOSFeatures”选项,将光标移到“FirstBootDevice”选项,选“HDD-0”直接从硬盘启动,这样启动就快上好几秒。将光标移到“QuickPowerOnSelfTest”(快速开机自检)设为“Enabled”。对于“BootUPFloppySeek”(开机自检软驱)设为“Disabled”。对于内存品质好的内存条建议在“SDRAMCASLatency”选项中设置为“2”。
小提示:对于一项效果相同的设置,在不同的主板BIOS中其英文名称可能不一样。
2.网卡设置
在进入操作系统时,系统会进行网卡IP地址的搜索。如果网卡的IP地址设置为自动获取,则系统会在网络中搜索DHCP服务器以获得IP地址,无形中就会延长启动时间。若不是必要的情况,最好将网卡的IP地址进行指定(尤其是局域网中的客户机,图2)。
3.开启硬盘的DMA传输方式
在桌面右击“我的电脑→属性→硬件→设备管理器→IDEATA/ATAPI控制器→找到硬盘所在的IDE通道→属性→高级设置”,打开硬盘DMA的传送方式以加快数据读写速度(图3)。Win98与WinME的设置基本相同,只需在DMA选项前打钩。
4.给BIOSROM瘦身
主板BIOSROM中有一些文件是我们用不上的,可以用CBROM、AwardFlash等BIOS编辑工具去除。注意:这是有一定危险的操作,菜鸟还是不动为好。
三、Windows系统优化
1.去除多余的自启动程序
这是见效很明显的方法。点击“开始”→“运行”,在出现的对话框中输入“msconfig”,然后点击“确定”,就会调出“系统配置实用程序”(只限于Win98和WinXP系统,Win2000用户需要拷贝MSCONFIG.EXE到系统文件夹下使用或使用后文讲述的注册表编辑方法)。
点击其中的“启动”标签,将不需要自动启动的程序前面的“√”去掉就可以了。一般只需留下ctfmon(输入法图标)、systemtray(音量图标)以及杀毒程序。电脑网络学院(http://www.xiexiebang.com)提醒大家笔者的电脑只留下“ctfmon”这一项(图4),如此可将启动时间缩短10秒左右。
2.优化组件的系统属性(Win98/WinME)
右击“我的电脑”,选择“属性→性能→文件系统”,选择“软盘”,去掉“每次启动电脑时搜索新的软盘驱动器”;选择“硬盘”,将“主要用途”改为“网络服务器”,“预读式优化”调至全速(图5);选择“CD-ROM”,缓存调至最大,选“四倍或更高速”。
3.修改IDE通道控制(WinXP)
右击我的电脑→属性→硬件→设备管理器→展开“IDEATA/ATAP控制器”,双击“次要IDE通道”选项,在弹出的对话框中选择“高级设置”选项卡,在“设备0”与“设备1”中的“设备类型”中,将原来的“自动检测”改为“无”(图6),“确定”后退出。“主要IDE通道”的修改方法也相同。重启后,滚动条滚动的时间会明显减少。
4.使用BootVis软件提升启动速度
BootVis是微软公司专为WinXP开发的启动加速软件,使用比较安全,能明显提高启动速度。因篇幅关系,这里就不介绍具体使用方法了,有兴趣的朋友可查看其帮助文件。
5.去除华丽臃肿的外观
去掉“墙纸”、“屏幕保护”,删除多余的桌面图标。如果是WinXP,还可右击“我的电脑”,选择“属性→高级”,在“性能”项目单击“设置”,选中“调整为最佳性能”(图7)。
主流配置的电脑在经过以上设置与优化后,一般情况下WindowsXP的开机启动时间就可以控制在20秒左右了。
第三篇:20秒进入Windows XP操作系统
鞭 20秒进入Windows XP操作系统
电脑中CPU的处理速度在摩尔定律这根魔棒的指挥下突飞猛进,然而我们发现电脑的启动速度却未有进步,从按开机按钮到WinXP任务栏右边的图标全部显示出来,一般要40秒以上。这与电视机一按开关就能听到声音、看到图像相比,真是相形见绌。
一、影响启动速度的硬件因素
笔者通过实践,发现影响电脑启动速度的主要配件是主板和硬盘,而与CPU关系不大。也就是说在其他条件相同的情况下,价格昂贵的奔腾4电脑与廉价的赛扬4的启动速度是一样的。
主板是各种电脑配件的“基地”,在开机时要做的工作很多,比如自检、搜索各种端口、各种外接设备。因此减少自检时间、减少外接设备、提高效率才能提高启动速度。如果电脑连接了扫描仪、USB硬盘等外设,就可能降低系统的启动速度。建议大家在需要用到这些外设时才连接上,USB设备可以在启动后连接。
网卡若设置不当,会明显减缓系统启动速度。如果你的电脑用不着网卡,那就直接将PCI网卡拔掉,集成网卡可以通过BIOS屏蔽掉,以免影响启动速度。很多主板对集成网卡的检测远快于独立网卡,这也是一些电脑启动后“假死”,过了一分多钟才能正常上网的原因之一。
决定主板性能的主要因素是主板芯片组,决定启动速度的主要因素是主板芯片组的磁盘性能及驱动程序性能。目前主板芯片组的主要品牌有Intel、SiS、VIA、ATi、nVIDIA五个厂商,磁盘性能最好的是Intel与SiS。Intel是IT巨头,IT界无人不晓,它占据了主板芯片组60%以上的市场份额。而SiS知名度较低,主板芯片组的市场份额不足10%,这可能与宣传不够有关,然而在AMD平台,它的磁盘性能却是最好的,价格也是最便宜的。
为了减少开机自检时间,某些主板厂商会做一些特殊设计,最大能使BIOS自检时间缩短至5秒。我们可以按自己的需要选择不同的主板厂商,而不是一味地听从经销商的推荐。
除了开机自检外,电脑启动的时间主要用在从硬盘读取系统文件。硬盘的工作是通过移动磁头读写高速旋转的盘片上的数据(图1)。那么盘片转速越高,单位时间内磁头读到的数据就会越多,对系统启动非常有利。另外,寻道时间快、缓存大的硬盘也能明显提升启动时间。资金充裕的购机者或DIY们可以考虑西数的“猛禽”系列硬盘,资金紧张或普通用户可选择经常获性能奖的日立大缓存硬盘。
硬盘
电脑是“软硬兼施”的高科技产品,配件设置与系统优化也是启动提速不可缺少的武器。
二、配件的设置与优化
1.主板的BIOS优化设置
关闭多余的IDE通道、USB设备等硬件,可用“None”屏蔽掉。用“IDE HDD AUTO DETECTION”自动检测硬盘。不进行内存检测,把各项cache打开,进入“Advanced CMOS Setup”,将“Quick Boot”设为“Enable”,可不检测1MB以上的内存。
“IDE 0 Master/Slave PIO/DMA Mode,IDE 1 Master/Slave PIO/DMA Mode”硬盘顺序(模式)全部设为“Auto”。
进入“Advanced BIOS Features”选项,将光标移到“First Boot Device”选项,选“HDD-0”直接从硬盘启动,这样启动就快上好几秒。将光标移到“Quick Power On Self Test”(快速开机自检)设为“Enabled”。对于“Boot UP Floppy Seek”(开机自检软驱)设为“Disabled”。对于内存品质好的内存条建议在“SDRAM CAS Latency”选项中设置为“2”。
小提示:对于一项效果相同的设置,在不同的主板BIOS中其英文名称可能不一样。
2。网卡设置
在进入操作系统时,系统会进行网卡IP地址的搜索。如果网卡的IP地址设置为自动获取,则系统会在网络中搜索DHCP服务器以获得IP地址,无形中就会延长启动时间。若不是必要的情况,最好将网卡的IP地址进行指定(尤其是局域网中的客户机,图2)。
协议
3.开启硬盘的DMA传输方式
在桌面右击“我的电脑→属性→硬件→设备管理器→IDE ATA/ATAPI控制器→找到硬盘所在的IDE通道→属性→高级设置”,打开硬盘DMA的传送方式以加快数据读写速度(图3)。Win98与WinME的设置基本相同,只需在DMA选项前打钩。
通道
4.给BIOS ROM瘦身
主板BIOS ROM中有一些文件是我们用不上的,可以用CBROM、AwardFlash等BIOS编辑工具去除。注意:这是有一定危险的操作,菜鸟还是不动为好。
三、Windows系统优化
1.去除多余的自启动程序
这是见效很明显的方法。点击“开始”→“运行”,在出现的对话框中输入“msconfig”,然后点击“确定”,就会调出“系统配置实用程序”(只限于Win98和WinXP系统,Win2000用户需要拷贝MSCONFIG.EXE到系统文件夹下使用或使用后文讲述的注册表编辑方法)。
点击其中的“启动”标签,将不需要自动启动的程序前面的“√”去掉就可以了。一般只需留下ctfmon(输入法图标)、systemtray(音量图标)以及杀毒程序。笔者的电脑只留下“ctfmon”这一项,如此可将启动时间缩短10秒左右。
自启动程序
2.优化组件的系统属性(Win98/WinME)
右击“我的电脑”,选择“属性→性能→文件系统”,选择“软盘”,去掉“每次启动电脑时搜索新的软盘驱动器”;选择“硬盘”,将“主要用途”改为“网络服务器”,“预读式优化”调至全速;选择“CD-ROM”,缓存调至最大,选“四倍或更高速”。
文件系统
3.修改IDE通道控制(WinXP)
右击我的电脑→属性→硬件→设备管理器→展开“IDE ATA/ATAP控制器”,双击“次要IDE通道”选项,在弹出的对话框中选择“高级设置”选项卡,在“设备0”与“设备1”中的“设备类型”中,将原来的“自动检测”改为“无”,“确定”后退出。“主要IDE通道”的修改方法也相同。重启后,滚动条滚动的时间会明显减少。
修改IDE通道控制
4.使用BootVis软件提升启动速度
BootVis(下载地址:)是微软公司专为WinXP开发的启动加速软件,使用比较安全,能明显提高启动速度。因篇幅关系,这里就不介绍具体使用方法了,有兴趣的朋友可查看其帮助文件。
5.去除华丽臃肿的外观
去掉“墙纸”、“屏幕保护”,删除多余的桌面图标。如果是WinXP,还可右击“我的电脑”,选择“属性→高级”,在“性能”项目单击“设置”,选中“调整为最佳性能”。
性能选项
主流配置的电脑在经过以上设置与优化后,一般情况下WinXP的开机启动时间就可以控制在20秒左右了。
第四篇:操作系统试验报告
操作系统课外实践报告
项 目 名 称: 磁盘调度模拟系统 所 在 班 级: 软件工程一班 小 组 成 员:;刘清元,学号:120904012 指 导 教 师: 王蕾 起 止 时 间: 2014.6.1—2014.6.20
磁盘调度模拟系统实验报告
一:实验目标:
通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。
二:实验要求:
系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。
三:实现原理
设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。
平均寻道长度(L)为所有磁道所需移动距离之和除以总的所需访问的磁道数(N),即:
L=(M1+M2+„„+Mi+„„+MN)/N
其中Mi为所需访问的磁道号所需移动的磁道数。
启动磁盘执行输入输出操作时,要把移动臂移动到指定的柱面,再等待指定扇区的旋转到磁头位置下,然后让指定的磁头进行读写,完成信息传送。因此,执行一次输入输出所花的时间有:
寻找时间——磁头在移动臂带动下移动到指定柱面所花的时间。
延迟时间——指定扇区旋转到磁头下所需的时间。
传送时间——由磁头进程读写完成信息传送的时间。
其中传送信息所花的时间,是在硬件设计就固定的。而寻找时间和延迟时间是与信息在磁盘上的位置有关。
为了减少移动臂进行移动花费的时间,每个文件的信息不是按盘面上的磁道顺序存放满一个盘面后,再放到下一个盘面上。而是按柱面存放,同一柱面上的各磁道被放满信息后,再放到下一个柱面上。所以各磁盘的编号按柱面顺序(从0号柱面开始),每个柱面按磁道顺序,每个磁道又按扇区顺序进行排序。
四:算法实现
1.先来先服务算法(FCFS)
先来先服务(FCFS)调度:按先来后到次序服务,未作优化。最简单的移臂调度算法是“先来先服务”调度算法,这个算法实际上不考虑访问者要求访问的物理位置,而只是考虑访问者提出访问请求的先后次序。例如,如果现在读写磁头正在50号柱面上执行输出操作,而等待访问者依次要访问的柱面为130、199、32、159、15、148、61、99,那么,当50号柱面上的操作结束后,移动臂将按请求的先后次序先移到130号柱面,最后到达99号柱面。采用先来先服务算法决定等待访问者执行输入输出操作的次序时,移动臂来回地移动。先来先服务算法花费的寻找时间较长,所以执行输入输出操作的总时间也很长。
2.短寻道时间优先算法(SSTF)
最短寻找时间优先调度算法总是从等待访问者中挑选寻找时间最短的那个请求先执行的,而不管访问者到来的先后次序。现在仍利用同一个例子来讨论,现在当50号柱面的操作结束后,应该先处理61号柱面的请求,然后到达32号柱面执行操作,随后处理15号柱面请求,后继操作的次序应该是99、130、148、159、199。
采用最短寻找时间优先算法决定等待访问者执行操作的次序时,读写磁头总共移动了200多个柱面的距离,与先来先服务、算法比较,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。但最短查找时间优先(SSTF)调度,FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。
3.扫描算法(SCAN)
SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。
“电梯调度”算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客陈生、伍生、张生在等候乘电梯。他们的要求是:陈生在2层等待去10层;伍生在5层等待去底层;张生在8层等待15层。由于电梯目前运动方向是向上,所以电梯的形成是先把乘客张生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客陈生从2层送到10层。
我们仍用前述的同一例子来讨论采用“电梯调度”算法的情况。由于磁盘移动臂的初始方向有两个,而该算法是与移动臂方向有关,所以分成两种情况来讨论。
〈1〉.移动臂由里向外移动
开始时,在50号柱面执行操作的读写磁头的移动臂方向是由里向外,趋向32号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的柱面是32号柱面。所以应先为32号柱面的访问者服务,然后是为15号柱面的访问者服务。之后,由于在向外移方向已无访问等待者,故改变移动臂的方向,由外向里依次为各访问者服务。在这种情况下为等待访问者服务的次序是61、99、130、148、159、199。
〈2〉.移动臂由外向里移动
开始时,正在50号柱面执行操作的读写磁头的移动臂是由外向里(即向柱面号增大的内圈方向)趋向61号柱面的位置,因此,当访问50号柱面的操作结束后,沿臂移动方向最近的柱面是61号柱面。所以,应先为61号柱面服务,然后按移动臂由外向里移动的方向,依次为99、130、148、159、199柱面的访问者服务。当201号柱面的操作结束后,向里移动的方向已经无访问等待者,所以改变移动臂的前进方向,由里向外依次为32、15柱面的访问者服务。
“电梯调度”与“最短寻找时间优先”都是要尽量减少移动臂时所花的时间。所不同的是:“最短寻找时间优先”不考虑臂的移动方向,总是选择离当前读写磁头最近的那个柱面,这种选择可能导致移动臂来回改变移动方向;“电梯调度”是沿着臂的移动方向去选择离当前读写词头最近的哪个柱面的访问者,仅当沿移动臂的前进移动方向无访问等待者时,才改变移动臂的前进方向。由于移动臂改变方向是机械动作,速度相对较慢,所以,电梯调度算法是一种简单、使用且高效的调度算法。
但是,“电梯调度”算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。
4.循环扫描算法(CSCAN)
单项扫描调度算法的基本思想是,不考虑访问者等待的先后次序,总是从0号柱面开始向里道扫描,按照各自所要访问的柱面位置的次序去选择访问者。在移动臂到达最后一个柱面后,立即快速返回到0号柱面,返回时不为任何的访问者等待服务。在返回到0号柱面后,再次进行扫描。
由于该例中已假定读写的当前位置在50号柱面,所以,指示了从50号柱面继续向里扫描,依次为61、99、130、148、159、199各柱面的访问者服务,此时移动臂已经是最内的柱面,于是立即返回到0号柱面,重新扫描,依次为15、32号柱面的访问者服务。
除了“先来先服务”调度算法外,其余三种调度算法都是根据欲访问的柱面位置来继续调度的。在调度过程中可能有新的请求访问者加入。在这些新的请求访问者加入时,如果读写已经超过了它们所要访问的柱面位置,则只能在以后的调度中被选择执行。在多道程序设计系统中,在等待访问磁盘的若干访问者请求中,可能要求访问的柱面号相同,但在同一柱面上的不同磁道,或访问同一柱面中同一磁道上的不同扇区。所以,在进行移动调度时,在按照某种短法把移动臂定位到某个柱面后,应该在等待访问这个柱面的各个访问者的输入输出操作都完成之后,再改变移动臂的位置。
五:实现代码
#include printf(“第%d次访问的磁道:%dn”,i+1,a[i]); sum+=abs(s-a[i]); s=a[i];} printf(“平均寻道长度:%fn”,sum*1.0/n);} void SSTF(int b[],int n,int k)//最短寻道法 { int i,j,s,sum=0,p;int a[20];for(i=0;i s=a[0]; p=0; for(j=0;j<=i;j++) if(abs(a[j]-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次访问的磁道:%dn”,n-i,s); sum+=abs(s-k); k=s;} printf(“平均寻道长度:%fn”,sum*1.0/n);} void SCAN1(int b[],int n,int k)//扫描算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k<0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j] { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次访问的磁道:%dn”,n-i,s); sum+=k-s; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(a[j]-k<=s-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次访问的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均寻道长度:%fn”,sum*1.0/n);} void SCAN2(int b[],int n,int k)//循环算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j]>k&&a[j]-k { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次访问的磁道:%dn”,n-i,s); sum+=s-k; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(k-a[j]<=k-s) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次访问的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均寻道长度:%fn”,sum*1.0/n);} void C_SCAN(int b[],int n,int k)//循环算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) } { s=a[p];for(j=0;j<=i;j++)if(a[j]>k&&a[j]-k for(;i>=0;i--){ s=a[0];for(j=0;j<=i;j++)if(a[j]-k { s=a[j]; p=j; } a[p]=a[i];printf(“第%d次访问的磁道:%dn”,n-i,s);sum+=s-k;k=s;} printf(“平均寻道长度:%fn”,sum*1.0/n); void main(){ int a[20];int i,n,k,k1,init;printf(“请输入需要访问的磁道总数:”);scanf(“%d”,&n);for(i=0;i printf(“需要访问的磁道%d:”,i+1); scanf(“%d”,&a[i]);} printf(“请输入指针所在磁道:”);scanf(“%d”,&init);k=1;while(k){ printf(“**********************************n”); printf(“$$$$$$$$$$刘清元——磁盘调度$$$$$$$$$n”); printf(“** 1.先来先服务(FCFS)**n”); printf(“** 2.最短寻道时间优先(SSTF)**n”); printf(“** 3.扫描算法(SCAN)**n”); printf(“** 4.循环算法(C-SCAN)**n”); printf(“** 0.退出 **n”); printf(“**********************************n”); printf(“&&&&&&&&&&&&谢谢使用&&&&&&&&&&&&&&n”); printf(“请在下面输入您的选择:”); scanf(“%d”,&k); switch(k) { case 1:FCFS(a,n,init);break; case 2:SSTF(a,n,init);break; case 3:k1=1; while(k1) { printf(“*********************************n”); printf(“ #刘清元——磁盘调度 ###n”); printf(“**** 1.移动臂由里向外 **n”); printf(“**** 2.移动臂由外向里 **n”); printf(“**** 0.返回上一层 **n”); printf(“*********************************n”); printf(“ ######谢谢使用 #####n”); printf(“请在下面输入您的选择:”); } } } scanf(“%d”,&k1);switch(k1){ case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;} } break;case 4:C_SCAN(a,n,init);break;六:运行结果 1.输入数据,选择调度方法 2.先来先服务 3最短寻道时间优先 4循环算法 5.循环算法 (1)磁头由里向外移动 (2)磁头由外向里移动 七:心得体会 通过此次课程设计,我明白了实践的意义,要把书本上的知识转换为现实中的成果,创新与不懈的努力也是成功的重要因素。如果没有一定的耐心,这次的课程设计也不能成功。 “磁盘调度”是我本学期操作系统课程设计的题目。在设计此程序的过程中,我遇到过许多问题,也学到了很多东西。 本程序的设计实现主要是用C++语言实现,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决,在C++学习上也有了很大的进步。 在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,综合这些算法思想和自己的思路对程序做了很好的设计方式,对一些算法的优越性等也作了一些考虑。此外考虑最多的就是异常错误处理的设计。在设置程序的显示优化时,发现暂停函数在不同的情况下执行顺序不同,如此等等 许昌学院 《操作系统》实验报告书 学号:姓名:闫金科班级:成绩: 5006140057 14物联网工程 2016年02月实验一 Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方法。3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择Linux,版本选择Red Hat Enterprise Linux 5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM(IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点击“浏览”,找到Linux的镜像文件,如图所示: 6点击确定按钮后,点击启动虚拟机按钮,来到Linux的安装界面,如图所示: 7、到此页面之后,等待自动检测安装,如图所示: 8、等到出现如图所示页面后点击“skip”按钮,跳过检测,直接进入安装设置界面,如图所示: 9、安装设计界面如图所示: 10、点击Next按钮进入设置语言界面,设置语言为“简体中文”,如图所示: 11、点击Nest按钮进入系统键盘设置按钮,设置系统键盘为“美国英语式”,如图所示: 12、点击下一步按钮,弹出“安装号码”对话框,选择跳过输入安装号码,如图所示: 13、按照提示,一直点击下一步按钮,如图所示: 14、到设置最后一步,点击下一步按钮进入开始安装Red Hat Enterprise Linux Sever界面,如图所示: 15、安装完成后,进入欢迎界面,按照提示点击前进按钮知道进入Linux桌面,如图所示: 16、安装成功的Linux系统桌面如图所示,桌面包含五个图标,分别为:计算机、jk’s Home、回收站、RHEL/5.3 i386DVD。 四、实验总结 通过安装虚拟机等操作让我认识到Linux这系统一些基本特点,本次试验学会了安装虚拟机并且使用虚拟机安装操作系统,掌握了红帽Linux系统的安装和配置过程,以及对镜像ISO文件的使用,有别于我们机器上使用的系统,通过虚拟机这个软件还可以在已有系统的基础上使用其他操作系统。安装过程中一定要注意选择版本的时候要选择Red Hat Enterprise Linux 5版本,否则安装不能成功。自己动手成功的安装了Linux系统,自己对Linux的学习产生更大的兴趣。 实验二 Linux操作系统的运行模式 一、实验目的 1.熟悉Linux系统终端工作环境的使用,了解Linux命令的格式,使用学会利用常用的Linux命令来完成系统的管理和维护。 2.了解X-Windows的特点,熟悉Linux图形用户接口的使用,掌握GNOME桌面环境的基本操作。 3.了解和掌握在Linux环境下安装软件包的方法,如QQ for Linux等用软件的安装方法。 二、实验内容 1.启动Linux系统打开虚拟终端界面,使用Linux的在线帮助指令man或help获得ls、uname、date、cal、mkdir、cp等Linux命令的帮助手册,了解这些命令的具体使用方法。同时,也可以通过执行“命令名 –help”来显示该命令的帮助信息,如“ls –help”,试用这些命令。 2.通过uname命令的执行,查看并给出相关系统信息:操作系统的名称、系统域名、系统CPU名称等。 3.在主目录下创建一个名为myetc的子目录,将/etc目录下与网络相关的文件和子目录拷贝到该目录,并将这些文件的执行权限设置为可执行。 4.在主目录/home下创建目录program、music 和temp,然后在program下建立目录java和C,列出完成该过程的所有命令。 5.在图形界面环境中,查看GNOME桌面的面板和桌面,设置GNOME,包括屏幕保护程序、更改背景和指定关联程序等。6.实现对光盘的加载和访问,然后卸载。 三、实验过程及结果 1、打开终端,输入 【ls –help】来查看【ls】指令的使用方法,同理查看uname、date、cal、mkdir、cp的使用方法。 2、在终端中输入【uname –a】显示操作系统名系统cpu名和系统域名 3、重启系统,用【root】用户名进入系统,以获得权限。在终端中输入【mkdir myetc】,在主目录下创建【myrtc】的目录,【ls】查看是否创建。输入【cd..】返回至【/】文件,输入【cp –r etc root/myetc】讲etc中内容复制到myetc中,进入myetc文件【ls】查看。输入 【chmod u+x etc】赋予文件可执行的权限,输入【ll】查看。 4、在home下,输入【mkdir {program,music,temp}】,可在home下创立这三个目录,输入【ls】查看。在program下输入【mkdir{java,C}】,可创立java和C两个目录,【ls】查看。 5、在桌面上方选择【系统】-【首选项】,即可设置屏幕保护程序和更改背景和指定关联程序 5、在桌面上可见看到有CD光盘,双击浏览,右键【弹出】即卸载。 四、实验总结和体会 Linux的指令系统是学习Linux操作系统很重要的一部分,指令系统相当于在Windows操作系统下的doc,可以省去图形化界面。通过这次的实验让我了解了Linux的强大功能,了解到Linux有许多方便快捷的设置基本配置的方法,这使我更喜欢上Linux的使用。在使用指令的过程中,有时候对文件的操作需要一定的权限,这时需要在登陆时用户名使用【root】,而不是我们在安装时使用的用户名,这样就获得了管理员权限,可以对一些系统文件进行操作。 实验三 Linux应用软件与系统管理 一、实验目的 1.了解OpenOffice.Org集成办公软件,掌握利用OpenOffice.Org的套件来完成文档和图片的处理。 2.了解Linux网络管理的知识,熟悉Linux网络配置的方法,掌握在Linux环境下配置Web服务器和ftp服务的方法。 二、实验内容 1.配置Linux系统的网络环境,安装FTP和Web服务器,并配置相关的属性,利用FTP实现WINDOWS和Linux之间的数据交换。 2.利用FTP程序上传自己的照片到FTP服务器,利用OpenOffice的文字处理工具OpenOffice Writer制作一份表格形式的个人简历。个人简历中至少包含学号、姓名、性别、专业、照片和学习经历等内容,并保存为网页格式(html格式)。3.将个人简历网页设置为WEB服务器的首页,然后在客户端利用浏览器访问WEB服务器,查看效果。 4.通过读取proc文件系统,获取系统各种信息(如主机名、系统启动时间、运行时间、版本号、所有进程信息、CPU使用率等),并以比较容易的方式显示。 三、实验过程及结果 1.配置网络环境:在(服务.cmd).里面进行以下操作:在服务里选择3按回车 完成后,可在本地连接看到VMware已连接上网络 在虚拟机设置中设置以太网网络连接方式为 网关地址填虚拟机的网管,IP地址设为虚拟机的一个子网: 四、总结: 在linux系统下,make是我们经常用到的编译命令,所以关于make代码和他的操作指令一定要记清楚。所以,熟练掌握了make和makefile工具之后,源码安装软件就变的像windows下安装软件一样简单。 实验四 进程控制与管理 一、实验目的 1.掌握GCC编译器的用法,学会利用GCC编辑器来编辑C语言程序,学会利用GDB调试器来调试C语言程序。 2.理解进程和程序的区别和联系,3.掌握在Linux环境下观察进程运行情况和CPU工作情况的命令。4.了解fork()系统调用,掌握利用fork()创建进程的方法。 5.了解Linux系统其他与进程相关的系统调用,如exec、wait和exit等。6.了解Linux常用的进程通信机制。 二、实验内容 1.利用Linux的进程管理命令ps、top来监视和跟踪进程,体会进程和程序的关系。2.利用Linux的文字编辑器编写文件复制的C语言程序,并用gcc编译该程序,然后运行该程序。 3.编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 4.修改上述程序,每一个进程循环显示一句话。子进程显示'daughter „'及'son „„',父进程显示 'parent „„',观察结果,分析原因。5.用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容。 三、实验过程及结果 1、利用Linux的进程管理命令ps、top来监视和跟踪进程,体会进程和程序的关系。<1>从用户身份切换到ROOT身份 <2>输入命令 ps 查看进程 <2>输入命令 top 跟踪进程 2、利用Linux的文字编辑器编写一个计算机100个自然数和的C语言程序,并用gcc编译该程序,然后运行该程序。 <1>创建一个.C文件 并进入进行编辑 <2>用GCC 进行编译,再查看文件,发现产生执行文件 a.out <3>执行这个可执行文件得到结果5050 1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 <1>穿件一个.C文件 并进行编写程序代码 <2>反复执行2次该程序 <3>可以看出两次执行的结果 a b c 出现的顺序不同,原因是,3个进程的输出次序是随机的,并不会按规定的顺序出现,所以会出现上述结果。 4、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter „'及'son „„',父进程显示 'parent „„',观察结果,分析原因。<1>重新修改代码 <3>执行这段程序 <4>原分析: 因和之前一样,可以看出执行的结果 3个单词出现的顺序不同,原因是,3个进程的输出次序是随机的,并不会按规定的顺序出现,所以会出现上述结果。 5、用fork()创建一个进程,再调用exec()用新的程序替换该子进程的内容。<1> 编写代码 <2> 执行的结果 结果表明 execl 替代了son的内容 四、实验总结和体会 这个实验考察的是进程之间存在很多可能性以及对编辑器的使用。本次实验学习了在linux环境下用gcc编译器运行c语言程序,在linux环境下编写程序用到了vi编辑器,知道了该编辑器也需要各种命令来操作。编写C语言程序时用到了fork()函数,再调用execl()用新的程序替换该子进程的内容。 实验五 进程调度模拟程序的设计与实现 一、实验目的 1.了解进程调度的概念,掌握常用进程调度算法的原理。2.掌握Linux程序设计编辑、编译和调试的技巧。 二、实验内容 1.编写程序实现进程调度调度算法先来先服务、优先级高优先和时间片轮转调度算法。(编程语言不限) 2.输入数据,输出运行结果。 三、实验过程及结果 1先来先服务 #i nclude struct { int id; float ArriveTime;float RequestTime;float StartTime;float EndTime;float RunTime;float DQRunTime;int Status;}arrayTask[4];GetTask(){ int i;float a; for(i=0;i<4;i++){arrayTask[i].id=i+1;printf(“input the number”); printf(“input the the ArriveTime of arrayTask[%d]:”,i);scanf(“%f”,&a); arrayTask[i].ArriveTime=a; printf(“input the RequestTime of arrayTask[%d]:”,i);scanf(“%f”,&a); arrayTask[i].RequestTime=a;arrayTask[i].StartTime=0;arrayTask[i].EndTime=0;arrayTask[i].RunTime=0;arrayTask[i].Status=0; } } int fcfs() { int i,j,w=0; for(i=0;i<4;i++) { if(arrayTask[i].Status==0) { t=arrayTask[i].ArriveTime; w=1; } if(w==1) break; } for(i=0;i<4;i++) { if(arrayTask[i].ArriveTime t=arrayTask[i].ArriveTime; } for(i=0;i<4;i++) { if(arrayTask[i].ArriveTime==t) return i; } } int sjf(){ int i,x=0,a=0,b=0;float g; for(i=0;i<4;i++){ if(arrayTask[i].Status==1){g=arrayTask[i].EndTime;x=1;} } if(x==0){ t=arrayTask[0].ArriveTime; for(i=0;i<4;i++){ if(arrayTask[i].ArriveTime t=arrayTask[i].ArriveTime;a=i;} } return a;} else { for(i=0;i<4;i++){ if(arrayTask[i].EndTime>g)g=arrayTask[i].EndTime;} for(i=0;i<4;i++){ if(arrayTask[i].Status==0&& arrayTask[i].ArriveTime<=g){ t=arrayTask[i].RequestTime;a=i;b=1;} /*判断有没有进程在前个进程完成前到达*/ } if(b!=0)/*有进程到达则按SJF*/ { for(i=0;i<4;i++){ if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime<=g&&arrayTask[i].RequestTime return a;} else{ /*否则按FCFS*/ for(i=0;i<4;i++) {if(arrayTask[i].Status==0)t=arrayTask[i].ArriveTime;} for(i=0;i<4;i++){ if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime return a;} } } new(int s)/*定义执行进程后相关数据的修改*/ { int i,g=0;for(i=0;i<4;i++){ if(arrayTask[i].Status==0)continue;else { g=1;break;} } if(g==0)/*当处理的是第一个未执行的进程时执行*/ { arrayTask[s].StartTime=arrayTask[s].ArriveTime; arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime;arrayTask[s].RunTime=arrayTask[s].RequestTime;arrayTask[s].Status=1;g=2;} if(g==1)/*当处理的不是第一个未执行的进程时执行*/ { arrayTask[s].Status=1;for(i=0;i<4;i++){ if(arrayTask[i].Status==1)d=arrayTask[i].EndTime;} for(i=0;i<4;i++)/*查找最后执行的进程的完成时间*/ { if(arrayTask[i].EndTime>d&&arrayTask[i].Status==1)d=arrayTask[i].EndTime;} if(arrayTask[s].ArriveTime arrayTask[s].StartTime=arrayTask[s].ArriveTime; arrayTask[s].EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime;arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime;} arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime;} Printresult(int j)/*定义打印函数*/ { printf(“%dt”,arrayTask[j].id); printf(“%5.2ft”,arrayTask[j].ArriveTime);printf(“%5.2ft”,arrayTask[j].RequestTime);printf(“%5.2ft”,arrayTask[j].StartTime);printf(“%5.2ft”,arrayTask[j].EndTime);printf(“%5.2ft”,arrayTask[j].RunTime);printf(“%5.2fn”,arrayTask[j].DQRunTime);} main(){ int i,b,k,a,c=0;int d[4];clrscr(); printf(“t F.FCFS n”);printf(“t S.SFJ n”);printf(“t Q.EXIT n”);for(i=0;;i++){ if(c)break; printf(“please input the number a:n”);scanf(“%d”,&a);switch(a){ case Q: c=1;break; case F:printf(“please input the different-ArriveTime of arrayTasksn”);GetTask(); printf(“*****************************the result of fcfsn”);printf(“NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen”); for(b=0;b<4;b++)/*调用两个函数改变结构体数的值*/ { k=fcfs();d[b]=k;new(k);} for(b=0;b<4;b++) Printresult(d[b]);/*调用打印函数打出结果*/ continue; case S: printf(“please input the different-RequestTime of array Tasksn”);GetTask(); printf(“******************************the result of sjfn”);printf(“NumbertArrivetRequesttStarttEndtRuntDQRun timen”);for(b=0;b<4;b++){ k=sjf();d[b]=k;new(k);} for(b=0;b<4;b++)Printresult(d[b]);continue; default:printf(“the number Error.please input another number!n”);} } } 四、实验总结和体会 通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。进程调度是处理机管理的核心内容。优先级高优先是根据作业的优先级,总是选择优先级最高者进入队列。轮转调度算法是调度程序每次把CPU分配给就绪队列首进程/线程使用规定的时间间隔,就绪队列中都路保留巡行一个时间片。第五篇:操作系统实验报告