了解一下基本的并发与进程

一.冯诺依曼 体系结构

输入设备

输出设备

(1)首先说CPU 主频数字越大运算速度越快

CPU 8核心16线程的意思是 8个物理核心 16个逻辑核心

(2)并行:同一个时刻,两个核心同时执行两个进程,此时这两个进程就是并行执行的

并发:一个核心,先执行进程1,执行一会,再去执行进程2,再执行一会,再去执行进程3,

此时只要切换速度够快,看起来,进程就是 1 2 3 “同时”执行

操作系统通过控制CPU 来进行并发和并行处理线程任务

高并发:一个核心(主体)并发执行的1w个任务,就可以称为“高并发”。

(3)操作系统的运行管理

应用程序建立在操作系统之上,操作系统是与处理器,主存,I/O设备直接接触

(4)进程管理

1.描述一个进程:使用结构体/类,把一个进程有哪些信息。表示出来

2.组织这些进程:使用一定的数据结构,把结构体/对象放在一起

(5)进程管理的方法

1.pid 每个进程需要有一个唯一的身份标识

2.内存指针:指向进程使用的内存部分

进程跑起来需要消耗硬件资源,向操作系统来申请使用,进程是操作系统进行分配的基本单位

3.文件描述符表:

一个进程打开的每个文件对应一组文件描述符,把这些文件描述放到一个顺序表的结构里,构成文件描述符表。

4.进程调度,

(a)进程状态, 就绪态:该进程已经准备好,随时可以上cpu运行

阻塞态:该进程暂时无法上CPU执行

(b)进程的优先级

进程之间的调度,是根据进程的优先缓急来进行的,比如说目前用户在使用的应用那么操作系统就会优先调度用户目前的应用进程为最高优先级,来让CPU优先处理,这样用户体验感才会很好。

(c)进程上下文: 上下文就是描述当前进程执行到哪里的“存档记录”

进程在离开CPU的时候就需要把当前运行的中间结果进行“存档”

下次进程回来CPU上,再恢复之前存档,从上次的结果来继续往后执行

存档: 进程离开CPU,寄存器的值保存到PCB的上下文字段中

读档: 进程下次回来CPU再把PCB中的值给恢复到寄存器中

进程运行时,CPU内部一系列寄存器,保存当前进程执行的中间结果,包括进程运行到哪一条指令。

(d) 进程的记账信息

统计了每个进程在CPU上执行时间,作为调度参考依据

(6)操作系统往往使用双向链表的结构来组织pcb

1.创建一个进程,就是创建了一个链表的节点

2.销毁一个进程,就是把链表的节点给删除了

3.遍历进程列表,就是在遍历链表

二、内存分配-内存管理

操作系统对内存资源的分配采用空间模式--不同进程使用内存中的不同区域,互相之间不会干扰。

操作系统给进程分配的内存,是以“虚拟地址空间”的方式进行分配的,每个进程访问的内存地址都不是真实的物理内存地址

为什么不直接访问物理内存呢?

如果像该图一样,每个进程直接访问物理内存的地址,此时可能产生一个重要的问题:

进程1,万一代码BUG(比如数组越界,野指针)可能把进程2的内存里的内容进行破坏,

严重影响了操作系统的稳定性

当我们采用虚拟内存的方式时

系统相当于进程与物理内存之间的传话人,这里访问的内存会被操作系统自动映射到真实的物理内存上,但是进程自身感知不到实际的物理地址。

举个例子就是:每个班级里都有学号为1号的同学,但是他们不是一个人,有来这个班级的花名册,就可以精准的找到每个人。

任何的BUG比如野指针,Ox2ff,拿着这个地址发现页表上没有这个地址,无法翻译,则无法真正修改物理内存,也不会对别的进程的内存数据早成干扰

好处就是:进程独立性增强,提高系统稳定性,

一个进程无法直接干预到另一个进程的内存内容,

每个进程都有自己独立的地址空间。

三、进程间的相互通信

有时候需要进程之间进行交互,相互配合,

操作系统提供进程间通信具体实现方法有很多种,管道,消息队列,共享内存,信号...

如果每个进程之间可以直接访问物理内存,其实就没有隔离性,也就不需要进程间通信。

进程1 直接算好的结果,写到进程2里的内存就行

所谓进程间通信,就是在隔离性的前提下,找一个公共区域,让这两个进程借助这个区域来完成数据交换。

举个例子:就是相当于你点个外卖,外卖员把外卖送到小区的保安室里,然后你再去小区保安室拿外卖,时间上你俩没有见面,但是你们的资源信息发生了交互。

线程与进程的区别:

进程:比较重量的,速度慢,消耗资源多

创建进程,销毁进程,调度进程,这种成本消耗都很高, 多进程编程可以解决并发变成的问题,

但是不是高效的选择

为什么进程这么重量?

因为在进程操作中,体现在资源分配上,它往往上一个耗时操作,比如系统给进程分配一块内存,

需要遍历系统自己的空闲内存,找到合适的空间分配,但同时很多进程都在问系统申请资源,系统进行资源分配需要一个一个来。

线程:轻量级别进程,一个进程可以包含多个线程,同时多个线程每个线程都是一个独立可以调度执行的“执行流”,这些执行流之间本身上并发的,同时这些线程共用同一份进程的系统资源,意味着对线程而言,系统资源说分配好的,创建线程就省下分配资源的开销

举个例子:

这个大院子是我的一个进程,里面的机器相当于一个线程

多进程:

搞了两个院子,机器可以同时工作,相当于两个独立的执行流,两个进程互相独立互不影响。

多线程:

同一个院子,里面塞了两台机器,同一个进程下,里面加了一条线程。

两个线程之间可以独立执行,但是他们可以用同一个资源,这样成本就会降低。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值