一、进程定义

进程可以看成程序的执行过程,可以展示在当前时刻的执行状态。它是程序在一个数据集合上的一次动态执行的过程。这个数据集合通常包含存放可执行代码的代码段,存放初始化全局变量和初始化静态局部变量的数据段、用于调试的符号表、未初始化的全局变量和未初始化的静态局部变量的bss段,存放对象数据和临时变量以及数据层次结构的堆栈,系统资源等。程序是静态的,一组有序代码的集合,保存在硬盘中,进程是动态的,是程序的执行过程,执行过程结束,进程也就被结束。进程分为用户态和核心态。当进程需要在内核中进行系统调用完成功能时,这个步骤由操作系统完成,进程只需要向操作系统进行请求操作就行,此时的进程状态称之为核心态,进程不再内核中工作时的状态称之为用户态。

二、进程具有的特点:

1)动态性:可以动态地被创建、结束进程

2)并发性:进程可以被独立调度并占用处理机运行

3)独立性:每个进程有自己的内存空间,进程执行的正确性不会受到其他进程的正常执行。

4)制约性:访问共享内存和资源或者在进程间通信根据某种规则保持同步,所产生的制约

进程控制块PCB:操作系统管理控制进程运行所运用的信息集合,也是进程存在的唯一标志。信息集合包含,进程标识信息(进程PID,父进程标识,所属用户等);处理机状态信息保存区(用户可见的寄存器、控制和状态寄存器,栈指针);进程控制信息(调度和状态信息、进程间通信信息、存储管理信息、资源、有关数据结构的连接信息等);

三、进程的生命周期

1)进程创建。进程可以被用户请求创建,也可被其他进程创建。在系统初始化时也会创建进程

2)进程运行。当进程可以被CPU执行时的状态为就绪状态,可以一个系统中有很多就绪状态的进程。此时操作系统根据某种调度算法选择出一个就绪态的进程给CPU执行,同时把进程的状态改成运行态。这个运行在”畅通无阻“时也不是无休止的运行,当正常运行了一段时间后 ,也会被CPU置成就绪态,把CPU的使用权让给其他进程执行。

3)进程等待(阻塞):当执行命令无法马上完成时就会把进程置为阻塞状态。例如这个文件正在其他进程写入时,或者访问资源不足时。例如换页时,读硬盘的操作时,CPU会在这个时间段去执行其他进程。

4)进程唤醒:当阻塞的进程所需要的资源被满足,或者等待的事件被到达,有其他进程或者操作系统把该进程PCB插入到就绪队列。

5)进程结束:当进程正常执行退出、错误退出、发生致命错误、被其他进程所kill 。就意味这这个进程结束了

OT)进程挂起:暂停进程的执行,此时进程不占内存空间,其映射在硬盘上。进程挂起,分为阻塞挂起和就绪挂起。解除挂起和挂起的操作主要原理是内存和硬盘换入换出。当内存空间不够用时,操作系统就会将没在执行的进程挂起(换到硬盘中)以腾出内存空间。或者有优先级更高的进程需要被执行时,此时可能会将低优先级的进程进行挂起。如果阻塞挂起进程的资源被满足,可在磁盘上修改进程状态为就绪挂起。

四、线程的定义

如果一个程序希望并发地执行不同功能。可以把这些需要并发的功能来建立进程,使它们可以并发地执行。这样做的问题是,由于每个进程中的数据相互不共享,如何实现进程间的通信,共享数据呢?实现起来开销难免会大。所以希望有一个实体能够并发地执行不同功能,共享内存数据来方便并发运行,这就是线程的目的。线程是进程的一条执行流程。进程创建需要创建PCB,分配资源。而线程有自己的TCB(线程控制块),TCB,其中包含自己独有的一些栈和寄存器如IP/PC,SP等,但是每个线程共享进程的数据段、代码段、堆空间等

进程是资源分配的单位,线程是CPU调度单位。线程同样有就绪、执行、阻塞三种状态。线程的创建、之间的通信,切换线程要比进程的创建,之间的通信,切换进程开销要来得小 。但是对于数据安全性来讲,多进程要比多线程来得安全。

五、线程的类型

线程的实现方式可分为三种:用户线程,内核线程,轻量级进程。

用户线程是操作系统看不到的线程,而内核线程是操作系统能够看得见的线程。用户线程的管理是由用户态的对应的代码库函数来进行管理,而内核线程由操作线程直接管理。通常多个用户线程可以对应一个或多个内核线程。

每个用户线程的TCB由代码库函数来管理,操作系统无法访问到。所以用户线程请求系统调用,在操作系统眼里,就是一个进程发起的系统调用,如果这个系统调用造成了系统阻塞,那么整个进程都会变成等待。除此之外,除非用户线程交出CPU的使用权,那么该进程下的其他用户线程都将无法运行。只不过这个使用权的时间片段很小让用户感觉线程在“并发执行”。

内核线程的TCB是放在操作系统的内核中的,其创建、回收、管理都是由操作系统通过系统调用/内核函数来完成的,由内核来维护进程和线程的上下文信息。所以内核线程的切换意味这硬件资源的切换,切换线程其开销要比用户线程来得大。内核线程直接由CPU来调度,如果一个内核线程被阻塞,不会影响其他内核线程,如果一个进程有多个内核线程,那么进程CPU平均使用时间要比其他进程来得长。

轻量级进程。由内核支持的用户线程。一个进程有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。因此多轻量级进程的进程,其CPU平均使用时间要比其他进程来得长,更高效

六、进程的上下文切换概述

当发生中断时,在执行的进程要停止执行把CPU的控制权交给其他进程。此时CPU要做的就是把进程的状态保存起来。进程的执行变量,代码,数据由进程自身的数据段,代码段,堆栈保存。而CPU需要另外保存的是寄存器里的值,例如SP永远指向进程栈顶的指针寄存器,执行到的代码位置的IP/PC 等寄存器。而这些寄存器的值都保存在PCB中,PCB保存在操作系统的内核中。

常用寄存器汇总:https://blog.csdn.net/superSmart_Dong/article/details/115920429

操作系统原理:进程与线程、进程生命周期、线程的类型相关推荐

  1. java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)

    1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...

  2. 线程的生命周期和状态控制

    为什么80%的码农都做不了架构师?>>>    一.线程的生命周期 线程状态转换图: 其中Thread.join()调用的是Object.wait()方法实现的,意思是让当前线程等待 ...

  3. java -- 线程的生命周期

    线程的生命周期 1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新 ...

  4. Java并发编程:线程的生命周期是个怎样的过程?

    前言 在日常开发过程中,如果我们需要执行一些比较耗时的程序的话,一般来说都是开启一个新线程,把耗时的代码放在线程里,然后开启线程执行.但线程是会耗费系统资源的,如果有多个线程同时运行,互相之间抢占系统 ...

  5. java中线程的生命周期

    文章目录 java中Thread的状态 NEW Runnable BLOCKED WAITING TIMED_WAITING TERMINATED java中线程的生命周期 线程是java中绕不过去的 ...

  6. java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...

  7. 小伙伴们,线程生命周期、线程池生命周期别再傻傻分不清楚了!!!

    文章目录 前言 线程的生命周期 线程池生命周期 CSDN独家福利降临!!! 尾言 前言 博主 常年游荡于牛客面经区,总结了字节.阿里.百度.腾讯.美团等等大厂的高频考题,之后会逐步分享给大家,期待各位 ...

  8. java线程的生命周期及wait(),notify(),notifyAll()的详解分析

    1.java线程的生命周期     线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)     当创建Thread类的一个实例(对象)时, ...

  9. java 线程僵死_线程的生命周期?什么时候会出现僵死进程?

    线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 新建(new Thread) 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动).例 ...

  10. android应用开发(25)---进程和应用程序生命周期

    进程和应用程序生命周期 在大多数情况下,每个Android应用程序都在其自己的Linux进程中运行.当需要运行某些代码时,会为应用程序创建此进程,并且该进程将保持运行状态,直到不再需要它为止,并且 系 ...

最新文章

  1. Microsoft Visual Studio 2010 Load Test Feature Pack安装排错
  2. C++:从子类访问父类的私有函数
  3. php round 取余,PHP round() 函数
  4. c\c++中比较两个字符串或string对象是否相等
  5. python占位符_Python(2)——Python的基础语句
  6. Candy leetcode java
  7. Java爬虫开发总结
  8. 使用DroidCam过程中所遇到的问题及处理方法
  9. 基于springboot老年人健康体检系统(带论文)
  10. Mac 配置多个ssh-key
  11. 腾讯视频投屏显示无法连接服务器,腾讯视频突然不能投屏怎么办 投屏连接失败解决方法...
  12. 面试要点之——23种设计模式及其应用场景
  13. 4G摄像头采用GB28181协议成功接入LiveGBS国标流媒体平台的设置流程
  14. 板端电源硬件调试BUG
  15. Oracle 11.2 参数详解
  16. @Resource与@Autowired注解的区别
  17. 隐私计算及密码学学习记录
  18. 计算机组成原理:简单页表和多级页表(虚拟内存的映射)
  19. php毕业设计毕设课题选题项目作品 基于php+Mysql餐厅网站和座位预定系统(1) 开题报告
  20. mds、mds_stores、mdworker 占用大量 cpu 和内存

热门文章

  1. You must install #39;hg#39; on your build machine
  2. Linux关闭selinux
  3. Android动态加载插件APK
  4. freemarke之TemplateDirectiveModel详解
  5. nodejs之async异步编程
  6. c# winform窗口自适应各种分辨率类
  7. go map(映射)的概念、3种创建方式及map的CRUD操作
  8. 【收藏】Hadoop解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries.问题
  9. gradle mavenCentral()、jcenter()、google()仓库配置成阿里云
  10. k8s Dashboard部署Tomcat集群