简单了解操作系统、进程内存管理

news2024/9/27 15:22:15

目录

前言: 

一、操作系统:

操作系统的定位:

应用程序:

系统调用:

操作系统内核:

驱动程序:

硬件设备: 

二、进程: 

什么是进程? 

进程的描述与组织: 

描述:

组织:

PCB中的 特征(属性)

CPU分配——进程调度: 

进程调度的相关属性: 

三、内存管理:

虚拟地址空间:  


前言: 

由于最近忙于备考和学习新的知识以及疫情返乡政策等原因,博客的内容有一段时间没有更新了。不过从今天开始,依然是步入正轨了,继续我总结知识的过程。同时马上就是新年了,在这里预祝大家2023年新年快乐,在新的一年里更进一步,早日实现梦想,进入理想的企业哈!!!

好了,那么书归正传。开始进行多线程的学习。今天主要总结的是初步对操作系统有个认识,外加对进程和内存管理的相关部分进行一个总结。

一、操作系统:

首先我们要知道什么是操作系统,我们在市面上听说的Windows系统,Linux系统,iOS系统,Unix系统,Android系统等等都是比较常见的操作系统。操作系统就是一组做计算机资源管理的软件的统称。

操作系统:

对上要为软件的运行提供稳定的运行环境, 对下要管理硬件设备。

一句话就是:操作系统是用户,软件,硬件之间交互的媒介。

在我们日常生活中最熟悉和最常用的就是我们的Windows系统了,Linux系统是每个程序猿都要会的系统,因为该系统特别适合我们进行开发和部署。

操作系统的定位:

这个需要我们画个图来进行理解一下:

总的来说,操作系统的定位还是我们上面说的“上有软件,下有硬件”。

 

如何来理解这里的这几个词?

应用程序:

应用程序不用我们多说,就是我们手机上的app,电脑上下载的qq,wx,游戏等等各种软件。

系统调用:

系统调用可以简单的理解为操作系统给应用程序提供的API,如果一个软件想要操作一下硬件设备,就需要通过系统调用告诉操作系统内核,由操作系统内核调用驱动程序来操作对应的硬件设备。

操作系统内核:

操作系统内核特指操作系统的核心功能:资源管理,对上为软件的运行提供稳定的运行环境,对下管理硬件设备。

驱动程序:

驱动程序是每个硬件设备的开发商来进行开发时配置的对应的驱动,只有装了相应的驱动程序我们的电脑才能够识别硬件设备。

硬件设备: 

硬件设备不用多说了,你把电脑后盖打开,你可以看到的都是硬件设备。

二、进程: 

什么是进程? 

进程是操作系统对正在运行的程序的一种抽象,换句话说就是,程序的一次运行过程可以称为进程。

像我们所看到的应用程序,当我们没有运行它的时候,不能称为进程,当我们打开运行的时候,才可以称为进程。“没有跑起来的程序不算进程!”

同时,在我们的操作系统的内部,进程又是操作系统进行资源分配的基本单位。

当我们同时按住Ctrl+alt+delete的时候: 

进程的描述与组织: 

我们通常认为进程是描述和组织起来的 。

描述:

进程的描述是用C语言中的结构体来实现的。操作系统通常都是由C/C++写的。用来描述的结构体被称为“PCB(进程控制块)”

组织:

进程的组织就是相当于用一个双向的链表把这些PCB都串起来。(注意:只是相当于,实际不是一个单纯的双向链表,实际要复杂的多)。

我们可以这样理解:创建一个进程的本质就是创建一个这样的PCB对象,然后把这个PCB插入到链表中,销毁一个进程就是把对应的PCB对象从链表中删除。像我们查看到的任务管理器所看到的进程就可以相当于是把链表遍历了一遍。

PCB中的 特征(属性)

1、pid    pid是进程的身份标识,就相当于我们的身份证一样,每个进程都有一个唯一的pid。

 

2、内存指针   注意我们这里说的指针不是C/C++里说的指针,我们说它是指针只是个形象的说法,这个内存指针非常的重要,它描述了进程的关联到的程序的信息,比如描述了程序加载到的内存位置等等,以便更好的分配内存。

3、文件描述符表   这个文件描述符表描述了该进程使用到的其他的资源的信息,包括硬盘上的文件等等其他的资源。

4、进程调度信息  这个模块非常的重要,它解决了CPU的资源分配的问题,由于内容比较多和复杂,我们在下面再进行详细的说明这部分的内容。 

 以上PCB的几个特性主要解决了资源分配中的进程标识,内存分配,CPU资源分配的问题。

除了第四条,前面的三条都是描述了进程持有哪些的硬件资源。CPU的资源分配相对来说会比较复杂一点。目前我们所用的电脑大多数都是多核CPU。比如我的电脑:

我的电脑是16核的CPU,一般情况下我们的电脑的进程会有很多个,比如我此时电脑上的进程数目:

这就出现了狼多肉少的局面。那么我们的电脑的CPU是如何解决这个难题的呢?

这就涉及到了我们进程调度的问题。

CPU分配——进程调度: 

进程调度的相关属性: 

1、进程的状态

进程的状态有三种状态:

1)就绪状态:进程随时准备去CPU上执行(随叫随到)

2)运行状态:正在CPU上执行

3)阻塞状态:短时间内阻塞住了,没有办法进行响应。

(注意:很多的操作系统其实不区分就绪和运行状态)

2、优先级

优先级就好比排队时,孕妇和军人优先一样,资源的分配也是有优先级的,比如给谁先分,给谁分的多点。操作系统在进行进程调度的时候并不是“平均式”分配。为了在有限的核心上执行多的进程,就需要提到我们的并行和并发的概念了。

并行:不管是从宏观上还是微观上来看同一时刻,两个核心上的进程是同时执行的。

并发:同一时刻,一个核心上是只能执行一个进程的。但是如果在这个核心上快速的切换不同的进程进行执行(快到人分辨不出来到底切换了没有),也就是其实微观上这些进程不是同时执行的,但是在宏观上我们可以认为它们是同时运行的。像我的电脑3.20Ghz,也就是说一秒内可以执行32亿条指令。这是我们人眼所分辨不出来的。

因此我们通常把并行和并发统称为并发。(没有特别要求的情况下)

3、上下文

由于我们上面说的CPU上的进程在不断的切换,但是我们还要让切换的过程中不会影响到后续的运行,就需要记录一下切换时的中间状态,如果不记录中间状态,再次切换回来的时候CPU就不能正常执行该进程了。就好比我们打游戏的时候要进行一个“存档”一样,如果不进行及时的存档,再次打开时就要重新来过了。所以我们可以简单的理解为“存档”,“读档”。上下文本质上就是你“存档”的内容。而我们进程中的上下文就是CPU各个寄存器中所存的值。寄存器是CPU内置的存储数据的一个模块。

保存进程的上下文就是把CPU寄存器中的值保存到内存中去,恢复进程的上下文就是把这些值再加载回去。

4、记账信息 

 记账信息就是操作系统会记录每个进程在CPU上执行的时间和执行的指令的数量,然后再根据执行的时间和指令的数量来决定接下来如何来进行调度。

三、内存管理:

虚拟地址空间:  

什么是虚拟地址空间?这么说吧,我们平时所说的内存就是虚拟地址空间。程序中所获取到的内存地址,并不是真正意义上的物理地址,它是经过了一层的抽象,虚拟出来的地址。

那么为什么要进行抽象,变成虚拟地址呢?

主要原因还是为了减少bug的出现。(避免进程之间相互产生影响)

比如:

一旦出现这种情况我们可以试想一下,本来qq和微信的代码正常的时候,两个运行的程序相安无事,这个时候突然微信的代码出现了越界,导致内存出现交叉了,明明是微信的bug,却把qq搞坏了:明明你打开的qq好好的,然后又打开了个微信,结果微信崩了,qq也崩了。你就说qq冤不冤吧!

所以为了避免这种冲突的出现引入了抽象,进行了地址的虚拟化(由操作系统和硬件设备进行地址的转换):

通过这样的手段,如果操作系统发现了进程1的地址超出其访问的范围的时候就会报错(具体来说是发送一个 SIGN SEGEMENT FAULT 信号,引起进程的崩溃)。这样的话进程1出现bug就是进程1崩溃,进程2则不受影响。(谁出bug谁崩溃)。

解决了进程之间的相互影响的问题后,依然会有一个问题出现在我们面前:如果有进程之间确实需要相互交互怎么办?那就需要在引入一个公共的空间了。就是两个进程都可以访问的空间,这样就可以解决这问题了。

好了,有关操作系统,进程和内存管理的知识就分享到这里了,这部分的内容还是非常重要的,特别是进程调度的过程需要我们认真的理解一下。最好做到心中有数就行。谢谢啦!!!

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

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

相关文章

自定义类型,结构体、枚举、联合(C语言)

目录 结构体 结构体的基础知识: 结构体的声明: 特殊声明: 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐: 修改默认对齐数: 结构体传参 结构体的柔型数组 柔型数组的书写 柔性数组的特点 柔性数组的使用 柔…

【Java寒假打卡】JavaWeb-Tomcat

【Java寒假打卡】JavaWeb-Tomcat服务器Tomcat下载和安装Tomcat的目录结构基本使用控制台乱码的问题IDEA集成TomcatJavaWeb项目的目录结构Tomcat-idea发布项目Tomcat-WAR包发布项目Tomcat配置文件的介绍Tomcat配置虚拟目录Tomcat配置虚拟主机服务器 Tomcat下载和安装 将下载好的…

干货 | 数据安全和个人信息保护审计的方法研究

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:概述我们的研究核心是个人信息保护合规审计,具体指个人信息处理活动是否遵守我国相关法律法规的监督性审计。在个保法出台后,我国形成了以内部审计为…

我用ChatGPT写神经网络:一字不改,结果竟很好用

自从去年底推出以来,对话式 AI 模型 ChatGPT 火遍了整个社区。 ChatGPT 的确是一个了不起的工具,就像一个「潘多拉魔盒」。一旦找到正确的打开方式,你或许会发现,自己再也离不开它了。 作为一个全能选手,人们给 Chat…

Fedora 38发布Budgie与Sway定制版

导读两款新的 Fedora 定制版将在 Fedora 38 发布时首次亮相。我们期待着它们在 Fedora 37 时出现,但在 Fedora 38 中终于来了! 早在 2022 年 5 月,Budgie 项目的主要开发者 Joshua Strobl ​​宣布​​,Budgie 已被提交到 Fedora…

第五届字节跳动青训营 前端进阶学习笔记(四)TypeScript入门

文章目录前言TypeScript概要1.什么是TypeScript2.TypeScript基本语法基础数据类型对象类型函数类型函数重载数组类型补充类型泛型约束和泛型默认参数类型别名和类型断言高级类型1.联合类型2.交叉类型3.类型守卫类型谓词总结前言 课程重点: TypeScript概要TypeScri…

Kubernets核心介绍及实战

1、资源创建方式 命令行YAML 2、Namespace 名称空间用来隔离资源 “namespace"通常被翻译为「命名空间」,听起来好像比较抽象,其实重点是在这个"space”。它和描述进程的虚拟地址空间的address space一样,都是提供一种独占的视角…

linux引导和启动程序

1.BIOS/Bootloader: 一上电,硬件强制让cpu的cs:ip寄存器指向bios程序的位置,从bios程序开始执行,由pc机的BIOS (0xFFFFO是BIOs存储的总线地址)把bootsect从某个固定的地址拿到了内存中的某个固定地址(0x90…

SpringAMQP快速入门

介绍Spring AMQP 项目将核心 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发它提供了一个“模板”作为发送和接收消息的高级抽象它还通过“侦听器容器”为消息驱动的 POJO 提供支持这些库促进了 AMQP 资源的管理,同时促进了依赖注入和声明性配置的使用包含两…

纷享销客华为云CXO思享会华东系列活动成功举办!

3天,3座城市,5家标杆企业,11位不同领域的专家,超百位企业家云集。1月10日-13日,纷享销客与华为云联合举办的“数字创新 高效增长”CXO思享会华东系列活动成功举办。全国各地超百名企业家齐聚华东参与本次思享会&#x…

kubeasz安装kubernetes1.25.5

kubeasz安装k8s 1 配置 kubeasz安装kubernetes,只需要做好网通配置,做好ssh免密通信配置即可 1.1 环境介绍 OS:CentOS Linux release 8.5.2111 机器: IPhostname10.104.10.201k8s-master10.104.10.202k8s-node 所有机器,都将…

3-4存储系统-虚拟存储器(CO)

文章目录一.页式存储1.页式存储系统2.逻辑地址到物理地址的转换3.页表4.快表TLB二.虚拟存储器(一)页式虚拟存储器(二)段式虚拟存储器(三)段页式虚拟存储器一.页式存储 1.页式存储系统 为提高主存的空间利…

JS中的splice方法添加或删除数组中的元素

splice方法嘚吧嘚语法下标问题实战splice(index)splice(index,howmany)示例一(howmany>0)示例二(howmany ≤ 0)splice(index,howmany,item1,.....,itemX)howmany ≤ 0示例一(index ≥ 0)示例二(index<0)howmany>0示例一(index ≥ 0)示例二(in…

Spring Cloud Kubernetes 本地开发

简介 Spring Cloud Kubernetes 是spring官方集成Kubernetes的一个框架.可以直接将springboot项目使用Kubernetes做为注册中心.很方便,但是我们本地开发的时候很难进行调试,因为我们本地没有Kubernetes环境. 下面介绍一种能够本地开发的方式 KT-Connect KtConnect(Kt…

【倍增+最短路】P1613 跑路

不知道是因为这样的套路太典了还是因为什么,这难度只有绿题,可是我感觉好难想到QwQ不过今天写了好几道倍增,好像有点感觉了捏P1613 跑路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:思路:一开始的思路就是建图…

【内存函数】-关于内存的操作函数

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 内存函数前言一、[memcpy](https://cplusplus.com/reference/cstring/memc…

初识软件测试

作者:~小明学编程 文章专栏:测试开发 格言:热爱编程的,终将被编程所厚爱。 目录 什么是软件测试? 软件测试和软件开发的区别? 调试和测试的区别? 优秀的测试人员应该具备哪些素质&#xff…

cherry-pick的定义和使用方法

1、定义 使用遴选(cherry-pick)命令,Git 可以让你将任何分支中的个别提交合并到你当前的 Git HEAD 分支中。当执行 git merge 或者 git rebase 时,一个分支的所有提交都会被合并。cherry-pick 命令允许你选择单个提交进行整合。 …

正点原子STM32(基于HAL库)3

目录RTC 实时时钟实验RTC 时钟简介RTC 框图RTC 寄存器硬件设计低功耗实验电源控制(PWR)简介电源系统电源监控电源管理PVD 电压监控实验PWR 寄存器硬件设计睡眠模式实验硬件设计停止模式实验PWR 寄存器硬件设计待机模式实验PWR 寄存器硬件设计ADC 实验ADC…

全国产加固以太网交换机选择技巧

全国产加固交换机用于连接以太网设备:首先接收由某台设备发出的数据帧,然后再将这些帧传送到与其它以太网设备相连的适当交换机端口上。随着它传送这些帧,学习并掌握以太网设备的位置,并用这些信息来决定该用哪些端口来传送帧&…