操作系统----进程和线程

进程
进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位
1. 进程的三个组成部分
a. 程序
b. 数据
c. 进程控制块(PCB):为了管理和控制进程,系统在创建每个进程时,都为其开辟一个专用的存储区,用以记录它在系统中的动态特性。系统根据存储区的信息对进程实施控制管理。进程任务完成后,系统收回该存储区,进程随之消亡,这一存储区就是进程控制块
PCB随着进程的创建而建立,撤销而消亡。系统根据PCB感知一个进程的存在,PCB是进程存在的唯一物理标识(这一点可以类比作业控制块JCB)
进程的产生与消失:
产生:(1)系统初始化(神创人)
(2)执行进程创立程序(人创人)
消失:(1)寿终:进程运行完成而退出
(2)自杀:进程因错误而自行退出
(3)他杀:进程被其他进程杀死
(4)处决:进程因异常而强行终结
前两种为进程自愿退出,后两种非自愿退出。
进程的状态:
就绪——执行——阻塞
线程
------------------------------------------------------------------------------------------------------
线程通信:
一:线程对白
管道:线性字节数组,类似文件,使用文件读写的方式进行访问。但不是文件,因为通过文件系统看不到管道的存在。管道可以设在内存里,而文件很少。可以在内存也可以是磁盘实现。(有读管道和写管道)。
管道的一个重要特点是使用管道的两个线程之间必须存在某种关系(同进程或者父子进程中的线程)。
记名管道:在两个不相关的线程之间进行管道通信,是一个有名字的通信管道。记名管道和文件系统共享一个名字空间,可以从文件系统中看到记名管道。
**管道和记名管道不是所有操作系统都支持,主要支持者是UNIX和Linux。
套接字(socket):是另外一种可用于进程间通信的机制。
-------这三个缺点:(1)要通信,必须建立连接(创建管道或者套接字),消耗系统资源。
(2)通信是自愿的,一方可以随便发,但另一方接不接受看心情。
(3)通信量小的话,杀鸡用牛刀,参考(1)。
二:线程电报
信号:在计算机里,信号就是一个内核对象,或者说一个内核数据结构。发送方将该数据结构的内容填好,指明该信号的目标进程,然后发出特定的软件中断。操作系统接收到特定的软件中断请求时,知道有进程要发信号,于是到特定的内核数据结构中查找信号接收方,并进行通知,接到通知的进程对信号进行处理(如果不处理,则终止操作系统的运行)。
-----优点:(1)不愿做任何连接。
(2)迫使一方对我们的通信立即做出回应。
(3)传输的数据量小的话,划算。
三:线程旗语
信号量:在计算机中,信号量其实就是一个简单整数,1或者0.
四:线程拥抱
共享内存:两个进程共同享有同一块内存。这块内存中的任何内容,两个进程都可以访问。要使用共享内存进行通信,一个进程首先创建一片内存空间专门作为通信用,而其他进程则将该片内存映射到自己的(虚拟)地址空间。这样,读写自己地址空间中对应的共享内存时,就是与其他进程通信。
与管道的区别:(1)使用共享内存机制进行通信的两个进程必须在同一个物理机上。
(2)共享内存的访问方式是随机的,而不是只能从一端读,另一端写。
确定:管理复杂,安全性低。
五:信件发送
消息队列:消息队列是一列有头有尾的消息排列。
---------------------------------------------------------------------------
进程同步
锁:闭锁和开锁。闭锁:(1)等待锁打开,(2)获得锁并且锁上。
开锁:就是打开锁一步。

正常锁应该具备的特性:(1)锁的初始状态应该是打开。
(2)进临界区前必须获得锁。
(3)出临界区前必须打开锁。
(4)如果别人持有锁则必须等待。
睡觉与叫醒:生产者消费者问题

信号量:不光是一个同步原语,还是一个通信原语,而且还能作为锁使用。支持Down操作和up操作。

总结:锁解决了同步问题,但带来了等待。为了消除等待,有了睡觉与叫醒,但是睡觉与叫醒有死锁现象,所以有了信号量。但信号量使用不当(即编写困难)或者信号量过多会造成死锁,效率低下。
管程:一组子程序,变量和数据结构的集合。用来解决信号量出现的问题。
缺点:对编译器依赖。只能在单台计算机上使用。
消息传递:

栅栏:
该原语主要用来对一组线程进行协调。

猜你喜欢

转载自blog.csdn.net/qq_39041126/article/details/80709067