精华内容
下载资源
问答
  • 精选文库 成绩 实 验 报 告 课程名称 操作系统 实验项目 windows 进程管理 姓 名 专 业 计算机科学与技术 班 级 学 号 精选文库 计算机科学与技术学院 计算机系 2019 年 4 月 23 日 精选文库 实验项目名称 windows ...
  • 这个程序创建一个子进程,执行an_ch2_1b。这个程序不断地输出如下行: Those output come from child,[系统时间] 观察程序运行的结果,并对你看到的现象进行解释。 2.在linux环境下编写一个控制台应用程序,程序中有...
  • 进程创建实验报告

    千次阅读 2018-06-27 09:52:39
    理解多进程系统的运行实验任务编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示...
    实验目的
    1.熟悉进程的概念(PCB+程序段+数据)
    2.掌握进程的创建方式
    3.理解多进程系统的运行

    实验任务

    编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。

    fork()函数:创建一个新进程。
    使用方法:int fork();
    0:创建子进程,从子进程返回的id值;
    大于0:从父进程返回子进程的id值;
    -1:创建失败。


    部分代码

    void main()

    {

                  int p1,p2;

                  while((p1=fork())==-1);

                  if(p1==0)

                                 putchar('b');

                  else

                  {

                                 while((p2=fork())==-1);

                                 if(p2==0)

                                                 putchar('c');

                                 else

                                                 putchar('a');

                   }

    }   

    修改代码

    void main()

    {

                  int p1,p2;

                  while((p1=fork())==-1);

                  if(p1==0)

                                 putchar('b');

                  else

                  {

                                 putchar('a');

                                 while((p2=fork())==-1);

                                 if(p2==0)

                                                 putchar('c');

                   }

    }   

    实验报告
    1.实验目的
     
    2.实验内容(源代码)
      
    3.实验结果分析

    好吧,接下来才是我的实验内容,作为一个技术小白,想要完成本实验,首先你要有Linux系统的环境,本人电脑装的是VMware虚拟机,系统是Ubuntu14.04,至于如何编译链接运行程序,在此不多赘述。

    这是部分代码的运行截图:

    这是修改代码的运行截图:


    多次运行我们可以发现:前者的运行结果主要是b,c,bc,cb还有若干空格,后者才出现的a,回归到代码来分析:

    while((p1=fork())==-1);fork()在当前进程中创建一个子进程,如创建失败,fork()返回-1给p1,因为是while循环,此语句会一直执行到创建成功为止,while((p2=fork())==-1);同理,之后两者都执行了if(p1==0)putchar('b');显然所有只输出一个b的结果是创建p1成功的,只输出一个c的结果是创建p2成功的,没有输出的话是都没有创建成功,而修改代码用a隔开两个循环,如果出现cb或bc的情况,可以表示是哪个进程先创建成功。

    好吧,我编不下去了,第一篇博客文章,感谢支持!(*^▽^*)

    展开全文
  •  利用fork()函数编写一个程序,要求父进程创建两个子进程,父进程、子进程并发执行,输出并发执行的消息,如: 父进程正在执行….. 子进程1正在执行….. 子进程2正在执行….. 一段时间后,父进程杀死子进程,然后...
  • 操作系统 进程创建实验报告 调用fork( )创建子进程 实验原理: 一) 进程 UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、...
  • 实验报告 课程名称 操作系统 实验项目 windows进程管理 姓 名 专 业 计算机科学与技术 班 级 学 号: 计算机科学与技术学院 计算机系 2019年 4 月 23 日 实验项目名称 windows 进程管理 一 实验目的 学习windows系统...
  • 操作系统实验报告 实验一 WINDOWS进程初识 实验二 进程管理 实验三 进程同步的经典算法 实验四 存储管理 实验五 文件和设备管理
  • 操作系统 课程设计任务书 实验题目 实验进程与线程Linux 进程与线程通讯 实验目的 深刻理解线程与进程的概念掌握进程与线程在组成成分上的差别以及 与其相适应的通讯方式和应用目标 实验内容 以 Linux 系统进程和...
  • if(pid1 > 0) { // 子进程创建成功,pid1为进程号 while((pid2 = fork( )) == -1); // 创建子进程2 if(pid2 > 0) { wait_flag = 1; //sleep(1); // 父进程等待5秒 kill(pid1,SIGUSR1)...
  • os实验二 进程控制实验报告。包括代码,实验截图,
  • WINDOWS环境下模拟实验: 1、用C语言编写一程序,来模拟进程创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出。 2、同时...
  • 进程创建撤销和控制 一、实验名称 进程创建撤销和控制 二、实验内容 学生独立设计用于描述进程的数据结构,完成进程创建、同步和互斥。 三、实验原理和设计思路 在Linux系统下用fork()函数创建进程,lockf()...

    进程的创建撤销和控制

    一、实验名称
    进程的创建撤销和控制
    二、实验内容
    学生独立设计用于描述进程的数据结构,完成进程的创建、同步和互斥。
    三、实验原理和设计思路
    在Linux系统下用fork()函数创建进程,lockf()函数对进程加锁,实现进程的创建撤销与控制。
    四、源代码
    1.进程的创建

    #include<stdio.h>
    main()
    {
    int p1,p2;
    while((p1=fork())==-1);
    if(p1==0)
    putchar('b');
    else
    {
    while((p2=fork())==-1);
    if(p2==0)
    putchar('c');
    else
    putchar('a');
    }
    }
    

    2.进程的控制

    #include<stdio.h>
    main()
    {
    int p1,p2,i;
    while((p1=fork())==-1);
    if(p1==0)
    for(i=0;i<50;i++)
    printf("child %d\n",i);
    else
    {
    while((p2=fork())==-1);
    if(p2==0)
    for(i=0;i<50;i++)
    printf("son %d\n",i);
    else
    for(i=0;i<50;i++)
    printf("daughter %d\n",i);
    }
    }
    

    3.进程的控制2

    #include<stdio.h>
    #include<unistd.h>
    main()
    {
    int p1,p2,i;
    while((p1=fork())==-1);
    if(p1==0)
    {
    lockf(1,1,0);
    for(i=0;i<50;i++)
    printf("child %d\n",i);
    lockf(1,0,0);
    }
    else
    {
    while((p2=fork())==-1);
    if(p2==0)
    {
    lockf(1,1,0);
    for(i=0;i<50;i++)
    printf("son %d\n",i);
    lockf(1,0,0);
    }
    else
    {
    lockf(1,1,0);
    for(i=0;i<50;i++)
    printf("daughter %d\n",i);
    lockf(1,0,0);
    }
    }
    }
    

    4.软中断通信

    #include<unistd.h>
    #include<stdio.h>
    #include<signal.h>
    void waiting(),stop();
    int wait_mark;
    main()
    {
    int p1,p2;
    while((p1=fork())==-1);
    if(p1>0)
    {
    while((p2=fork())==-1);
    if(p2>0)
    {
    printf("parent \n");
    wait_mark=1;
    signal(SIGINT,stop);
    waiting(0);
    kill(p1,16);
    kill(p2,17);
    wait(0);
    wait(0);
    printf("parent process is killed! \n" );
    exit(0);
    }
    else
    {
    printf("p2 \n");
    wait_mark=1;
    signal(17,stop);
    waiting();
    lockf(stdout,1,0);
    printf("child process 2 is killed by parent! \n");
    lockf(stdout,0,0);
    exit(0);
    }
    }
    else
    {
    printf("p1\n");
    wait_mark=1;
    signal(16,stop);
    waiting();
    lockf(stdout,1,0);
    printf("chile process 1 is killed by parent! \n");
    lockf(stdout,0,0);
    exit(0);
    }
    }
    void waiting()
    {
    while(wait_mark!=0);
    }
    void stop()
    {
    wait_mark=0;
    }
    

    5.软中断通信2

    #include<unistd.h>
    #include<stdio.h>
    #include<signal.h>
    
    int pid1,pid2;
    int EndFlag=0,pf1,pf2=0;
    
    void IntDelete()
    {
    kill(pid1,16);
    kill(pid2,17);
    EndFlag=1;
    }
    void Int1()
    {
    printf("child process 1 is killed by parent!");
    exit(0);
    }
    void Int2()
    {
    printf("child process 2 is killed by parent!");
    exit(0);
    }
    main()
    {
    int exitpid;
    signal(SIGINT,SIG_IGN);
    signal(SIGQUIT,SIG_IGN);
    while((pid1=fork())==-1);
    if(pid1==0)
    {
    printf("p1\n");
    signal(SIGUSR1,Int1);
    signal(16,SIG_IGN);
    pause();
    exit(0);
    }
    else
    {
    while((pid2=fork())==-1);
    if(pid2==0)
    {
    printf("p2\n");
    signal(SIGUSR2,Int2);
    signal(17,SIG_IGN);
    pause();
    exit(0);
    }
    else
    {
    printf("parent\n");
    signal(SIGINT,IntDelete);
    waitpid(-1,&exitpid,0);
    printf("parent process is killed!\n");
    exit(0);
    }
    }
    }
    

    五、结果截图

    图 1 进程的创建
    在这里插入图片描述

    图 2 进程的控制
    在这里插入图片描述

    图 3 进程的控制
    在这里插入图片描述

    图 4 进程的控制
    在这里插入图片描述

    图 5 进程的控制(2)
    在这里插入图片描述

    图 6 进程的控制(2)

    在这里插入图片描述

    图 7 进程的控制(2)
    在这里插入图片描述

    六、编程体会
             在这次的操作系统实验中,系统环境从Windows换为了Linux,开始的时候有很多地方都不是很适应。比如在Linux中的vim编辑器编写代码非常困难,因为很多的快捷键也忘的差不多了,而且编写习惯又与Windows下编译器有点不一样。之后就好多了,通过一个一个查阅资料,多敲了几遍代码,慢慢的也可以掌握一些Linux环境下的基础操作。在程序编写过程中,涉及了用fork()函数创建进程,lockf()函数对进程加锁,实现进程的创建撤销与控制。这些在以往的代码编写中是没有遇到的,遇到了很大的难题。比如fork()函数的具体作用是什么?如果使用?只好通过询问同学、老师,查询资料,慢慢的才理解fork()函数的真正意思。通过这次实验,使得自己对于进程的创建、撤销、控制等基本操作有了初步的了解,希望对今后的学习生活有所帮助。

    展开全文
  • 通过对进程间通信同步/互斥问题的编程实现,加深理解信号量和 P、V 操作的原理; 对 Windows 或 Linux 涉及的几种互斥、同步机制有更进一步的了解;熟悉 Windows 或 Linux 中定义的与互斥、同步有关的函数。
  • 通过进程创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是...

    实验二:进程的控制

    1 .实验目的
    通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。
    【答:进程概念和程序概念最大的不同之处在于:
    (1)进程是动态的,而程序是静态的。
    (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。
    (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。
    (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】

    2 .实验内容
    (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。
    (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。
    (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。

    3 .实验步骤
    (1)gedit创建进程1.c
    (2)使用gcc 1.c -o 1编译并./1运行程序1.c
    #include<stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/wait.h>
    void mian(){
    int id;
    if(fork()==0)
    {printf(“child id is %d\n”,getpid());
    }
    else if(fork()==0)
    {printf(“child2 id %d\n”,getpid());
    }
    else
    {id=wait();
    printf(“parent id is %d\n”,getpid());
    }
    }
    在这里插入图片描述

    (3)运行并查看结果
    child’s pid=2894
    child’s pid=2994
    parent’s pid=2849
    child’s pid=2897
    child’s pid=2897
    parent’s pid=2849
    child’s pid=2894
    child’s pid=2994
    parent’s pid=2849

    (4)gedit创建进程2.c
    使用gcc 2.c -o 2编译并./2运行程序2.c#include<stdio.h>
    #include<unistd.h>
    #include<stdlib.h>
    #include<sys/types.h>
    #include<sys/wait.h>
    int main()
    {
    pid_t pid;
    char *a[]={“ls”,"-l","/etc/passwd",0};
    int result;
    pid=fork();
    if(pid<0){
    printf(“frok error!”);}
    else if(pid==0){
    printf(“new program !\n”);
    execvp(“ls”,a);
    exit(0);
    }
    else{
    int e=waitpid(pid,&result,0);
    printf(“child peocess PID:%d\n”,e);
    exit(0);
    }
    }
    (5)在这里插入图片描述

    (6)运行并查看结果
    new program !
    -rw-r–r--. 1 root root 2456 Apr 14 2019 /etc/passwd
    child peocess PID:29035

    4 .思考
    (1) 系统调用fork()是如何创建进程的?
    【答:(1)申请空白PCB
    (2)为新进程分配资源
    (3)初始化进程控制块
    (初始化标识信息,初始化处理机状态信息,初始化处理机控制信息,)
    (4)将新进程插入就绪队列】
    (2)当首次将CPU 调度给子进程时,其入口在哪里?
    【答:进程的进程控制块(PCB)结构中有指向其TTS(任务状态段)的指针, TTS里面存放着进程的入口。】
    (3)系统调用execvp()是如何更换进程的可执行代码的?
    【答:一个库函数通过调用execve来调用内核服务来执行指明的程序】
    (4) 对一个应用,如果用多个进程的并发执行来实现,与单个进程来实现有什么不同?
    【答:相对于单个进程而言,程序并发执行就是系统中的各个部分不再以单纯串行方式工作,在同一时刻系统中不是只有一个活动,而是存在许多并行活动。并且充分利用多核CPU的计算能力,方便进行业务拆分,提升应用性能。其次,时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得线程是同时执行的,时间片一般是几十毫秒.而每次切换时,需要将当前的状态保存起来,以便能够进行恢复先前的状态,而这个切换是非常消耗性能的,过于频繁的切换反而无法发挥出多线程编程的优势.最后,因为单进程不会和其它进程争用竟源,也不会和其它进程有什么执行顺序不合理导理死锁,多进程并不仅发失去其封闭性并且会导致死锁现象】

    展开全文
  • Windows进程创建与销毁

    千次阅读 2017-10-23 11:37:02
    今天课上做了关于进程创建与控制的实验,简单记录下来:实验题目 ① 掌握Windows进程的创建和销毁API的调用方法;编程代码,在程序中创建和销毁一个Word进程; ② 能够挂起和激活被创建进程的主线程; ③ 通过...

    今天课上做了关于进程创建与控制的实验,简单记录下来:


    实验题目

    ① 掌握Windows进程的创建和销毁API的调用方法;编程代码,在程序中创建和销毁一个Word进程;
    ② 能够挂起和激活被创建进程的主线程;
    ③ 通过Windows进程管理器查看系统进程列表的变化。

    实验指导

    ①创建进程的API
    BOOL CreateProcess(
    LPCTSTR lpApplicationName,
    LPTSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCTSTR lpCurrentDirectory,
    LPSTARTUPINFO lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    );
    例程:
    void main( VOID ){
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
    // Start the child process.
    if( !CreateProcess( NULL, // No module name (use command line).
    “MyChildProcess”, // Command line.
    NULL, // Process handle not inheritable.
    NULL, // Thread handle not inheritable.
    FALSE, // Set handle inheritance to FALSE.
    0, // No creation flags.
    NULL, // Use parent’s environment block.
    NULL, // Use parent’s starting directory.
    &si, // Pointer to STARTUPINFO structure.
    &pi ) // Pointer to PROCESS_INFORMATION structure.
    ) {
    ErrorExit( “CreateProcess failed.” );
    }
    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    // Close process and thread handles.
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    }
    ② 销毁进程API
    BOOL TerminateProcess(
    HANDLE hProcess,
    UINT uExitCode
    );
    ③ 挂起进程的主线程API
    DWORD SuspendThread(
    HANDLE hThread
    );
    ④激活进程的主线程API
    DWORD ResumeThread(
    HANDLE hThread
    );

    代码块

    我在实验中写的代码如下:

    #include"iostream"  
    #include"windows.h"  
    using namespace std;
    void  main(VOID) {
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        ZeroMemory(&pi, sizeof(pi));
    
    
        if (!CreateProcess(NULL, "E:\\office\\Office14\\WINWORD.EXE", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    
        {
            fprintf(stderr, "Createprocess Failed ");
    
        }
    
        int x;
        while (true) {
            cout << "请输入要选择的操作:\n0:销毁进程\n1:挂起进程\n2:激活进程\n3:退出\n";
            cin >> x;
            switch (x) {
            case 0:
                if (TerminateProcess(pi.hProcess, 0))
                    cout << "销毁进程成功" << endl;
                else
                    cout << "销毁失败" << endl;
                break;
            case 1:
                if (SuspendThread(pi.hThread))
                    cout << "挂起进程成功" << endl;
                else
                    cout << "挂起失败" << endl;
                break;
            case 2:
                if (ResumeThread(pi.hThread))
                    cout << "激活进程成功" << endl;
                else
                    cout << "激活失败" << endl;
                break;
            case 3:
                exit(0);
            default:
                cout << "选项不正确" << endl;
            }
    
        }
        system("pause");
    }

    其实很简单的操作,主要要注意的就是CreateProcess这个方法的各个参数,以及要启动的一定是一个.exe文件

    展开全文
  • 实验题目 1、打开一个vi进程。...2、编写程序,首先使用fork系统调用,创建进程。在父进程中继续执行空循环操作;在子进程中调用exec打开vi编辑器。然后在另外一个终端中,通过ps –Al命令、ps ...
  • 《操作系统原理》实验报告 一、实验目的 (1)理解操作系统生成的概念和过程; (2)理解操作系统两类用户界面(操作界面,系统调用)概念; 二、实验内容 (1)在Unbantu或Fedora环境下裁剪和编译Linux内核,并启用新的内核。...
  • 有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构。   1. 相关...
  • 用c语言模拟进程管理 1、首先构建进程的数据结构 2、实现建立进程 3、三种基本状态的队列 4、将进程入队 5、实现进程在队列之间的转换 6、进程通信
  • 实验进程创建与终止 实验目的 利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的...
  • (1)、要求程序运行时,系统中存在如下图(一)的进程树结构,写出程序源代码及程序运行结果并在进程树的相应进程节点上标上进程号。 图一 (2)、父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的...
  • 前言:Windows创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。通常应用程序的框架...
  • 实验题目 进程创建 小组合作 否 姓名 班级 学 号 一实验目的 了解进程创建 了解进程间的调用以及实现 分析进程竞争资源的现象学习解决互斥的方法 加深对进程概念的理解认识并发执行的本质 二.实验环境 Windows...
  • 进程创建 小组合作 否 姓名 班级 学 号 一实验目的 1了解进程创建 2了解进程间的调用以及实现 3分析进程竞争资源的现象学习解决互斥的方法 4加深对进程概念的理解认识并发执行的本质 二实验环境 Windows 系统的...
  • 1.实验目的 学会通过基本的Linux进程控制函数创建进程,并实现协同工作。创建两个进程,让子进程读取输入,父进程等待子进程读完文件后继续执行。2.实验软硬件环境安装Windows7的计算机VMware软件,在其上安装有...
  • 进程创建 小组合作 否 姓名 班级 学 号 一实验目的 1了解进程创建 2了解进程间的调用以及实现 3分析进程竞争资源的现象学习解决互斥的方法 4加深对进程概念的理解认识并发执行的本质 二实验环境 Windows 系统的...
  • 实验一 Linux系统的安装及用户界面的使用 一.实验目的 1. 了解Linux系统的安装、熟悉系统的启动过程和使用环境。 2. 掌握Linux环境下vi编辑器的使用方法。 3. 掌握Linux系统中编辑、编译、调试...实验报告 内含源代码
  • 计算机操作系统实验一,模拟进程创建与撤销,c++实现
  • 苏州大学操作系统原理实验。 实验报告第二个实验。 使用内存共享的方式进行进程间通信,真正的实现通信,而非单个进程的伪通信。 使用MFC的窗口模式实现的。
  • 根据老师给的实验指导书做的 # include &lt;stdio.h&gt; # include &lt;stdlib.h&gt; # include &lt;Windows.h&gt; int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,334
精华内容 2,933
关键字:

windows进程的创建实验报告