操作系统---进程的认识

一、进程的描述

1.进程的定义:

 进程是具有独立功能的程序在一个数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位(进程是程序的一次执行)

2.进程的构成:

 (1) 程序的代码,既然进程是一个正在运行的程序,自然需要程序的代码
 (2) 程序的数据
 (3) CPU寄存器的值,包括通用寄存器,程序计数器
 (4) 堆(heap)是用来保存进程运行时动态分配的内存空间
 (5) 栈(stack)有两个用途,1保存运行的上下文信息。2在函数调用时保存被调用函数的形参或者局部变量
 (6) 进程所占用的一组系统资源,如打开的文件

3.进程的特征

(1)动态性:进程的实质是进程实体的执行过程,进程由“创建而产生,调用而执行,撤销而消亡”。

(2)并发性:多个进程实体存在于内存中,且能够在一段时间内同时执行。

(3)独立性:一个进程是一个独立的实体,是计算机系统资源的使用单位。每个进程都有"自己"的寄存器和内部状态,在它运                           行的时候独立于其他的进程。当然这个"自己"是带引号的,也就是说:在物理上,CPU中只存在一套寄存器,如                           PC寄存器只有一个,但是没有进程都有属于自己的逻辑上的PC。物理上的寄存器是真正的硬件寄存器。

(4)异步性:进程按照各自独立的、不可预知的速度向前推进。

4.进程的基本状态及转换

   进程的三种状态:1.就绪状态;2.执行状态;3.阻塞状态

  

5.进程的创建和终止

A: 以下的操作会创建进程

(1) 系统初始化会创建新的进程

(2) 当一个正在运行的进程中,若执行了创建进程的系统调用,那么也会创建新的进程

(3) 用户发出请求,创建一个进程

(4) 初始化一个批处理作业时,也会创建新的线程

从本质上来说在技术上只有一种创建新进程的方法,即在一个已经存在的进程中,通过系统调用来创建一个新的进程。如Linux中可以使用fork函数来创建新进程。windows中可以用createProcess函数来创建新进程。

在这里我们用代码在Linux 下简单的创建一个进程:

# include <stdio.h>

# include <stdlib.h>

# include <assert.h>

# include <signal.h>

# include <unistd.h>

# include <sys/types.h>

int main()

{

      int pid_n=fork();

      assert(n!=-1);

      if(n==0)

      {

              printf("This is father process!\n");

              exit(1);

     }

    else

    {

           wait(NULL);

           printf("This  is   child   process!\n");

           exit(0);

    }

}

B:以下操作会终止进程

(1) 正常退出

(2) 错误退出

(3) 致命错误

(4) 被其他进程kill

猜你喜欢

转载自blog.csdn.net/YANG_1605/article/details/84552101