操作系统实验指导及实验五个
- 格式:doc
- 大小:443.00 KB
- 文档页数:142
《操作系统》课程实验指导书一.实验总学时(课外学时/课内学时):4/8 总学分:8/44必开实验个数: 4 选开实验个数:0二.适用专业:网络工程、计算机科学与技术2007级三.考核方式及办法:在规定实验时间内完成实验要求,依据实验过程及实验结果在实验现场逐一检查考核。
四.配套的实验教材或指导书:自编实验指导书五. 实验项目:实验1 SHELL命令的使用1、实验目的通过对LINUX的系统启动、注销、关闭和关机,帐号管理,文件系统的日常管理,文件系统的权限控制等常用基本命令的使用及与Windows下DOS SHELL的比较,了解现代操作系统SHELL的特点和功能。
了解编辑器vi的使用方法。
2、实验工具及环境LINUX系统网络环境或单机,Windows系统网络环境或单机。
3、实验计划学时2学时上机实际操作。
4、实验内容及操作步骤⑴系统启动和关闭①使用自己的账户登录UNIX系统,查看系统提示符确定自己使用的shell程序类型别。
◎开机后,系统自检启动后提示login:(输入:root↙)password:(输入:用户口令↙,root用户为redhat)◎查看/etc/passwd文件可以获得用户使用的shell#grep $LOGNAME /etc/passwd↙可能的显示为:user001:*:200:50::/usr/user001:/bin/sh请思考上述命令怎样得到了当前使用的shell类型的?使用下面的命令也可以查看当前shell:#echo $SHELL②注销和关机命令。
◎用户注销使用:$exit↙或$<ctrl>+<D>↙或$logout↙◎超级用户关机使用:#shutdown↙该命令将结束所有的进程,当执行此命令后系统提示“Safe to Power off or Press Any Keyto Reboot”时可以关闭电源或按任一键重启系统。
◎haltsys(halt),reboot只能由超级用户在单用户模式下使用。
《计算机操作系统》实验指导书(适合于计算机科学与技术专业)湖南工业大学计算机与通信学院二O一四年十月前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。
要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
为了收到良好的实验效果,编写了这本实验指导书。
在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。
任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。
进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。
实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。
实验成绩考核:实验成绩占计算机操作系统课程总评成绩的20%。
指导教师每次实验对学生进行出勤考核,对实验效果作记录,并及时批改实验报告,综合评定每一次的实验成绩,在学期终了以平均成绩作为该生的实验成绩。
操作系统实验指导书实验⼀操作系统⽤户接⼝实验⼀、实验⽬的熟悉操作系统的命令接⼝、图形⽤户接⼝和程序接⼝。
⼆、实验内容:1、使⽤操作系统的命令接⼝。
使⽤Windows常⽤命令:dir 、md、copy、date、help,显⽰这些命令的结果,并解释这些命令的作⽤。
图1-1 命令控制台图1-2 windows常⽤命令图1-3 windows常⽤命令图1-4 windows常⽤命令使⽤图1-5 windows常⽤命令使⽤2、使⽤操作系统的程序接⼝。
VB环境下:编制⼀⼩程序,使其可通过某个系统调⽤来获得os 提供的某种服务,如打开控制⾯板:Shell "rundll32.exe Shell32.dll,Control_RunDLL", 1VC环境下:⽤C语⾔编制⼀个⼩程序,使其可通过Localtime( )系统调⽤来获得OS提供的时间和⽇期。
3、使⽤操作系统的图形⽤户接⼝(略)。
三、思考:OS向⽤户提供的命令接⼝、图形⽤户接⼝和程序接⼝分别适⽤于哪些场合?实验⼆进程创建与撤消⼀、实验⽬的1、加深对进程概念的理解和进程创建与撤消算法;2、进⼀步认识并发执⾏的实质。
⼆、实验内容本实验完成如下三个层次的任务:(1)系统级—以普通⽤户⾝份认识windows的进程管理。
通过windows的“任务管理器”观察进程的状态,进⾏进程的创建、切换和撤销。
(2)语⾔级—以普通程序员⾝份认识⾼级语⾔VC++/Java/VB的进程创建与撤销⼯具。
(3)模拟级—以OS设计师⾝份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。
三、实验步骤1、windows的进程管理当前状态图2-1 windows任务管理器切换前图2-2 windows任务管理器切换后图2-3 windows任务管理器撤销图2-4 windows任务管理器2、VC++进程创建与撤销⼯具Windows所创建的每个进程都从调⽤CreateProcess() API函数开始,该函数的任务是在对象管理器⼦系统内初始化进程对象。
《操作系统原理》实验报告
实验序号:5 实验项目名称:实现一个简单的Shell
一、实验目的及要求
1. 加深对操作系统Shell的理解。
2. 理解进程控制的思想。
3. 深入掌握Linux操作系统下的进程控制编程。
二、实验设备(环境)及要求
1.虚拟机VMware Workstation、Ubuntu操作系统和C语言编程。
2.设计思路:Shell建立一个新的进程,然后在那个进程中运行一个程序(如完成ls操作)然后等待那个进程执行结束。
然后shell便可读取新的一行输入,建立一个新的进程,在这个进程中运行程序并等待这个进程结束。
所以要写一个shell,需要循环以下过程:
a. 获取命令行
b. 解析命令行
c. 建立一个子进程(fork)
d. 替换子进程(execvp)
e. 父进程等待子进程退出(wait)。
三、实验内容与步骤
主要代码
解析并执行指令
输出各进程的信息
四、实验结果与数据处理
五、分析与讨论
六、教师评语
成绩
签名:
日期:。
操作系统实验指导书实验1 存储管理1、实验目的存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。
2、实验内容(1)通过随机数产生一个指令序列,共320条指令。
指令的地址按下述原则生成:①50%的指令是顺序执行的;②50%的指令是均匀分布在前地址部分;③50%的指令是均匀分布在后地址部分。
具体的实施方法是:①在 [0,319] 的指令之间随即选取一起点m;②顺序执行一条指令,即执行地址为m+1的指令;③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′;④顺序执行一条指令,其地址为 m′+ 1;⑤在后地址[m′+ 2,319]中随机选取一条指令并执行;⑥重复上述步骤①-⑤,直到执行320次指令。
(2)将指令序列变换为页地址流设:①页面大小为1k;②用户内存容量为4页到32页;③用户虚存容量为32k。
在用户虚存中,按每k存放10条指令排在虚存地址,即320条指令在虚存中的存放方式为:第0条-第9条指令为第0页(对应虚存地址为[0,9]);第10条-第19条指令为第一页(对应虚存地址为[10,19]);……第310条~第319条指令为第31页(对应虚地址为[310,319])。
按以上方式,用户指令可组成32页。
(3)计算并输出下述各种算法在不同内存容量下的命中率。
①先进先出的算法(FIFO);②最近最少使用算法(LRR);③最佳淘汰算法(OPT)先淘汰最不常用的页地址;④最少访问页面算法(LFR);⑤最近最不经常使用算法(NUR)。
其中③和④为选择内容。
命中率=1-页面失效次数/页地址流长度在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
3、随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。
操作系统试验指导—. 课程的性质、目的和任务操作系统在整个计算机系统软件中占有中心地位。
其作用是对计算机系统进行统一的调度和管理,提供各种强有力的系统服务,为用户创造既灵活又方便的使用环境。
本课程是计算机及应用专业的一门专业主干课和必修课。
通过本课程的学习,使学生掌握操作系统的基本概念、设计原理及实施技术,具有分析操作系统和设计、实现、开发实际操作系统的能力。
二. 实验的意义和目的操作系统是计算机专业学生的一门重要的专业课程。
操作系统质量对整个计算机系统的性能和用户对计算机的使用有重大的影响。
一个优良的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。
由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。
要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。
培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。
通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
三.实验运行环境及上机前的准备实验运行环境: C语言编程环境上机前的准备工作包括:●按实验指导书要求事先编好程序;●准备好需要输入的中间数据;●估计可能出现的问题;●预计可能得到的运行结果。
四. 实验内容及安排实验内容包括进程调度、银行家算法、页式地址重定位模拟,LRU算法模拟和先来先服务算法五个实验。
每个实验介绍了实习的目的要求、内容和方法。
实验一、进程调度试验[目的要求]用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.[准备知识]一、基本概念1、进程的概念;2、进程的状态和进程控制块;3、进程调度算法;二、进程调度1、进程的状态2、进程的结构——PCB进程都是由一系列操作(动作)所组成,通过这些操作来完成其任务。
操作系统实验指导操作系统是计算机科学中的重要课程之一,通过实验可以让学生更好地理解和掌握操作系统的原理和功能。
本文将为大家介绍一些操作系统实验的指导。
一、实验准备在进行操作系统实验之前,需要先进行一些实验准备工作。
首先,需要安装一个操作系统,一般选择Linux或Windows。
其次,需要安装一些实验所需的软件和工具,例如编译器、调试器等。
此外,还需要准备一些实验材料,如实验手册、实验报告模板等。
二、实验目标每个操作系统实验都应该有明确的实验目标。
实验目标可以根据学生的实际情况和课程要求进行设定。
例如,可以通过实验来掌握进程管理、文件系统、内存管理等操作系统相关知识。
同时,实验目标应该具有可衡量性,可以通过实验结果来评估学生的实验成果。
三、实验内容1.进程管理实验:通过编写一个简单的多进程程序,来了解进程的创建、调度和终止等过程。
2.文件系统实验:通过创建、读写和删除文件,来了解文件系统的组织结构和基本操作。
3.内存管理实验:通过编写一个简单的分页存储管理程序,来了解分页存储管理的原理和实现方法。
4.设备管理实验:通过模拟设备的申请、释放和使用过程,来了解设备管理的原理和调度算法。
四、实验步骤每个操作系统实验都有具体的实验步骤,学生需要按照这些步骤进行实验。
以下是一些常见的实验步骤:1.实验环境准备:包括安装操作系统、配置软件和工具等。
2.实验预备:包括阅读实验手册、了解实验目标和要求等。
3.实验设计:根据实验目标和要求,设计实验方案和实验程序。
4.实验实施:按照实验方案和实验程序,进行实验操作并记录实验数据。
5.实验分析:根据实验数据,进行分析和总结,并得出实验结论。
6.实验报告:根据实验分析和总结,编写实验报告并提交。
五、实验评估实验结果的评估可以根据实验目标和要求来确定。
例如,如果实验目标是了解进程管理,可以通过观察进程的创建和调度情况来评估学生的实验结果。
实验报告的评估可以根据实验报告的内容和结构来确定。
目录实验一 WINDOWS进程初识 (3)1、实验目的 (3)2、实验内容和步骤 (3)3、实验结论 (5)4、程序清单 (5)实验二进程管理 (6)背景知识 (6)1、实验目的 (12)2、实验内容和步骤 (12)3、实验结论 (16)4、程序清单................... 错误!未定义书签。
实验三进程同步的经典算法 .. (17)背景知识 (17)1、实验目的 (19)2、实验内容和步骤 (19)3、实验结论 (22)4、程序清单................... 错误!未定义书签。
实验四存储管理 (23)背景知识 (23)1、实验目的 (31)2、实验内容和步骤 (31)3、实验结论 (48)4、程序清单................... 错误!未定义书签。
实验五文件和设备管理 (49)背景知识 (49)1、实验目的 (53)2、实验内容与步骤............. 错误!未定义书签。
3、实验结论................... 错误!未定义书签。
实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application (控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。
步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。
创建一个新的控制台应用程序工程。
步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。
计算机操作系统实验指导linux版王红玲源码操作系统实验是计算机科学专业学生必修的一门课程,通过实验可以增加学生对操作系统原理的理解和运用能力。
本文以Linux版王红祥操作系统实验指导为例,介绍实验的内容和相关源码。
一、实验内容王红祥操作系统实验主要包括以下几个方面的内容:1.操作系统的引导过程:通过编写汇编代码,实现在x86计算机上加载操作系统,并将CPU从实模式切换到保护模式。
2. 中断处理:实现Timer和UART中断的处理函数,并学习如何编写中断处理程序。
3.多进程管理:实现进程的创建、调度和切换,并学习如何用进程间通信的方式实现进程间的数据交换。
4.内存管理:实现内存的分配和回收,通过设计页表实现虚拟地址转换到物理地址。
5.文件系统:基于FAT12文件系统,实现文件的读取和写入功能,包括创建、删除和修改文件。
二、源码分析以下是王红祥操作系统实验中的一个源码例子,用于实现中断处理:```cvoid irq_handler(int irq)if (irq == TIMER_IRQ)} else if (irq == UART_IRQ)uart_handle(;}/*处理定时器中断的逻辑*/void uart_handle/*处理串口中断的逻辑*/int main/*设置中断处理函数*/set_irq_handler(IRQ0, irq_handler); set_irq_handler(IRQ1, irq_handler); /*启用中断*/enable_irq(IRQ0);enable_irq(IRQ1);/*主循环*/while (1)/*在这里执行其他的操作*/}return 0;```在main函数中,首先通过set_irq_handler函数设置了中断处理函数。
然后,通过enable_irq函数启用了IRQ0和IRQ1中断。
最后,采用死循环结构确保操作系统对中断的及时处理。
以上源码是王红祥操作系统实验中的一部分,通过学习和实践这些源码,可以更好地理解和掌握操作系统的原理和实现。
《Linux操作系统》实验指导书主编教师:王振目录实验一Linux操作系统的安装 (3)【实验目的】 (3)【实验环境】 (3)【实验重点及难点】 (3)【实验内容】 (3)实验二常用命令的使用(一) (5)【实验目的】 (5)【实验环境】 (5)【实验重点及难点】 (5)【实验内容】 (5)实验三常用命令的使用(二) (9)【实验目的】 (9)【实验环境】 (9)【实验重点及难点】 (9)【实验内容】 (9)实验四VI编辑器的使用 (14)【实验目的】 (14)【实验环境】 (14)【实验重点及难点】 (14)【实验内容】 (14)实验五Linux系统管理与配置 (15)【实验目的】 (15)【实验环境】 (16)【实验重点及难点】 (16)【实验内容】 (16)(一)命令行管理 (16)(二)图形界面管理 (17)实验六shell编程(一) (19)【实验目的】 (19)【实验环境】 (19)【实验重点及难点】 (19)【实验内容】 (19)实验七shell编程(二) (23)【实验目的】 (23)【实验环境】 (23)【实验重点及难点】 (23)【实验内容】 (23)实验八FTP服务器的配置 (25)【实验目的】 (25)【实验环境】 (25)【实验重点及难点】 (25)【实验内容】 (25)实验九NFS服务器 (26)【实验目的】 (26)【实验环境】 (26)【实验重点及难点】 (26)【实验内容】 (26)实验十配置Samba服务器 (28)【实验目的】 (28)【实验环境】 (28)【实验重点及难点】 (28)【实验内容】 (28)实验一Linux操作系统的安装【实验目的】1.掌握Linux操作系统的安装;2.通过安装,学习Linux操作系统与其他操作系统的区别。
【实验环境】1、Linux操作系统安装;2、虚拟机软件;3、计算机内存配置要求512M以上。
【实验重点及难点】Linux操作系统安装过程。
操作系统实验指导书专业:计算机科学与技术;软件工程课程名称:操作系统课程类别:专业必修课计算机与通信工程学院2009目录第1篇Linux操作系统使用 (1)实验1Linux系统的安装及基本操作 (1)实验2Linux 的常用命令与基本管理 (38)第2篇操作系统算法模拟 (53)实验1 银行家算法 (53)实验2 进程调度 (55)实验3 动态分区分配 (56)实验4 页式存储管理 (57)实验5 虚拟存储管理器的页面调度 (59)实验6 文件管理 (62)实验7 磁盘存储空间的分配与回收 (64)实验8 磁盘调度 (66)附录 (67)实验1报告写法 (67)实验2报告的写法 (67)算法模拟部分 (68)第1篇Linux操作系统使用实验1Linux系统的安装及基本操作一、实验目的1.掌握Red Hat Enterprise Linux 5的安装方法。
2.了解Linux操作系统的启动与登录方法。
3.掌握Red Hat Linux图形用户界面下的基本操作。
二、实验工具与设备1.实验工具:Red Hat Enterprise Linux 5光盘或镜像文件。
2.实验设备:计算机(带CD-ROM)一台。
三、实验预备知识虚拟机简介虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所以你可以随意修改虚拟机的设置,而不用担心对自己的电脑造成损失。
虚拟机中有自己的CPU、主板、内存、BIOS、显卡、硬盘、光驱、软驱、网卡、声卡、串口、并口和US B等设备。
Vmware介绍Vmware是一个“虚拟PC”软件。
它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。
与“多启动”系统相比,VMWare采用了完全不同的概念。
多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。
VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Wi ndows应用程序那样切换。
计算机操作系统实验指导linuxLinux 操作系统实验指导一、快速安装Linux系统1. 搭建实验环境:下载Linux系统的安装CD或者U盘,由于安装CD可能比较老旧,建议使用U盘来加载Linux系统;2. Bios 及设置:根据启动项的设置,调整U盘或者CD-ROM的读取顺序;3. 分割机制:根据自身的实验需求,给每一块磁盘分配大小;4. 安装系统:根据linux系统的提示安装相应的组件,设置root分区,系统更新;二、Linux系统外观设置1. 登录系统:输入用户名和密码,登录系统,添加用户及其权限管理;2. 更改外观:安装特定的主题,进行界面的更改,开机启动动画,桌面背景设置;3. 调整桌面图标:添加快捷方式,右键菜单管理,图标的拖拽安排等;4. 桌面快捷键:设置快捷键,方便操作,减少重复点击。
三、Linux系统安全设置1. 系统安全:安装安全软件,设置防火墙,锁定系统认证;2. 用户安全:设置不同用户权限,登陆账号管理,安装安全软件;3. 应用安全:安装反病毒软件,进行网页浏览拦截,异常端口禁止;4. 系统备份:制定机器备份计划,在恰当的时间进行备份操作。
四、Linux系统维护1. 系统维护:检查内存资源,检查OS系统补丁,维护系统文件;2. 进程管理:搜索指定进程,加进行结束操作,网络监控,作业管理;3. 系统日志:解析系统日志,及时发现系统异常,安装定期重启系统;4. 资源管理:查看磁盘使用情况,清理无用磁盘空间,升级硬件驱动,调整硬件参数。
五、Linux环境编程1. 配置编译环境:管理编程工具,安装gcc编译环境,程序与调试;2. 写入程序语言:使用C或者C++等语言,编写程序,将程序源文件保存;3. 编译源程序:使用gcc编译程序,在程序的源码中添加头文件,编译检查程序;4. 运行程序:测试程序,调试程序,看看程序的运行效果,分析程序运行的错误。
六、Linux系统优化1. 优化硬件设备:升级GB、CPU、内存,新增硬盘等;2. 添加新软件:查找新的功能模块,优化系统性能;3. 系统定期检查:软硬件保护,程序性能优化,重新启动程序,更新软硬件驱动;4. 调整显示器的分辨率:根据分辨率的不同,调整显示器的屏幕大小,细化界面效果和位置;5. 系统内存设置:调整系统内存性能,调整内存大小,加快系统加载速度。
操作系统实验指导适用课程:操作系统适用专业:计算机科学与技术软件工程目录实验环境的使用 (3)操作系统的启动 (11)进程的创建 (16)进程的同步 (22)时间片轮转调度 (29)分页存储器管理 (33)设备驱动程序 (40)FAT12文件系统 (46)实验环境的使用实验性质:验证建议学时:2学时一、实验目的●熟悉操作系统集成实验环境OS Lab的基本使用方法。
●练习编译、调试EOS操作系统内核以及EOS应用程序。
二、预备知识阅读《EOS实验指南》第一章,对EOS操作系统和集成实验环境有一个初步的了解。
三、实验内容3.1 启动OS Lab1.在安装有OS Lab的主机上,可以使用两种不同的方法来启动OS Lab:●在桌面上双击“Tevation OS Lab”图标。
●点击“开始”菜单,在“程序”中的“Tevation OS Lab”中选择“TevationOS Lab”。
2.OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。
在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。
3.观察OS Lab主窗口的布局。
OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。
3.2 学习OS Lab的基本使用方法通过练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(包括新建项目、生成项目、调试项目等)。
3.2.1 新建Windows控制台应用程序项目新建一个Windows控制台应用程序项目的步骤如下:1.在“文件”菜单中选择“新建”,然后单击“项目”。
2.在“新建项目”对话框中,选择项目模板“控制台应用程序(c)”。
3.在“名称”中输入新项目使用的文件夹名称“oslab”。
4.在“位置”中输入新项目保存在磁盘上的位置“C:\Test”。
操作系统实验教程在当今数字化的时代,操作系统作为计算机系统的核心组成部分,其重要性不言而喻。
对于学习计算机相关专业的学生和从事相关工作的技术人员来说,深入理解操作系统的原理和机制,并通过实验来巩固和拓展知识,是必不可少的环节。
本教程将带您走进操作系统实验的世界,帮助您掌握操作系统的关键概念和实践技能。
一、实验环境的搭建在开始操作系统实验之前,首先需要搭建一个合适的实验环境。
这通常包括选择合适的操作系统(如 Windows、Linux 等),安装相关的开发工具和编译器(如 Visual Studio、GCC 等),以及配置必要的环境变量。
对于初学者,建议选择较为常见和易用的操作系统,如 Windows 10 或 Ubuntu Linux。
在 Windows 系统中,可以通过安装 Visual Studio 来进行 C/C++程序的开发;而在 Linux 系统中,可以使用命令行工具来安装 GCC 编译器,并通过文本编辑器(如 Vim 或 Emacs)来编写代码。
二、进程管理实验进程是操作系统中最基本的概念之一,它是程序的一次执行过程。
在进程管理实验中,我们将学习如何创建、终止进程,以及如何进行进程间的通信。
1、进程的创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。
可以使用系统提供的 API 函数(如 Windows 中的 CreateProcess 函数或 Linux 中的 fork 函数)来创建进程,并通过相应的函数(如 ExitProcess 或 exit 函数)来终止进程。
2、进程间通信进程间通信是指不同进程之间交换数据和信息的方式。
常见的进程间通信方式包括管道、消息队列、共享内存等。
通过实验,我们可以了解这些通信方式的原理和实现方法,并编写程序进行实际的通信操作。
三、内存管理实验内存管理是操作系统的重要任务之一,它负责合理地分配和回收内存资源,以确保系统的高效运行。
1、内存分配与释放学习使用编程语言中的内存分配函数(如 C 语言中的 malloc 和 free 函数)来动态分配和释放内存。
操作系统实验指导书实验1 操作系统环境通过调查研究活动和对Windows、Linux系统运行的观察分析,回顾计算环境的基本术语,加深理解有关操作系统的基础概念,掌握主流操作系统的命令和图形界面,学会在操作系统上的主要系统管理操作。
1.1 操作系统的计算环境1.2 Windows xp系统管理1.3 访问Linux系统§1.1 操作系统的计算环境背景知识本实验帮助回顾 Windows xp/XP、UNIX和Linux的计算环境术语,加深理解有关操作系统的基础概念。
调查在学校或其他机构中Windows、UNIX和Linux的使用情况,看哪些机构在使用Windows、UNIX或者Linux系统;研究Web站点,看哪些因特网网站 (尤其是简体中文网站) 分别支持着Windows、UNIX和Linux操作系统的应用。
实验目的通过实验,加深对以下内容的理解基本的计算机硬件组件;计算机操作系统;Windows的发展和版本UNIX和Linux的历史和版本;Windows xp、UNIX或Linux操作环境。
调查在机构、学校和学生中Windows、UNIX和Linux操作系统的使用情况,分别研究支持Windows和Linux的Web站点。
工具/准备工作在开始本实验之前,请回顾教科书的相关内容,联系指导老师或者熟识网络技术的人士,如学校或企业信息技术部门的职员,了解学校或者其他机构中使用了哪些服务器和网络操作系统,找出是否在用Windows NT/2000/XP、UNIX和Linux以及在哪里使用这些操作系统,需要准备一台带有浏览器,能够访问因特网的计算机。
实验内容与步骤2、复习3个概念:内核、shell、文件系统3、 Windows xp/XP操作系统的主要优点是什么?4、UNIX操作系统的主要优点是什么?5、Linux操作系统的主要优点是什么?6、列举Linux操作系统的主要组成部分7、Linux内核管理着哪几件事情?8、Linux系统的主要shell的名字和它们各自默认的提示符是什么?9、操作系统的文件系统由哪几部分组成的?10、在指导老师或者信息技术人员的帮助下,找出在学校或者其他机构中使用的几种操作系统。
操作系统实验指导及实验五个前言1.实验总体目标通过学生自己动手设计实验验证理论知识,使学生掌握操作系统特征和功能,掌握不同调度算法下进程的调度、进程控制、进程调度与死锁,并必须掌握作业管理、存储器管理、设备管理和文件管理的主要原理。
加深对操作系统基本原理理解。
⒉适用专业计算机科学与技术⒊先修课程C语言程序设计、计算机组成原理、数据结构⒋实验课时分配⒌有70台中等配置的计算机组成的小型局域网的实验室环境。
计算机的具体要求:(1)Pentium 133Hz以上的CPU;(2)建议至少256MB的内存;(3)建议硬盘至少2GB,并有1GB空闲空间。
(4)安装Windows操作系统及C语言编译程序或Linux虚拟环境。
⒍实验总体要求培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。
通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。
使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
实验要求做到:1)详细描述实验设计思想、程序结构及各模块设计思路;2)详细描述程序所用数据结构及算法;3)明确给出测试用例和实验结果;4)为增加程序可读性,在程序中进行适当注释说明;5)认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6)实验报告撰写要求结构清晰、描述准确逻辑性强;7)实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。
⒎本实验的重点、难点及教学方法建议重点:理解进程调度中PCB的设计,以实现对进程的调度。
难点:进程调度程序的设计,设备管理程序的设计。
教学方法建议:力争在本指导书的帮助下,独立设计程序以加深理解。
实验一分析操作系统所面临的操作需求(一)实验目的使学生理解操作系统所面临的操作需求,掌握操作系统中的进程管理、存储管理、设备管理和文件管理等功能。
(二)实验内容1. 分析操作系统所面临的操作需求;2. 熟悉实验环境;3. 资料搜集与整理,进行实验的前期准备。
熟悉编程环境本课程中的实验题目既可以在windows下用控制台应用程序实现,也可以在linux下用全屏幕程序实现。
这里我们首先介绍在windows下用vc++6.0设计控制台应用程序的步骤,然后介绍在linux下用C语言编写全屏幕程序的步骤。
1.windows的控制台应用程序图1-1 图1-2图1-3步骤1:开机,单击“开始”按钮,选择“程序->Microsoft Visual Studio 6.0->Microsoft Visual C++6.0”进入Microsoft Visual C++6.0。
见图1-1。
步骤2:在Microsoft Visual C++6.0中,单击“File”菜单,选择“New”菜单命令,见图1-2。
步骤3:在“Files”选项卡中选择“C++ Source File”,见图1-32. linux的vi应用编程登录 Linux是一个多用户多任务操作系统,多个用户可以拥有自己独立的用户账号登录提示:Red Hat Linux release 6.0 (Hedwing)Kernel 2.2.5-15 on an i686Login:此时输入用户户名(账号)并键入回车,则系统显示“passward”。
在输入密码和回车。
登录后:[root@hawk/root]##表示是按root方式登录,$表示是普通用户。
Linux大小写敏感,用“-”加参数zlinux:~# ls –FHowTo/ HowToMin/ linux@ nag/ sag/获取帮助:Linux带有联机手册,可以用man命令来阅读Zlinux:~$ man ls虚拟终端 Linux可有多个用户登录到同一个计算机,但一般微机只有一个终端难以体现。
可以使用多个虚拟终端,用Alt+F1、 Alt+F2等来切换。
退出系统在停止使用系统时,要退出系统。
具体方法:exit或logout,或Ctrl+D关机如果没有用户在使用系统,可以关机。
但是不能直接关闭电源,而要按正常顺序关机。
一般用户是不能关机的,只有root用户可以关机。
方法:可以使用halt或shutdown命令,也可以同时键入Ctrl+Alt+Del。
Windows 虚拟机环境:登录到系统点击桌面“VMware”图标——> Vmware Workstation窗口——>Commands ——>Start this virtual machine进入fedora后,用户名:root口令:123456使用编辑器vi 编辑文件1.进入linux的文本模式之后,在命令行键入vi filename.c 然后回车。
下面作一些简单的解释:首先vi命令是打开vi编辑器。
后面的filename.c 是用户即将编辑的c文件名字,注意扩展名字是.c;当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。
2.最基本的命令I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键(insert),插入的意思,就可以进入编辑模式了。
如下图所示:3.a与i是相同的用法4.当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。
如果不想保存退出,则在第二步键入冒号之后,键入!q(不带w,机尾部保存)。
如下图所示:5.退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。
编译的命令是:gcc filename.c [-o outputfilename],其中gcc是c的编译器。
参数:filename.c 是刚才编辑的c 文件(当然也可以是以前编写好的c文件);后面中括号里面的参数是可选的,它是一个输出文件。
如果不选,默认的输出文件是 a.out ,选了之后输出文件就是outputfilename.out.6.最后一步是运行程序,方法如下:./outputfilename.out实验二进程管理(一)实验目的掌握临界区的概念及临界区的设计原则;掌握信号量的概念、PV操作的含义以及应用PV操作实现进程的同步与互斥;分析进程争用资源的现象,学习解决进程互斥的方法;掌握进程的状态及状态转换;掌握常用的进程调度算法。
(二)实验内容1.分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟;2.编写允许进程并行执行的进程调度程序,在常用的进程(作业)调度算法:先来先服务算法、短作业优先算法、最高响应比优先算法、高优先权优先算法等调度算法中至少选择三种调度算法进行模拟,并输出平均周转时间和平均带权周转时间。
本实验涉及内容较多,可以在两个题目里选择一个完成。
编程实现经典的进程同步问题——生产者消费者问题的模拟模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。
进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进程轮流地占用处理器运行。
我们把若干个进程都能进行访问和修改的那些变量称为公共变量。
由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。
为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。
一般说,同步机构是由若干条原语——同步原语——所组成。
本实验要求模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。
此次用到的数据结构知识如下:typedef struct Pcb{char name[10]; //进程名char state[10]; //运行状态char reason[10]; //若阻塞,其原因int breakp; //断点保护struct Pcb *next; //阻塞时的顺序}Pcb,*link;进程控制块结构定义两个进程: link p1;//生产者进程,link c1;//消费者进程。
pc程序计数器和link ready; 就绪队列,link b_s1; s1阻塞队列,link b_s2; s2阻塞队列。
实验指导:a.h头文件#include<string.h>#include<ctype.h>#include<malloc.h> /* malloc()等 */#include<limits.h> /* INT_MAX等 */#include<stdio.h> /* EOF(=^Z或F6),NULL */#include<stdlib.h> /* atoi() */#include<io.h> /* eof() */#include<math.h> /* floor(),ceil(),abs() */#include<process.h> /* exit() */#include <iostream>using namespace std;#include <time.h>#define BUF 10 //缓存的大小#define MAX 20 //最大可以输入的字符b.h头文件//数据结构的定义和全局变量typedef struct Pcb{char name[10]; //进程名char state[10]; //运行状态char reason[10]; //若阻塞,其原因int breakp; //断点保护struct Pcb *next; //阻塞时的顺序}Pcb,*link;int s1,s2; //信号量link p1;//生产者进程link c1;//消费者进程char str[MAX]; //输入的字符串char buffer[BUF]; //缓冲池int len; //输入长度int sp=0; //string的指针int in=0; //生产者指针int out=0; //消费者指针char temp; //供打印的临时产品char rec_p[MAX];//生产记录int rp1=0;//生产记录指针char rec_c[MAX];//消费记录int rp2=0;//消费记录指针link ready; //就绪队列link b_s1; //s1阻塞队列link b_s2; //s2阻塞队列int pc; //程序计数器int count; //字符计数器int con_cnt; //消费计数器c.h头文件void init(); //初始化void p(int s); //P操作void v(int s); //V操作void block(int s);//阻塞函数void wakeup(int s);//唤醒函数void control(); //处理机调度void processor();//处理机执行void print(); //打印函数void init(){ //初始化s1=BUF;s2=0;p1=(link)malloc(sizeof(Pcb));//建立新的结点,并初始化为生产者strcpy(p1->name,"Producer");strcpy(p1->state,"Ready");strcpy(p1->reason,"Null");p1->breakp=0;p1->next=NULL;c1=(link)malloc(sizeof(Pcb));//建立新的结点,并初始化为消费者strcpy(c1->name,"Consumer");strcpy(c1->state,"Ready");strcpy(c1->reason,"Null");c1->breakp=0;c1->next=NULL;ready=p1;ready->next=c1;//初始化为生产进程在前,消费进程在后c1->next=NULL;b_s1=NULL;b_s2=NULL;//阻塞进程为NULLpc=0;con_cnt=0; //消费计数器}void p(int s){if(s==1){ //p(s1)s1--;if(s1<0)block(1); //阻塞当前生产进程else{printf("\t* s1信号申请成功!\n");ready->breakp=pc; //保存断点}}else{ //p(s2)s2--;if(s2<0)block(2);//阻塞当前消费进程else{printf("\t* s2信号申请成功!\n");ready->breakp=pc; //保存断点}}}void v(int s){if(s==1){ //v(s1)s1++;if(s1<=0)wakeup(1); //唤醒生产进程ready->breakp=pc; //保存断点}else{ //v(s2)s2++;if(s2<=0)wakeup(2);//唤醒消费进程ready->breakp=pc; //保存断点}}void block(int s){//阻塞函数的定义link p;int num1=0;int num2=0;if(s==1){//生产进程strcpy(p1->state,"Block");//改变状态strcpy(p1->reason,"S1");//说明原因p=b_s1;while(p){num1++;p=p->next;//p的值为NULL,表示队尾}if(!b_s1)b_s1=p1;elsep=p1;p1->next=NULL;printf("\t* p1生产进程阻塞了!\n");ready->breakp=pc; //保存断点ready=ready->next;//在就绪队列中去掉,指向下一个num1++;}else{//消费进程strcpy(c1->state,"Block");strcpy(c1->reason,"S2");p=b_s2;while(p){num2++;p=p->next;//p的值为NULL,表示队尾}if(!b_s2)b_s2=c1;elsep=c1;ready->breakp=pc; //保存断点ready=ready->next;//在就绪队列中去掉,指向下一个c1->next=NULL;printf("\t* c1消费进程阻塞了!\n");num2++;}printf("\t* 阻塞的生产进程个数为:%d\n",num1);printf("\t* 阻塞的消费进程个数为:%d\n",num2);}void wakeup(int s){//唤醒函数的定义link p;link q=ready;if(s==1){ //唤醒b_s1队首进程,生产进程队列p=b_s1;b_s1=b_s1->next;//阻塞指针指向下一个阻塞进程strcpy(p->state,"Ready");strcpy(p->reason,"Null");while(q)//插入就绪队列q=q->next;q=p;p->next=NULL;printf("\t* p1生产进程唤醒了!\n");}else{ //唤醒b_s2队首进程,消费进程队列p=b_s2;b_s2=b_s2->next;//阻塞指针指向下一个阻塞进程strcpy(p->state,"Ready");strcpy(p->reason,"Null");while(q->next)//插入就绪队列q=q->next;q->next=p;p->next=NULL;printf("\t* c1消费进程唤醒了!\n");}}void control() //处理器调度程序{int rd;int num=0;link p=ready;if(ready==NULL) //若无就绪进程,结束return;while(p) //统计就绪进程个数{num++;p=p->next;//最终p变为NULL}printf("\t* 就绪进程个数为:%d\n",num);time_t t;srand((unsigned) time(&t));rd=rand()%num;//随机函数产生随机数if(rd==1){p=ready;ready=ready->next;ready->next=p;p->next=NULL;strcpy(ready->state,"Run");strcpy(ready->next->state,"Ready");}elsestrcpy(ready->state,"Run");pc=ready->breakp;}void processor(){ //模拟处理器指令执行if(strcmp(ready->name,"Producer")==0) //当前进程为生产者switch(pc){case 0://produceprintf("\t* 生产者生产了字符%c\n",str[sp]);rec_p[rp1]=str[sp];//添加到生产记录sp=(sp+1)%len;pc++;ready->breakp=pc; //保存断点break;case 1: //p(s1)pc++;p(1);break;case 2: //putbuffer[in]=rec_p[rp1]; //放到缓冲区printf("\t* %c字符成功入驻空缓存!\n",buffer[in]);rp1++;in=(in+1)%BUF;pc++;ready->breakp=pc; //保存断点break;case 3: //v(s2)pc++;printf("\t* 释放一个s2信号\n");v(2);break;case 4://goto01printf("\t* 生产进程goto 0 操作\n");pc=0;count--; //剩余字符个数减1printf("\t* 剩余字符count=%d个\n",count);ready->breakp=pc; //保存断点if(count<=0){ //生产结束printf("\t* 生产者结束生产!\n");strcpy(p1->state,"Stop");strcpy(p1->reason,"Null");ready->breakp=-1;ready=ready->next;//在就绪队列中去掉}}else //当前进程为消费者switch(pc){case 0: //p(s2)pc++;p(2);break;case 1: //getprintf("\t* 消费者取字符!\n");temp=buffer[out];out=(out+1)%BUF;pc++;ready->breakp=pc; //保存断点break;case 2: //v(s1)pc++;printf("\t* 释放一个s1\n");v(1);break;case 3: //consumeprintf("\t* 消费了字符%c\n",temp);rec_c[rp2]=temp;//添加到消费记录rp2++;con_cnt++;if(con_cnt>=len){strcpy(c1->state,"Stop");//完成态c1->breakp=-1;return;}pc++;ready->breakp=pc; //保存断点break;case 4: //goto0printf("\t* 消费进程goto 0 操作\n");pc=0;ready->breakp=pc; //保存断点}}void print(){int i,j;printf("--------生产者消费者模拟-------\n");printf("* 模拟过程的字符串为:\t");printf("%s\n",&str);printf("* 已生产:");for(j=0;j<=rp1;j++)printf("%c",rec_p[j]);printf("\n* 空缓存:");for(j=rp2;j<=rp1;j++)printf("%c",buffer[j]);printf("\n* 已消费:");for(j=0;j<=rp2;j++)printf("%c",rec_c[j]);printf("\n-------进程控制块的信息--------\n");printf("进程名\t\t状态\t等待原因\t断点\n");printf("%s\t%s\t%s\t\t%d\n\n",p1->name,p1->state,p1->reason, p1->breakp);printf("%s\t%s\t%s\t\t%d\n",c1->name,c1->state,c1->reason,c1 ->breakp);printf("-----------------------\n");printf("1.继续 0.退出\n");scanf("%d",&i);if(i==0){exit(0);}}主程序#include "a.h"#include "b.h"#include "c.h"void main(){printf("*生产者消费者模拟\n");printf("---------\n");printf("*请输入字符串:\n");scanf("%s",str); //string数组存放将要产生的字符len=strlen(str);count=len; //输入字符的个数init(); //初始化while(con_cnt<len) //消费完所有的字符为结束{system("cls"); //清屏操作printf("---------模拟指令流程--------\n");control(); //处理器调度程序processor(); //模拟处理器指令执行print(); //输出显示各个信息}printf("\n程序结束!\n"); }进程调度算法模拟进程管理是操作系统中的重要功能,用来创建进程、撤消进程、实现进程状态转换,它提供了在可运行的进程之间复用CPU的方法。