【操作系统】4/35进程

进程

概述:操作系统调度单位,进程使用cpu工作。

操作系统OS基本的任务执行单元、调度单位,可以被系统分配相应的资源(内存、CPU),可以完成执行特定的工作和任务,任何操作系统都有进程概念。

进程:执行任务。

调度单位不只进程一种。

进程是最小的分配资源的单位。

线程是最小的调度单位。线程不需要额外分配内存, 而进程是需要的。

进程需要额外分配资源。

现在的操作系统,都是多任务操作系统,很久以前是单任务的。

单任务:一个时刻只能干一件事。

处理器、硬盘、内存,同一时刻,只能给一个人,单任务操作系统的局限性,一个进程会占用系统的全部硬件资源,无法执行多任务。硬件水平有限。

这个进程用完切换个下一个进程。

软件是随着硬件变化的。软件再强也没用。

如果新的硬件,让一个进程使用,就太浪费了。

多任务、多进程,开发出来了。

多个进程多个单元能合理的使用硬件就行。

多任务操作系统设计核心:优化。

多任务操作系统:可以被多个进程,或多个线程使用,可用性更强。

有限的硬件可以被合理的使用,轮转之类的。

硬件资源有限的情况下,多个调度单位,如何合理分配和使用系统资源。

进程生存环境/系统形态

主要是逻辑抽象概念。

进程在系统中:进程创建之后,被分配空间,一个进程会被分配0-4G内存,这么多内存分为两块区域。

3-4G系统空间,内核层,或叫做,系统层。

0-3G用户层。

内核层

PCB

进程控制块,每个进程都是独一无二的,PCB就是身份证。

记录进程信息、进程数据。所有的都保存在这里。

什么能表示一个进程?PCB

PCB可以理解为一个结构体,存储了很多信息。

用户层

从高地址开始

命令行参数/环境变量

main(int argc, char** argv)这是命令行参数,pwd是环境变量,进程初始化的时候,需要用到环境变量,内置变量、内置数据,初始化的时候需要用到这个数据。

进程创建出来,默认有环境变量,进程默认使用系统的环境变量。

进程栈

保存临时的东西。

lib

静态库、共享库等等,称之为lib

堆空间

就是new的那种空间,手动开辟的内容。

BSS数据段

static静态变量,全局变量,分为初始化和未初始化,如果未初始化,则在BSS,就是定义了没初始化,如果初始化了,就在下面。

DATA数据段

存放已初始化的数据。

Text代码段

核心逻辑、代码

综上,就是0-3G的内容,几乎包含了所有的数据。

用户层是,执行核心层。

用户在用户层有权限,但是内核层没有权限,用户没开放。写了就是:段错误!强制杀死,访问受限。

用户层,允许读写。

0-4G就是x86,32位系统的分配,64是0-8-16T分层。

虚拟内存

一个进程怎么可能占4G这么多内存呢?

cpu核越多越好,内存越大越好,显卡高级gpu

内存一般就是4g、8g、16g

如果按照进程的系统形态来看,多少内存都不够消耗的。

因此,进程的系统形态,所占据的,是虚拟内存。

内存条上的内存,是物理内存。

进程分配的内存是虚拟内存。

每一个进程创建的时候,是虚拟内存。

但是实际上,虚拟内存和物理内存是有对应关系的。

因为,你即使再虚拟,你的这些东西还是真实存在的,加载也加载到物理内存里了,只不过小的很多。

最吃内存的是ui界面这种东西。

虚拟地址和物理地址的对应关系

每一个虚拟地址,都是一个指针,指向一个物理地址。

例如:进程栈,有一个地址,然后指向一个真实的物理地址。一一映射关系。

虚拟地址和物理内存的一一映射关系。

实际上物理内存也参与使用,但是有:交换技术

也就是说你的进程在使用的时候将这块物理地址进行使用,不用的时候交换出去。

交换技术满足了内存小的情况。

但是用的人多,即使有交换技术,也会很卡。

操作系统进程很多,映射关系很复杂,交给:内存管理器,去管理。

内存管理器有一张:虚拟内存映射表,来进行管理。

内核层和用户层都是有对应的物理地址的。

CPU——内存——磁盘——交换

每个进程都会分配0-4G,每个进程都会有自己的映射。

多进程不同的虚拟地址,指向的是相同的物理内存吗?

多进程用户层虚拟地址是否共享物理内存?

内存是会给不同的进程用的,但是使用,是轮转,不能同时使用。

一块内存是不可以被两个进程同时使用的,但是可以轮转使用。

用户层映射的物理地址,不允许多进程同时共享使用,会产生访问冲突。

注:用户层,不能共享,是独占,但是内核层,是可以共享的。

因为内核层是访问受限的,多个进程可以映射同一块内核层物理地址。

内核层,共享地址,多个进程指向相同的物理地址。

ipc进程间通信技术,完全依赖于内核层共享物理内存。

分时复用原则

多任务操作系统中的重要部分。

要想到:时间片。

操作系统核心处理单元CPU处理器,数量有限,如何让若干个调度单位合理使用CPU资源?

分时复用:将CPU的使用权,以时间片为单位,进行切割,而后多进程交换轮转占用CPU。

使用理由:CPU资源宝贵且有限,为了让多进程合理使用CPU,以时间片为单位进行切分,每个进程占用CPU一段时间。

这是多任务OS典型特征。

保存和恢复处理器现场

光有分时复用是不完整的,但是不能保证每个进程在一个时间片内处理完。

A进程用完时间片,B再用,B会不会影响A进程的配置或使用?

多任务操作系统的另一特性:保存和恢复处理器现场。

CPU由几个核心部件组成:控制器、计算器、译码器、寄存器,这几个是主要的。

寄存器:一个进程使用CPU,必须使用寄存器。但是寄存器数量有限,没有能力一个进程给一个。

x86单核cpu,可能寄存器就16个,存储运算过程、运算数据、运算地址,例如:eax,ebx,ecx,edx,eflag,edi,并不是说一个进程用一个,而是进程共用这16个。

进程AB都是对不同数据进行相同的操作,但是:变量计算,并不是原子操作,而是由多条指令完成的。

时间片暂时耗尽:软件中断。

例如a++一个操作,是由好几步组成:mov eax, 0x10; add eax; mov 0x10 eax;

如果时间片运行到进程A的add时中断了,那么会不会影响b的操作?

我们的eax里存了我们的运算过程。因此,必须解决这个问题。

多进程共用CPU资源(寄存器),寄存器中保存了执行过程,和中间数据,如果以为中断产生进程切换,其他进程使用寄存器,可能会破坏或覆盖掉A的运算过程。

为了避免这种事情,我们只需要保存运算过程,这就叫做:保存和恢复处理器现场。

这就是多任务操作系统的功能!

保存,保存在进程里。

每个进程由两个栈,另一个栈不在用户层,而是在内核层里的PCB里,每一个PCB都有一个内核栈里。

如果产生了时间片轮转终端,将现场保存在,PCB内核层的内核栈里。

反之,恢复的时候,从内核栈里取出现场,进行恢复现场。

进程状态转换

新生态、就绪态、运行态、阻塞态、终止态。

线程同步=线程安全。指的是加锁。

阻塞态有两种:挂起态,基本特征一致,阻塞可能被异常中断,但是挂起无法被中断。

挂起就是防中断的。psaux进行查看进程状态时,可以看到状态s,t。 

r+前台运行态。ctrl+z控制挂起。

Linux还有两种新的状态:僵尸态、孤儿态。

多进程并发模型

并行、并发、串行。

并行:多核cpu,每个cpu运行一个进程,这就是并行。

多个进程,占用多个处理器,同时执行任务,物理并行。

并发:一个cpu,执行多个进程,时间片轮转,这就是并发。

多个进程分配轮转使用CPU,为轮转执行。

操作系统支持并行,但是一般都是并发,而且你选不了让谁并行并发。

串行:顺序执行。

多进程模型:

1、是完成同一个任务目标的,可以获取更多的系统资源,极快任务执行速度,缩短任务完成周期。

2、单进程模型可能产生阻塞挂起,任务无法推进,多进程模型可以调高任务执行的密集程度,比如有的进程阻塞了,我们还可以继续接上。因为我们完成的是同一目标。

现在一般都是多进程、或多线程混合使用。

多进程执行共有任务

多进程拷贝一个文件,提高拷贝速度

不同的进程做不同的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值