您的位置:首页 > 其它

进程的一些基本知识

2017-08-09 19:25 155 查看
进程的定义:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

我们需要与之区分的是线程。cpu执行一段程序,打开运行保存,这个过程便是进程。而线程,便是要运行程序A,我们要先运行A中的a小段,再运行b,再运行c这样,A便可以运行完。这abc便是线程。



进程执行有三种状态:执行状态,就绪状态,等待状态。



一、如上图,打开Windows资源管理器我们可以在服务的第二列看到每个程序都有一个PID。PID叫做他叫进程标识符。这是标识程序的唯一数字。PPID为父进程,PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是进程终止后PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。

Linux下PID为1的进程叫祖父进程(init),是每个进程的总根。它的PPID为0。 如上进程与线程的区别,我们可以知道进程的生命周期包括创建,运行,终止。

二、进程有如下特点:

动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的

并发性:任何进程都可以同其他进程一起并发执行

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位

异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

三、结构特征:进程由程序、数据和进程控制块三部分组成.

进程互斥:是指当有若干进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。

四、临界资源:操作系统中将一次只允许一个进程访问的资源称为临界资源。

临界区:进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥的进入各自的临界区。

五、一组并发进程按一定的顺序执行的过程称为进程间的同步。假如有1234这四个进程,这四个程序在某种约束下顺序执行便是进程同步,若1234没有任何关联则称为异步。

六、进程调度: ①先来先服务调度算法First-Come,First-ServedScheduling(FCFS)

   ②最短作业优先调度Shortest-Job-FirstScheduling(SJF)

   ③基于优先级调度 Priority Scheduling,

   ④循环调度Round-RobinScheduling(RR)或时间片轮转法

每种方法都有优缺点,基于优先级调度每次结束需要提升未执行进程的优先级,比如+1,这样可以保证所有进程均可被执行到。

时间片:时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

七、死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程

获取进程id:

pid_t getpid(void)

获取父进程id:

pid_t getppid(void)

pid_t是typedef定义的类型,表示进程的id

在sys/types.h中定义:

typedef short   pid_t;

所以说pid_t就是一个short类型的变量,实际表示的是内核中进程表的索引。

函数用法可在命令行man一下: 

格式 man  x   函数

x就是下面的数字。

man中的man就是manual的缩写,用来查看系统中自带的各种参考手册,但是手册页分为好几个部分,如下所示:

1 Executable programs or shell commands(用户命令帮助)

2 System calls (系统调用帮助)

3 Library calls (库函数调用帮助)

4 Special files (usually found in /dev)

5 File formats and conventions eg /etc/passwd(配置文件帮助)

6 Games

7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)

8 System administration commands (usually only for root)

9 Kernel routines [Non standard]

解释一下,
1是普通的命令
2是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
3是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的
9b95
命令,这些命令只能由root使用,如ifconfig
而获取进程id:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
printf ("当前进程 Id:  %d\n", getpid());
printf ("当前父进程Id: %d\n", getppid());
printf ("当前用户  Id: %d\n", getuid());

while (1);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: