·进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操做系统结构的基础。它不仅是程序的代码,还包括当前的活动,经过程序计数器的值和处理寄存器的内容来示。node
·进程的概念主要有两点:第一,进程是一个实体。每个进程都有它本身的地址空间,通常状况下,包扩文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操做系统执行之),它才能成为一个活动的实体,咱们称其为进程。算法
进程的特征:并发
如下几类操做能够建立和终止线程。异步
(1) 系统初始化会建立新的进程函数
(2) 当一个正在运行的进程中,若执行了建立进程的系统调用,那么也会建立新的进程性能
(3) 用户发出请求,建立一个进程学习
(4) 初始化一个批处理做业时,也会建立新的线程spa
从本质上来讲在技术上只有一种建立新进程的方法,即在一个已经存在的进程中,经过系统调用来建立一个新的进程。操作系统
Linux中可使用fork函数来建立新进程。以下列代码所示:线程
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main(){ pid_t ret = fork(); printf("hello proc:%d,ret = %d\n",getpid(),ret); return 0; }
(1) 正常退出
(2)错误退出
(3) 致命错误
(4) 被其余进程杀死
时间片轮转调度算法:
每一个进程被分配一个时间段,称做它的时间片,即该进程容许运行的时间。若是在时间片结束时进程还在运行,则CPU将被剥夺并分配给另外一个进程。若是进程在时间片结束前阻塞或结束,则CPU立即进行切换。调度程序所要作的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
·该算法采起了很是公平的方式,即让就绪队列上的每一个进程每次仅运行一个时间片。若是就绪队列上有N个进程,则每一个进程每次大约均可得到1/N的处理机时间。
·时间片的大小对于系统性能有很大的影响。若选择很小的时间片,将有利于短做业,但意味着会频繁地执行进程调度和进程上下文的切换,这无疑会增长系统的开销。反之,若时间片选择得太长,且为使每一个进程都能在一个时间片内完成,时间轮转调度算法便退化为先来先服务算法,没法知足短做业和交互式用户的需求。
算法运行流程图:
程序控制块的定义:
typedef struct node { char name[20]; /*进程的名字*/ int round; /*分配CPU的时间片*/ int cputime; /*CPU执行时间*/ int needtime; /*进程执行所须要的时间*/ char state; /*进程的状态,W--就绪态,R--执行态,F--完成态*/ int count; /*记录执行的次数*/ struct node *next; /*链表指针*/ }PCB;
void RoundRun() /*时间片轮转调度算法*/ { int flag = 1; GetFirst(); while(run != NULL) { while(flag) { run->count++; run->cputime++; run->needtime--; if(run->needtime == 0) { run ->state = 'F'; InsertFinish(run); flag = 0; } else if(run->count == run->round) { run->state = 'W'; run->count = 0; InsertTime(run); flag = 0; } } flag = 1; GetFirst(); } }
对于源码的分析:
首先设置一个标志位为1,从就绪队列获取第一个节点,当获取的节点不为空和标志位为1时,这个进程所执行的次数加一,CPU执行的时间也进行自加,进程所需的时间自减,而后进行判断,当进程所需的时间为0也就是进程执行完毕时,把进程的状态设置为完成态,而后将进程插入到完成队列尾部,不然当时间片用完时,进程的状态设置为就绪态,计数器清零,将进程插入到就绪队列尾部,将标志位置为0,从新开始从就绪队列获取第一个节点。直到全部进程执行结束。
操做系统是用户和计算机的接口,同时也是计算机硬件和其余软件的接口。是直接运行在机器上的最基本的系统软件,其余任何软件都必须在操做系统的支持下才能运行。因此操做系统对于计算机和学习计算机的咱们是很是重要的。其中,进程又是操做系统最基本和核心的东西,咱们须要了解与掌握进程,这对于咱们之后更深刻的学习操做体统也有很重要的意义。