操作系统(2)——进程线程

news2024/12/29 11:18:09

目录

  • 小程一言
    • 专栏链接: [link](http://t.csdnimg.cn/8MJA9)
    • 基础概念
    • 线程详解
    • 进程详解
    • 进程间通信
    • 调度
      • 常用调度算法
    • 重要问题
      • 哲学家进餐问题
        • 问题的描述
        • 策略
      • 读者-写者问题
        • 问题的描述
        • 两种情况
        • 策略
    • 总结
      • 进程
      • 线程
      • 一句话

小程一言

本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。

主要参考书籍:现代操作系统
书中内容有些生硬,so小程参考其他书籍内容进行了一些加工
这本书饱受诟病的原因是流传思想有些过时,但是计算机有过时的思想吗?,底层逻辑的稳定是整个计算机的基石。现在的所有思想都是在基石之上。

面向群体:在校大学生,想要补齐基础知识短板的在职人员

专栏链接: link

在这里插入图片描述

基础概念

  1. 进程:进程是计算机中运行的程序的实例。每个进程都有自己的地址空间、内存、文件描述符和其他系统资源。进程之间是相互独立的,每个进程都有自己的内存空间,不同进程之间不能直接访问对方的内存。

  2. 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程。线程共享进程的地址空间和系统资源,但每个线程有自己的栈空间和寄存器。多线程可以提高程序的并发性和性能。

  3. 进程间通信:进程之间可以通过各种方式进行通信,如管道、消息队列、共享内存、信号量等。进程间通信是实现进程协作和数据共享的重要手段。

  4. 线程同步:多线程之间需要协调和同步执行,以避免竞争条件和数据不一致的问题。常用的线程同步方式包括互斥锁、条件变量、信号量等。

  5. 进程调度:操作系统负责对进程进行调度,决定哪个进程在什么时候执行。常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)、时间片轮转等。

  6. 线程调度:线程调度是操作系统对线程进行调度的过程,决定哪个线程在什么时候执行。线程调度可以基于优先级、时间片轮转、多级反馈队列等算法。

  7. 并发:并发是指系统能够同时处理多个任务的能力。多进程、多线程和异步编程都是实现并发的方式。

  8. 并行:并行是指系统能够同时执行多个任务的能力。多核处理器和分布式系统可以实现并行处理。

  9. 死锁:死锁是指多个进程或线程因互相等待对方释放资源而无法继续执行的情况。死锁是多线程编程中常见的问题,需要合理设计和使用同步机制来避免。
    在这里插入图片描述

线程详解

线程是操作系统中的另一个重要概念,它是进程中的执行单元,可以看作是进程中的子任务。一个进程可以包含多个线程,这些线程共享进程的地址空间和其他资源,但每个线程有自己的堆栈空间和程序计数器。

线程是操作系统进行CPU调度的基本单位,多个线程可以在同一个进程内并发执行,提高了系统的并发性能。在多核处理器系统中,多个线程可以同时运行在不同的核心上,实现真正的并行处理。

与进程不同的是,线程之间可以共享数据,因为它们共享进程的地址空间。线程之间的通信更加高效,可以通过共享的内存进行数据交换。但同时,线程之间的数据共享也增加了编程的复杂性,需要谨慎处理数据的同步和互斥。

线程可以分为用户线程和内核线程。用户线程是由用户空间的线程库实现的,操作系统并不直接支持,内核只知道整个进程,无法感知用户线程的存在。内核线程则是由操作系统内核管理的线程,操作系统可以直接对其进行调度和管理。

so,线程是操作系统中的重要概念,它是进程中的执行单元,可以实现并发执行、提高系统性能。线程之间可以共享数据,但需要注意数据同步和互斥。线程的引入使得程序设计更加灵活,能够更好地利用多核处理器系统的性能。
在这里插入图片描述

进程详解

进程是操作系统中的一个基本概念,是一个正在运行的程序的实例。当一个程序被执行时,操作系统会为其创建一个进程,进程包含了程序的代码、数据、堆栈等信息,以及所需的系统资源。每个进程都有自己独立的内存空间,使得不同进程之间的数据相互隔离,确保了系统的稳定性和安全性。

进程在操作系统中扮演着重要的角色,它是系统资源分配的基本单位,操作系统通过进程来管理系统资源的分配和调度。每个进程都有自己的进程控制块(PCB),用于记录进程的状态、优先级、资源占用情况等信息,操作系统通过管理这些信息来对进程进行调度和控制。

进程可以通过创建子进程来实现并发执行,子进程可以独立运行,也可以与父进程共享资源。进程之间可以通过进程间通信(IPC)来实现数据交换和协作。常见的进程间通信方式包括管道、消息队列、共享内存等。

so,进程是操作系统中的一个重要概念,它代表了一个正在运行的程序的实例,是系统资源分配和调度的基本单位,通过进程可以实现并发执行、资源管理和进程间通信,是操作系统中的核心概念之一。
在这里插入图片描述

进程间通信

进程间通信(IPC)是指不同进程之间进行数据交换和共享信息的过程。在操作系统中,进程间通信是非常重要的,因为不同的进程需要相互协作、共享数据和资源。

常见的进程间通信方式

  1. 管道:管道是一种半双工的通信方式,可以在父子进程或者兄弟进程之间进行通信。管道有两种类型,分为无名管道和命名管道。

  2. 消息队列:消息队列是一种消息传递的方式,可以在不同进程之间传递数据。消息队列可以实现进程之间的异步通信。

  3. 共享内存:共享内存是一种高效的进程间通信方式,多个进程可以在共享内存中读写数据。共享内存可以实现进程之间的快速数据交换。

  4. 信号量:信号量是一种用于进程同步和互斥的机制,可以控制进程对共享资源的访问。

  5. 套接字:套接字是一种网络编程中常用的通信方式,可以在不同主机之间进行进程间通信。

以上是一些常见的进程间通信方式,不同的场景和需求可以选择适合的通信方式来实现进程间的数据交换和共享。

调度

在操作系统中,调度(Scheduling)是指操作系统决定哪个进程在何时执行的过程。操作系统的调度器负责管理和调度系统中的进程,以确保系统资源的有效利用和进程之间的公平竞争。
在这里插入图片描述

常用调度算法

  1. 先来先服务:按照进程到达的顺序进行调度,先到达的进程先执行。

  2. 最短作业优先:选择执行时间最短的进程先执行,以减少平均等待时间。

  3. 优先级调度:根据进程的优先级进行调度,优先级高的进程先执行。

  4. 时间片轮转:每个进程被分配一个时间片,当时间片用完时,切换到下一个进程执行,确保每个进程都有机会执行。

  5. 多级反馈队列调度:将进程根据优先级划分到不同的队列中,每个队列有不同的调度算法,进程根据执行情况在不同队列之间切换。

调度算法的选择取决于系统的需求和性能要求,不同的算法有不同的优缺点。好的调度算法能够提高系统的性能和响应速度,确保系统资源的有效利用。操作系统的调度器通常会根据当前系统的负载情况和进程的状态来选择合适的调度算法进行进程调度。
在这里插入图片描述

重要问题

哲学家进餐问题

这是一个经典的并发编程问题,用来说明在共享资源的情况下可能发生的死锁问题。

问题的描述

假设有五位哲学家围坐在一张圆桌前,每位哲学家面前放着一只筷子,而每两只筷子之间放着一碗意大利面。哲学家的生活包括思考和进餐,当哲学家思考时,不需要任何资源,但当他们饿了时,需要同时拿起他们左右两边的筷子才能进餐。问题在于,如果每位哲学家都拿起自己左边的筷子,那么所有哲学家都会陷入死锁状态,无法继续进餐。

策略
  1. 引入资源层次性:引入资源的层次性,例如规定哲学家必须按照一定顺序去拿筷子,或者只允许一部分哲学家同时进餐。

2.** 引入超时机制**:规定哲学家在一定时间内没有成功拿到筷子就会放下已经拿到的筷子,避免死锁的发生。

  1. 使用信号量或互斥锁:使用信号量或互斥锁来保护共享资源,确保一次只有一个哲学家可以拿起筷子。

  2. 破坏循环等待:规定哲学家顺序拿筷子,或者引入一个资源请求的排序机制,避免循环等待。

哲学家进餐问题是一个经典的并发编程问题,通过解决这个问题可以深入理解并发编程中的死锁和资源竞争问题,以及如何设计合理的资源分配策略来避免这些问题的发生。
在这里插入图片描述

读者-写者问题

读者写者问题也是一个经典的并发编程问题,

问题的描述

描述了多个读者和写者对共享资源的访问问题。在这个问题中,多个读者可以同时访问共享资源,但写者在访问共享资源时必须独占资源,读者和写者之间需要进行合适的同步,以确保数据的一致性和避免竞争条件。

两种情况
  1. a.是读者优先:允许多个读者同时访问共享资源,但写者必须独占资源。在这种情况下,应该尽量减少写者的等待时间,以避免读者频繁访问共享资源导致写者长时间无法访问资源。

  2. b.是写者优先:写者优先访问共享资源,读者需要等待写者释放资源后才能访问。这种情况下,需要确保写者能够及时访问资源,以避免数据不一致的情况发生。

策略
  1. 使用信号量或互斥锁:使用信号量或互斥锁来保护共享资源,确保在任何时刻只有一个写者或多个读者可以访问资源。

  2. 使用条件变量:使用条件变量来实现读者写者之间的同步,读者在访问资源时等待写者释放资源,写者在访问资源时等待所有读者释放资源。

  3. 给予优先级:根据读者和写者的优先级给予不同的访问权限,例如读者优先或写者优先的策略。

总结

进程(Process)和线程(Thread)是操作系统中用于实现并发执行的基本概念,它们都代表着程序的执行单元,但在实现方式和特点上有一些不同。

进程

  • 进程是程序在执行过程中的一个实例,是系统资源分配的基本单位。
  • 每个进程有独立的内存空间,包括代码段、数据段、堆和栈。
  • 进程之间相互独立,通过进程间通信(IPC)来进行数据交换和协作。
  • 进程拥有自己的进程控制块(PCB),用于保存进程的状态信息和运行轨迹。
  • 进程的创建、销毁和切换开销较大,因为需要保存和恢复整个进程的上下文。

线程

  • 线程是进程内的一个执行单元,是CPU调度的基本单位。
  • 同一进程内的线程共享相同的内存空间和资源,包括代码段、数据段、堆和栈。
  • 线程之间可以直接访问进程内的共享数据,因此需要注意线程安全性和同步问题。
  • 线程的创建、销毁和切换开销相对较小,因为线程共享进程的资源和上下文。
  • 多线程编程可以提高程序的并发性和性能,但也会增加编程复杂度和引入竞态条件。

一句话

进程是操作系统中资源分配的基本单位,而线程是程序执行的基本单位。

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

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

相关文章

Dockerfile实战(SSH、Systemctl、Nginx、Tomcat)

目录 一、构建SSH镜像 1.1 dockerfile文件内容 1.2 生成镜像 1.3 启动容器并修改root密码 二、构建Systemctl镜像 2.1 编辑dockerfile文件 ​编辑2.2 生成镜像 2.3 启动容器,并挂载宿主机目录挂载到容器中,然后进行初始化 2.4 进入容器验证 三、…

考研管理类联考(专业代码199)数学基础【2】整式与分式

一、整式及其运算 1.常用乘法公式(逆运算就是因式分解) 公式扩展① 公式扩展② 公式扩展③ 2.整式除法定理 若整式 F(x) 除以x-a的余式为r(x),则 F(x) (x -a) g(x) r(x) ,故r(a)F(a)成立 二、指数和对数的运算性质 1.指数运算…

【电路笔记】-石英晶体振荡器

石英晶体振荡器 文章目录 石英晶体振荡器1、概述2、石英晶体等效模型3、石英晶体振荡器示例14、Colpitts 石英晶体振荡器5、Pierce振荡器6、CMOS晶体振荡器7、微处理器水晶石英钟8、石英晶体振荡器示例21、概述 任何振荡器最重要的特性之一是其频率稳定性,或者换句话说,其在…

Linux migrate_type初步探索

1、基础知识 我们都知道Linux内存组织管理结构架构,顶层是struct pglist_data,然后再到struct zone,最后是struct page。大概的管理结构是这样的: 根据物理内存的地址范围可划分不同的zone,每个zone里的内存由buddy…

审计师能力与专长数据集(2014-2022年)

01、数据介绍 审计师是专门从事审计工作的人员,他们对企业、政府机关、金融机构等组织进行独立的、客观的、合法的审计,以评估这些组织的财务状况、经营绩效和风险水平。审计师通过收集和评估证据,以确定被审计单位的财务报表是否公允、合法…

【第3章】spring-mvc请求参数处理

文章目录 前言一、准备1. 增加mavan配置 二、简单参数1.JSP2.Controller 三、复杂参数1.JSP2.Controller 三、扩展1.JSP2.header3.cookie4.session 总结 前言 在上一章的基础上,我们来学习对于请求参数的解析,前后端分离已经是大势所趋,JSP相…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书,进入苹果开发者官网(https://developer.apple.com/) 3、点击账户(account),然后创建一个唯一的标识符 4、点击"Identifiers",然后点击"&qu…

【C++】学习笔记——内存管理

文章目录 二、类和对象20. 友元1. 友元函数2.友元类 21. 内部类22. 匿名对象23. 拷贝对象时的一些编译器优化 三、内存管理1. C/C内存分布2. C语言中动态内存管理方式:malloc/calloc/realloc/free3. C内存管理方式 未完待续 二、类和对象 20. 友元 1. 友元函数 我…

ELK Stack 8 接入ElasticFlow

介绍 Netflow v5 / v9 / v10(IPFIX),支持大部分网络厂商及VMware的分布式交换机。 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图,记录下每个TCP/IP事务的信息。当汇集起来时,它更加易于管理和易读。…

基于Springboot+Vue的Java项目-入校申报审批系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

产业结构-整体升级、合理化、高级化数据集(1990-2022年)

一、数据介绍 数据名称:产业结构协调-高级化、合理化 数据年份:1990-2022年 数据范围:全国31个省份 数据来源:中国统计NJ、国家TJ局 数据类型:内含原始版本、线性插值版本、ARIMA填补版本 数据说明:参…

分类规则挖掘(二)

目录 三、决策树分类方法(一)决策树生成框架(二)ID3分类方法(三)决策树的剪枝(四)C4.5算法 三、决策树分类方法 决策树 (Decision Tree) 是从一组无次序、无规则,但有类别…

240 基于matlab的飞行轨迹仿真程序

基于matlab的飞行轨迹仿真程序,多种不同的飞行轨迹,输出经度、纬度、高度三维轨迹,三个方向的飞行速度。程序已调通,可直接运行。 240 飞行轨迹仿真 三维轨迹 飞行速度 - 小红书 (xiaohongshu.com)

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

sunshine+n2n+moonlight串流远程控制全教程

远程主机说明(两台电脑不在同一局域网下): 控制台电脑 被控制电脑 所有工具下载地址:https://www.lanzouw.com/b00eepod7e 密码:1234 一、首先NTN组网 使用NTN技术创建虚拟局域网,实现设备之间的P2P连接。 NTN组网…

制作一个RISC-V的操作系统十五-软件定时器

文章目录 定时器分类定时器相关分类软件定时器设计初始化创建删除触发流程图形示意 优化代码 定时器分类 硬件定时器:由硬件频率和触发限制的大小决定,只有一个,精度高 软件定时器:基于硬件定时器实现,精度大于等于硬…

python学习之词云图片生成

代码实现 import jieba import wordcloudf open("D:/Pythonstudy/data/平凡的世界.txt", "r", encoding"utf-8") t f.read() print(t) f.close() ls jieba.lcut(t) txt " ".join(ls)w wordcloud.WordCloud(font_path"D:/cc…

Redis系列-1 Redis介绍

背景: 本文介绍Redis相关知识,包括Redis的使用、单线程机制、事务、内存过期和淘汰机制。后续将在《三方件-3 Redis持久化机制》中介绍Redis基于RDB和AOF的持久化机制;在《三方件-4 Redis集群》介绍主从、哨兵和Cluster集群相关的内容&#…

【笔记】Anaconda命令提示符(Anaconda Prompt)操作

通过anaconda配置python环境有时需要conda安装一些包或者文件,这里作为一个笔记记录如何打开Anaconda命令提示符(Anaconda Prompt),并用conda操作 1.打开Anaconda命令提示符(Anaconda Prompt) 可直接在搜…

【C++】STL学习之优先级队列

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 前言一、优先级队列的使用1.1 基本功能1.2 优先级模式切换1.3 相关题目 二、模拟实现优先级…