热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

<操作系统>进程和线程

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

进程

定义:

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

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

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

os-3-1

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

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

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

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

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

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

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

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

进程的创建和终止

1、创建步骤:

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

创建进程的原因:

os-3-2

 

 

 

 

 

 

 

进程终止的原因

os-3-3

 

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

运行态:进程正在运行。

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

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

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

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

os-3-5

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

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

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

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

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

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

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

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

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

阻塞-->退出:

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

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

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

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

进程描述

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

os-3-9

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

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

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

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

进程表:相关进程

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

进程控制

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

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

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

os-3-11

进程切换:

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

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

线程:

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

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

线程生命周期:

20170924153653987

 

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

用户级线程优点:

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

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

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

用户级线程缺点:

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

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

内核级线程优点:

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

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

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

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


推荐阅读
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
author-avatar
fangxiaoping47
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有