进程管理(一)
来源:互联网 发布:广联达软件下载教程 编辑:程序博客网 时间:2024/05/29 07:13
一、 什么是进程
进程是独立功能的程序关于某个数据集合上的一次运行活动。是系统进行资源分配和调度的独立单位。值得注意的是:如果一个程序运行了两遍,那就是两个进程。
二、创建进程
4种方式创建进程:
1、启动操作系统时,会创建若干进程
2、新的进程可以以后调用。即当一个运行的进程发出系统调用的时候,会创建一个或者多个进程进行协助工 作。
3、用户键入一个命令或者双击图标。
4、一个批处理作业的初始化。
从技术上面看,新进程都是由于一个已存在的进程执行了一个用于创建进程的系统调用而创建的。
进程创建后,父子进程中有各自不同的地址空间。
进程创建过程中所做的事情有:
1、给新进程分配一个唯一的标识以及进程控制块
2、为进程分配地址空间
3、初始化进程控制块
4、设置相应的队列指针。(如把新进程加到就绪队列链表中)
三、进程的终止
4中情况会引起进程终止:
1、正常退出(自愿的)。进程完成了它的工作而终止。
2、出错终止。进程发现了严重的错误。如当用户进入cc foo.c编译程序的时候,如果文件不存在,则编译器就会 退出。给出错误参数等。
3、严重错误(非自愿)。原因是由于进程引起的错误。例如执行了一条非法指令,或者除零操作等。在这类错 误中,进程会受到信号(被中断),而不是在这类错误出现时终止。
4、其他进程杀死。某个进程执行了一个系统调用通知操作系统杀死某个进程。
四、进程的状态
三状态模型图
1、运行态:该时刻进程实际占用CPU。
2、就绪态:可运行,但因为其他进程正在运行而暂时停止
3、阻塞态:除非某种时间发生,否则进程不能运行
图1、三状态进程模型
1、(就绪—>执行)调度程序选择了这个进程上CPU执行。
2、(执行—>就绪)调度程序选择了另一个进程上CPU执行。
3、(执行—>阻塞)进程等待某个条件的执行而等待
4、(阻塞-->就绪)进程等待的条件得到执行而进入就绪状态。
五状态模型图
1、创建态:完成创建一个进程所需要的必要工作。
2、终止态:进行资源的回收。
五、进程的实现
在实现进程的过程中,操作系统维护着一张表,叫做进程表(所有进程的PCB集合)。每个进程占用一个表项。该表项包含了进程状态的重要信息,如程序计数器、堆栈指针、内存分配情况,以及在状态切换的时候需要保存的各种信息。
PCB(进程控制块):操作系统用于控制进程的一个专门的数据结构。用于记录进程的各种属性,描述进程的动态变化过程。进程与PCB是一一对应的。
PCB包含的内容:
1、进程描述信息
2、进程控制信息
3、所有资源和使用情况
4、CPU现场信息
上下文切换:
1、将CPU硬件状态从一个进程换到另一个进程的过程叫做上下文切换。
2、进程运行时,其硬件状态保存在CPU上的寄存器中。
3、进程不运行时,这些寄存器的值保存在进程控制块中。
六、进程与程序的区别
1、程序是静态的,进程是动态的。
2、进程有生命周期,而程序相对长久。
3、一个程序可以对应多个进程。例如:一个程序可重复执行。
七、线程
通过线程,我们就不必考虑中断、定时器、上下文切换等,而只需考虑并行进程。进程有两个基本属性:
1、资源拥有者。
2、CPU调度单位。线程继承了这个属性。
线程是进程的一个运行实体,是CPU的调度单位。
八、线程的使用
1、多线程共享同一地址空间和所有可用数据的能力。而多进程具有不同的地址空间。
2、多线程比进程更快地创建和撤销。
九、线程包
为了更好地移植线程程序,线程包就此产生(Pthread)。
两种方法实现线程包:
1)、线程包在用户空间中
内核对线程包一无所知,从内核角度讲,就是按正常的方式即单线程进程。优点是用户级线程包可以再不支持线程的操作系统上面实现。
在用户控件管理线程的时候,每个进程都会有一个线程表在用户空间中,用来跟踪该进程中的线程。
用户级线程的优点:
1、 可以允许每个进程有自己定制的调度算法。
2、 线程切换快。
3、 用户级线程可运行在任何操作系统上。
缺点:
1、内核只将处理器分配给进程,同一进程中的两个线程不能同时运行在两个处理器上。
2、大多数系统调用是阻塞的,因此内核阻塞进程,进程中的所有线程也被阻塞
2)、内核中实现线程
进程中没有线程表,在内核中用来记录系统中所有的线程的线程表。当某个线程希望创建一个新的线程或者撤销一 个线程的时候,它进行一次系统调用,通过对线程表的更新完成线程的创建或撤销。
优点:
1、内核管理所有线程
2、内核维护进程和线程的上下文。
3、进程的切换需要内核支持
4、以线程为基础进行调度。
- 进程管理(一)
- 进程管理(一)
- 进程管理(一)
- 进程管理(一)
- Linux 进程管理(一)
- Linux 进程管理(一)
- 进程管理(一)程序
- 操作系统(一) 进程管理
- 进程管理----进程与线程(一)
- Linux内核之进程管理(一)
- 进程管理相关初始化(一)
- 进程管理之内核抢占(一)
- linux内核--进程管理(一)
- 进程和线程管理(一)
- LINUX C 语言--进程管理(一)
- NodeJs——进程管理(一)
- 操作系统实验一(进程管理)
- linux内核学习(一):进程管理
- mysql学习笔记01
- 杨辉三角
- 用Visual Studio查看汇编代码
- ubuntu系统安装eclipse
- 跟Google学写代码--Chromium/base--stl_util源码学习及应用
- 进程管理(一)
- QT开发之IP协议
- Android greenDAO的使用,工具类封装
- 对称矩阵的压缩存储
- 牛客:剑指offer:数字在排序数组中出现的次数 (Java)
- 解决友盟分享的报错的利器——debug模式
- 【原创】【NOIP1999】拦截导弹
- Wildfly配置PostgreSQL数据源
- 剑指offer面试题7:用两个栈实现队列(Java实现)