操作系统进程 并发和并行处理

路漫漫其修远兮,吾将上下而求索

文章目录

目录

一、操作系统

操作系统的作用:

二、进程

1.进程的概念

2.进程管理

3.进程的结构体里有哪些属性(核心的)

三、并行和并发

四、内存分配

五、进程间通信

六、进程和线程


一、操作系统

操作系统是一组做计算机资源管理的软件,常见的有Windows ,IOS,Android,Linux 等等

操作系统的作用:

对上要配合软件,给软件提供一个稳定的运行环境 

对下要管理硬件设备 

二、进程

1.进程的概念

进程是操作系统对每一个正在运行中的软件的一种抽象,可以把进程看过程序的一次运行。

进程是操作系统进行资源分配的基本单位!!!(包括 内存资源 硬盘资源 CPU资源)

2.进程管理

描述一个进程:使用结构体/类来表示一个进程有哪些信息

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

3.进程的结构体里有哪些属性(核心的)

PCB:进程控制块

1.PID:进程中唯一的标识

2.内存指针:当前进程使用了哪一块内存  (标识使用了内存上的哪些资源)

3.文件描述表:进程每次打开一个文件,就会产生一个文件描述符(标识了这些被打开的文件),对应的一组文件描述符,组织起来放到一个顺序表中就是“文件描述表”  (使用了硬盘上的哪些资源)

4.进程调度信息(CPU分配)  

进程的状态:  一种是就绪态:已经准备好了,随时可以在CPU上运行

                        一种是阻塞态:目前还没准备好,不能在CPU上运行

进程的优先级:进程间的调度不一定是“公平的”  进程之间存在优先级,故优先执行谁取决于优先级(跟下面食堂谁便宜就先运行谁一样!!)

进程的上下文:记录这个进程执行了到了哪里的“记录”,当CPU执行一个进程,还没执行完,暂时离开了这个进程,就要把之前CPU执行到哪里了,执行的中间结果“存档”存档一下(将寄存器中存储计算的中间结果存到PCB),等CPU回来时,可以接着上次的执行(将PCB中的值恢复到寄存器中)继续执行进程。

进程的进账信息:统计当前进程在CPU上执行了多长时间,可以作为调度的参考(那个运行时间少就可以先运行这个)

三、并行和并发

并行:两个核心同时运行两个进程,两个进程同时运行

并发:一个核心,先运行进程A,运行一会再去运行进程B,运行一会再去运行进程C,来回切换着运行,只要切换的足够快,看起来就和“同时”运行一样

并发举例:比如说,你在学校非常喜欢吃食堂的三个窗口A B C 窗口的大叔大婶都喜欢你天天去吃他们窗口的饭,但是你觉得一直吃一个窗口太腻了,于是你排了一个时间表:一 三 五 吃窗口A(因为窗口A 最便宜)二 四 吃窗口B(这个第二便宜)  周六吃窗口C 周日就随便吃其他窗口的    这样换个维度来看!! 

如果我是站在一天的维度来说,那我就是这一天我只吃一个窗口的

如果是站在一个星期,一个月的维度来看,那我就是在同时吃这三个窗口的!!

 只要你切换的足够快,那么看起来就和“同时”一样(并发)  如果你一天同时吃了窗口A和窗口B这样就是(并行)了!!!

四、内存分配

操作系统对内存的分配,采用的是空间模式,不同进程使用内存中的不同区域,相互之间互不干扰(使用虚拟地址)

举例:有两个进程A 和进程B  如果我们是采用的是真实的物理地址  如果我的进程A里面出错了,出现了野指针,这个野指针正好指向了进程B中的地址,这样两个进程就都坏掉了!!(这样及其不稳定)

所以我们的操作系统就使用了虚拟地址来解决这个问题

进程A 和进程B都使用了一段虚拟地址(0x00-0xff),在操作系统中有个专门的页表(用来映射虚拟地址)将其映射到真实的物理内存上,A B映射到不同的内存上,这个过程对于进程A B来说,他们本身是感知不到的 

如果此时进程A中再出现野指针的情况,页表一检查,你操作的内存不在你的(0x00-0xff)这个范围內 ,页表就翻译不出来,就无法访问真正的物理地址。

 有了页表的存在,一个进程就无法直接干预另一个进程的地址了,进程的独立性,大大提高了操作系统的稳定性!!

五、进程间通信

在隔离性的前提下,找到一个公共区域,两个进程都可以访问这一块,用来交换数据。

目前,主流操作系统提供的进程通信机制有如下:

1. 管道

2. 共享内存

3. 文件

4. 网络

5. 信号量

6. 信号

六、进程和线程

线程说白了,就是轻量化的进程

在操作系统中,创建/销毁/调度一个进程的成本和资源都是比较高的(主要体现在进程调度上)

比如说:系统要给一个进程分配内存

1.要先遍历一遍空闲内存的表,找到一个大小合适的空间来进行分配

2.当很多个进程都要分配内存的时候,还是得一个一个进行分配(这样开支就比较大了)

线程是轻量化的进程:

一个进程中有多个线程,约定每一个线程都是一个可以调度的独立的执行流(执行流之间都是并发的),同时这些线程(这个进程),公用一个进程的内存资源,这样对于线程来说所有的系统资源都已经分配好了,这样就省去了多次的资源分配! 

你可能感兴趣的:(操作系统,并发,JAVA,java)