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

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

💕"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

目录
相关文章
|
8月前
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
6月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
251 67
|
10月前
|
算法 Linux 调度
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
277 1
|
6月前
|
缓存 运维 前端开发
|
6月前
|
缓存 运维 前端开发
阿里云操作系统控制台:高效解决性能瓶颈与抖动之进程热点追踪
遇到“进程性能瓶颈导致业务异常”等多项业务痛点时,提供高效解决方案,并展示案例。
|
7月前
|
SQL 监控 网络协议
YashanDB进程线程体系
YashanDB进程线程体系
|
9月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
707 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
9月前
|
消息中间件 调度
如何区分进程、线程和协程?看这篇就够了!
本课程主要探讨操作系统中的进程、线程和协程的区别。进程是资源分配的基本单位,具有独立性和隔离性;线程是CPU调度的基本单位,轻量且共享资源,适合并发执行;协程更轻量,由程序自身调度,适合I/O密集型任务。通过学习这些概念,可以更好地理解和应用它们,以实现最优的性能和资源利用。
270 11
|
8月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
363 0
|
9月前
|
Java Linux 调度
硬核揭秘:线程与进程的底层原理,面试高分必备!
嘿,大家好!我是小米,29岁的技术爱好者。今天来聊聊线程和进程的区别。进程是操作系统中运行的程序实例,有独立内存空间;线程是进程内的最小执行单元,共享内存。创建进程开销大但更安全,线程轻量高效但易引发数据竞争。面试时可强调:进程是资源分配单位,线程是CPU调度单位。根据不同场景选择合适的并发模型,如高并发用线程池。希望这篇文章能帮你更好地理解并回答面试中的相关问题,祝你早日拿下心仪的offer!
183 6

推荐镜像

更多