从零了解进程(操作系统定位,进程的概念,特征,虚拟地址)

目录

操作系统的定位

进程的概念

如何描述进程?

如何组织进程?

为什么要引入进程?

进程的特征

1.pid

2.内存指针

3.文件描述符

4.进程调度的相关属性

扫描二维码关注公众号,回复: 14724127 查看本文章

(1)进程的状态

(2)优先级

(3)上下文

(4)记账信息

寄存器

进程是如何利用cpu资源的?

进程的虚拟地址

物理地址

内存随机访问的特性

为什么程序不直接获取内存的物理地址?

虚拟地址


操作系统的定位

介绍进程之前我们先简单介绍一下操作系统

操作系统是一个搞管理的软件,它对下管理硬件设备,对上给软件提供稳定的运行环境,操作系统是:软件 硬件 用户之间交互的媒介

我们熟悉的操作系统有:Window Linux Mac......

进程的概念

一个正在运行的程序,就是一个进程.

 比如我们打开任务管理器,这些都是进程,它们对应着一些cpu,内存,磁盘,网络资源,

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

进程是一个重要的软件资源,由操作系统负责管理的
操作系统是如何管理的呢?

简单来说就是,描述和组织进程,讲清楚进程有哪些属性和特征,通过一定的数据结构把多个这样的
基本单位串联起来.

如何描述进程?

使用结构体来描述进程,
用来描述进程的结构体我们称之为PCB(进程控制块)

如何组织进程?

通过双向链表,把多个PCB串联在一起,
创建一个进程,本质上就是创建一个pcb这样的结构体对象,把它插入到双向链表当中
销毁一个进程,本质上就是把链表上的pcb节点删除掉
用任务管理器查看进程,本质上就是遍历整个pcb链表

为什么要引入进程?

引入进程的主要目的是,为了解决"并发编程"这样的问题.
cpu再往小的做比较困难,cpu进入了多核时代,想要进一步提高程序的执行速度就要利用好cpu的多核资源.
但也不是说cpu的核心越多,程序跑的就越快!取决于程序代码是否能把多个核心给用上

进程的特征

我们用pcb这个结构体来描述进程,那么pcb描述了进程的哪些特征?

1.pid

进程的身份标识符,是唯一的一串数字

2.内存指针

指向了说自己要用到哪些内存

3.文件描述符

硬盘上的文件等其他资源

4.进程调度的相关属性

(1)进程的状态

就绪状态:随叫随到,随时准备到cpu上取执行

运行状态:正在cpu上执行

阻塞状态:短时间内无法在cpu上执行

(2)优先级

进程也是有优先级的.谁先排,谁后排也是有一定的算法逻辑的

(3)上下文

简单来说就是"存档"和"读档",操作系统在进行切换的时候,就需要把中间状态给记录下来,
下次这个进程再上cpu上执行时,就可以恢复上次的状态继续往下执行了.

本质上,进程的上下文,就是cpu中的各个寄存器的值.
寄存器:cpu内置的存储数据模块,保存的就是程序运行的中间结果
保存上下文:就是把这些cpu寄存器的值,记录到内存中
恢复上下文:就是把内存中这些cpu寄存的值,恢复回去

(4)记账信息

操作系统,统计在每个进程在cpu上占用的时间,和执行的指令数目,
根据这个来决定,下一阶段该如何调度.

寄存器

cpu里有一个重要的组成部分:寄存器
寄存器也能存储数据,空间更小,访问速度更快
cpu进行的运算都是针对寄存器中的数据进行的

cpu里的寄存器有很多种
有的是通用寄存器(用来参与运算)
有的是专用寄存器(有特定功能),例如保存上下文

进程是如何利用cpu资源的?

内存指针和文件描述符,其实就是描述了,进程持有了哪些硬件资源
进程的调度的相关属性,其实就描述了进程是如何利用cpu资源的.

硬件资源,内存,硬盘,网卡等比较好分,而cpu资源不好分,
一般我们的电脑进程有上百个,而cpu只有一个,尽管现在cpu是多核的,每个核心都可以看作一个独立的cpu,但是往往也就是8核,12核,16核......还是不够进程分!

狼多肉少,这些进程都希望能够同时运行,这时我们就要用到并行核并发了.

并行:微观上,同一时刻,俩个核心上的进程,就是同时执行的

并发:微观上同一时刻,一个核心上只能运行一个进程,但是能够进行快速切换
比如一个cpu核心上,先运行谷歌浏览器,再运行qq音乐,再运行微信......
只有切换速度足够快,宏观上,让人感知不到

操作系统内核处理的应用程序,我们感知不到是并行还是并发
因此,往往把并行和并发统称为并发

操作系统也有一个重要的模块调度器,负责让有限的cpu调度执行这么多的进程.

进程的虚拟地址

物理地址

内存:物理上是一条内存条,可以存很多数据,
内存可以想象成一条大走廊,有很多房间,每个房间的大小都是1Byte
每个房间都有一个编号,从0开始依次累加
这个内存编号,就是地址,
这个地址我们称之为物理地址.

内存随机访问的特性

随机访问:访问内存上任意地址的数据,速度都极快,时间上都差不多.
数组取下标时间复杂度是O(1),也是因为内存随机访问的特点.

为什么程序不直接获取内存的物理地址?

虚拟地址

使用物理地址有个明显的弊端,如果出bug了,明明是进程1的bug,可能会把其它进程给搞坏.
所以我们针对进程使用的内存空间,进行"隔离",使用虚拟地址空间,
由操作系统和专门的硬件设备(MMU),负责进行虚拟地址,到物理地址的转换

一旦访问越界了,比如进程1的指针地址成了0x3000
操作系统内核会发现这里的地址超出了进程1的访问范围了
此时就会直接反馈一个错误
因此,谁出bug,影响谁,其它进程不受影响. 

猜你喜欢

转载自blog.csdn.net/qq_62712350/article/details/128426323