操作系统
要说进程必须先讲讲操作系统的问题。
1.操作系统概念:任何计算机系统都包含一个基本的程序集合,称为操作系统,笼统的理解,操作系统包括:内核(进程管理、内存管理、文件管理、驱动管理)其他程序(例如shell程序等等)
2.为什么要有操作系统?
操作系统可以与硬件交互,管理所有的软硬件资源,并且给应用程序提供一个好的执行环境。
由此可见操作系统是对软硬件管理的,而管理者与被管理者并不直接打交道。
所以进程也是由操作系统管理的,而操作系统如何管理进程的呢?
3.操作系统如何管理进程
操作系统管理进程的方法就两步,简单的说:①把进程描述起来②把这些描述的进程组织起来
进程
一、进程的基本概念
所谓进程就是一个正在执行的程序,它占有着系统资源(CPU时间,内存等)。
二、操作系统描述进程
进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。这个集合也叫作PCB,在Linux操作系统下它的PCB是:task_struct
三、task_struct
task_struct是Linux内核的一种数据结构,它会被装载到内存里并包含着进程的信息,其内容有很多主要有:
- 标示符:描述本进程的唯一标示符,用来区别其他进程。
- 状态:任务状态,进程不管在什么情况下都有其状态,退出代码,退出信号等。
- 优先级:进程在运行的时候也是要遵循优先级顺序的。
- 程序计数器:程序中即将被执行的下一条指令的地址,类似于EIP的作用。
- 内存指针:程序代码和进程相关数据的指针。
- I / O 状态信息:包括显示I/O的请求,分配给进程的I/O设备和被进程使用的文件列表。
- 其他信息
四、Linux操作平台下组织进程(PCB)
所有运行在系统里面的进程都以task_struct双链表的形式存在内核里。
五、Linux操作平台下查看进程
进程的信息可以通过 /proc 系统文件夹里面查看,里面存储着各个进程的ID(进程的ID又叫做PID)
ps 命令 aux显示所有进程信息
六、初识 fork()函数
我们先来看一下fork函数的作用:
由此可以知道,fork函数是产生子进程的函数,他有两个返回值,其中返回给父亲的是子进程的PID,返回给子进程为0。并且在fork之后,子进程与父进程共享一份代码,但是数据各自私有一份。
写时拷贝:当父子之间有一者尝试写入时两者共同进行。
一般在fork()之后利用if语句来分流父子,让父子分别执行不同的代码,这样可以在有些情况下提高运行效率。
示例:
七、进程的状态
- R:运行状态,并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
- S:浅度睡眠状态,意味着进程在等待事件完成,但是这个睡眠状态是可以被中断的。
- D:磁盘休眠状态,也叫作深度睡眠状态,这个状态无法被中断,在这个状态的进程通常会等待IO的结束。
- T:停止状态,可以通过发送SIGSTOP信号给进程来停止进程,这个被暂停的进程可以通过发送SIGCONT信号让进程继续运行。
- Z:僵尸状态,也就是进程在非正常运行结束以后,这个进程的父进程需要去维护这个进程,即读取这个进程结束的原因,如果父进程一直不去维护,不去读取,那么这个进程就会变成僵尸进程,僵尸进程会造成一定程度的内存泄漏。
八、孤儿进程
如果父进程提前退出,那么子进程后退出,进入僵尸状态以后那么该如何处理呢?
如果父进程先退出,那么这时候子进程就称作为“孤儿进程”,如果系统发现孤儿进程,那么这个时候孤儿进程被一号进程所领养,并且如果孤儿进程退出,由一号进程完成之前其父进程所要完成的任务即可。
九、进程优先级
我们之前说过进程在有R状态,但是在R状态的进程不一定就在运行,也有可能在排队,因为进程在运行的时候会有优先级的判断,这里优先级由PRI的值来表示,PRI的值越低,这个进程的优先级也就越高,优先级越高的进程有先执行的权利。
在Linux系统中,输入 ps -l 命令则会输出关于进程的 一些信息,如下图:
我们可以看到在最上面一栏里面有着各个列的信息,这些信息分别代表着不同的含义。
- UID:代表执行者的身份
- PID:代表这个进程的ID号码
- PPID:代表这个进程的父进程ID号码
- PRI:代表这个进程的优先级
- NI:代表进程的nice值
上面前四个我们都已经接触到了,就是最后这个nice值是什么意思呢?
其实nice值带便进程可被执行的优先级的修正值,nice值的范围是(-20~19),总共40个级别,也就是说在Linux下我们的PRI最低到达60,最高到达99。(大部分进程都是这样)
修改进程优先级的命令:
nice、renice
启动进程前调整:nice
nice -n -5 ./test 设置nice值为-5
调整已存在进程的nice:renice
renice -5 -p 5200 将PID为5200的进程nice值设置为-5
用top命令更改已存在进程的nice值:
进入top以后按r,输入进程PID,输入nice值即可
十、进程之间还有其他的特性
竞争性:系统进程数目众多,而CPU资源只有少量,甚至一个,所以进程之间是具有竞争属性的。
独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。
并行:多个进程在多个CPU下分别同时进行运行,这个称为并行。
并发:多个进程在一个CPU下采用进程切换模式,爱一段时间之内,让多个进程都能够推进,称之为并发。
欢迎大家共同讨论,如有错误及时联系作者指出,并改正。谢谢大家!