一丶什么是进程?
进程就是跑起来的程序,想一些后缀名.exe的文件称为可执行文件,不用的时候在硬盘上,当我们执行的时候,操作系统就会把这些.exe文件加载到内存中,并让cpu开始执行这些.exe文件内部的一些指令(.exe就存了这些文件的一些二进制)
二丶什么是线程?
线程就是进程的一部分,进程包含了一个或多个线程 ,如果把进程比做一个工厂,进程就是工厂里的生产线,可以有多条
三丶操作系统是怎么管理进程的?
1.先描述一个进程(明确一个进程上面的一些属性)
2.在组织若干个进程(使用数据结构,把很多描述进程的信息放到一起,linux为例,典型的就是双链表的结构)
四丶PCB中的一些属性
1.pid(进程id) 进程的身份标识
2.内存指针:指明了这个进程要执行的代码/指令在内存的哪里,及所依赖的数据在哪里
3.文件描述符表:程序运行过程中要和文件打交道,进程每打开一个文件,就会在表中多加一项(可以想成一个数组,数组中的每个元素又是一个结构体,就对应一个文件信息)
上边的属性是基础属性,下面属性是为了进程的调度
1.状态:就绪状态(随时可以去cpu上执行)和阻塞状态(暂时不能去cpu上执行)
2.优先级:先分配谁时间,以及谁分配时间多,和谁分配的时间少(上cpu的时间)
3.记账信息:统计了每个进程,都分别执行了多久,分别都执行了那些执行,分别等了多久,给进程调度提供指导的依据
4.上下文:表示了上次出cpu的时候,当时程序的状态 进程调度出cpu之前,要把cpu中所有的寄存器中的数据保存到内存中,下次在上cpu的时候,就会把内存中的数据回复到寄存器中(相当于存档和读档)
五丶内存资源如何分配?
进程的独立性,就依仗了内存虚拟空间,操作系统上运行这多个进程,如果一个进程出现bug可能会影响到其他进程,因此我们要保证进程的独立性,互不干扰.内存虚拟空间解决了问题
六丶进程间的通信
通过操作系统提供的公共空间,间接的让进程通信
七丶进程和线程的区别?(重点)
1.进程包含线程,一个进程有一个或者多个线程
2.进程和线程都是为了处理并发编程这样的场景
但是进程创建和释放的效率更低,相比之下线程更轻量,创建和释放效率高(为啥轻量?少了申请释放资源的过程)
3.操作系统创建进程,要给进程分配资源,进程是操作系统分配资源的基本单位
操作系统创建的线程,是要在cpu上调度执行,线程是操作系统调度执行的基本单位
4.进程具有独立性,每个进程都对应各自的内存虚拟空间,一旦进程挂了,不会影响到其他
同一进程中有多个线程,多个线程公用一块内存空间,一旦一个线程挂了,可能影响其他线程,甚至导致进程崩溃