计算机操作系统-进程篇

2023-11-16

一、进程

进程(progress):是指计算机中已运行的程序。

每个进程都有自己的地址空间、内存、寄存器和堆栈等资源,它们与其他进程相互隔离,互不干扰。进程是操作系统中最基本的资源分配单位,也是操作系统中最重要的概念之一。

在操作系统中,进程是由操作系统内核创建和管理的。当一个程序被执行时,操作系统会为该程序创建一个新的进程,并分配相应的资源,包括内存、寄存器、文件句柄等。进程可以执行各种操作,包括读写文件、网络通信、计算等等。

每个进程都有一个唯一的进程标识符(PID),用于区分不同的进程。进程可以通过系统调用来创建子进程、等待子进程退出、发送信号等等。操作系统可以通过进程管理器来查看和管理当前正在运行的进程,包括启动、停止、暂停、恢复等等。

二、线程

线程(thread):操作系统内部机制在发展过程中对进程的有效细化,是操作系统分配处理器(CPU)时间的基本单元,它被包含在进程之中,是进程中的实际运作单位。

一个进程可以包含多个线程,它们共享进程的资源,包括内存、文件句柄、网络连接等等。每个线程都有自己的堆栈和寄存器,但是它们共享进程的代码段、数据段和打开的文件等资源。

与进程不同的是,线程是由进程内部创建和管理的。一个进程可以创建多个线程,并且这些线程可以并发执行,共享进程的资源。线程可以协作完成一项任务,也可以分别执行不同的任务。

线程有以下几个特点:

  1. 线程是进程的一部分,是进程中的执行单元。

  2. 线程可以共享进程的资源,包括内存、文件句柄、网络连接等等。

  3. 线程有自己的堆栈和寄存器,但是共享进程的代码段、数据段和打开的文件等资源。

  4. 线程可以并发执行,相互独立,但是它们共享进程的资源,需要通过同步机制来协调和控制访问。

  5. 线程的创建、切换和销毁都比进程快,因为线程共享进程的资源,不需要像进程那样进行资源分配和管理。

线程是操作系统中最基本的执行单元,也是实现并发编程的基础。线程可以提高程序的并发性和响应性,但是也需要注意线程安全和同步机制的问题。

三、并发与并行

并发(Concurrency):多个任务在同一时间段内交替执行的能力。在单个 CPU 上,多个任务通过时间分片技术交替执行,看起来好像是同时执行的。但实际上,每个任务都只能在 CPU 上独占一段时间,然后就要让出 CPU 给其他任务,等待下一次 CPU 分配。在多 CPU 系统中,多个任务可以在不同的 CPU 上并发执行,从而提高系统的处理能力。

并行(Parallelism):多个任务在同一时刻同时执行的能力。在多 CPU 系统中,多个任务可以在不同的 CPU 上并行执行,从而提高系统的处理能力。在单个 CPU 上,多个任务可以通过多线程技术并行执行,但这种并行执行方式受限于 CPU 的核心数和线程数。

总的来说,并发和并行都是提高计算机系统处理能力的重要手段,但它们的实现方式不同。并发是通过时间分片技术实现的,而并行是通过多 CPU 或多线程技术实现的。在实际应用中,我们需要根据具体的需求选择合适的并发和并行方案,以达到最优的性能和效率。

注:

任务(Task):计算机系统中一个独立的工作单元,可以是一个程序、一个进程、一个线程或者一个作业等。任务是计算机系统中最基本的执行单元,可以独立地执行一项工作,也可以与其他任务协同完成复杂的任务。

作业(Job):一组相关的任务,通常是由一个用户提交到计算机系统中,由计算机系统按照一定的顺序依次执行的一系列操作。作业通常由多个任务组成,这些任务之间可能存在依赖关系,需要按照一定的顺序执行

四、为什么要引入进程与线程

 最初的操作系统只有进程.

1、引入进程的目的

为了描述和实现多个程序的并发执行,以改善资源利用率并提高系统的吞吐量。

注:系统的吞吐量是指在单位时间内系统能够处理的请求数量或数据量。吞吐量是衡量系统性能的重要指标之一,通常用来评估系统的处理能力和效率。

进程是操作系统中资源分配的基本单位,每个进程都有独立的内存空间、文件句柄、网络连接等资源。但是,为了使程序能并发执行,系统必须进行一系列的操作

  • 创建进程
  • 撤销进程
  • 进程切换

进程是由操作系统进行调度和管理的,进程的切换需要保存和恢复进程的上下文信息,因此进程切换的开销比较大,所以系统中存在的进程数目不能太多,切换频率不能太频繁。这些因素都在制约着操作系统的并发性。

所以,就提出将进程的调度属性与资源申请属性分开,产生了现代的操作系统中的线程概念。

2、引入线程的目的

为了减少程序并发执行所付出的额外开销,使操作系统具有更好的并发性。进程作为资源的申请与拥有单位,线程作为调度的基本单位。

解释:创建进程就要申请必要的系统资源,而进程获取处理器资源(即CUP执行)就称为调度。

           系统资源:包括内存空间,I/O设备等。

同一进程中的多个线程之间的切换不会引起进程的切换,而一个进程的线程切换到另一个进程的线程时,会引起进程的切换。

五、进程的状态

进程一般有三种状态:执行,阻塞,就绪

执行:当一个进程正在占用CPU,进程在内存

就绪:进程可以运行,但是CPU被其他进程占用,导致不能立即运行,进程在内存

阻塞:进程在某个等待事件而不能继续执行,阻塞状态的进程通常组织成队列,进程在内存。

如果被细化,则分为五个状态:新建,执行,就绪,阻塞,终止。有时候,为了有效的利用处理器,有的操作系统采用了对换技术(swapping),将进程从内存换到磁盘中,进程的状态变为挂起。
进程挂起的主要原因:
1、 进程全部阻塞,处理机空闲
2、 系统负荷过重,内存紧张 
3、 操作系统的需要
4、 终端用户的请求
5、 父进程的需求

六、线程的状态

  1. 新建(New):当线程对象被创建时,它处于新建状态。

  2. 就绪(Ready):当线程已经准备好执行,但还没有得到 CPU 时间片时,它处于就绪状态。

  3. 运行(Running):当线程获得 CPU 时间片并正在执行时,它处于运行状态。

  4. 阻塞(Blocked):当线程因为某些原因(如等待 I/O 操作、等待某个资源等)而暂停执行时,它处于阻塞状态。

  5. 等待(Waiting):当线程因为某些原因(如等待某个条件满足、等待某个事件发生等)而暂停执行时,它处于等待状态。

  6. 终止(Terminated):当线程执行完毕或者因为某些因(如异常、错误等)而被终止时,它处于终止状态。

参考:

C++ 并发编程(从C++11到C++17)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机操作系统-进程篇 的相关文章

  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • 关于Mysql线程的基本设置

    客户端发起连接到mysql server mysql server监听进程 监听到新的请求 然后mysql为其分配一个新的 thread 去处理此请求 从建立连接之开始 CPU要给它划分一定的thread stack 然后进行用户身份认证
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • RTX线程通信之——线程标志

    文章目录 Thread Flags 概念 RTX线程标志API 案例 LED灯同步闪亮 小结 参考资料 Thread Flags In a real application we need to be able to communicate
  • Client-Server问题

    1 实验内容与要求 需要创建客户Client和服务器Server两个进程 它们通过管道进行通信 Client进程派生3个生产者线程 一个管道线程 共享一个20个slots的缓冲区 每个生产者线程随机产生一个数据 打印出来自己的id 进程 线
  • Linux使用nvida-smi查看GPU类型

    nvida smi提供一个查看GPU信息的方法 然而这种方式不能查看GPU型号 型号被省略成了GeForce RTX 208 如果我们需要查看GPU的型号 只需要运行nvidia smi L即可 mrfive ubuntu nvidia s
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • win10 Enable developer Mode

    经过漫长的安装过程 win10终于装上了vs2015 rc 写个小程序试试 结果提示 根据提示打开 设置 更新 for developer 据说应该有这么个界面 但是这个界面根本出不来 直接闪退的说 翻 MSDN 终于翻出了解决方法 htt
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • Linux alien命令

    一 简介 alien是一个用于在各种不同的Linux包格式相互转换的工具 其最常见的用法是将 rpm转换成 deb 或者反过来 二 安装 http toutiao com a6188997768449360129 三 实例 http www
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • Windows运行常用命令(win+R)

    1 calc 启动计算器 2 notepad 打开记事本 3 write 写字板 4 mspaint 画图板 5 snippingtool 截图工具 支持无规则截图 6 mplayer2 简易widnows media player 7 S
  • Windows驱动开发(一)第一个驱动程序

    首先我们需要了解 在操作系统中 是分两种权限的 一种是内核态 我们也称为0环 一种是用户态 称之为3环 而在我们的电脑中 驱动程序是运行在内核态的 这意味着和操作系统内核是在同一权限的 而普通的应用程序的权限是最低的 高权限谁不想拥有呢 因
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • iOS线程初探(四) GCD 和 NSOperation 小结

    参考资料 关于iOS多线程 看我就够了 GCD 在GCD中 有两个概念很重要 那就是任务和队列 任务 其实就是你需要做的事情 一个Block而已 任务有两种执行方式 同步执行和异步执行 同步执行 会阻塞当前线程 直至该任务执行完成后当前线程
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • Golang协程与通道整理

    协程goroutine 不由OS调度 而是用户层自行释放CPU 从而在执行体之间切换 Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之 不通过OS进行切换 自行切换 系统运行开支大大降低 通道channel 并发编
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮

随机推荐

  • ubuntu安装高版本python

    ubuntu安装高版本python 以python3 7为例 安装其他版本python更改安装包即可 使用wget拉取安装包的方式 单纯命令行容易报错 1 下载python安装包并解压 wget https www python org f
  • 空值的处理

    1 取空值的时机 1 1不知道取什么值 比如学生登记表 某个学生的年龄忘记填了 1 2不能取值 比如选了课 缺考了 所以成绩表的成绩填空 1 3由于某种原因不便填写 比如一个人的手机号码不便填写 2 空值的产生 2 1没有给属性列赋值 2
  • 数据结构学习(一)数据结构基础

    文章目录 算法与数据结构学习 一 数据结构基础 1 数据结构 1 1 什么是数据结构 1 2 学习数据结构的必要性 2 算法 2 1 怎么衡量算法的好坏 2 1 1 时间复杂度 2 1 2 空间复杂度 2 2 时间复杂度的计算 2 3 常见
  • 【unity】【jit】【游戏开发】讲解ios系统不支持JIT的来龙去脉,以及unity在IOS上需要使用反射时候的替代方案

    标题有点长啊 很彪 所以我们叫彪题 咋地 东北地 你瞅啥 1 带有增高垫IL的c c 语言作为一种高级语言 是不能直接在我们的CPU上来直接运行的 需要编译成IL语言 Intermediate Language 即中间层语言 就是这么高冷
  • 《机器学习实战》第六章 Python3代码-(亲自修改测试可成功运行)

    由于Peter Harrington所著的这本 机器学习实战 中的官方代码是Python2版本的且有一些勘误 使用Python3的朋友运行起来会有很多问题 所以我将自己在学习过程中修改好的Python3版本代码分享给大家 以供大家交流学习
  • STM32 bool

    STM32中基于库V3 5的头文件中 去掉了对bool类型变量的定义 而将它放在了文件stdbool h中 d Keil v5 ARM ARMCC include stdbool h stdbool文件内容如下 stdbool h ISO
  • C++将字符串中包含指定字符串范围内的字符串全部替换

    概述 将指定字符串所在的范围之内的字符串全部替换为指定的字符串 如 源字符串 START dfh待到花开月圆时 两首相顾心相连 END dhussd2434xhuhu是别人十大海归 转换后的字符串 dfh待到花开月圆时 两首相顾心相连 dh
  • XXE漏洞

    何为XXE 简单来说 XXE就是XML外部实体注入 当允许引用外部实体时 通过构造恶意内容 就可能导致任意文件读取 系统命令执行 内网端口探测 攻击内网网站等危害 典型攻击手法 XML又是什么呢 XML用于标记电子文件使其具有结构性的标记语
  • 自动填充固定行数的 GridView

    效果图 代码 C lt script runat server gt 计算数据 这里可以适当修改从数据库中获取
  • Android学习一课一得

    Android学习一课一得 文章目录 引言 1 学习入门 1 1Android开发入门 1 2用户界面设计与布局 1 3数据存储与持久化 1 4网络通信与数据获取 1 5结语 2 学习成果 2 1学习经验与方法 2 2在Android应用中
  • Gym 102152(CDZSC——2020寒假大一愉悦个人赛)

    Gym 102152 A B C D E F G H I J K L http codeforces com gym 102152 A B Memory Management System It is your first day in y
  • c++实现文件版本类b+树

    一 插入 无根节点 当没有根结点时 操作相当简单 只是从存储空间中申请一个新结点 然后设置该结点的prev next is inner 然后将要插入的数据插入该结点 void insert const t var key t val v 没
  • "1,2;3,4,5;6,7,8,9" 转换成[1,2][3,4,5][6,7,8,9]

    1 2 3 4 5 6 7 8 9 转换成 1 2 3 4 5 6 7 8 9 public class Test public static void main String args String s 1 2 3 4 5 6 7 8 9
  • hduoj 2002

    计算球体积 Problem Description 根据输入的半径值 计算球的体积 Input 输入数据有多组 每组占一行 每行包括一个实数 表示球的半径 Output 输出对应的球的体积 对于每组输入数据 输出一行 计算结果保留三位小数
  • Unity报错之【NullReferenceException: Object reference not set to an instance of an object】

    空指针错误 Object并没有作为一个对象的实例 一般都是引用类型的变量没有实例化便使用变量进行一些实例对象才能进行的操作 例如list没有new实例 便对其进行添加元素 private List
  • Python中对文件的常规操作

    文章目录 一 读取文本文件数据 1 1 读文件 r 标识符 1 2 写文件 w操作 1 3 写文件 write only a操作 1 4 r 操作 1 5 w 操作 1 6 a 操作 二 读取非纯文本数据 三 指针的变化 四 上下文管理器
  • web漏洞类型概述(owasp top10笔记)

    一 owasp top10是什么 OWASP 开放式Web应用程序安全项目 OWASP Open Web Application Security Project 是一个非营利组织 不附属于任何企业或财团 它提供有关计算机和互联网应用程序的
  • 基于opencv -python--银行卡识别

    import cv2 def sort contours cnts method left to right reverse False i 0 if method right to left or method bottom to top
  • R 修改安装包默认存放位置的方法

    目录 R语言修改安装包的默认储存位置 查看默认的安装包位置 第一种方法会修改当前用户的R包位置 第二种方法 永久改变 永久有效 第三种方法 修改环境变量 总结 R语言修改安装包的默认储存位置 查看默认的安装包位置 一般会有两个目录 如下 第
  • 计算机操作系统-进程篇

    一 进程 进程 progress 是指计算机中已运行的程序 每个进程都有自己的地址空间 内存 寄存器和堆栈等资源 它们与其他进程相互隔离 互不干扰 进程是操作系统中最基本的资源分配单位 也是操作系统中最重要的概念之一 在操作系统中 进程是由