<操作系统>进程和线程
进程
定义:
- 一个正在执行的程序;
- 一个正在计算机上执行的程序实例;
- 能分配给处理器并由处理器执行的实体;
- 一个由一组执行指令,一个当前状态和一组相关的系统资源表征的活动单元。
进程的基本元素:程序代码和与代码相关联的数据集。
进程控制块:由操作系统创建和管理,每个进程控制块包含操作系统所需要的关于进程的所有信息,可以中断一个进程的执行,并恢复进程的执行;进程控制块是操作系统支持多线程处理和多重处理技术的重要工具。进程控制块是操作系统中最重要的数据结构.主要包含以下信息
标识符:进程的标识符,唯一确定这个进程。
状态:进程在执行中,则处于运行态。
优先级:相较于其他进程。
程序计数器:程序中即将执行的下一条指令的地址。
内存指针 :包括程序代码和进程相关的指针以及和其它进程共享内存的指针。
上下文数据:进程执行过程中,处理器中的寄存器的数据。
记账信息:处理器时间总和等等。
当一个进程中断的时候,操作系统会把程序计数器和上下文数据保存到进程控制块中。
进程的创建和终止
1、创建步骤:
- 为新进程分配一个唯一的标识符。
- 为新进程分配空间。
- 初始化进程控制块
- 设置正确的连接
- 创建或者扩充其他数据结构。
创建进程的原因:
进程终止的原因
五状态模型:运行态,就绪态,阻塞态,退出态,新建态
运行态:进程正在运行。
就绪态:进程准备好,有机会就会执行
阻塞态:进程在某些事件发生前不能执行。
新建态:刚刚创建的进程,操作系统还未将其加入可执行进程组,通常是进程控制块已经创建但没加载到内存。
退出态:从可执行进程组释放的进程。
注意:进程转换到退出态后,其信息并不是立马被删除,与作业相关的表和其它信息会临时被操作系统保留,给辅助程序或者支持程序提供了提取所需信息的时间。提取信息完毕后,操作系统就不会保留与该进程相关的信息。
空-->创建:创建执行新进程。
新建-->就绪:操作系统准备好接纳一个新进程,就会把一个进程从新建态转成就绪态。
就绪-->运行:需要选择一个新进程执行的时候,操作系统就会从处于就绪状态的进程选择一个。
运行-->退出:当运行的进程已完成时,便会退出。
运行-->就绪:(1)有一个更高优先级的进程需要运行,那么当前进程转入就绪,也叫抢占 。(2)正在运行的进程已经到达运行不中断执行的最大时间(超时)。(3)进程自愿释放对处理器的控制。
运行-->阻塞:进程请求其必须等待的事情到来,则进入阻塞态。
阻塞-->就绪:所等待事情完成,进入就绪态。
就绪-->退出:例如父进程终止,那么父进程创建出的子进程也终止
阻塞-->退出:
上述状态中无法从就绪—>阻塞,阻塞-->运行(必须经过就绪状态)。
引入另外一种状态--挂起态。
挂起态:原因主要是由于内存的大小远远小于处理器处理的速度,导致资源浪费。因而把当前内存中处于阻塞状态的进程转出到磁盘的“挂起队列”。操作系统在此之后取出挂起队列中的另一个进程,或者接受一个新进程的请求,将其纳入内存运行.
挂起进程特点:该进程不能立即执行
进程描述
操作系统为了管理进程和资源,必须掌握关于每个进程和资源当前状态的信息。普遍使用的方法是:操作系统构造并维护它所管理的每个实体的信息表:
四种类型的信息:内存表,I/O表,文件表和进程表
内存表:跟踪内存和外(虚)存.内存表中必须包含以下:分配给进程的内存,分配给进程的外存,内存块或虚存块的任何保护属性以及管理虚存所需要的任何信息。
I/O表:管理计算机系统中的I/O设备和通道
文件表:文件是否存在,位置,当前状态以及相关属性
进程表:相关进程
使用进程映像来描述一个进程,进程镜像包括:程序、数据、栈和进程控制块(属性的集合):
进程控制
执行模式:用户模式和内核模式。使用两种模式的原因是很显然的,它可以保护操作系统和重要的操作系统表(如进程控制块)不受用户程序的干涉
切换:程序状态字(PSW)有一位表示执行模式,这一位应某些事件的要求而改变。当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式被设置为内核态;当从系统服务返回到用户进程时,执行模式被设为用户态.
下列情况下,进程可能把控制权交给操作系统。
进程切换:
- 保存处理器上下文环境
- 更新当前处于运行态进程的进程控制块
- 进程控制块移到相应队列
- 选择另一进程执行
- 更新所选择进程的进程控制块
- 更新内存管理的数据结构
- 恢复处理器在被选择的进程最近一次切换出运行状态时的上下文环境
进程切换一定会有模式切换,而模式切换不一定有进程切换。
线程:
进程是操作系统调度资源的基本单位,而线程是调度的基本单位。进程中的所有线程共享该进程的状态和资源
线程的优点:
- 时间短:在一个进程中创建一个线程比重新创建一个进程时间短
- 终止一个线程比终止一个进程时间短
- 统一进程内的线程切换比进程间切换时间短
- 线程提高不同执行程序间通信效率。
线程生命周期:
线程分类:用户级线程和内核级线程。
用户级线程优点:
(1)可以在任何操作系统执行,不需要修改内核以支持用户级线程
(2)调度可以是应用程序相关的。
(3)线程切换不需要内核特权,节省状态转换开销
用户级线程缺点:
(1)当用户级线程执行一个系统调用时,不仅这个线程会被阻塞,进程中的所有线程都会被阻塞
(2)一个多线程应用程序不能利用多处理技术。内核一次只把一个进程分配给一个处理器,因此一次进程中只有一个线程可以执行
内核级线程优点:
(1)内核可以同时把同一进程中的多个线程调度到多个处理器中同时运行
(2)如果进程中一个线程被阻塞,内核可以调度其它线程
(3)内核例程自身也可以使用多线程
缺点:把控制从一个线程转移到用一进程的另一线程时,需要到内核的状态切换
<操作系统>进程和线程的更多相关文章
- Python3学习之路~9.2 操作系统发展史介绍、进程与线程区别、线程语法、join、守护线程
一 操作系统发展史介绍 参考链接:http://www.cnblogs.com/alex3714/articles/5230609.html 二 进程与线程 进程: 对各种资源管理的集合 就可以称为进 ...
- Python开发——13.操作系统、进程和线程
一.操作系统 1.定义 操作系统是用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间.操作系统运行在内核态,拥有对所有硬件的完全访问权,可以执行机器能够运行的任何指令.软件的 ...
- LINUX操作系统知识:进程与线程详解
当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我们大家常用的单CPU ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 33.python之操作系统,进程,线程
转载:https://www.cnblogs.com/yuanchenqi/articles/6248025.html 操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存, ...
- 进程和线程操作系统转载的Mark一下
https://www.cnblogs.com/leisure_chn/p/10393707.html Linux的进程线程及调度 本文为宋宝华<Linux的进程.线程以及调度>学习笔记. ...
- 5、CPU 的线程与操作系统的线程有何关系?操作系统中的进程和线程是什么关系?
CPU中的线程和操作系统(OS)中的线程即不同,在调度的时候又有些关联.CPU中的线程,我们叫它们Thread,和OS中的线程的名字一样.它来自同步多线程(SMT,Simultaneous Multi ...
- [OS] 操作系统-进程线程-经典面试笔试题
题目转自:http://blog.csdn.net/morewindows/article/details/7392749 ·线程的基本概念.线程的基本状态及状态之间的关系? 线程,有时称为轻量级进程 ...
- 操作系统:Linux进程与线程
这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...
随机推荐
- canvas学习和滤镜实现
最近学习了 HTML5 中的重头戏--canvas.利用 canvas,前端人员可以很轻松地.进行图像处理.其 API 繁多,这次主要学习常用的 API,并且完成以下两个代码: 实现去色滤镜 实现负色 ...
- Python 练习:简单的购物车(二)
优化了上一个购物车程序:http://www.cnblogs.com/klvchen/p/8577269.html #输入工资salary = input("Please input you ...
- python中的清屏函数
一:cmd中python的清屏函数 import os os.system("cls") cmd中演示 1.在cmd中输入命令行: 2.执行后: 3.为什么会遗留一个0? 因为函数 ...
- The server quit without updating PID file (data mysql.pid)
(1)mysql的安装路径和运行路径 # whereis mysqld (2)PATH变量指定的路径中,搜索mysql的信息 # which mysqld (3)查看配置文件 # ...
- 能用HTML/CSS解决的问题,就不要用JS
原因:简单. 简单就意味着更快的开发速度,更小的维护成本,同时往往具有更好的体验. 一,导航高亮 效果图: 代码: <!DOCTYPE html> <html lang=" ...
- [iOS] WSHorizontalPickerView 图片水平滚动封装
之前这篇文章传送门本来是记录自己练手的demo的,后来很多人来问我要代码.今天就抽时间封装了一下,没有考虑太多情况,等我有空再去仔细考虑吧. 代码在:Github 用法很简单,创建对象,设置数据源,记 ...
- [cb]扩展Hierarchy 添加二级菜单
目地 这篇博客教大家如何扩展Hierarchy 默认的Hierarchy 在Unity的Edior编辑器中,默认的Hierarchy如下 扩展的Hierarchy 扩展示例 MyInitOnLoad脚 ...
- PLSQL操作Oracle创建用户和表
1.打开PLSQL,填写用户名和密码(初始有两个用户sys和system,密码是自己安装oracle数据库时定的),Database选择ORCL(默认数据库,oracle中创建的用户就像是mysql中 ...
- 彻底卸载删除Win10易升,禁止再生
易升是微软推出的win10升级工具.用户可通过易升一键升级win10. 因为我的电脑已经是win10的系统,所以我也不需要升级.也不想升级,因为我从网上了解到升级后的系统反而没有升级前的好用. 微软的 ...
- fedora 配置使用点滴
fedora 配置使用点滴 fedora 16 无线网设置 fodera16是3.x的内核,无线网卡的驱动有点不一样. 可以用如下方法安装,需要先用有线网来安装几个包,步骤如下: 执行这个命令看看网卡 ...