当前位置: 首页 > article >正文

Linux第五讲:进程概念

Linux第五讲:进程概念

  • 1.冯诺依曼体系结构
  • 2.操作系统
    • 2.1什么是操作系统
    • 2.2设计OS的目的
    • 2.3深入理解操作系统
  • 3.进程
    • 3.1什么是进程
    • 3.2深入了解task_struct
    • 3.3进程的查看(有查看进程指令)
    • 3.4代码创建子进程(包含指令)
  • 4.进程状态名词解释、内核链表问题解释
  • 5.进程状态阐述
    • 5.1进程状态详细说明(./myprcess &将程序放在后台执行命令,kill发信号问题,僵尸状态)
    • 5.2知识点补充
    • 5.3孤儿进程
  • 6.进程优先级
    • 6.1补充概念:竞争、独立、并行、并发
  • 7.进程切换
  • 8.Linux真实调度算法
  • 9.环境变量
    • 9.1什么是环境变量
    • 9.2其它的环境变量
    • 9.3获取环境变量的方法
    • 9.4环境变量的特性
  • 10.进程地址空间
    • 10.1页表的引入
    • 10.2深入了解虚拟地址空间
    • 10.3虚拟地址转化为物理地址的原理
    • 10.4为什么需要虚拟地址空间
    • 10.5vm_area_struct结构体

1.冯诺依曼体系结构

我们要先理解一些基础的知识:
在这里插入图片描述

然后再看我要说的概念:
在这里插入图片描述

2.操作系统

下面我们来看操作系统:

2.1什么是操作系统

在这里插入图片描述

2.2设计OS的目的

在这里插入图片描述

2.3深入理解操作系统

我想,这时侯我们还不是很理解操作系统,下面我们需要详细理解操作系统:

我们先看一下什么是管理:
在这里插入图片描述
操作系统的管理其实就是先将正在执行的程序的代码地址和数据地址描述起来,再使用数据结构进行组织,实现的管理操作,知道了操作系统的管理,下面我们要看系统调用是什么:
在这里插入图片描述
而我们目前判断一个系统是否进行了系统调用,我们只需要看一个:是否访问到了硬件,访问到硬件,那么肯定就是系统调用!

3.进程

3.1什么是进程

在这里插入图片描述

3.2深入了解task_struct

在这里插入图片描述
上面的很多现在都没法说,后面会讲

3.3进程的查看(有查看进程指令)

在这里插入图片描述

3.4代码创建子进程(包含指令)

我们知道了究竟要如何查看进程,也知道了bash其实就是一个进程,那么进程是如何创建的呢?下面我们来使用代码来实现子进程的创建:

在这里插入图片描述
我们这时再看返回问题:
在这里插入图片描述

后面在讲虚拟地址空间时,还会详细阐述这里的,我们现在了解上面就足够了!

4.进程状态名词解释、内核链表问题解释

我们先对进程状态的名词进行解释:

在这里插入图片描述
然后我们再解释一个关于内核链表的话题:
在这里插入图片描述

5.进程状态阐述

5.1进程状态详细说明(./myprcess &将程序放在后台执行命令,kill发信号问题,僵尸状态)

在这里插入图片描述

但是,我们为什么看不到挂起状态?
因为挂起状态是操作系统做的事情,我们并不需要关心!

5.2知识点补充

上面的僵尸状态,我们提到了内存泄漏,我们来了解一下内存泄漏:

在这里插入图片描述

关于内核结构申请问题:

在这里插入图片描述

5.3孤儿进程

在这里插入图片描述

6.进程优先级

在这里插入图片描述

6.1补充概念:竞争、独立、并行、并发

在这里插入图片描述

7.进程切换

在这里插入图片描述

8.Linux真实调度算法

在这里插入图片描述

9.环境变量

9.1什么是环境变量

在这里插入图片描述
而我们的windows系统中也是有Path的!:
在这里插入图片描述
我们在cmd中的指令就是通过它查找的!

9.2其它的环境变量

1.使用env指令可以查看现在所有的环境变量
2.使用set既可以查看环境变量,又可以查看本地变量
3.export可以设置环境变量(export i=10)
4.使用unset可以取消设置的环境变量,以及设置的本地变量(i=10)

下面我们使用一张图来搞定重要的环境变量:
在这里插入图片描述

9.3获取环境变量的方法

获取环境变量有两类,我们先进行总结,然后使用一张图来展示获取方法:
一、操作获取环境变量:
export可以创建环境变量(export i=10)
env可以查看所有的环境变量
echo $XXX可以查看环境变量的内容
unset可以取消expot设置的环境变量
二、通过代码获取环境变量
1.通过main函数的第三个参数获取环境变量
2.getenv函数来获取特定的环境变量(推荐使用这个方法来获取环境变量)
3.environ函数来获取环境变量

在这里插入图片描述

9.4环境变量的特性

在这里插入图片描述

10.进程地址空间

10.1页表的引入

总结:
1.引入了页表的概念,页表保证了虚拟地址与内存的一一对应的关系,也保证了内存r - w - x三项权限的安全,解决了为什么同一块空间指向的结果不同的问题
2.进程具有独立性
3.区域划分和编制的概念,mm_struct中保存有各种区域的划分,所以如果我们想要对空间大小做出调整,直接更改指针的大小即可:
在这里插入图片描述

我们之前学的都是程序地址空间(堆、栈、静态区的分布),在这里我们要进行一个概念的更改,其实它被成为进程地址空间,也叫虚拟地址空间:

在这里插入图片描述
这里我们会衍生出一个问题:这个空间和内存有什么关系,虚拟地址空间是内存吗?:
在这里插入图片描述
进程具有独立性,但是为什么指向的同一块空间,取出的内容不同?我们先对上面的问题进行一个解决:
在这里插入图片描述

10.2深入了解虚拟地址空间

虚拟地址空间就是一个结构体mm_struct,里边保存有所有区域的start和end指针,以此来进行区域划分

在这里插入图片描述

blog.csdnimg.cn/direct/5a2ec0be14b340ad916515c41f2731d7.png)
我们在内核中看一下mm_struct的源码:
在这里插入图片描述

10.3虚拟地址转化为物理地址的原理

虚拟地址是给上层用户使用的,但是操作系统最终还是要通过虚拟地址找到真正的物理地址的:
分为两步:
1.进程开始运行,要加载到内存,加载到内存的过程中,为进程开辟虚拟地址空间
2.然后建立虚拟地址与物理地址的映射
操作系统通过页表的映射就能够找到对应的物理地址了

在这里插入图片描述

10.4为什么需要虚拟地址空间

1.将地址从无序,变有序
2.地址转换过程中,也可以对你的地址和操作进行合法性判定,进而保护物理内存
3.让进程管理和内存管理进行一定程度的解耦合
补充知识:缺页中断就是指页表中有虚拟地址,但是没有相应的物理地址与之对应
挂起状态重解释:当内存严重不足时,磁盘上就会为进程开辟一块swap分区,里面存储的就是进程的PCB和页表,成为挂起状态

在这里插入图片描述

10.5vm_area_struct结构体

1.我们先说mm_struct和vm_area_struct的区别:
mm_struct是对整体的虚拟地址空间的一个标识,end和start对应的时整个虚拟空间对应区域的开始和结束,但是对于区域来说,比如堆空间,我们malloc很多次,只有一个起始和结束肯定不够,所以就出现了vm_area_struct,它是对一块连续空间的描述,是一张链表,每一块区域都有对应的一张链表,将使用的多个连续空间链接起来!:

在这里插入图片描述


http://www.kler.cn/a/511508.html

相关文章:

  • WPF 实现可视化操作数据库的程序全解析
  • 第2章:Python TDD构建Dollar类基础
  • 什么是SSL及SSL的工作流程
  • 最新版Edge浏览器加载ActiveX控件技术——allWebPlugin中间件之awp_CreateActiveXObject接口用法
  • 二叉搜索树(TreeMapTreeSet)
  • 昇腾环境ppstreuct部署问题记录
  • Nginx请求访问流程
  • 【VRChat · 改模】Unity2019、2022的版本选择哪个如何决策,功能有何区别;
  • iOS 性能优化:实战案例分享
  • 设置 Git 默认推送不需要输入账号和密码【Ubuntu、SSH】
  • 数据结构:栈和队列详解(上)
  • 郑州大学2022级大三期末复习总结(数据库,传感器,嵌入式,人工智能,移动终端开发,计算机英语)
  • Unity中不使用场景和预制体保存关卡信息(附源文件)
  • Gitblit 一些使用说明记录
  • 【React】静态组件动态组件
  • Jetpack 介绍
  • 删除字符串中的所有相邻重复项(力扣1047)
  • 怎么投稿各大媒体网站?如何快速辨别一家媒体是否适合自己?
  • 2025年01月17日Github流行趋势
  • 资源管理模块集成Spring Cache
  • 【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键
  • TCP状态转移图详解
  • 【数据结构-堆】【hard】力扣502. IPO
  • 【opencv】第10章 角点检测
  • Kinova仿生机械臂Gen3搭载BOTA 力矩传感器SeneOne:彰显机器人触觉 AI 与六维力传感的融合力量
  • StarRocks 怎么让特定的SQL路由到FE master节点的