进程

定义:

  • 一个正在执行的程序;
  • 一个正在计算机上执行的程序实例;
  • 能分配给处理器并由处理器执行的实体;
  • 一个由一组执行指令,一个当前状态和一组相关的系统资源表征的活动单元。

进程的基本元素:程序代码和与代码相关联的数据集。

进程控制块:由操作系统创建和管理,每个进程控制块包含操作系统所需要的关于进程的所有信息,可以中断一个进程的执行,并恢复进程的执行;进程控制块是操作系统支持多线程处理和多重处理技术的重要工具。进程控制块是操作系统中最重要的数据结构.主要包含以下信息

标识符:进程的标识符,唯一确定这个进程。

状态:进程在执行中,则处于运行态。

优先级:相较于其他进程。

程序计数器:程序中即将执行的下一条指令的地址。

内存指针 :包括程序代码和进程相关的指针以及和其它进程共享内存的指针。

上下文数据:进程执行过程中,处理器中的寄存器的数据。

记账信息:处理器时间总和等等。

当一个进程中断的时候,操作系统会把程序计数器和上下文数据保存到进程控制块中。

进程的创建和终止

1、创建步骤:

  • 为新进程分配一个唯一的标识符。
  • 为新进程分配空间。
  • 初始化进程控制块
  • 设置正确的连接
  • 创建或者扩充其他数据结构。

创建进程的原因:

进程终止的原因

五状态模型:运行态,就绪态,阻塞态,退出态,新建态

运行态:进程正在运行。

就绪态:进程准备好,有机会就会执行

阻塞态:进程在某些事件发生前不能执行。

新建态:刚刚创建的进程,操作系统还未将其加入可执行进程组,通常是进程控制块已经创建但没加载到内存。

退出态:从可执行进程组释放的进程。

注意:进程转换到退出态后,其信息并不是立马被删除,与作业相关的表和其它信息会临时被操作系统保留,给辅助程序或者支持程序提供了提取所需信息的时间。提取信息完毕后,操作系统就不会保留与该进程相关的信息。

空-->创建:创建执行新进程。

新建-->就绪:操作系统准备好接纳一个新进程,就会把一个进程从新建态转成就绪态。

就绪-->运行:需要选择一个新进程执行的时候,操作系统就会从处于就绪状态的进程选择一个。

运行-->退出:当运行的进程已完成时,便会退出。

运行-->就绪:(1)有一个更高优先级的进程需要运行,那么当前进程转入就绪,也叫抢占 。(2)正在运行的进程已经到达运行不中断执行的最大时间(超时)。(3)进程自愿释放对处理器的控制。

运行-->阻塞:进程请求其必须等待的事情到来,则进入阻塞态。

阻塞-->就绪:所等待事情完成,进入就绪态。

就绪-->退出:例如父进程终止,那么父进程创建出的子进程也终止

阻塞-->退出:

上述状态中无法从就绪—>阻塞阻塞-->运行(必须经过就绪状态)

引入另外一种状态--挂起态。

挂起态:原因主要是由于内存的大小远远小于处理器处理的速度,导致资源浪费。因而把当前内存中处于阻塞状态的进程转出到磁盘的“挂起队列”。操作系统在此之后取出挂起队列中的另一个进程,或者接受一个新进程的请求,将其纳入内存运行.

挂起进程特点:该进程不能立即执行

进程描述

操作系统为了管理进程和资源,必须掌握关于每个进程和资源当前状态的信息。普遍使用的方法是:操作系统构造并维护它所管理的每个实体的信息表:

四种类型的信息:内存表,I/O表,文件表和进程表

内存表:跟踪内存和外(虚)存.内存表中必须包含以下:分配给进程的内存,分配给进程的外存,内存块或虚存块的任何保护属性以及管理虚存所需要的任何信息。

I/O表:管理计算机系统中的I/O设备和通道

文件表:文件是否存在,位置,当前状态以及相关属性

进程表:相关进程

使用进程映像来描述一个进程,进程镜像包括:程序、数据、栈和进程控制块(属性的集合)

进程控制

执行模式:用户模式和内核模式。使用两种模式的原因是很显然的,它可以保护操作系统和重要的操作系统表(如进程控制块)不受用户程序的干涉

切换:程序状态字(PSW)有一位表示执行模式,这一位应某些事件的要求而改变。当用户调用一个操作系统服务或中断触发系统例程的执行时,执行模式被设置为内核态;当从系统服务返回到用户进程时,执行模式被设为用户态.

下列情况下,进程可能把控制权交给操作系统。

进程切换:

  • 保存处理器上下文环境
  • 更新当前处于运行态进程的进程控制块
  • 进程控制块移到相应队列
  • 选择另一进程执行
  • 更新所选择进程的进程控制块
  • 更新内存管理的数据结构
  • 恢复处理器在被选择的进程最近一次切换出运行状态时的上下文环境

进程切换一定会有模式切换,而模式切换不一定有进程切换。

线程:

进程是操作系统调度资源的基本单位,而线程是调度的基本单位。进程中的所有线程共享该进程的状态和资源
线程的优点:

  • 时间短:在一个进程中创建一个线程比重新创建一个进程时间短
  • 终止一个线程比终止一个进程时间短
  • 统一进程内的线程切换比进程间切换时间短
  • 线程提高不同执行程序间通信效率。

线程生命周期:

线程分类:用户级线程和内核级线程。

用户级线程优点:

(1)可以在任何操作系统执行,不需要修改内核以支持用户级线程

(2)调度可以是应用程序相关的。

(3)线程切换不需要内核特权,节省状态转换开销

用户级线程缺点:

(1)当用户级线程执行一个系统调用时,不仅这个线程会被阻塞,进程中的所有线程都会被阻塞

(2)一个多线程应用程序不能利用多处理技术。内核一次只把一个进程分配给一个处理器,因此一次进程中只有一个线程可以执行

内核级线程优点:

(1)内核可以同时把同一进程中的多个线程调度到多个处理器中同时运行

(2)如果进程中一个线程被阻塞,内核可以调度其它线程

(3)内核例程自身也可以使用多线程

缺点:把控制从一个线程转移到用一进程的另一线程时,需要到内核的状态切换

<操作系统>进程和线程的更多相关文章

  1. Python3学习之路~9.2 操作系统发展史介绍、进程与线程区别、线程语法、join、守护线程

    一 操作系统发展史介绍 参考链接:http://www.cnblogs.com/alex3714/articles/5230609.html 二 进程与线程 进程: 对各种资源管理的集合 就可以称为进 ...

  2. Python开发——13.操作系统、进程和线程

    一.操作系统 1.定义 操作系统是用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间.操作系统运行在内核态,拥有对所有硬件的完全访问权,可以执行机器能够运行的任何指令.软件的 ...

  3. LINUX操作系统知识:进程与线程详解

    当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我们大家常用的单CPU ...

  4. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  5. 33.python之操作系统,进程,线程

    转载:https://www.cnblogs.com/yuanchenqi/articles/6248025.html 操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存, ...

  6. 进程和线程操作系统转载的Mark一下

    https://www.cnblogs.com/leisure_chn/p/10393707.html Linux的进程线程及调度 本文为宋宝华<Linux的进程.线程以及调度>学习笔记. ...

  7. 5、CPU 的线程与操作系统的线程有何关系?操作系统中的进程和线程是什么关系?

    CPU中的线程和操作系统(OS)中的线程即不同,在调度的时候又有些关联.CPU中的线程,我们叫它们Thread,和OS中的线程的名字一样.它来自同步多线程(SMT,Simultaneous Multi ...

  8. [OS] 操作系统-进程线程-经典面试笔试题

    题目转自:http://blog.csdn.net/morewindows/article/details/7392749 ·线程的基本概念.线程的基本状态及状态之间的关系? 线程,有时称为轻量级进程 ...

  9. 操作系统:Linux进程与线程

    这里是一部分内容,还会做修改. 一:目的及内容 学习fork(),exec,pthread库函数的使用,阅读源码,分析fork,exec,pthread_create函数的机理 代码实现: 进程A创建 ...

随机推荐

  1. [日常] C语言中指针变量

    CPU 访问内存时需要的是地址,而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址.编译和链接过程的一项重要任务就是找到这些名称所对应的 ...

  2. C# 填充Excel

    1.添加引用 Microsoft.Office.Interop.Excel; 2.使用命名空间 using Microsoft.Office.Interop.Excel; 3.填充EXCEL单元格方法 ...

  3. coffee.js

    ( ) ( ( ) ) ( ( ( ) ) ) ########################## ############################ #################### ...

  4. html5新特性学习笔记

    1.语义化标签兼容问题(语义化标签只支持ie8以上,不包括ie8) 解决方法一:该标签的css中加上display:block; 通过DOM的方式创建这个标签 document.createEleme ...

  5. 學習Echart 2.2.7

    <!-- Echart 2.2.7 http://echarts.baidu.com/echarts2/doc/example/force1.html#macarons https://gith ...

  6. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  7. gulp使用 笔记

    全局安装gulp,也需要本地安装gulp插件.全局安装gulp是为了执行gulp任务,本地安装gulp则是为了调用gulp插件的功能 //导入工具包 require('node_modules里对应模 ...

  8. svg简介与使用

    什么是svg SVG是"Scalable Vector Graphics"的简称.中文可以理解成"可缩放矢量图形". 可缩放矢量图形是基于可扩展标记语言(标准通 ...

  9. c++面向对象学习计划

    面向对象自学计划 视频学习计划 计划:每天观看至少两个视频,到开学时差不多完成视频的学习. 进度:已学习12个视频. C的强化与补漏 C语言不熟悉的知识点:数组,结构体,链表,文件 -----已重新学 ...

  10. node.js 基础学习

    node.js 是一个 javaScript 运行环境,可以让 js 运行在服务端. 在 nodejs 环境下,可以运行 javascript 基本语法,可以在nodejs 中执行一些无法在浏览器端执 ...