目录
进程与线程
2.1进程的组成——PCB
当进程被创造时,操作系统为该进程分配一个“唯一的、不重复的”PID
操作系统会记录PID,记录分配的资源(分配了多少内存,正在使用哪些I/O设备,正在使用哪些文件(操作系统对资源的管理))
进程的运行
一个程序先到硬盘里,然后要执行前,要把程序放入内存中,转到运行态,创建对应的进程,创建相应的PCB
然后CPU从内存中读取指令
要执行文件先从硬盘调到内存,会给这个文件分配内存空间,现在是创建态。
创建完成之后变成就绪态,没有空闲cpu,暂时不能运行。
正在运行就是运行态,cpu空闲会在就绪态的文件选一个进去,(如这个进程有一个指令是请求打印机,但打印机在忙,(请求等待某个事件发生)那么无法继续往下执行,操作系统就会让这个进程下cpu,进入阻塞态。
会选另一个就绪态进程在cpu运行,那么如果打印机空闲了,就让他从阻塞态又到就绪态。(如果打印机此时完成了任务,该进程就会从阻塞态到就绪态。)
那么一个进程最后执行exit系统调用,终止该进程,进入终止态,操作系统会让该进程下cpu,回收内存空间回收该进程pcb
运行态的进程结束,转为终止态,或者有除0等不可修复的操作。
2.2进程控制
因为在进程由就绪态到运行态的时候,标记会由0到1,但如果这个时候有一个中断命令,那么导致他还在就绪队列里面,但标记却变成了运行态的标记,这是不允许的。
那么我们就必须一气呵成的执行,在这过程中关中断和开中断之间,不会被中断,就可以一气呵成地执行了。
PC用于存放下一条指令的地址
IR存放当前正在执行的指令
无论哪个进程控制原语,要做的无非是:
1.更新PCB中的信息(修改进程状态)
2.将PCB插入合适的队列
3.分配/回收资源
2.3进程通信
1.共享存储
如果你要在进程P中请求打开进程Q,你肯定不可以随意去访问(例如一个软件进程读取你的qq聊天记录)这显然是不合理的,但我们使用也会有一个跳转的操作,是如何实现的呢?
建立一个共享资源区,通过映射进程的地址实现,P和Q都可以读取里面的内容
2.消息传递
2.1直接通信方式
利用发送原语和接收原语,进程P中send(目标进程,msg(地址))
2.2间接通信方式
send里面不再是放目标进程,而是到操作系统内核里面指定地信箱
3.管道通信
管道和共享的区别:共享可以读写里面任意位置,管道只能按顺序,允许多个写进程,一个读进程
注意:只要不为空都能读,只要没满都能写
2.4线程
我们不妨想一下,我们在使用qq的时候,如果只能一次执行一个程序是不是不太方便,假如我们正在视频通话但是又想发个文件再发几条信息,这是不是无法“同时”完成。那么就引入了线程的概念
下面的图就很形象地表示了这个意思:
线程成为程序执行流地最小单位
进一步提高系统的并发性
并发性的变化:原来是只能进程之间并发,你又用qq又用qq音乐。而引入线程之后,你可以在qq里面又发消息又视频,是提高了并发度的。
下面这个类比也很形象:
用户级线程
用户态采用线程的方式,而操作系统内核态只有进程
——————未完——————