zoukankan      html  css  js  c++  java
  • 计算机操作系统实验之_进程观测_实验报告

    南阳理工学院计算机操作系统实验之

    课程名称:

    计算机操作系统

    实验学期:

    2011-2012第二学期


    实验目的和要求


    (1)了解在Linux操作系统中进程的特点和表现形式

    (2)掌握Linux查看进程的方式与方法
    (3)在一个进程中创建另一个进程的方法

    (4)掌握父进程和子进程的关系和fork的用法 

    实验内容与分析设计

    实验内容:
    (1)编写一个简单的程序,使用ps或top工具观察该进程的的ID号,并使用kill工具终止进程运行。
    (2)编写一个程序,使用fork函数生成一个子进程,并使用相关工具观察进程状态。
    实验步骤:
    (1)

    #include <stdio.h>
    int main()
    {
    	//设计一个循环,使其反复运行,方便观察
    	while(1)
    	{
    		printf("I am the first process!\n");
    	}
    	return 0;
    }
    



    文件名命名为process1.c,使用gcc process1.c -o process编译该程序。运行该程序,打开其它一个终端


    窗口,输入命令top,观察名称为process1的进程,记录各项数据(包括进程号)。使用"kill 进程号" 直接杀死该进程。观察进程是否消失?
    需要记录的数据:进程状态中的id,内存使用和CPU占有率。由于该进程一直处于循环中,思考id、内存


    使用和cpu占有率哪一个因素和循环
    关系密切?如何避免,请给出合理的建议。这是否说明CPU也是操作系统中的一个重要资源?
    (2)
    //process2.c
    #include <sys/types.h>   
    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        int i;
        if ( fork() == 0 ) 
        {
           /* 子进程程序 */
           for ( i = 1; i <1000; i ++ ) 
              printf("This is child process\n");
        }
        else 
        {
           /* 父进程程序*/
           for ( i = 1; i <1000; i ++ ) 
              printf("This is process process\n");
        }
    }
    


    请保存为process2.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?
    若将上述实例(2),改写为:
    //process4.c
    #include <sys/types.h>   
    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        int i;
        if ( fork() == 0 ) 
        {
           /* 子进程程序 */
           for ( ;; ) 
              printf("This is child process\n");
        }
        else 
        {
           /* 父进程程序*/
           for ( i=1;i<1000;i++ ) 
              printf("This is process process\n");
        }
    }
    


    请保存为process4.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?
    若将将实例(2)改为:
    //process3cc
    #include <sys/types.h>   
    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        int i;
        if ( fork() == 0 ) 
        {
           /* 子进程程序 */
           for ( ;; ) 
              printf("This is child process\n");
        }
        else 
        {
           /* 父进程程序*/
           for ( ;; ) 
              printf("This is process process\n");
        }
    }
    


    请保存为process3.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释? 

    实验步骤和调试过程:


    统一执行一下命令
    vim process*.c(编辑源文件)
    gcc process*.c -o process*(编译)
    ./process(运行程序)
    top(查看进程)
    kill -9 进程号(结束进程)


    实验结果:

    (1)process.c:    程序无限次输出 I am the first process!直到输入“kill 进程号”才结束

    (2)process2.c:  父进程、子进程各输出1000,且输出次序不一
    (3)process4.c(process2.c更改后的版本):父进程执行1000次,子进程不确定,且顺序不确定
    (4)父进程子进程打印顺序不确定,可见父进程和子进程各独立执行。父进程子进程均无限次输出,知道输入“kill -9 进程号”才终止

    疑难小结

    (1)、最后一个程序peocess3.c,运行后,kill 进程号无法结束进程,只有kill 进程号-9后才能终止进程
    (2)、父子进程打印次序无规律,说明父子进程的进行是无序的随机的。

    主要算法和程序清单



     
     //process1.c
     #include <stdio.h>
     
     
     int main()
     {
     //设计一个循环,使其反复运行,方便观察
     while(1)
     {
     printf("I am the first process!\n");
     }
     return 0;
     }
     
     
     //process2.c
     #include <sys/types.h>   
     #include <unistd.h>
     #include <stdio.h>
     int main()
     {
     int i;
     if ( fork() == 0 ) 
     {
     /* 子进程程序 */
    for ( i = 1; i <1000; i ++ ) 
    printf("This is child process\n");
    }
    else 
    {
        /* 父进程程序*/
        for ( i = 1; i <1000; i ++ ) 
            printf("This is process process\n");
            }
    }
    
    
    
    //process4.c
    #include <sys/types.h>   
    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        int i;
        if ( fork() == 0 ) 
        {
            /* 子进程程序 */
            for ( ;; ) 
                printf("This is child process\n");
        }
        else 
        {
            /* 父进程程序*/
            for ( i=1;i<1000;i++ ) 
                printf("This is process process\n");
        }
    }
    //process3.c
    #include <sys/types.h>   
    #include <unistd.h>
    #include <stdio.h>
    int main()
    {
        int i;
        if ( fork() == 0 ) 
        {
            /* 子进程程序 */
            for ( ;; ) 
                printf("This is child process\n");
        }
        else 
        {
            /* 父进程程序*/
            for ( ;; ) 
                printf("This is process process\n");
        }
    }
    


    参考书目


    西安电子科技大学出版社 《计算机操作系统(第 三 版)》汤小丹 、梁红兵、哲凤屏、 汤子瀛 著

    实验源码以及编译好的程序下载地址点击打开链接


    作者:
    出处:http://www.cnblogs.com/ChenYilong/(点击RSS订阅)
    本文版权归作者和博客园共有,欢迎转载,
    但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    ftp
    vmware虚拟机如何安装ubuntu14.10系统
    第1章 初识java----Java简介
    fiddler
    Program Files 与Program Files (x86)
    跟我一起认识axure(三)
    React-FlipOver-Counter(日历翻页)
    vue2-vux-fitness-project
    cloud-music
    跟我一起认识axure(二)
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/2808619.html
Copyright © 2011-2022 走看看