没有合适的资源?快使用搜索试试~ 我知道了~
操作系统linux版实验报告.doc
0 下载量 66 浏览量
2024-05-07
11:24:56
上传
评论
收藏 946KB DOC 举报
温馨提示
试读
28页
操作系统linux版实验报告.doc
资源推荐
资源详情
资源评论
操作系统实验报告(Linux 版)
网络 142 潘豹 142999
实验一 观察 Linux进程状态
一、实验目得
在本实验中学习 Linux 操作系统得进程状态,并通过编写一些简单代码来观察各种情
况下,Linux 进程得状态,进一步理解进程得状态及其转换机制。
二、实验环境
硬件环境:计算机一台,局域网环境;
软件环境:Linux Ubuntu 操作系统,gcc 编译器。
(四)查瞧“不可中断阻塞”状态(D)
创建一个 C 程序,如uninter_status、c,让其睡眠 30s
代码:
#include<unistd、h〉
#include<stdio、h〉
int main()
{
int i=0,j=0,k=0;
for(i=0;i<1000000;i++)
{
for(j=0;j<1000000;j++)
{
k++;
k--;
}
}
}
实验结果:
(二)查瞧“暂停”状态(T)
运行 run_status进程,其进入 R 状态:
代码同上:
(三)查瞧“可中断阻塞”状态(S)
创建一个 C 程序,如 interruptiblie_status、c,让其睡眠 30s
编译链接,后台运行该程序(后接&符号),并使用 ps 命令查瞧运行状态
代码:
#include〈unistd、h>
#include<stdio、h>
int main()
{
sleep(30);
return;
}
实验结果:
(四)查瞧“不可中断阻塞”状态(D)
创建一个 C 程序,如 uninter_status、c,让其睡眠30s
编译链接,后台运行该程序(后接&),并使用 ps命令查瞧运行状态
代码:
#include〈unistd、h>
#include〈stdio、h>
int main()
{
if(vfork()==0)
{
sleep(300);
return;
}
}
实验结果:
(五)查瞧“僵尸”进程(Z)
创建一个 C 程序,如zombie_status、c,在其中创建一个子进程,并让子进程迅速结束,而
父进程陷入阻塞
编译链接,后台运行该程序(后接&),并使用 ps 命令查瞧运行状态(30s 内)
代码:
#include<unistd、h>
#incldue<stdio、h>
int main()
{
if(fork())
{
sleep(300);
}
}
实验结果:
实验二 观察 Linux 进程/线程得异步并发
执行
一、实验目得
通过本实验学习如何创建 Linux 进程及线程,通过实验,观察Linux 进程及线程得异步
执行。理解进程及线程得区别及特性,进一步理解进程就是资源分配单位,线程就是独立调
度单位。
二、实验环境
硬件环境:计算机一台,局域网环境;
软件环境:Linux Ubuntu操作系统,gcc 编译器.
三、实验内容与步骤
1、进程异步并发执行
编写一个 C 语言程序,该程序首先初始化一个count 变量为 1,然后使用 fork 函数创
建两个子进程,每个子进程对count 加 1 后,显示“I am son, count=x”或“I am
daughter, count=x”,父进程对 count 加 1 之后,显示“I am father, count=
x”,其中x使用 count 值代替。最后父进程使用 waitpid 等待两个子进程结束之后退出。
编译连接后,多次运行该程序,观察屏幕上显示结果得顺序性,直到出现不一样得情
况为止,并观察每行打印结果中 count 得值。
代码:
#include<unistd、h>
#include<stdio、h〉
int main()
{
pid_t son_pid,daughter_pid;
int count=1;
son_pid=fork();
if(son_pid==0)
{
count++;
printf(”i am son,count=%d\n",count);
}
else
{
daughter_pid=fork();
if(daughter_pid==0)
{
count++;
printf(”i am daughter,count=%d\n",count);
}
else
{
count++;
printf("i am father,count=%d\n”,count);
waitpid(son_pid,NULL,0);
waitpid(daughter_pid,NULL,0);
}
}
}
2、线程异步并发执行
编写一个C语言程序,该程序首先初始化一个 count 变量为 1,然后使用 pthread_c
reate函数创建两个线程,每个线程对 count加 1 后,显示“I am son, count=
x”或“I am daughter, count=x",父进程对 count 加 1 之后,显示“I am
father, count=x”,其中x使用 count值代替。最后父进程使用 pthread_join 等待两
个线程结束之后退出。
编译连接后,多次运行该程序,观察屏幕上显示结果得顺序性,直到出现不一样得情况
为止,并观察每行打印结果中 count得值。
代码:
#include<unistd、h>
#include〈stdio、h〉
#include<pthread、h>
void *daughter(void *num)
{
int* a=(int *)num;
*a+=1;
printf(”i am daughter,count=%d\n",*a);
}
void *son(void *num)
{
int* a=(int *)num;
*a+=1;
printf("i am son,count=%d\n",*a);
}
int main()
{
pthread_t son_tid,daughter_tid;
int count=1;
pthread_create(&son_tid,NULL,son,&count);
剩余27页未读,继续阅读
资源评论
平头哥在等你
- 粉丝: 2
- 资源: 7332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功