操作系统实验指导书2009工大
《计算机操作系统》实验指导书
宁夏师范学院——数学与计算机科学学院《操作系统》实验指导《OPERATING SYSTEM》2013.08前言计算机操作系统是计算机科学与技术专业的主要专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
计算机操作系统的实验目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握操作系统的基本原理,加深对操作系统基本方法的理解,加深对课堂知识的理解,为学生综合运用所学知识,在Linux环境下调用一些常用的函数编写功能较简单的程序来实现操作系统的基本方法、并在实践应用方面打下一定基础。
要求学生在实验指导教师的帮助下自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个实验解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,并且能够进行简单分析和判断;能够熟练使用Linux用户界面;掌握操作系统中进程的概念和控制方法;了解进程的并发,进程之间的通信方式,了解虚拟存储管理的基本思想。
同时培养学生进行分析问题、解决问题的能力;培养学生完成实验分析、实验方法、实验操作与测试、实验过程的观察、理解和归纳能力。
为了收到良好的实验效果,编写了这本实验指导书。
在指导书中,每一个实验均按照该课程实验大纲的要求编写,力求紧扣理论知识点、突出设计方法、明确设计思路,通过多种形式完成实验任务,最终引导学生有目的、有方向地完成实验任务,得出实验结果。
任课教师在实验前对实验任务进行一定的分析和讲解,要求学生按照每一个实验的具体要求提前完成准备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有准备地上机。
进行实验时,指导教师应检查学生的预习情况,并对调试过程给予积极指导。
实验完毕后,学生应根据实验数据及结果,完成实验报告,由学习委员统一收齐后交指导教师审阅评定。
目录操作系统实验大纲 (1)第一部分实验环境及所用系统函数介绍 (3)1.1 Linux操作系统简介 (3)1.2 Linux的使用 (3)第二部分实验内容 (7)实验一熟悉LINUX基本命令及编程环境 (7)实验二进程管理 (10)实验三进程调度 (14)实验四进程间通信 (19)实验五存储管理实验 (22)操作系统实验大纲一、教学目的和要求操作系统课程是一门理论性很强的专业课,操作系统实验是该课程的辅助课程。
操作系统实验指导书
《操作系统》课程实验指导书一.实验总学时(课外学时/课内学时):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只能由超级用户在单用户模式下使用。
工学汇编实验指导书09级
汇编语言程序设计实验指导书东北林业大学机电工程学院2011年6月·哈尔滨实验一:指令系统一、实验目的1. 熟悉汇编语言中基本语句。
2.了解指令不同的寻址方式,注意规定或限制使用的寄存器。
如:双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用的寄存器等。
3.学会如何将数值转换成对应字符的ASCII码。
4.掌握DOS的字符串输出、单字符输入输出功能的使用。
二、实验仪器设备、材料1. pc机三、预习内容1.认真阅读本实验指导。
2.按实验内容要求,理解相关指令,编写程序。
3. 预习查看教材附录的DOS系统功能调用。
四、实验内容与步骤⒈实验内容编写一个完整的程序。
具体要求如下:①要求下系统提示下从键盘输入两个数3和5,分别存入字节变量A和B中;②求两个数的和,结果存放在数据段中的字节变量SUM中;③将结果显示在屏幕上。
⒉实验步骤①提示的实现:在数据段中定义两个字符串,利用DOS的字符串输出功能显示。
例如:数据段定义为:string1 db 'the first is:',0dh,0ah,'$'string2 db 0dh,0ah,'the second is:',0dh,0ah,'$'代码段中:mov dx,offset string1mov ah,09hint 21h显示字符串string1,其它字符串显示相同。
②利用DOS的单字符输入功能,即可获得输入数字的ASCII码。
字符的ASCII码为一个8位二进制数,计算时需要将ASCII转换为实际参加计算的数值。
如数字3从键盘键入后,获得了字符3的ASCII码33H,需要在计算前求其真实数值,即33H-30H=3。
部分代码如下:数据段:a db ?b db ?代码段:mov ah,01hint 21h ;键盘输入并回显sub al,30h ; 将ASCII转换为实际参加计算的数值mov a,al③显示时需将这8位二进制数值分别转换为其对应的ASCII码,显示调用DOS单字符输出功能。
操作系统实验指导书
操作系统实验指导书实验一基本操作命令实践 2 实验二、Linux基础命令实验 5 实验三、linux进程管理实验 8 实验四、Windows进程管理实验 9 实验五、进程间通信机制 11 实验六、处理机调度实践 14 实验七、内存管理机制实验 31 实验八、Linux内存管理实验 34理学院物理与电子科学系王小妮编写实验一基本操作命令实践一、实验目的1、配合操作系统课程的学习,加深操作系统提供命令接口的功能的理解。
二、实验内容1、操作实践最常见的操作系统管理的一些命令。
三、实验步骤在操作系统Windows XP或2000及Windows Server 2003下,操作以下命令。
1、最基本、最常用的测试物理网络连通性的命令ping,ping命令用于确定本地主机是否与网络上另外一台主机连通。
格式:ping IP 地址命令选项例如:ping 192.168.0.8 –t –l 2048 –n 8解释: -t表示一直发包,直到被用户用Ctrl+C中断为止。
-l表示发送的数据包的大小。
本例为2048-n表示发几个就停止发包。
本例为8个。
2、查看DNS、IP地址、MAC地址的命令ipconfig。
格式:ipconfig 命令选项例如:ipconfig -all解释: -all选项会看到Windows IP Configuration和Ethernet Adapter信息,包括IP地址、DNS及MAC地址。
3、查看DNS与IP地址命令nslookup,它主要用于解析一个域名所对应的IP地址。
格式:nslookup 主机域名例如:nslookup解释:查看缺省DNS服务器及其IP地址。
4、网络信使命令net send。
格式:net send 计算机名/IP地址传播的消息例如:net send 210.30.103.121 hello解释:发送消息“hello”给IP地址为210.30.103.121的机器。
停止网络信使服务的命令为net stop messenger,开始网络信使服务的命令为net start messenger.5、探测对方计算机名、所在的组、域及当前用户名的命令nbtstat.格式:nbtstat -a IP 地址例如:nbtstat -a 192.168.0.6解释:探测192.168.0.6计算机名、所在的组、域及当前用户名。
操作系统实验指导书
操作系统实验指导书实验概述本次操作系统实验是为了让学生通过实践了解操作系统的基本概念,原理和使用。
通过完成实验,学生将了解操作系统内核,进程调度,文件系统和输入输出等关键组成部分。
实验环境实验要求使用 Linux 操作系统,可以选择任意一种 Linux 发行版。
可以在物理机上安装 Linux,也可以使用虚拟机软件(如 VirtualBox)来运行 Linux 虚拟机。
实验准备在进行实验之前,需要完成以下准备工作:1.安装 Linux 操作系统(如 Ubuntu、Fedora 等)或虚拟机软件(如VirtualBox)。
2.熟悉 Linux 基本命令和操作,包括文件操作、进程管理等。
实验内容本次操作系统实验分为以下几个部分:1. 实验一:进程管理本部分实验要求学生了解进程管理的基本概念和原理,掌握进程创建、终止和状态转换等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现进程的创建、终止和状态转换功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析进程的状态转换过程。
2. 实验二:进程调度本部分实验要求学生了解进程调度算法的原理和实现方法,掌握优先级调度、轮转调度和最短作业优先调度等算法。
学生需要完成以下任务:•编写一个简单的 C 程序,模拟进程调度算法的执行过程。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析不同调度算法对进程执行顺序的影响。
3. 实验三:文件系统本部分实验要求学生了解文件系统的基本概念和实现原理,掌握文件的创建、读写和删除等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现文件的创建、读写和删除功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析文件系统的存储结构和操作过程。
4. 实验四:输入输出本部分实验要求学生了解操作系统的输入输出机制和设备驱动程序的原理和实现方法,掌握文件读写、设备驱动和错误处理等操作。
2009操作系统实验指导书
操作系统实验指导书青岛理工大学计算机工程学院二零一一年九月一、课程编号:071235二、适用专业:计算机科学与技术专业、网络工程专业、软件工程专业三、实验个数与学时:4个实验,8学时四、《操作系统实验》的目的《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。
在计算机软硬件课程的设置上,它起着承上启下的作用。
操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。
操作系统实验的主要任务是让学生掌握常用操作系统的安装方法,了解操作系统进程管理的基本内容,通过实验演示了解操作系统是如何进行进程管理的,为后期操作系统的课程设计奠定基础。
五、实验平台在虚拟机Vmware或者Virtual Box上的Ubuntu 11.10实验1 安装Linux操作系统一、实验目的在虚拟机Vmware或者Virtual Box上安装Unbuntu 11.10操作系统,后续实验都将在此环境上进行。
通过实验,要求:1、掌握在虚拟机上安装操作系统的方法;2、学会安装Linux系统;3、学会启动Linux系统;4、学会在宿主机Windows XP操作系统下,与虚拟机上安排的Ubuntu共享文件的方法。
二、实验内容1、把ubuntu安装至虚拟机上。
●加载安装ubuntu操作系统的ISO IMG文件●启动ubuntu虚拟机●按提示分阶段装入系统2、在Windows下通过网络磁盘来访问ubuntu共享文件夹●在虚拟系统Ubuntu下新建一个文件夹,右击该文件夹,选择属性,共享,启用“共享此目录”,并允许他人在此共享里写数据。
注:共享时需要Samba的支持,系统会提示安装。
●安装完成Samba后,需要重启ubuntu才能生效。
此时回到XP时可在网上邻居里看到一个*** - desktop server(Samba,Ubuntu)的共享目录。
●返回Windows XP系统,右击“网上邻居”,选择“映射网络驱动器”,●在“浏览”里找到刚才在Ubuntu下共享的文件夹,选择后完成映射,●这时打开“我的电脑”会发现多了一个“网络驱动器”,如同我们的硬盘一样。
《操作系统》课程实验指导书
操作系统实验指导书梁海英编系部:班级:学号:姓名:淮安信息职业技术学院2009年1月5日实验须知1、实验前,应认真阅读实验指导书,明确实验目的和实验内容,做好实验准备。
2、实验中,积极思考,及时记录,有疑问及时解决,当堂完成实验内容和实验报告。
3、严格遵守实验实管理规则,珍惜实验时间,不做与实验无关的事。
4、实验结束,按要求填写实验机器使用记录单,正确关闭实验用机,整理好键盘和椅子,值日生认真打扫实验室卫生。
5、如实认真填写实验报告相关内容。
目录前言 (1)实验一 (3)实验二 (12)实验三 (21)实验四 (26)实验五 (33)实验六 (37)实验七 (43)实验一进程管理与控制实验日期:实验成绩:一、实验目的进程管理是操作系统多用户与多任务管理的基本重要手段,用户作业与任务进入内存后采用进程模式进行管理,利用不同进程对资源的不同要求实现进程的并发管理是提高系统效率的有效途径。
本实验的目的是要求学生通过实验全面了解进程管理与控制的相关内容,并通过Windows 2000系统中管理控制工具了解常见系统进程,分析系统性能。
二、实验指导与内容任务管理器是Windows系统中一个非常实用的系统工具,它提供了有关计算机性能的信息,并显示了计算机上所运行的程序和进程的详细信息,可以显示最常用的度量进程性能的单位;如果连接到网络,那么还可以查看网络状态并迅速了解网络是如何工作的。
启动任务管理器最常见的方法是同时按下“Ctrl+Alt+Del”组合键,还可以右键单击任务栏的空白处,然后单击选择“任务管理器”命令,或者,按下“Ctrl+Shift+Esc”组合键也可以打开任务管理器,当然,也可以为\Windows\System32\taskmgr.exe文件在桌面上建立一个快捷方式,然后为此快捷方式设置一个热键,以后就可以一键打开任务管理器了。
任务管理器的用户界面提供了文件、选项、查看、窗口、关机、帮助等六大菜单项,其下还有应用程序、进程、性能、联网、用户等五个标签页,窗口底部则是状态栏,从这里可以查看到当前系统的进程数、CPU使用比率、更改的内存、容量等数据,默认设置下系统每隔两秒钟对数据进行1次自动更新,当然你也可以点击“查看→更新速度”菜单重新设置。
操作系统实验指导书
实验1 Linux常用命令的应用一、实验目的1、了解Linux的命令及使用格式。
2、熟悉Linux的常用基本命令。
二、实验准备预习课本2.3节和附录B《Linux常用命令》。
三、实验内容1.使用教师分配的账号,通过WINDOWS操作系统中的远程登录程序telnet.exe,登录到IP地址为172.16.71.198的Linux系统。
2.显示当前的用户主目录。
3.显示/bin目录的所有文件。
4.显示/bin目录中以m开头的文件。
5.以长格式方式,显示/etc目录中p开头的文件。
6.分屏显示/usr/bin目录的文件(包括隐藏文件)。
7.在自己的用户主目录中建立一个以本人学号为目录名的目录,然后进入本人学号为名的目录。
8.在本人学号为名的目录下建立一个子目录dir1,然后在dir1目录下再建立子目录dir11。
9.进入dir1目录。
10.显示当前目录。
当前目录是什么?11.进入dir11目录。
12.显示当前目录,其显示结果与第10题相同吗?13.返回上一级目录。
此时,当前目录是什么?14.删除dir11目录,然后显示当前目录。
15.在当前目录下建立子目录dir12。
16.返回上一级目录,此时,当前目录是什么?17.查看/etc目录下passwd文件的内容。
18.查看/etc目录下group文件的内容。
19.分屏查看/etc目录下mime.types文件和hosts文件的内容。
20.将/bin目录中以c开头的文件复制到本人学号为名的目录中。
然后针对本人学号为名的目录进行如下操作:(1)进入该目录。
(2)查看该目录的文件。
(3)删除该目录中的cat文件。
(4)将该目录中的文件名cp改名为copy。
(5)将该目录中的的more文件的属性改为:本用户可读、可写、可执行,同组用户和其他用户不可读、不可写,可执行。
(6)将该目录中的chgrp文件的所有者改为xu。
21.删除/bin目录中的文件ed。
可以删除吗?为什么?22.查看当前系统中的所有用户。
《操作系统》实验指导书
操作系统实验指导书专业:计算机科学与技术;软件工程课程名称:操作系统课程类别:专业必修课计算机与通信工程学院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应用程序那样切换。
操作系统实验-实验指导书
3《操作系统》实验指导书实验学时:16适用专业:计算机科学与技术,软件技术操作系统上机实验一、实验目的主要目的是配合操作系统课程的学习,模拟实现操作系统的功能,有助于对操作系统的理解,同时加强学生对系统设计、程序编写、代码调试、软件开发过程基本技能的掌握。
上机作业应作到:覆盖讲授的所有原理内容,使得学生通过上机实践对原理有更深的理解;每一道上机作业,都要求学生必须完成一个完整的、可运行的小型软件,籍此提升基本的软件开发技能。
二、实验要求(1)上机实验之前,学生应当为每次上机的内容作好充分准备。
对每次上机需要完成的题目进行认真的分析,选择合适的算法,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。
(2)按照实验目的和实验内容以及思考题的要求进行上机操作。
录入程序,编译调试,反复修改,直到使用要求的算法,使程序正常运行,得出正确的输出结果为止。
(3)上机作业要求提交原始代码、设计文档和可运行程序。
以完整的作业包的形式提交。
实验报告应当包括:实验题目,程序清单,运行结果,所选取的算法及其优缺点以及通过上机取得了哪些经验。
程序清单要求格式规范,注意加注释(包含关键字、方法、变量等),在每个模块前加注释,注释不得少于20%三、实验内容上机实验包括:操作系统使用、SHELL编程、进程管理、进程调度、死锁处理、存储管理、文件系统几个部分。
实验1: SHELL编程实验目的熟悉linux常用命令,为以后的实验打下良好基础;熟悉vi编辑器的使用;了解Shell程序的语法规则,能编写简单的Shell程序。
实验内容1、使用常用的Linux命令,主要包括如下命令:date, mail, write, man, ls, cat, mv, grep, tail, head, cp, wc, pwd, who等;2、使用vi编辑器编辑文件,熟悉vi编辑器的各种操作模式和常用命令。
操作系统实验指导书
操作系统实验指导书前言操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。
本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。
操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。
作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。
操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。
学生应具有高级语言编程能力、具有数据结构等基础知识。
实验要求为了顺利完成操作系统课程实验,学生应做到:(1)实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。
(2)实验结束一周后提交实验报告。
实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。
(3)遵守机房纪律,服从辅导教师指挥,爱护实验设备。
实验的验收将分为两个部分。
第一部分是上机操作,随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。
此外杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。
目录第1章Windows的进程管理 (5)1.1 实验一:Windows基本进程的管理与控制 (5)1.2 实验二:线程的创建与撤销 (8)1.3 实验三:进程的同步与互斥 ........................................................ 错误!未定义书签。
1.4 实验四:进程调度 ........................................................................ 错误!未定义书签。
1.5 实验五:死锁的检测与避免 ........................................................ 错误!未定义书签。
操作系统实验指导书
《操作系统》课程实验指导书信电工程学院2011年9月目录前言 (1)实验要求 (2)实验准备 (3)实验一处理机管理 (4)实验二存储管理 (7)实验三设备管理 (10)实验四文件管理 (14)前言“操作系统”是计算机及相关专业的必修课程,在学习计算机操作系统理论的同时,通过实验可以加强对操作系统基本原理的理解。
让学生通过上机实验验证计算机操作系统的难点,增加学生对计算机操作系统的领悟和掌握。
使学生对计算机操作系统的工作原理和工作过程有深刻的体会和理解,同时又锻炼了程序编制能力和学生创造能力。
本课程共设8个学时,实验主要由进程管理、存储管理、设备管理、文件管理等4个主要几个部分所组成。
其中验证类实验占25%、设计类实验占75%,每个实验2学时。
考虑由于学生C语言基础较并且不平衡,本课程实验安排了实验准备(由学生课下完成),主要了解掌握TurboC2.0编程环境、掌握C语言编程的基本编制方法和技巧,为后继的实验做准备。
这些实验能很好地解决配合操作系统课程教学来指导学生进行实践的问题。
实验要求1.学生按照实验要求,上机前写好上机实验预习报告,内容包括:实验的目的、内容、实验步骤(程序)。
2.上机实验时按实验要求完成每一个实验的内容。
3.课后认真书写实验报告。
实验报告采用统一的实验报告纸,实验封面包括:课程名称、实验名称、实验序号、班级、姓名、学号、实验时间。
实验报告书写规范,应包括:实验目的和要求、实验内容、实验步骤、实验记录(程序)。
4.遵守机房纪律,服从辅导员教师指挥,爱护实验设备。
5.实验课程不迟到。
如有事不能出席,所缺实验一般不补。
实验准备一.实验目的熟悉TurboC2.0基本编程环境掌握C语言的基本编程方法二.实验内容与要求(一)TurboC2.0的基本操作1、TurboC2.0的基本操作2、运行一个C语言程序的一般过程3、编辑并保存存一个C语言程序4、编译、链接源程序文件5、运行与查看程序结果(二)C语言程序的基本编程方法1、数据类型、运算符、表达式2、数据的输入、输出3、C语言程序的基本控制结构4、数组5、函数与程序结构6、指针7、结构与联合8、文件操作(可通过网络查找TurboC2.0用户说明书,并在其指导进行操作,并要求人手一本C语言程序设计教材并上机练习)实验一处理机管理一、掌握进程及进程调度的概念、三种基本状态及转换二、实验内容1、复习进程的概念、进程调度的含义、进程的三种基本状态及转换2、编制一个模拟进程调度的程序三、参考程序#include"stdio.h"#define running 1/*用running表示进程处于运行状态*/#define aready 2/*用aready表示进程处于就绪状态*/#define blocking 3/*用blocking表示进程处于等待状态*/#define sometimes 5/*用sometime表示时间片大小*/#define n 10/*假定系统允许进程个数为10*/struct{int name;/*进程标识符*/int status;/*进程状态*/int ax,bx,cx,dx;/*进程现场信息,通用寄存器内容*/int pc;/*进程现场信息,程序计数器内容*/int psw;/*进程现场信息,程序状态寄存器内容*/int next;/*下一个进程控制块的位置*/}pcbarea[n];/*定义模拟进程控制块区域的数组*/int PSW,AX,BX,CX,DX,PC,TIME;/*模拟寄存器*/int run;/*定义指向正在运行进程的进程控制块的指针*/struct{int head;int tail;}ready;/*定义指向正在运行进程的进程控制块的指针*/int block;/*定义指向等待队列的指针*/int pfree;/*定义指向空闲进程控制块队列的指针*/sheduling()/*进程调度函数*/{int i;if(ready.head==-1)/*空闲进程控制块队列的指针*/{printf("无就绪进程\n");return 0;}i=ready.head;/*就绪队列头指针赋给i*/ready.head=pcbarea[ready.head].next;/*就绪队列头指针后移*/if(ready.head==-1) ready.tail=-1;/*就绪队列为空,修正尾指针 ready.tail*/pcbarea[i].status=running;/**/TIME=sometimes;/*设置相对时钟寄存器*//*恢复该进程现场信息*/AX=pcbarea[run].ax;BX=pcbarea[run].bx;CX=pcbarea[run].cx;DX=pcbarea[run].dx;PC=pcbarea[run].pc;PSW=pcbarea[run].psw;/*修改指向运行进程的指针*/run=i;return 0;}/*进程调度函数结束*/create(int x)/*创建进程*/{int i;if(pfree==-1)/*空闲进程控制块队列为空*/{printf("无空闲进程控制块,进程创建失败\n");return 0;}i=pfree;/*取空闲进程控制块队列的第一个*/pfree=pcbarea[pfree].next;/*pfree后移*//*填写该进程控制内容:*/pcbarea[i].name=x;pcbarea[i].status=aready;pcbarea[i].ax=x;pcbarea[i].bx=x;pcbarea[i].cx=x;pcbarea[i].dx=x;pcbarea[i].pc=x;pcbarea[i].psw=x;if(ready.head!=-1){/*就绪队列不空时,挂入就绪队列方式*/pcbarea[ready.tail].next=i;ready.tail=i;pcbarea[ready.tail].next=-1;}else{/*就绪队列为空时,挂入就绪队列方式*/ready.head=i;ready.tail=i;pcbarea[ready.tail].next=-1;}return 0;}/*进程创建函数结束*/main(){/*系统初始化*/int num,j;run=ready.head=ready.tail=block=-1;pfree=0;for(j=0;j<n-1;j++)pcbarea[j].next=j+1;pcbarea[n-1].next=-1;printf("输入进程编号(避免编号的冲突,以负数输入结束,最多可以创建10个进程):\n");scanf("%d",&num);while(num>0){create(num);scanf("%d",&num);}sheduling();if(num!=-1){printf("进程名进程状态寄存器内容:ax bx cx dx pc psw:\n");printf("%4d%10d%3d%3d%3d%3d%3d%3d\n",pcbarea[run].name,pcbarea[run].status,pcbarea[ run].ax,pcbarea[run].bx,pcbarea[run].cx,pcbarea[run].dx,pcbarea[run].pc,pcbarea[run ].psw);}}/*main结束*/实验二存储管理一、实验目的掌握分页存储管理的基本原理及分页存储管理中的地址变换过程二、实验内容1、复习分页想念管理的基本概念、基本原理、及地址变换过程2、编制一个模拟地址变换过程的程序三、参考程序/*页式虚拟存储管理中地址转换和缺页中断的模拟*/#include"stdio.h"#define n 64/*模拟实验中假定的页表长度*/#define length 10struct{int lnumber;/*页号*/int flag;/*表示该页是否在主存,"1"表示在主存,"0"表示不在*/int pnumber;/*该页所在主存块的块号*/int write;/*该页号是否被修改,"1"表示修改过,"0"表示末修改过*/ int dnumber;/*该页存放在磁盘上的位置,即磁盘块号*/}page[n];/*页表定义*/int m;/*m为该作业在主存中的主存块块数*/int page_length;/*页表实际长度*/int p[length];/*存放在主存中页的页号*/int head;/*主存中页号队列*/page_interrupt(lnumber)int lnumber;{int j;printf("发生缺页中断*%d\n",lnumber);/*淘汰页*/j=p[head];p[head]=lnumber;head=(head+1)%m;if(page[j].write==1)printf("将页%d写回磁盘第%d块\n",j,page[j].dnumber);page[j].flag=0;/*第j页存在标志改为"0"*/page[lnumber].pnumber=page[j].pnumber;page[lnumber].flag=1;/*第lnumber页存在标志改为"0"*/page[lnumber].write=0;/*第lnumber页修改标志改为"1"*/printf("淘汰主存块%2d中的页%2d从磁盘第%d块中调入页%2d\n",page[j].pnumber,j,page[lnumber].dnumber,lnumber);}/*缺页中断处理函数结束*/void command(laddress,write)unsigned laddress;int write;{int paddress,ad,pnumber,lnumber;kk:/*取出逻辑地址laddress的页号lnumber(高6位)和页内地址ad*/ lnumber=laddress>>10;ad=laddress&0x3ff;if(lnumber>=page_length){printf("不存在该页\n");}if(page[lnumber].flag==1)/*页在主存*/{pnumber=page[lnumber].pnumber;/*从页表中取得块号*/paddress=pnumber<<10|ad;/*合并块号和块内地址形成物理地址padress*/printf("逻辑地址是:%x 对应的物理地址是%x\n:",laddress,paddress);}if(write==1)/*如果需要写,修改页的修改标志位*/page[lnumber].write=1;else{page_interrupt(lnumber);/*缺页中断*/goto kk;}}/*命令处理函数结束*/void main(){int lnumber,pnumber,write,dnumber;unsigned laddress;int i;/*输入页表信息,页号从0开始,依次编号,创建页表page*/printf("输入页表信息,创建页表(若页号为-1,则结束输入\n");printf("输入页号和辅存地址");scanf("%d%d",&lnumber,&dnumber);i=0;while(lnumber!=-1){page[i].lnumber=lnumber;page[i].flag=0;page[i].write=0;page[i].dnumber=dnumber;i++;printf("输入页号和辅存地址");scanf("%d%d",&lnumber,&dnumber);}page_length=i;printf("输入主存号,主存块数要小于%d,(以-1结束):",i);scanf("%d",&pnumber);m=0;head=0;while(pnumber!=-1){if(m<=i){page[m].pnumber=pnumber;page[m].flag=1;p[m]=m;m++;}scanf("%d",&pnumber);}printf("输入指令性质(1-修改,0-不需要,其他--结束程序运行)和逻辑地址:");scanf("%d%x",&write,&laddress);while(write==0||write==1){command(laddress,write);/**/printf("输入指令性质(1-修改,0-不需要,其他--结束程序运行)和逻辑地址:");scanf("%d%x",&write,&laddress);}}/*函数结束*/实验三设备管理一、实验目的了解设备管理的基本原理、设备的分配与回收过程二、实验内容1、复习设备管理的基本概念、基本原理、常用的数据结构、分配策略及算法2、编制一个独占设备的分配和回收模拟程序三、参考程序/*独占设备的分配和回收模拟*/#include"stdio.h"#include"string.h"#define false 0#define true 1#define n 4#define m 10struct{char type[10];/*设备类名*/int count ;/*拥有设备台数*/int remain;/*现存的可用设备台数*/int address;/*该类设备在设备表中的起始地址*/}equiptype[n];/*设备类表定义,假定系统有N个设备类型*/struct{int number;/*设备绝对号*/int status;/*设备好坏状态*/int remain;/*设备是否已分配*/char jobname[4];/*占有设备的作业名*/int lnumber;/*设备相对号*/}equipment[m];/*设备表定义,假定系统有M个设备*/allocate(char J[],char type[],int mm){int i,t;/*查询该类设备*/i=0;while(i<n&&strcmp(equiptype[i].type,type)!=0)i++;if(i>=n)/*没有找到该类设备*/{printf("无该类设备,设备分配失败");return(false);}if(equiptype[i].remain<1)/*所需设备现存可用台数不足*/{printf("该类设备不足,分配失败");return(false);}t=equiptype[i].address;/*取出该类设备在设备表中的起始地址*/while(!(equipment[t].status==1&&equipment[t].remain==0))t++;/*填写作业名、相对号,状态改为已分配*/equiptype[i].remain--;equipment[t].remain=1;strcpy(equipment[t].jobname,J);equipment[t].lnumber=mm;}/*设备分配函数结束*/reclain(char J[],char type[]){int i,t,j,k,nn;i=0;while(i<n&&strcmp(equiptype[i].type,type)!=0)i++;if(i>=n)/*没有找天该类设备*/{printf("无该类设备,设备回收失败");return(false);}t=equiptype[i].address;/*取出该类设备在设备表中的起始地址*/ j=equiptype[i].count;/*取出该类设备的数量*/k=0;nn=t+j;for(;t<nn;t++)if(strcmp(equipment[t].jobname,J)==0&&equipment[t].remain==1) {equipment[t].remain=0;k++;}equiptype[i].remain=equiptype[i].remain+k;if(k==0)printf("该作业没有使用该类设备\n");}/*设备收回函数结束*/main(){char J[4];int i,mm,a;char type[10];/*设备类表初始化:*/strcpy(equiptype[0].type,"input");/*输入机*/equiptype[0].count=2;equiptype[0].remain=2;equiptype[0].address=0;strcpy(equiptype[1].type,"printer");/*打印机*/equiptype[1].count=3;equiptype[1].remain=3;equiptype[1].address=2;strcpy(equiptype[2].type,"disk");/*磁盘机*/equiptype[2].count=4;equiptype[2].remain=4;equiptype[2].address=5;strcpy(equiptype[3].type,"tape");/*磁带机*/equiptype[3].count=1;equiptype[3].remain=1;equiptype[3].address=9;/*设备表初始化:*/for(i=0;i<10;i++){equipment[i].number=i;equipment[i].status=1; //343434equipment[i].remain=0;}while(1){printf("\n0-退出,1-分配,2-回收,3-显示");printf("\n选择功能项(0-3):");scanf("%d",&a);switch(a){case 0:/*程序结束*/return(false) ;case 1:/*a=1分配设备*/printf("输入作业名、作业所需设备类和设备相对号");scanf("%s%s%d",J,type,&mm);allocate(J,type,mm);/*分配设备*/break;case 2:/*a=2回收设备*/printf("输入作业名和作业归还的设备类");scanf("%s%s",J,type);reclain(J,type);/*回收设备*/break;case 3:/*a=3输出设备类表和设备表的内容*/printf("\n输出设备类表\n");printf(" 设备类型设备总量空闲好设备\n");for(i=0;i<n;i++)printf("%9s%8d%9d\n",equiptype[i].type,equiptype[i].count,equiptype[i].remain); printf("输出设备表:\n");printf("绝对号好/坏已/未分配占用作业名相对号\n");for(i=9;i<m;i++)printf("%3d%8d%9d%12s%8d\n",equipment[i].number,equipment[i].status,equipment[i].remain,equipment[i].jobname,equipment[i].lnumber);}}}。
操作系统实验指导书
操作系统实验指导书
计算机科学与技术教研室操作系统课题组 2007. 09
前 言
《操作系统》实验指导书是为高等院校计算机及相关专业“操作系 统原理”课程而编写的实验辅助教材。目的是通过一系列使用Windows 2000、Linux内核的动手实验练习,把操作系统的概念和理论知识融入 到实践当中,从而加深对现代操作系统的认识和理解。 本书中的实验练习覆盖了操作系统原理的各个方面,内容涉及操作 系统安装和环境、进程描述与控制、调度、存储管理、输入/输出管 理、文件系统、操作系统安全等。每个实验包含2~3个实验练习,全书 共18个实验练习。每个实验练习中部包含背景知识介绍、所需的工具及 准备工作和实验指导等,实验练习的难易程度不同,以帮助读者加深对 教材中概念的理解。另外,可根据具体实验学时选作部分实验。
存储,填入表1-2中。 表1-2 实验记录 类型
名称
描述
服务和应用程序,填入表1-3中。 表1-3 实验记录 名称 类型 描述
(2)事件查看器 事件查看器不但可以记录各种应用程序错误、损坏的文件、丢失的 数据以及其他问题,而且还可以把系统和网络的问题作为事件记录下 来。管理员通过查看在事件查看器中显示的系统信息,可以迅速诊断和 纠正可能发生的错误和问题。 步骤1:在“管理工具”窗口中,双击“事件查看器”图标。 在windows 2000事件查看器中,管理员可以查看到三种类型的本地 事件日志,请填入表1-4中。 表1-4 实验记录 名称 类型 描述 当前大小
操作系统原理实验指导书
目录实验一系统功能调用 (1)实验二熟悉Linux环境 (6)实验三 shell脚本 (14)实验四进程控制 (18)实验五进程间通信 (22)(一) 信号量机制实验 (22)实验五进程间通信 (28)(二) 进程的管道通信实验 (28)实验五进程间通信 (32)(三) 消息的发送与接收实验 (32)实验五进程间通信 (37)(四) 共享存储区通信 (37)实验六死锁避免的算法 (43)实验七存储管理 (45)1. 常用页面置换算法 (45)2.动态分区分配算法 (54)实验八文件操作 (55)实验一系统功能调用【实验目的】1.熟悉操作系统的系统功能调用。
2.掌握用C语言实现系统功能调用的方法和步骤。
3.掌握利用10H号功能调用(BIOS的显示I/O功能调用)来实现对屏幕的操作与控制。
【预习内容】1.预习DOS、BIOS系统功能调用。
2.预习C语言实现系统功能调用的方法。
【实验内容】1.在屏幕的指定区域内显示字符串。
(必做题)2.在屏幕的指定区域内画框,在框内显示字符串。
(提高题)3. 在屏幕的指定区域内动画显示字符串。
(附加题)【实验报告】1.列出调试通过程序的清单,并加注释。
2.给出必要的程序设计思路和方法(或列出流程图)。
3.总结上机调试过程中所遇到的问题和解决方法及感想。
【实验相关资料】int86(0X10, &r, &r)函数:对BIOS调用的标准函数其中0X10是BIOS调用类型号(相当于INT n调用的中断类型号n),是10H号中断调用,是一个显示I/O调用。
BIOS借助此中断产生的功能调用控制PC机屏幕上的文本和图形。
通过给AH 寄存器设置适当的值选择想要的功能调用,然后发中断10H。
第一个&r是指向联合类型REGS的指针,用于接收调用的功能号及其它一些指定的入口参数,以便传给相应寄存器。
第二个&r是指向联合类型REGS的指针,用于接收功能调用后的返回值,即出口参数。
操作系统试验指导书
操作系统实验指导书实验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(),分别进行初始化和产生随机数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验指导书操作系统课程组编内蒙古工业大学信息工程学院计算机系二〇〇九十月目录《操作系统》实验教学大纲 (1)实验一进程管理 (1)实验二SPOOLing技术实现 (12)《操作系统》实验教学大纲一、基本信息二、实验安排三、实验目的、内容与要求实验一进程管理(一)实验目的1.加深对进程概念的理解,明确进程和程序的区别;2.进一步认识并发执行的实质;3.分析进程争用资源的现象,学习解决进程互斥的方法;4.了解Linux系统中进程通信的基本原理。
(二)实验内容1.进程的创建;2.进程的控制;3.进程的软中断通信;4.进程的管道通信。
(三)实验要求1.掌握Linux系统中进程的创建、控制和通信的实现;2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;3.写出预习报告和实验报告。
实验二SPOOLing技术实现(一)实验目的1.加深对SPOOLing系统的理解;2.进一步认识SPOOLing技术的实质;3.分析、设计SPOOLing系统的实现方法;4.了解Linux系统中SPOOLing的基本原理。
(二)实验内容设计并运行一个简单的SPOOLing系统来模拟实际的SPOOLing输入/输出过程,以掌握这种以空间换时间的技术。
要求将SPOOLing输入/输出处理程序编成一个独立的进程模块并与其他请求输入/输出的进程并发运行。
SPOOLing进程负责把从输入设备输入的信息送到外存输入井中,或把外存输出井中的信息送到打印机等输出设备上输出。
其余进程只要求编写输入/输出部分的程序。
要求定义实施算法的相关数据结构,实现设备分配和SPOOLing 算法。
(三)实验要求1.掌握SPOOLing技术的实现;2.根据实验内容,在Linux平台上用C语言编程实现,上机调试运行得出实验结果;3.写出预习报告和实验报告。
四、考核方式实验成绩占课程总成绩的比重为10%。
考核方式根据实验课考勤、课前预习情况、课上实验能力、原型系统效果验收与实验报告的完成情况综合评分。
每个实验考核:实验预习占30%,实验能力和效果占30%,实验报告占40%。
五、建议教材与教学参考书1.课程教材[1] 张尧学. 计算机操作系统教程. 第三版. 北京:清华大学出版社. 2006[2] 赵俊生.操作系统实验指导书.自编.20082.教学参考书[1] 汤小丹.计算机操作系统.第三版.西安: 西安电子科技大学出版社.2008[2] 徐虹. 操作系统实验指导. 北京: 清华大学出版社.2004[3] 屠祁. 操作系统基础.第三版.北京: 清华大学出版社.2000[4] 冯耀霖. 操作系统. 西安: 西安电子科技大学出版社.2001[5] 左万历.计算机操作系统教程.第二版.北京:高等教育出版社.2004六、编制说明编制者:系统软件课程组组长:寿永熙执笔人:赵俊生编制时间:2009年3月实验一进程管理一、实验目的1.学会在Linux中利用系统调用fork()创建进程。
2.加深对进程概念的理解,明确进程和程序的区别。
3.进一步认识在系统内进程并发执行的实质。
4.分析进程竞争资源的现象,学习解决进程互斥的方法。
5.掌握Linux中进程通信的基本原理。
二、实验类型验证性实验。
三、实验预备知识1.阅读Linux的sched.h源码文件,加深对进程管理概念的理解。
2.阅读Linux的fork.c源码文件,分析进程的创建过程。
四、实验内容1.进程的创建【任务】编写一段程序,使用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。
试观察记录屏幕上的显示结果,并分析原因。
【程序】#include <stdio.h>main(){int p1,p2;while((p1=fork())= =-1); /*创建子进程p1,失败时循环*/if(p1= =0) /*子进程p1创建成功*/putchar(…b‟);else /*父进程返回*/{while((p2=fork())= =-1); /*创建另一个子进程p2,失败时循环*/if(p2= =0) /*子进程p2创建成功*/putchar(…c‟);elseputchar(…a‟); /*父进程执行*/}}【执行结果】同学自己得到实验结果。
【分析原因】同学自己分析多次执行产生不同实验结果的原因。
2.进程的控制【任务】修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。
如果在程序中使用系统调用lockf()来给每个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
【程序1】#include <stdio.h>main(){int p1,p2,i;while((p1=fork())= =-1);if(p1= =0)for(i=0;i<50;i++)printf(“child %d\n”,i);else{while((p2=fork())= =-1)if(p2= =0)for(i=0;i<50;i++)elsefor(i=0;i<50;i++)printf(“daughter %d\n”,i);}}【执行结果】同学自己得到实验结果。
【分析原因】同学自己分析多次执行产生不同实验结果的原因。
【程序2】#include <stdio.h>#include <unistd.h>main(){int p1,p2,i;while((p1=fork())= =-1);if(p1= =0){lockf(1,1,0); /*加锁*/for(i=0;i<50;i++)printf(“child %d\n”,i);lockf(1,0,0); /*解锁*/}else{while((p2=fork())= =-1)if(p2= =0){lockf(1,1,0);for(i=0;i<50;i++)lockf(1,0,0);}else{lockf(1,1,0);for(i=0;i<50;i++)printf(“daughter %d\n”,i);lockf(1,0,0);}}}【执行结果】同学自己得到实验结果。
【分析原因】同学自己分析多次执行产生不同实验结果的原因。
3.软中断通信【任务1】编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:child process 1 is killed by parent!child process 2 is killed by parent!父进程等待两个子进程终止后,输出以下信息后终止:parent process is killed!【程序】#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <signal.h>void waiting(),stop();int wait_mark;main(){int p1,p2;while((p1=fork())= =-1); /*创建进程p1*/if(p1>0){while((p2=fork())= =-1); /*创建进程p2*/if(p2>0){Printf(“parent run!\n”);Printf(“p1=%d\n”,p1);Printf(“p2=%d\n”,p2);wait_mark=1;getchar();kill(p1,16); /*向p1发软中断信号16*/kill(p1,17); /*向p2发软中断信号17*/sleep(5); /*父进程睡眠5秒*/wait(0); /*等待子进程结束,同步*/wait(0); /*等待另一子进程结束,同步*/lockf(stdout,1,0); /*标准输出加锁*/printf(“parent process is killed!\n”);lockf(stdout,0,0); /*标准输出解锁*/exit(0); /*父进程终止*/}else{printf(“p2 run!\n”);wait_mark=1;signal(17,stop); /*接收父进程发来的软中断信号17,并转stop*/ waiting();lockf(stdout,1,0); /*标准输出加锁*/printf(“child process 2 is killed by parent!\n”);lockf(stdout,0,0); /*标准输出解锁*/exit(0); /*子进程p2终止*/}}else{printf(“p1 run!\n”);wait_mark=1;signal(16,stop); /*接收父进程发来的软中断信号16,并转stop*/ waiting();lockf(stdout,1,0); /*标准输出加锁*/printf(“child process 1 is killed by parent!\n”);lockf(stdout,0,0); /*标准输出解锁*/exit(0); /*子进程p1终止*/}}void waiting(){printf(“waiting begin!\n”);while(wait_mark!=0);printf(“waiting end!\n”);}void stop(){wait_mark=0;printf(“signal stop!”);}【执行结果】同学自己得到实验结果。
【分析原因】同学自己分析产生该实验结果的原因。
【任务2】在上面任务1中,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),观察执行结果,并分析原因。
这里signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG_IGN)分别为忽略“Ctrl+c”键信号以及忽略中断信号。
【程序】#include <sys/types.h>#include <unistd.h>#include <stdio.h>#include <signal.h>int pid1,pid2;int endflag=0,pf1=0,pf2=0;void intdelete(){kill(pid1,16);kill(pid2,17);endflag=1;}void int1(){printf(“child process 1 is killed by parent!”);exit(0);}void int2(){printf(“child process 2 is killed by parent!”);exit(0);}main(){int exitpid;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while((pid1=fork())= =-1);if(pid1= =0){printf(“process 1 run!\n”);signal(SIGUSR1,int1);signal(16, SIG_IGN);pause();exit(0);}else{while((pid2=fork())= =-1);if(pid2= =0){printf(“process 2 run!\n”);signal(SIGUSR2,int2);signal(17, SIG_IGN);pause();exit(0);}else{printf(“parent run!\n”);signal(SIGINT,intdelete);waitpid(-1,&exitpid,0);printf(“parent process is killed!\n”);exit(0);}}}【执行结果】同学自己得到实验结果。