文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

计算机操作系统和进程

2023-09-02 08:34

关注

请添加图片描述

✨个人主页:bit me👇
✨当前专栏:Java EE初阶👇
✨每日一语:心平能愈三千疾,心静可通万事理。

目 录

🍦1. 操作系统是什么?

目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等

🍨2. 操作系统的两个核心功能:

🍧3. 操作系统软硬件结构图

在这里插入图片描述

 

📙1. 什么是进程/任务(Process/Task)?

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;

注:

打开任务管理器,里面的 QQ 是跑起来的模板,这是一个进程,是动态的,被加载到内存中的

在这里插入图片描述

在我们的电脑中找到 QQ 文件安装的位置,找到 Bin 目录里的 QQ.exe 文件,这是一个可执行文件,是静态的,躺在硬盘上的

在这里插入图片描述

一个计算机的硬盘上可能会躺着很多的可执行文件,同一时刻,可能只有一小部分在运行(变成了进程)

📘2. 进程管理

一个操作系统上,同时跑着这么多进程,就需要操作系统来安排他们

管理:

  1. 先描述:使用一个类 / 结构体,把这个东西有啥特征,都表示出来
  2. 再组织:使用一个数据结构,把很多个这样的对象 / 结合体给整理到一起

结构体:进程管理是操作系统内核的功能,操作系统又是 C 语言实现的,C 语言的结构体就是低配的类.

📗3. PCB(进程控制块)

操作系统内核中,就把若干 PCB 串成了一个双向链表

PCB 里面都有啥信息?

最好的办法还是看看操作系统内核的源码

在这里插入图片描述

操作系统要把一些必要的数据加载到内存中(必要的数据:有些是要运行的指令(代码),有些是运行时依赖的数据(全局变量))

内存指针就描述了:该进程的内存中哪些部分是指令,哪些部分是数据

表示了当前进程都打开了哪些文件

在代码中打开一个 fopen 就会在进程的文件描述符表 (顺序表) 里给这个文件分配一个表项。每个元素就代表一个打开的文件,对应的数组下标就是 " 文件描述符 "。

内存指针 和 文件描述表 描述了进程持有哪些系统的资源,也认为 进程 是操作系统中 " 资源分配 " 的基本单位

📕4. 进程的调度

进程里有一组比较关键的属性,用来实现进程的调度

本质问题:当前计算机,CPU 是有限的,但是进程数量是比较多的,例如 CPU 核心数只有 6 核,进程数量非常多,几十个,几百个,这就形成了狼多肉少的局面,操作系统是要做到尽可能的公平,让每个狼都有吃肉的机会,就需要进行调度

那么如何调度呢?轮流吃!

CPU 主频是1.9 Ghz,1s 有 19 亿个时钟周期,人是感知不到的,站在宏观的角度来看,好像这些进程是在同时进行,微观上并不是同时,而是 " 轮流 " 的方式占用 CPU 执行

CPU 上有多个核心,每个核心上都可以跑一个进程,某一时刻两个进程就是在两个 CPU 上同时执行的

实际开发中,并不会对这俩概念做明确的区分,往往使用 " 并发 " 概括表示 " 并发 " 和 " 并行 " 。–> " 并发编程 "

进程状态的优先级:安排时间表的时候先排谁,后排谁。

进程的状态:安排时间表的时候要考虑到每个人当前特定的情况。

两种比较典型的状态:

  • 就绪状态:进程是准备就绪的,随时可以在 CPU 执行
  • 阻塞状态:进程在等待某个任务完成(读写磁盘),完成之后才能上 CPU,完成之前就没办法继续执行

进程的记账信息:安排时间表的时候,就要考虑到一些历史记录,操作系统在安排进程的时候,也会记录每个进程以往在 CPU 上执行的时间,如果发现某个进程被安排的太少,就会适当的调整策略。(不一定是以执行指令为单位,也可能是以执行的指令数为单位)

进程的上下文:对于进程来说,上下文,具体指的就是 CPU 里的一堆寄存器里的值,上下文就会在进程被切出 CPU 的时候,把寄存器的状态保存到 PCB里(内存),下次进程回到 CPU 上就把 PCB 里的上下文读取出来,恢复到 CPU 寄存器中。

类似于我们打游戏,存档和读档,存档保存的信息,就是我上次退出游戏之前的状态,就是这个 " 上下文 "。

📒5. 进程的虚拟地址空间

进程,需要使用一些系统资源,其中内存资源,就是一个很关键的资源

每个进程都希望用自己的内存,互相不干扰,但是在 C语言 中有一个操作,叫做指针解引用,解引用的时候需要保证这个指针里面包含的地址,指向的是我们弄的合法地址,但是指针也可能指向错误,把别的进程弄挂了,这种行为就会让整个操作系统都很不稳定(操作系统要给应用程序提供稳定的运行环境)。

为了让各个进程之间不要相互干扰,操作系统就引入了 “虚拟地址空间” 这样的概念,每个进程都只能访问到自己的地址空间,相互之间不会有影响了,哪怕你指针指错,操作系统也能及时发现,不会影响到其他的进程,就算出问题,问题也被限制到进程的内部了。

在这里插入图片描述
比如进程3里面,*p = xxx,p 成了野指针指到错误的地址上了,进行操作 p 指向的内存的时候需要进过 MMU 进行映射,MMU 就知道当前访问的是一个有问题的地址,于是就会向操作系统告状,有进程访问内存错了,操作系统就会给对应的进程发一个 " 信号 "(这个信号的默认处理行为就是让程序终止运行),告诉他你的内存访问出错。

因为虚拟地址空间,进程就有了一个重要的特征:隔离性

每个进程都有一个 " 虚拟地址空间 " ,一个系统里面里的进程又有那么多,这些虚拟地址空间加到一起,比物理内存大了可咋办?

实际上:

  • 同一时刻执行的进程没几个
  • 即使同一时刻,有好几个进程在跑,这些进程也不是同时把所有的虚拟地址空间使用上了。(虽然每个进程的虚拟空间很大,但是实际使用的内存就只有一小部分,物理内存只需要把真实使用的这部分内存数据给表示出来即可)
  • 极端情况下,确实同时跑的这几个进程同时吃了很多的真实内存,确实是会导致物理内存不够(出现这种情况,算 bug,因此程序猿就需要想办法优化一下内存占用,或者扩容换一个内存更大的机器)

📔6. 进程间通信

进程引入了隔离性,确实让系统更稳定了,但是也有别的问题,多个进程之间想要配合工作,就麻烦了,操作系统又引入了 " 进程间通信 ",在隔离性的前提下,开了个口子,让多个进程之间能相互通信

操作系统提供的进程间通信方式有很多种,但是本质上都是一样的!!!搞一个多个进程之间都能访问到的公共资源,借助公共资源来进行通信!!

在这里插入图片描述
在后面网络编程中会更加详细提及,网络通信本质上也是一种进程间通信!而且是现在最主要的使用方式。

来源地址:https://blog.csdn.net/m0_67660672/article/details/129149749

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯