操作系统,进程与线程(一)(上)

简介: 操作系统,进程与线程(一)

💕"i need your breath"💕

作者:Mylvzi

文章主要内容:操作系统,进程与线程

一.操作系统

1.什么是操作系统

操作系统本质上就是一个"搞管理"的软件

日常生活中经常听到windows操作系统,Linux操作系统,Mac os操作系统,这些操作系统本质上都是一个个用于管理计算机的软件,当然这个软件十分复杂

2.操作系统的功能

操作系统的功能主要有两点

  1. 对上给各种软件提供一个稳定的运行环境
  2. 对下管理各种硬件设备

说明:给各种软件提供一个稳定的运行环境是指各个软件在运行的过程中互相独立,互不干扰(也就是后面要讲的进程的独立性),一个程序的崩溃并不影响到其他程序的正常运行(总不能你女朋友打进来个电话,你游戏就自动退出吧)

管理各种硬件设备:市面上有许许多多的硬件设备,但是操作系统就那几套,它是如何管理各种硬件设备呢?硬件生产的厂商在生产硬件的时候还会开发硬件对应的驱动程序,操作系统通过这些驱动程序就能管理对应的硬件设备,不同的硬件设备有着不同的驱动程序,但是能保证操作系统通过这些驱动程序进行硬件的管理

使用一张图更清晰的了解操作系统的功能

3.操作系统包含什么

一个操作系统主要由内核+各种应用程序组成,内核是操作系统最核心的部分

硬件的驱动程序就是在内核中运行的,内核也会给许多的应用程序提供支持

二.进程

1.什么是进程

 进程(task/process)就是正在进行的程序(必须是已经运行起来的),在我们的电脑上有很多的进程,由系统自带的,有我们自己下载的,可以在任务管理器中观察我们当前运行的进程

2.进程有什么特点

进程就是跑起来的程序,程序一旦运行,就要吃cpu资源,占用系统内存

所以,一个进程就对应着一定的系统资源,或者说

                                               进程是系统资源分配的基本单位

3,进程在系统中是如何管理的

一个计算机中,大大小小的进程有很多,如何管理这些线程是一个很大的挑战

这么多进程仅需要进行有效的管理,要管理先要明确管理的对象,再去考虑管理的方式,所以进程的管理分为两步

  1. 描述:使用PCB(进程控制块)来组织进程的各种属性(明确管理的对象)
  2. 组织:使用双向链表管理管理PCB

使用PCB描述进程的属性,一个进程可能对应着多个PCB,再通过"双向链表"这种数据结构来管理PCB,也就是管理相应的进程

也就是说:

  • 创建新的进程就是创建PCB,并插入到双向链表之中
  • 删除进程就是删除双向链表中对应的PCB
  • 展示进程,就是遍历双向链表的每一个结点

4.PCB的一些属性

进程的属性都被PCB(进程控制块)组织起来,PCB中有很多重要的属性

  • pid:进程的标识  当程序运行起来之后就会产生pid
  • 内存指针:用于确定当前进程在内存中的存储位置与空间大小  对于一个进程来说,其实有很多需要存储的数据  常见的有进程执行所需要的指令  进程执行所依赖的数据  进程执行过程中产生的临时数据
  • 文件描述符表:用于描述进程都和哪些文件有关联  也就反映了进程所持有的硬盘资源  

一个进程来说可能由多个PCB组织起来,那就对应多个pid

一个chrome浏览器就有多个pid

如何理解内存指针呢?可以以写博客为例

进程所需要的指令:打开CSDN,点击发布文章,敲文字

进程执行所依赖的数据:学习笔记,同学交流

进程执行过程中产生的临时数据:你对某个点很感兴趣,询问了chatgpt,他额外给你补充了一些知识

5.什么是进程的调度

 在之前的计算机中,我们只有一个cpu,也称作"单核操作系统",同一时刻只能有一个进程运行,要进行其他的进程必须先把上一个进程关闭,那又是如何实现多个进程同时运行呢?其核心思路是:通过快速的轮转,在宏观上实现了"同时运行"

 就是只要我足够快,在一个进程结束的时候特别快的运行另一个进程,在宏观上就能实现"同时运行"的效果

 同时,现在的计算机大多都是"多核操作系统",也就是含有多个cpu,这是就可以把其他进程转移到其他的cpu上,如果两个进程分别在两个cpu上运行,宏观微观上都是同时运行,称作"并行"

 一个cpu通过快速的轮转,实现宏观上的同时运行,称作"并发",但实际上我们并不需要严格区分是并发还是并行,同时使用"并发"来统称

6.PCB中与进程调度有关的属性

1.状态

 状态就是进程当前的运行情况  常见的有两种情况  就绪状态和阻塞状态  就绪状态分为两种,正在运行和准备运行  阻塞状态就是进程暂时不参与调度  最常见的是等待用户输入密码

2.优先级:

 系统再分配硬件资源的时候并不是一视同仁的,而是根据进程的优先级去分配资源  优先级高的就优先分配更多的资源  优先级低的就晚分配/少分配资源  就像你在打游戏的时候还看着qq,肯定是希望先保证游戏的流畅运行  qq接收消息的优先级就低    其实优先级也是操作系统为了提高效率的一种体现

3.上下文:

 就是"存档"保存当前进程执行时的cpu状态(更具体的来说是寄存器的状态)这样做是为了当下次再执行当前进程时能够直接利用上次的"存档"  比如你在打游戏的时候女朋友打电话过来了,你肯定得接是吧,就得先退出游戏  先打完电话再重新进入游戏  在你退出打电话的时候进程就保存了当时的运行状态  这样你打完电话之后也能再次回到离开前的游戏界面

4.记账信息:

存储进程所持有的cpu资源  以便合理的用于系统资源的调度  通过优先级我们为不同的进程分配了不同权重的硬件资源  但是在某些情况下可能会发生一些极端情况  为某个进程分配了过量的资源 而另一个进程就没有被分配到资源导致无法正常运行  记账信息就是为了解决这个问题  通过记录当前进程所持有的硬件资源  当发现不合理的资源调配时及时做出调整

7.虚拟地址空间

 在早期的操作系统中,程序运行时,系统分配的内存是实打实的"物理内存"

当B进程中存在bug,发生了越界访问,导致在同一块内存中的A进程无法运行,我们希望的是当一个程序崩溃的时候另一个程序不受影响,为了解决这个问题引入了虚拟地址空间

  1. 对于进程A,B来说,他们并不知道自己在物理内存中的对应位置,操纵内存不是物理内存,而是系统为他们分配的虚拟内存
  2. 虚拟内存通过映射器与物理内存一一映射(类似于哈希表的映射),进程在虚拟内存中进行的操作都会被映射到物理内存中
  3. 进程直接操纵虚拟内存,在映射到物理内存之前会先对执行操作进行检查,看其是否发生不合理行为(如越界访问),如果发生错误就不会被执行,这样就算当前存在bug也不会影响另一个进程的正常运行(传输到物理内存中的操作都是被检验好的合理的数据)
  4. 虚拟地址空间的存在进一步提高了进程之间的独立性  在进行进程的调度时就避免了进程冲突的出现

注:虚拟地址空间实现了进程之间的隔离,保证了进程的独立性但是在有些需求下各个进程之间是需要合作的,所以在保证进程之间的隔离性的前提下,我们还要想办法让进程之间能够相互通信,进程间的通信方式有很多,常见的有

  1. 通过网络传输
  2. 通过文件

这些通信的核心思想都是相同的,即:

                                       借用同一块内存空间实现数据的交互。

操作系统,进程与线程(一)(下)+https://developer.aliyun.com/article/1413563

目录
相关文章
|
12天前
|
Go 调度 开发者
[go 面试] 深入理解进程、线程和协程的概念及区别
[go 面试] 深入理解进程、线程和协程的概念及区别
|
16天前
|
算法 调度 Python
深入理解操作系统:进程调度的奥秘
【8月更文挑战第4天】操作系统是计算机系统的核心,其中进程调度是其重要的组成部分。本文将深入探讨进程调度的原理和实现,包括进程调度的目标、常用的调度算法以及如何在实际中应用这些知识。我们将通过代码示例来展示进程调度的具体实现,帮助读者更好地理解和掌握这一关键技术。
|
5天前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
7天前
|
算法 调度 UED
操作系统的心脏:内核与进程管理
在数字世界的宏伟建筑中,操作系统是那支撑起一切软件运行的基石。本文将深入浅出地探讨操作系统的核心—内核,以及它如何通过进程管理来协调计算机资源的使用。我们将从内核的定义和功能出发,逐步深入到进程的生命周期,以及调度算法的重要性,最终揭示这些机制如何影响我们日常使用的电子设备性能。
15 2
|
7天前
|
算法 调度
操作系统中的进程管理与调度
【8月更文挑战第14天】在现代计算机系统中,操作系统扮演着至关重要的角色。它不仅负责管理硬件资源,还提供了进程管理的机制来协调多个程序的执行。本文将深入探讨操作系统如何通过进程管理与调度来优化资源使用和提高系统响应性。我们将从进程的概念出发,分析进程状态转换、进程调度算法及其对系统性能的影响。通过理解这些概念,读者将能够更好地把握操作系统的核心原理及其在实际场景中的应用。
|
19天前
|
算法 调度 Python
探索操作系统的心脏:深入理解进程调度
【8月更文挑战第1天】在数字世界的每一次跳动中,有一个不可见的手在操纵着一切——那就是进程调度。本文将带你穿梭于现代操作系统的核心,揭开进程调度机制的神秘面纱。通过直观的代码示例和详细的分析,我们将共同见证这一技术如何在微观层面影响宏观世界的运行。让我们开始这场深入操作系统内核的探险之旅吧!
|
20天前
|
算法 调度
探索操作系统的心脏:深入理解进程调度
【7月更文挑战第31天】在数字世界的脉络中,操作系统扮演着至关重要的角色,它如同一台精密的时钟,确保了计算资源的高效与有序。本文将通过浅显的语言和实例代码,带领读者走进操作系统的核心——进程调度。我们将一起探索它是如何在多任务环境中协调资源、管理进程,并保证系统的流畅运行。文章不仅阐释进程调度的基本概念,还将通过实际代码示例揭示其背后的原理,使读者对这一复杂机制有一个清晰的认识。
27 10
|
19天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级反转
【8月更文挑战第2天】在操作系统的心脏中,进程调度是维持多任务并发执行的关键机制。本文将通过一个简化的Python代码示例,揭示进程调度背后的逻辑,并探讨优先级反转现象及其对系统性能的影响。我们将从基础概念出发,逐步深入到进程调度算法的实现,最终讨论如何优化调度策略以提升系统响应性和效率。
|
20天前
|
算法 Linux 调度
深入理解操作系统:进程调度与优先级
【7月更文挑战第31天】在计算机科学中,操作系统是连接用户和硬件的桥梁。它管理着计算机的资源,并确保资源的公平分配。本文将深入探讨操作系统的一个重要组成部分——进程调度,以及如何通过优先级来优化系统性能。我们将通过代码示例,展示如何在Linux系统中实现一个简单的优先级调度算法。
24 4
|
20天前
|
算法 大数据 调度
探索操作系统的心脏:进程调度算法
【7月更文挑战第31天】在数字世界的复杂编织中,操作系统扮演着枢纽的角色,而进程调度则是其跳动的心脏。本文将深入探讨几种常见的进程调度算法,通过代码示例揭示它们对系统性能的影响,并讨论如何根据应用场景选择恰当的调度策略。
18 1