操作系统面经-程序和进程的区别

1.程序、进程、线程简述

程序的基本概念

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程的基本概念

在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程(Process) 的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性(最基本的两个特性)。

为了使参与并发执行的程序(含数据)能独立地运行,必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block, PCB) 。系统利用PCB 来描述进程的基本情况和运行状态,进而控制和管理进程。

相应地,由程序段、相关数据段和PCB三部分构成了进程映像(进程实体)。所谓创建进程,实质上是创建进程映像中的PCB; 而撤销进程,实质上是撤销进程的PCB 。值得注意的是,进程映像是静态的,进程则是动态的。

从不同的角度,进程可以有不同的定义,比较典型的定义有:

  1. 进程是程序的一次执行过程。
  2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
  3. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

引入进程实体的概念后,我们可以把传统操作系统中的进程定义为: “进程是进程实体的运行过程是系统进行资源分配和调度的一个独立单位。(还没引入线程)”

❝ 【注意】:要准确理解这里说的系统资源。它指处理机、存储器和其他设备服务于某个进程的”时间”,例如把处理机资源理解为处理机的时间片才是准确的。因为进程是这些资源分配和调度的独立单位(还没引入线程),即“时间片”分配的独立单位,这就决定了进程一定是一个动态的、过程性的概念。

线程的基本概念

引入进程的目的是为了更好地使多道程序并发执行,提高资源利用率和系统吞吐量;而引入线程的目的则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。

线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID 、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

2.程序和进程比较

❝ 【拓展问题1】:为什么要引入进程? 答:在多道程序同时运行的背景下,进程之间需要共享系统资源,因此会导致各程序在执行过程中出现相互制约的关系,程序的执行会表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行、何时停顿,也无法看出它与其他执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质乃至更好地支持和管理多道程序的并发执行,人们引入了进程的概念。

❝ 【拓展问题2】:进程是如何解决问题的? 答:进程把能够识别程序运行态的一些变量存放在PCB中,通过这些变量系统能够更好地了解进程的状况,并在适当时进行进程的切换,以避免一些资源的浪费,甚至划分为更小的调度单位线程来提高系统的并发度。

程序和进程的比较

  1. 程序是永存的(除非删除);进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;
  2. 程序是静态的观念,进程是动态的观念;
  3. 进程具有并发性,而程序没有;
  4. 进程是竞争计算机资源的基本单位,程序不是。
  5. 进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序。

3.进程和线程

❝ 【拓展问题3】:为什么要引入线程? 答:进程存在着很多缺陷,主要集中在两点: (1)进程只能在同一时间干一件事情,如果想同时干两件事或多件事情,进程就无能为力了。 (2)进程在执行的过程中如果由于某种原因阻塞了,例如等待输入,整个进程就会挂起,其他与输入无关的工作也必须等待输入结束后才能顺序执行。 为了解决上述两点缺陷,引入了线程这个概念。

线程与进程的比较

  1. 调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
  2. 拥有资源。不论是传统操作系统还是设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源(也有一点儿必不可少的资源),但线程可以访问其隶属进程的系统资源。要知道,若线程也是拥有资源的单位,则切换线程就需要较大的时空开销,线程这个概念的提出就没有意义。
  3. 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行,从而使操作系统具有更好的并发性,提高了系统的吞吐量。
  4. 系统开销。由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/0 设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程CPU 环境的保存及新调度到进程CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信非常容易实现,甚至无须操作系统的干预。
  5. 地址空间和其他资源(如打开的文件)。进程的地址空间之间互相独立,同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。
  6. 通信方面。进程间通信(IPC) 需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信。
❝ 【为什么线程的提出有利于提高系统并发性?】可以这样来理解:由于有了线程,线程切换时,有可能会发生进程切换,也有可能不发生进程切换,平均而言每次切换所需的开销就变小了,因此能够让更多的线程参与并发,而不会影响到响应时间等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Verilog刷题笔记41

题目:Create 8 D flip-flops with active high asynchronous reset. All DFFs should be triggered by the positive edge of clk. 解题: module top_module (input clk,input areset, // active high asynchronous resetinput [7:0] d,output [7:0]…

ollama -linux部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 安装对应的包启动ollama启动llama2大模型(新开一个终端)python接口对话streamlit对话 安装对应的包 # linux 安装curl -fsSL https://ollam…

开发chrome扩展( 禁止指定域名使用插件)

mainfest.json: {"manifest_version": 3,"name": "ChatGPT学习","version": "0.0.2","description": "ChatGPT,GPT-4,Claude3,Midjourney,Stable Diffusion,AI,人工智能,AI","icons": {&quo…

哪些事是你当了领导才明白的?

哪些事是你当了领导才明白的? 毕业5年,17年开始带团队,确实很多事不做到管理这一层,就真的意识不到。 带着【执行者】和【管理者】这2个视角,再结合我毕业至今这5年的所有职场经历,聊聊“职场潜规则”。 …

docker swarm 集群创建

1,目的: 通过docker swarm 工具将一台或者多台安装了docker的服务器组成一个完整的集群,该集群中的node节点可以通过Leader节点管理。在使用docker stack部署时,可以将容器自动分发到合适的节点上。 2,服务器准备&am…

python统计分析——t分布、卡方分布、F分布

参考资料:python统计分析【托马斯】 一些常见的连续型分布和正态分布分布关系紧密。 t分布:正态分布的总体中,样本均值的分布。通常用于小样本数且真实的均值/标准差不知道的情况。 卡方分布:用于描述正态分布数据的变异程度。 F分…

R语言Meta分析核心技术:科研论文写作与数据可视化技巧

R语言作为一种强大的统计分析和绘图语言,在科研领域发挥着日益重要的作用。其中,Meta分析作为一种整合多个独立研究结果的统计方法,在R语言中得到了广泛的应用。通过R语言进行Meta分析,研究者能够更为准确、全面地评估某一研究问题…

ShardingSphere+JPA+Druid实现分表操作

要在SpringBoot项目中实现分表操作,本文使用的是ShardingSphereJPADruid实现。过程中出现问题记录一下。 准备MySQL数据库表 这里准备的是一张主表test_cost,两张从表test_cost_0和test_cost_1,结构需要相同,主表只是声明了表结构…

嵌入式学习-ARM

嵌入式学习-ARM STM32串口控制三盏灯亮灭 MAIN.C #include "uart4.h" int main() {uart4_init();gpio_init();char str[32];while (1){gets(str);if (my_strcmp(str,"A") 0){led1();}else if (my_strcmp(str,"B") 0){led2();}else if (my_s…

用大语言模型控制交通信号灯,有效缓解拥堵!

城市交通拥堵是一个全球性的问题,在众多缓解交通拥堵的策略中,提高路口交通信号控制的效率至关重要。传统的基于规则的交通信号控制(TSC)方法,由于其静态的、基于规则的算法,无法完全适应城市交通不断变化的…

Tabulator-tables5.6版本升级6.0版本

npm install tabulator-table 报错内容 /node_modules/tabulator-tables/dist/js/tabulator_esm.js 658:19 Module parse failed: Unexpected token (658:19) You may need an appropriate loader to handle this file type, currently no loaders are configured to process…

Tensorflow2.0笔记 - 链式法则例子

本笔记简单记录链式法则的原理,关于链式法则,本身和高等数学中的链式求导法则是一样的,深度学习中相关资料可以参考这里: 【深度学习之美22】BP算法详解之链式法则 - 知乎10.5 什么是计算图?我们知道, 神经…

Windows环境下编译ffmpeg 6.1源码--Virtual Studio + Msys2方式

环境准备 约定:源码全部放到sources下,目录结构说明 /d/java/ffmpeg #工程工目录 ├── build #存放编译文件的目录,子目录为具体模块的构建目录 │ ├── fdk-aac │ ├── ffmpeg │ └── x264 ├── instal…

机器学习流程—AutoML

文章目录 机器学习流程—AutoMLAutoML工具Auto-SKLearnMLBoxTPOTRapidMinerPyCaretAuto-KerasH2OAutoML谷歌AutoML云Uber LudwigTransmogrifAIAutoGluonAutoWekaDataRobot

稀碎从零算法笔记Day24-LeetCode:存在重复元素

前言:本打算练习下机写快排,但是快排超时了(为什么sort没超时啊。。) 题型:排序、哈希表 链接:存在重复元素 - 提交记录 - 力扣(LeetCode) 来源:LeetCode 题目描述 题目样例 题目思路 C代…

提升水库大坝安全与效率:现代技术云平台的应用

在我国,水库大坝的数量居世界之首,它们在推动国民经济发展中扮演着不可或缺的角色。然而,要想让这些水利工程充分发挥其价值,不仅需要精准的调度与高效的管理,更重要的是要确保其安全无虞。一旦发生事故,后…

linux 使用 go 连接 etcd 集群时报错

问题分析 在 ubuntu 中使用 github.com/coreos/etcd/clientv3 第三方库报错,报错信息如下: # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint /root/go/pkg/mod/github.com/coreos/etcdv3.3.27incompatible/clientv3/balancer/resolver/…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见UIContext说明。 从API version 10开始&#xff0…

HTML世界之标签Ⅵ

目录 一、progress 标签 二、q 标签 三、rp 标签 rt 标签 ruby 标签 四、s 标签 五、samp 标签 六、script 标签 七、section 标签 八、select 标签 九、small 标签 一、progress 标签 <progress> 标签定义运行中的任务进度&#xff08;进程&#xff09;。 …

数据结构——循环队列的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…