操作系统实验报告 实验2 进程管理(答案全)

1. 实验目的

通过本实验,了解Linux系统的父子进程关系。理解操作系统对进程管理采用的数据结构PCB

2. 实验要求

使用fork函数编写代码实现Linux 系统进程创建
Linux 系统常用进程管理命令的使用(操作系统观察级)

3. 实验步骤

实验2.1 父子进程

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

[cpp] view plain copy (这里不是命令)
1.	/* //不要直接复制这里的代码,自己写
2.	 *  fork_test.c 
3.	 *  version 1 
4.	 *  Created on: 2010-5-29 
5.	 *      Author: wangth 
6.	 */  
7.	#include <unistd.h>  
8.	#include <stdio.h>   
9.	int main ()   
10.	{   
11.	    pid_t fpid; //fpid表示fork函数返回的值  
12.	    int count=0;  
13.	    fpid=fork();   
14.	    if (fpid < 0)   
15.	        printf("error in fork!");   
16.	    else if (fpid == 0) {  
17.	        printf("i am the child process, my process id is %d/n",getpid());   
18.	        printf("我是爹的儿子/n");//对某些人来说中文看着更直白。  
19.	        count++;  
20.	    }  
21.	    else {  
22.	        printf("i am the parent process, my process id is %d/n",getpid());   
23.	        printf("我是孩子他爹/n");  
24.	        count++;  
25.	    }  
26.	    printf("统计结果是: %d/n",count);  
27.	    return 0;  
28.	}  

(4)实验结果与分析
在这里插入图片描述
fork执行完毕后,出现两个进程,
在这里插入图片描述
有人说两个进程的内容完全一样啊,怎么打印的结果不一样啊,那是因为判断条件的原因,上面列举的只是进程的代码和指令,还有变量啊。执行完fork后,进程1的变量为count=0,fpid!=0(父进程)。进程2的变量为count=0,fpid=0(子进程),这两个进程的变量都是独立的,存在不同的地址中,不是共用的,这点要注意。可以说,我们就是通过fpid来识别和操作父子进程的。 还有人可能疑惑为什么不是从#include处开始复制代码的,这是因为fork是把进程当前的情况拷贝一份,执行fork时,进程已经执行完了int count=0;fork只拷贝下一个要执行的代码到新的进程。

实验2.2 观察进程状态

实验步骤: ps命令
输入下面的ps命令,显示所有运行中的进程:

# ps aux | less

在这里插入图片描述
其中,
-A:显示所有进程
a:显示终端中包括其它用户的所有进程
x:显示无控制终端的进程

任务:查看系统中的每个进程。

# ps -A

在这里插入图片描述
在这里插入图片描述

任务:查看非root运行的进程
在这里插入图片描述

任务:查看用户vivek运行的进程
在这里插入图片描述
任务:top命令
top命令提供了运行中系统的动态实时视图。在命令提示行中输入top:

#top

在这里插入图片描述
按q退出,按h进入帮助。

任务:显示进程的树状图。
pstree以树状显示正在运行的进程。树的根节点为pid或init。如果指定了用户名,进程树将以用户所拥有的进程作为根节点。

$ pstree

在这里插入图片描述
任务:使用ps列印进程树

# ps -ejH

在这里插入图片描述

# ps axjf

在这里插入图片描述

任务:获得线程信息
输入下列命令:

# ps -eLf

在这里插入图片描述

# ps axms

在这里插入图片描述
任务:获得安全信息
输入下列命令:

# ps -eo euser,ruser,suser,fuser,f,comm,label

在这里插入图片描述

# ps axZ

在这里插入图片描述

# ps -eM

在这里插入图片描述
任务:将进程快照储存到文件中
输入下列命令:

# top -b -n1 > /tmp/process.log

在这里插入图片描述
你也可以将结果通过邮件发给自己:

# top -b -n1 | mail -s 'Process snapshot' you@example.com

在这里插入图片描述
任务:查找进程
使用pgrep命令。pgrep能查找当前正在运行的进程并列出符合条件的进程ID。例如显示firefox的进程ID:

$ pgrep firefox
p

在这里插入图片描述
下面命令将显示进程名为sshd、所有者为root的进程。

$ pgrep -u root sshd

在这里插入图片描述
向htop和atop说hello
htop是一个类似top的交互式进程查看工具,但是可以垂直和水平滚动来查看所有进程和他们的命令行。进程的相关操作(killing,renicing)不需要输入PID。要安装htop输入命令:

# apt-get install htop

在这里插入图片描述

# yum install htop

在命令提示行中输入htop:

# htop

在这里插入图片描述
atop工具
atop是一个用来查看Linux系统负载的交互式监控工具。它能展现系统层级的关键硬件资源(从性能角度)的使用情况,如CPU、内存、硬盘和网络。
它也可以根据进程层级的CPU和内存负载显示哪个进程造成了特定的负载;如果已经安装内核补丁可以显示每个进程的硬盘和网络负载。输入下面的命令启动atop:

# atop

在这里插入图片描述


链接: 操作系统实验报告 实验1 VMware虚拟机配置与linux基本命令(答案全).
链接: 操作系统实验报告 实验3存储管理实验(答案全).
链接: 操作系统实验报告 实验4 文件系统管理实验(答案全).

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.基本系统进程   Csrss.exe:这是子系统服务器进程,负责控制Windows创建或删除线程以及16位的虚拟DOS环境。   System Idle Process:这个进程是作为单线程运行在每个处理器上,并在系统不处理其它线程的时候分派处理器的时间。   Smss.exe:这是一个会话管理子系统,负责启动用户会话。   Services.exe:系统服务的管理工具。   Lsass.exe:本地的安授权服务。   Explorer.exe:资源管理器。   Spoolsv.exe:管理缓冲区中的打印和传真作业。   Svchost.exe:这个进程要着重说明一下,有不少朋友都有这种错觉:若是在“任务管理器”中看到多个Svchost.exe在运行,就觉得是有病毒了。其实并不一定,系统启动的时候,Svchost.exe将检查注册表中的位置来创建需要加载的服务列表,如果多个Svchost.exe同时运行,则表明当前有多组服务处于活动状态;多个DLL文件正在调用它。   至于其它一些附加进程,大多为系统服务,是可以酌情结束运行的。由于其数量众多,我们在此也不便于一一列举。   在系统资源紧张的情况下,我们可以选择结束一些附加进程,以增加资源,起到优化系统的作用。在排除基本系统及附加进程后,新增的陌生进程就值得被大家怀疑了。 更多内容请看Windows操作系统安装、系统优化大、系统安设置专题,或进入讨论组讨论。
为了保证操作系统进程之间的正确执行和资源的合理利用,需要进行进程同步。本实验通过使用互斥锁和信号量两种方式实现进程同步,并进行了实验报告。 一、实验目的 1. 掌握互斥锁和信号量的原理和使用方法。 2. 理解并掌握进程同步的概念和原理。 3. 掌握操作系统进程同步的实现方法。 二、实验环境 1. 操作系统:Windows 10 2. 编程语言:C语言 三、实验内容与步骤 1. 使用互斥锁实现进程同步。 互斥锁是一种独占性锁,同一时刻只有一个进程能够获取该锁。具体实现步骤如下: Step 1:创建互斥锁。 ```c HANDLE mutex = CreateMutex(NULL, FALSE, NULL); ``` Step 2:在需要同步的代码段前加锁。 ```c WaitForSingleObject(mutex, INFINITE); // 需要同步的代码段 ReleaseMutex(mutex); ``` Step 3:在代码执行完毕后释放锁。 ```c CloseHandle(mutex); ``` 2. 使用信号量实现进程同步。 信号量是一种计数器,用于控制多个进程对共享资源的访问。具体实现步骤如下: Step 1:创建信号量。 ```c HANDLE semaphore = CreateSemaphore(NULL, 1, 1, NULL); ``` Step 2:在需要同步的代码段前加锁。 ```c WaitForSingleObject(semaphore, INFINITE); // 需要同步的代码段 ReleaseSemaphore(semaphore, 1, NULL); ``` Step 3:在代码执行完毕后释放锁。 ```c CloseHandle(semaphore); ``` 四、实验结果 通过使用互斥锁和信号量两种方式实现进程同步,在多个进程同时访问共享资源时,能够保证资源的正确访问和正确执行。实验结果表明,互斥锁和信号量都是有效的进程同步方法。 五、实验总结 本实验通过使用互斥锁和信号量两种方式实现进程同步,并进行了实验报告。在实验过程中,我们掌握了互斥锁和信号量的原理和使用方法,理解并掌握了进程同步的概念和原理,掌握了操作系统进程同步的实现方法。实验结果表明,互斥锁和信号量都是有效的进程同步方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m明月Java3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值