实验 Linux Shell实现模拟多进程并发执行【操作系统】

简介: 实验 Linux Shell实现模拟多进程并发执行【操作系统】

参考文章

VIM

进程及 fork() 系统调用详解

添加一个系统调用

【实验楼】Linux Shell实现模拟多进程并发执行

简单样例

vim的用法

hello.c

#include<stdio.h>
int main(){
  printf("hello");
}


输入vim hello.c进入vim编辑器

键盘敲a,就可以编辑

保存并退出 ESC 输入:wq,即返回终端



添加一个系统调用【实验】

fork.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
  pid_t pid;
  printf("Before fork..\n");
  switch (pid = fork()) {
  case -1:
    printf("fork call fail\n");
    fflush(stdout);
    exit(1);
  case 0:
    printf("I am child.\n");
    printf("The pid of child is :%d\n", getpid());
    printf("The pidof child`s parent is :%d\n", getppid());
    printf("Child exiting...\n");
    exit(0);
  default:
    printf("I am father.\n");
    printf("The pid of parent is %d\n", getpid());
    printf("The pid of parent`s child is %d\n", pid);
  }
  printf("After fork,program exiting..\n");
  exit(0);
}




Linux Shell实现模拟多进程并发执行【实验】

test1 串行

**这种情况下,程序顺序执行,每个循环3秒,共需15秒 **

test1.sh

#!/bin/bash
for ((i=0;i<5;i++));do
{
  sleep 1;echo 1>>aa && echo "done!"
}
done
cat aa| wc -l
rm aa




test2 并行

这个实例实际上就在上面基础上多加了一个后台执行&符号,此时应该是5个循环任务并发执行,最后需要3s左右时间。

test2.sh

#!/bin/bash
for ((i=0;i<5;i++));do
{
  sleep 1;echo 1>>aa && echo "done!"
}&
done
wait
cat aa| wc -l
rm aa




练习

CPU管理的直观想法

视频链接

CPU管理的直观想法

查找资料

关于int main(int argc,char* argv[])

C语言通过dos编译和运行程序

C语言获取程序运行时间

计时函数clock()与数据类型clock_t

说明

完成任务之前你要知道以下知识

  1. 关于int main(int argc,char* argv[])的知识
  2. 如何在dos命令下运行C语言
  3. 如何获取程序运行时间

关于1 请看《关于int main(int argc,char* argv[])》
关于2 请看 《C语言通过dos编译和运行程序》

关于3 请看《C语言获取程序运行时间》 和以下time.c

获取运行时间的简单样例

time.c

#include<time.h>
#include<stdio.h> 
int main(){
  clock_t start, finish;     //定义第一次调用CPU时钟单位的实际,可以理解为定义一个计数器,单位毫秒 
  double Total_time;        //定义一个double类型的变量,用于存储时间单位
  start = clock();        //获取进入要测试执行时间代码段之前的CPU时间占用值
  //所测代码开始
  int i = 100000000L;while (i--);    //循环 0假
  //所测代码结束
  finish = clock();    //获取执行完后的CPU时间占用值
  Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成秒
  printf("\n函数运行时间:%0.6f秒 \n", Total_time); //打印小数点的后三位,毫秒为单位,计算机最低以皮秒-纳秒等为最低单位
  return 0;
} 

运行结果:


--------------------------------------------------------------进入正题-----------------------------------------------------------


注意要有新建file.txt以便进行IO操作来存储结果


sum.c

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(int argc ,char * argv[]){
  clock_t start, finish;     //定义第一次调用CPU时钟单位的实际,可以理解为定义一个计数器,单位是毫秒 
  double Total_time;        //定义一个double类型的变量,用于存储时间单位
  start = clock();        //获取进入要测试执行时间代码段之前的CPU时间占用值
  int i,to,sum=0;
  FILE *fp;
  fp = fopen ("file.txt", "w");
  to=atoi(argv[1]);
  for (i=1;i<=to;i++){
    sum=sum+i;
//    int a=1+0;  //计算语句 
    fprintf(fp,"%d",sum);
  }
  finish = clock();    //获取执行完后的CPU时间占用值
//  Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成秒
  Total_time = (double)(finish - start); 
  printf("\n函数运行时间:%0.6f毫秒 \n", Total_time); //打印小数点的后三位,秒为单位
  return 0;
} 

cmd中运行

1.把fprintf语句换成计算语句


2.把计算语句换成fprintf语句

注意改代码之后,先运行一下,为了把可执行.exe文件也改变

或者执行命令gcc sum.c -o sum


file.txt存储从1叫到1000的结构



最后分析

结论:IO操作会影响CPU的执行效率




相关文章
|
8月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
8月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
864 0
|
8月前
|
Unix 物联网 Linux
都什么年代了,你还不懂啥是Linux操作系统
至于华为鸿蒙操作系统是不是独树一帜,这个留给各位阅读本文的网友们来讨论
301 0
|
8月前
|
安全 Linux iOS开发
linux属于什么操作系统
Linux是一种自由和开放源代码的操作系统,具有高度的灵活性和可定制性。与常见的操作系统如Windows和macOS相比,Linux具有自由、安全和稳定等优势。Linux已广泛应用于服务器、桌面电脑、超级计算机和嵌入式设备等领域,并且在未来的发展前景广阔。由于其自由和开放源代码的特性,Linux还促进了计算机技术和社区的发展,为全球的计算机用户提供了更多的选择和可能性。
|
8月前
|
安全 Ubuntu Unix
关于Linux操作系统,你必须要知道的事
我们可以看到无论是Debian还是Buildroot都有各自的特点,为客户提供了更大的选择空间和灵活性,大家可以根据自己的需求选择合适的版本来满足终端用户的体验和功能需求。从平技术将会一直关注更多更安全、灵敏、易于开发的Linux版本,做好适配工作,不断为客户带来“简单开发、方便应用”的使用体验。
|
8月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
8月前
|
Ubuntu Linux 开发者
Linux发行版比较:选择适合你的操作系统
在做出选择之前,建议您先在虚拟机或双系统环境中尝试不同的发行版,根据自己的体验和需求做出决策。选择适合自己的Linux发行版是一个个人化和主观的过程,最重要的是找到符合自己需求和喜好的发行版,让您在使用Linux系统时感到舒适和方便。
|
8月前
|
Ubuntu Unix Linux
玩机强化技能,动手安装Ubuntu Linux操作系统
(13)Ubuntu重启过程中,你将在关机画面中看到提示文字“Please remove the installation medium, then press ENTER:”,按下“Enter”键即可重启电脑。
|
8月前
|
Web App开发 Ubuntu Linux
Linux之Ubuntu操作系统安装
1、在Ubuntu系统下,可以使用自带的U盘启动制作软件制作启动盘。使用方法和rufus类似。 2、或者用dd命令制作启动盘,关于dd命令的使用方法可以百度查看。经过亲自实践,archlinux系统和红旗9.0系统的启动U盘就是用dd命令制作成功。
|
8月前
|
Ubuntu Linux Android开发
Ubuntu——一款备受瞩目的Linux操作系统
目前,要在Ubuntu上使用Windows下常用的工具,一个理想的解决方案是采用Deepin-wine。Deepin-wine是Windows模拟环境,允许用户在Ubuntu上轻松运行许多Windows软件。安装Deepin-wine后,您将能够使用以下列出的众多软件:

热门文章

最新文章