操作系统实验_实验1

合集下载

操作系统安全实验1实验报告

操作系统安全实验1实验报告

操作系统安全实验1实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验设备为个人计算机。

三、实验内容与步骤(一)Windows 10 操作系统安全配置1、账户管理创建新用户账户,并设置不同的权限级别,如管理员、标准用户等。

更改账户密码策略,包括密码长度、复杂性要求、密码有效期等。

启用账户锁定策略,设置锁定阈值和锁定时间,以防止暴力破解密码。

2、防火墙配置打开 Windows 防火墙,并设置入站和出站规则。

允许或阻止特定的应用程序通过防火墙进行网络通信。

3、系统更新与补丁管理检查系统更新,安装最新的 Windows 安全补丁和功能更新。

配置自动更新选项,确保系统能够及时获取并安装更新。

4、恶意软件防护安装并启用 Windows Defender 防病毒软件。

进行全盘扫描,检测和清除可能存在的恶意软件。

(二)Linux(Ubuntu 2004)操作系统安全配置1、用户和组管理创建新用户和组,并设置相应的权限和归属。

修改用户密码策略,如密码强度要求等。

2、文件系统权限管理了解文件和目录的权限设置,如读、写、执行权限。

设置特定文件和目录的权限,限制普通用户的访问。

3、 SSH 服务安全配置安装和配置 SSH 服务。

更改 SSH 服务的默认端口号,增强安全性。

禁止 root 用户通过 SSH 登录。

4、防火墙配置(UFW)启用 UFW 防火墙。

添加允许或拒绝的规则,控制网络访问。

四、实验结果与分析(一)Windows 10 操作系统1、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。

严格的密码策略有效地增加了密码的安全性,减少了被破解的风险。

账户锁定策略在一定程度上能够阻止暴力破解攻击。

实验01 Windows的基本操作

实验01 Windows的基本操作

姓名:XXX班级:0000000学号:00 成绩:课程名称:计算机应用基础指导教师胡浩民实验日期:2014-09-18实验名称01:Windows的基本操作一、实验目的:1. 掌握桌面主题的设置、快捷方式的创建、开始菜单的组织。

2. 掌握任务栏的使用和设置、任务切换方法。

3. 掌握文件夹和文件的创建、属性查看和设置。

4. 掌握文件夹和文件的复制、移动和删除与恢复,文件和文件夹的搜索。

5. 掌握多任务间的数据传递——剪贴板的使用。

二、实验环境:中文Windows 7操作系统。

三、实验内容:1.按以下要求,进行桌面个性化设置(1)选用“人物”主题中的全部图片,设置以10秒间隔更换图片,并以“卡通人物”主题名保存在我的主题中。

(2)除“回收站”外,再显示“计算机”、“用户的文件”和“网络”三个桌面图标;(3)在桌面上创建系统应用程序“mspaint.exe”的桌面快捷方式,并将其改名为“画笔”;(4)在桌面快捷菜单中,分别设置桌面图标用大、中、小图标显示,观察其效果;(5)设置屏幕保护程序为华文楷书、中号、紫红色、中速滚动的三维文字“今天我做对了什么事?”,设置屏幕保护等待时间为10分钟;(6)设置屏幕分辨率为1024×768;在桌面的右上角添加日历和时钟小工具,并按日历在上、时钟在下稍加重叠安放;2.按下列要求练习对“开始”菜单的操作(1)用Word分别打开配套光盘“实验素材\实验4”中test1.docx\test2.docx、test3.docx 三个文档后立即关闭,显示Word的跳转列表,然后将文档test1列表项锁定,最后将test1列表项解除锁定;(2)将“桌面小工具库”添加到“开始”菜单的程序列表中,然后将“桌面小工具库”锁定在程序列表上方,最后将其解除锁定;(3)利用搜索框,分别查找包含有汉字“计算机的”和“mspaint.exe”文本,观察其结果;3.按以下要求,进行任务栏设置和操作,体验任务栏的功能(1)分别打开两个文件夹、三个Word文档、一个Excel文档和一个画图文件,观察任务栏按钮区任务按钮的形态,并观察窗口的预览效果;(2)维持上述多文档打开状态下,分别设置任务栏“始终合并、隐藏标签”、“当前任务栏被占满时合并”和“从不合并”显示方式;观察任务栏按钮区任务按钮的显示变化;(3)显示Word任务按钮的跳转列表,并将Word程序项锁定在任务栏;4.创建文件夹和文件在C:\下创建如右图所示的文件夹结构:5.设置文件夹的查看形式、排序方式和预览窗格(1)先后选用不同的查看方式显示“实验素材\实验5”文件夹的内容,观察查看方式的差别;(2)选择文件夹“实验素材\实验5”,通过设置显示或不显示隐藏的文件和文件夹,比较两者不同的显示效果;(3)任选文件夹,分别选用“名称”、“修改日期”、“类型”、“大小”排序方式显示文件和文件夹,了解不同的排序效果;(4)启用文件预览窗格,任意选择文件夹或文件对象,观测预览窗格的预览效果;6.文件和文件夹的复制、移动和更名(1)利用菜单操作,将文件C:\aa1\test.txt 复制到C:\aa1\bb1中;(2)利用鼠标操作,将文件C:\aa1\test.txt 复制到C:\aa2\bb2中;(3)利用剪贴板操作,将文件C:\aa1\test.txt 复制到C:\aa2中;姓名:XXX 班级:0000000 学号:00 成绩:课程名称:计算机应用基础 指导教师 胡浩民 实验日期:2014-09-18(4)将文件C :\aa2的子文件夹bb2移动到C :\aa1\bb1中;(5)将C :\aa2文件夹复制到C :\aa1文件夹中;(6)将C :\aa2文件夹更名为abc ,将C :\aa1\bb1文件夹下的test.txt 文本文件名改为sch001.ini ;7. 文件和文件夹的删除与恢复;(1)删除文件C :\aa2\test.txt 到“回收站”; 删除文件C :\aa2文件夹;(2)从“回收站”恢复C :\aa2文件夹; 永久性删除文件C :\aa1\bb1\bb2文件夹;8. 查看和设置文件和文件夹的属性(1)查看C :\Windows 包含的文件和文件夹数量;(2)将C 盘下的abc 文件夹的属性设置为只读和隐藏;9. 文件和文件夹的搜索,设置磁盘卷标(1)搜索C 盘下的文件名以“会议”开始的所有Word 文件(扩展名为doc);在“图片库”搜索所有bmp 格式的图片文件;(2)将C 盘的卷标设置为“主磁盘”;10. 通过剪贴板,完成下列任务(1)将当前整个屏幕画面保存到U 盘,存为JPEG 格式图像文件“屏幕.jpg ”;(2)将Windows 7的“帮助和支持”主窗口图像复制到新Word 文档中;11. 将C :\aa1、abc 文件夹复制到D 盘中自己的文件夹(即学号姓名命名的文件夹),将此文件夹压缩为“学号姓名.rar ”文件,存放在D 盘下,然后把压缩文件上传(作业递交)。

操作系统实验报告

操作系统实验报告

篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。

通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。

三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。

:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。

接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。

这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。

这一指令是visual studio c++ 编译器特有的。

接下来是winmain() 方法。

其中有四个由实际的低级入口点传递来的参数。

操作系统实验一(杨婷婷)

操作系统实验一(杨婷婷)

实验一熟悉Windows2000/XP中的进程和线程一、实验目的1、熟悉Windows2000/XP中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。

二、实验理论基础及教材对应关系1、实验理论基础:(1)操作系统中的进程和线程的概念;(2)进程PCB的各项指标含意;2、本实验内容主要对应于教材第2章。

三、实验内容与步骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。

如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。

再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,原因是。

4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。

5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:表二:统计线程的各项信息进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异是。

四、实验材料的提交与成绩评定lsass.exe 系统进程,用于微软Windows系统的安全机制。

services.exe 微软Windows操作系统的一部分。

用于管理启动和停止服务。

winlogon.exe Windows 用户登陆程序,管理用户登录和退出。

《操作系统》课程实验内容和实验要求

《操作系统》课程实验内容和实验要求

实验内容和实验要求实验1:安装Linux系统(4学时)目的:1.学会在操作系统安装之前,根据硬件配置情况,制订安装计划。

2.学会在安装多操作系统前,利用硬盘分区工具(如PQMagic)为Linux准备分区。

3.学会Linux操作系统的安装步骤和简单配置方法。

4.学会Linux系统的启动、关闭步骤,初步熟悉Linux系统的用户界面。

内容:1.安装并使用硬盘分区工具(如PQMagic),为Linux准备好分区。

2.安装Linux系统(如红旗Linux桌面版)。

3.配置Linux系统运行环境。

4.正确地启动、关闭系统。

5.对图形界面进行一般操作。

要求:1.制订安装计划。

2.如果在机器上已安装了Windows系统,而且没有给Linux预备硬盘分区,则安装硬盘分区工具(如PQMagic),运行它,为Linux划分出一块“未分配”分区。

3.在光驱中放入Linux系统安装盘,启动系统。

按照屏幕提示,选择/输入相关参数,启动安装过程。

4.安装成功后,退出系统,取出安装盘。

重新开机,登录Linux系统。

5.对Linux系统进行配置,如显示设备、打印机等。

6.利用鼠标对图形界面进行操作。

说明:1.本实验应在教师的授权和指导下进行,不可擅自操作,否则可能造成原有系统被破坏。

2.如条件不允许每个学生亲自安装,可采用分组进行安装或课堂演示安装的方式。

实验2:Linux 应用及shell编程(4学时)目的:1.掌握Linux一般命令格式和常用命令。

2.学会使用vi编辑器建立、编辑文本文件。

3.了解shell的作用和主要分类。

4.学会bash脚本的建立和执行方式。

5.理解bash的基本语法。

6.学会编写简单的shell脚本。

内容:1.正确地登录和退出系统。

2.熟悉使用date,cal等常用命令。

3.进入和退出vi。

利用文本插入方式建立一个文件。

4.学会用gcc编译器编译C程序。

5.建立shell脚本并执行它。

6.学会使用shell变量和位置参数、环境变量。

操作系统实验_实验1课案

操作系统实验_实验1课案

广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2015年11月11日实验课操作系统成绩程名称实验项进程管理与进程通信指导老师陈康民目名称(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)进程管理(一)进程的创建实验一、实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质二、实验内容1、编写一段程序,使用系统调用fork( )创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

三、实验步骤1、编写一段程序,使用系统调用fork( )创建两个子进程。

代码:#include <stdio.h>main( ){int p1,p2;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0) putchar('b');else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0) putchar('c');else putchar('a');}}运行结果:bca,bac, abc ,……都有可能。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

代码:#include <stdio.h>main( ){int p1,p2,i;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0)for(i=0;i<10;i++)printf("daughter %d\n",i);else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0)for(i=0;i<10;i++)printf("son %d\n",i);elsefor(i=0;i<10;i++)printf("parent %d\n",i);}}结果:parent…son…daughter..daughter..或parent…son…parent…daughter…等四、分析原因除strace 外,也可用ltrace -f -i -S ./executable-file-name查看以上程序执行过程。

Linux操作系统-实验1-环境搭建-指导书-PPT版本-V1

Linux操作系统-实验1-环境搭建-指导书-PPT版本-V1

Linux操作系统第一章:Linux简介与系统安装实验一:实验环境搭建一台宿主机(Windows系统)加两台虚拟机(Desktop+Server)要求:(1)掌握VMware虚拟机的安装(2)利用VMware虚拟机安装Ubuntu Linux18.04桌面版操作系统(3)利用VMware虚拟机安装Ubuntu Linux18.04服务器版操作系统(4)从宿主机登录桌面环境和服务器环境(SSH登录)(5)练习涉及到的基本命令,如apt-get、ifconfig、ssh等(6)练习vim编辑文件基本操作等Tips:(1)绘制网络拓扑图(2)把遇到的问题和如何解决记录下来。

实验环境设置☐宿主机(Windows)•网络配置VMware Network Adapter(VMnet8)☐客户机•Ubuntu-Server(ubuntu-18.04.6-live-server-amd64)•Ubuntu-Desktop(ubuntu-18.04.6-desktop-amd64)虚拟机安装安装时网络类型选择NAT方式安装完成后的两台Ubuntu虚拟机宿主机:Windows记录宿主机IP地址客户机1:Ubuntu-Server命令行模式记录IP:192.168.126.130客户机2:Ubuntu-Desktop图形化操作方法记录IP:192.168.126.131NAT模式宿主机:Windows192.168.126.1192.168.126.130192.168.126.131客户机1:Ubuntu-Server客户机2:Ubuntu-DesktopSSH服务1.安装SSH服务2.启动SSH服务3.配置SSH服务(可选)4.验证SSH服务Desktop版客户机安装SSH服务Desktop版客户机安装SSH服务:sudo apt-get install openssh-serverDesktop版客户机启动SSH服务: sudo systemctl start sshDesktop版客户机启动SSH服务: sudo systemctl start sshDesktop版客户机端修改SSH配置文件:端口22修改为1022 vi /etc/ssh/sshd_configSSH验证-从宿主机连接Desktop客户机2: ********************.126.131SSH验证-从宿主机连接Server版客户机1: ***********************.126.130Desktop版客户机查看SSH状态:记录监听端口和连接情况Server版客户端1查看SSH状态Desktop版客户机安装 net-tools:sudo apt-get install net-toolsDesktop版客户机查看IP地址: ifconfigDesktop版客户机查看网络连接情况:Netstat -aServer版客户机查看网络连接情况:Netstat -a。

哈工大《操作系统》实验1

哈工大《操作系统》实验1

(5)重新编写一个setup.s,然后将其中的显示的信息改为:“Now we are in SETUP”。

再次编译,重新用make命令生成BootImage,结合提示信息和makefile文修改build.c,具体将setup.s改动如下:mov cx,#27mov bx,#0x0007 ! page 0, attribute 7 (normal)mov bp,#msg1mov ax,#0x1301 ! write string, move cursorint 0x10dieLoop:j dieLoopmsg1:.byte 13,10,13,10.ascii "Now we are in SETUP".byte 13,10,13,10将build.c改动如下:if(strcmp("none",argv[3]) == 0)//添加判断return 0;if ((id=open(argv[3],O_RDONLY,0))<0)die("Unable to open 'system'");// if (read(id,buf,GCC_HEADER) != GCC_HEADER)// die("Unable to read header of 'system'");// if (((long *) buf)[5] != 0)// die("Non-GCC header of 'system'");for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c )if (write(1,buf,c)!=c)die("Write call failed");close(id);fprintf(stderr,"System is %d bytes.\n",i);if (i > SYS_SIZE*16)die("System is too big");return(0);(6)验证:用make是否能成功生成BootImage,运行run命令验证运行结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2015年11月11日进程管理(一)进程的创建实验一、实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质二、实验内容1、编写一段程序,使用系统调用fork( )创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

三、实验步骤1、编写一段程序,使用系统调用fork( )创建两个子进程。

代码:#include <stdio.h>main( ){int p1,p2;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0) putchar('b');else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0) putchar('c');else putchar('a');}}运行结果:bca,bac, abc ,……都有可能。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。

代码:#include <stdio.h>main( ){int p1,p2,i;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0)for(i=0;i<10;i++)printf("daughter %d\n",i);else{while((p2=fork( ))= = -1); /*创建子进程p2*/if(p2= =0)for(i=0;i<10;i++)printf("son %d\n",i);elsefor(i=0;i<10;i++)printf("parent %d\n",i);}}结果:parent…son…daughter..daughter..或parent…son…parent…daughter…等四、分析原因除strace 外,也可用ltrace -f -i -S ./executable-file-name查看以上程序执行过程。

1、从进程并发执行来看,各种情况都有可能。

上面的三个进程没有同步措施,所以父进程与子进程的输出内容会叠加在一起。

输出次序带有随机性。

2、由于函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。

但由于进程并发执行的调度顺序和父子进程抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。

这与打印单字符的结果相同。

五、思考题(1)系统是怎样创建进程的?linux 系统创建进程都是用fork() 系统调用创建子进程。

Init程序以/etc/inittab为脚本文件来创建系统的新进程的。

新进程还克以创建新进程。

创建新进程是通过克隆老进程或当前进程来创建的。

新进程的创建实用系统调用sys_fork()或sys_clone(),并且在内核模式下完成。

在系统调用结束时,系统从物理内存中分配一个心的task_struct()数据结构和进程堆栈,同时获得一个唯一的标示此进程的标识符。

通过FORK函数调用促使内核创建一个新的进程,该进程是调用进程的一个精确的副本。

新创建的进程为子进程,调用的FORK进程为父进程,而且创建出来的是两个副本,即,两个进程,但他们互不干扰。

(2)当首次调用新创建进程时,其入口在哪里?首次创建进程时,入口在进程1那里。

(二)进程的控制实验一、实验目的1、掌握进程另外的创建方法2、熟悉进程的睡眠、同步、撤消等进程控制方法二、实验内容1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容2、利用wait( )来控制进程执行顺序三、参考程序#include<stdio.h>#include<unistd.h>main( ){int pid;pid=fork( ); /*创建子进程*/switch(pid){case -1: /*创建失败*/printf("fork fail!\n");exit(1);case 0: /*子进程*/execl("/bin/ls","ls","-1","-color",NULL);printf("exec fail!\n");exit(1);default: /*父进程*/wait(NULL); /*同步*/printf("ls completed !\n");exit(0);}}四、运行结果五、思考(1)可执行文件加载时进行了哪些处理?解:可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。

(2)什么是进程同步?wait( )是如何实现进程同步的?解:进程同步是指对多个相关进程在执行次序上进行协调,以使并发执行的主进程之间有效地共享资源和相互合作,从而使程序的执行具有可在现行。

首先程序在调用fork()机那里了一个子进程后,马上调用wait(),使父进程在子进程调用之前一直处于睡眠状态,这样就使子进程先运行,子进程运行exec()装入命令后,然后调用wait(0),使子进程和父进程并发执行,实现进程同步。

(三)进程互斥实验实验目的1、进一步认识并发执行的实质2、分析进程竞争资源的现象,学习解决进程互斥的方法实验内容1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥2、观察并分析出现的现象#include <stdio.h>#include <unistd.h>main(){int p1,p2,i;while((p1=fork( ))= = -1); /*创建子进程p1*/if (p1= =0){lockf(1,1,0); /*加锁,这里第一个参数为stdout(标准输出设备的描述符)*/for(i=0;i<10;i++)printf("daughter %d\n",i);lockf(1,0,0); /*解锁*/}else{while((p2=fork( ))= =-1); /*创建子进程p2*/if (p2= =0){lockf(1,1,0); /*加锁*/for(i=0;i<10;i++)printf("son %d\n",i);lockf(1,0,0); /*解锁*/}else{lockf(1,1,0); /*加锁*/for(i=0;i<10;i++)printf(" parent %d\n",i);lockf(1,0,0); /*解锁*/}}}运行结果parent…son…daughter..daughter..或parent…son…parent…daughter…大致与未上锁的输出结果相同,也是随着执行时间不同,输出结果的顺序有所不同。

四、分析原因上述程序执行时,不同进程之间不存在共享临界资源(其中打印机的互斥性已由操作系统保证)问题,所以加锁与不加锁效果相同。

(四)守护进程实验写一个使用守护进程(daemon)的程序,来实现:1, 创建一个日志文件/var/log/Mydaemon.log2,每分钟都向其中写入一个时间戳(使用time_t的格式)注意:要root权限才能在/var/log创建文件。

守护神程序:#include<stdio.h>#include<time.h>#include<unistd.h>main(){time_t t; //建立time_t格式变量FILE *fp; //建立文件fp=fopen("/var/log/Mydaemon.log","a");//打开文件pid_t pid; //守护神pid=fork();if(pid>0){printf("Daemon on duty!\n");exit(0);}else if(pid<0){printf("Can't fork!\n");exit(-1);}while(1){if(fp>=0){sleep(60); //等待一分钟再往文件中写入时间戳printf("Daemon on duty!\n");t=time(0);fprintf(fp,"The current time is %s\n",asctime(localtime(&t)));}}fclose(fp);//关闭文件}运行结果进程通信(一) 信号机制实验实验目的1、了解什么是信号2、熟悉LINUX系统中进程之间软中断通信的基本原理实验内容1、编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process1 is killed by parent!Child process2 is killed by parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed!2、分析利用软中断通信实现进程同步的机理参考程序#include <stdio.h>#include <signal.h>#include <unistd.h>void waiting( ),stop( );int wait_mark;main( ){int p1,p2,stdout;while((p1=fork( ))= =-1); /*创建子进程p1*/if (p1>0){while((p2=fork( ))= =-1); /*创建子进程p2*/if(p2>0){wait_mark=1;signal(SIGINT,stop); /*接收到^c信号,转stop*/waiting( );kill(p1,16); /*向p1发软中断信号16*/kill(p2,17); /*向p2发软中断信号17*/wait(0); /*同步*/wait(0);printf("Parent process is killed!\n");exit(0);}else{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);}}else{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);}}void waiting( ){while(wait_mark!=0);}void stop( ){wait_mark=0;}运行结果屏幕上无反应,按下^C后,显示Parent process is killed!分析原因上述程序中,signal( )都放在一段程序的前面部位,而不是在其他接收信号处。

相关文档
最新文档