1.进程和线程
进程
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。程序段、相关的数据段、PCB(进程控制块)构成了进程实体。
进程的三种基本状态:
1)就绪状态:进程一旦获得CPU就可以投入运行的状态。
2)执行状态:进程获得CPU正在运行的状态。
3)阻塞状态:进程由于等待资源或某个事件的发生而暂停执行的状态。
线程
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程,作为独立调度和分派的单位,不独立拥有资源(仅有少量基本资源),而与其它线程共享同一进程的资源,减少了系统的时空开销。
线程的基本概念:
1、线程是进程中的一个实体,是被系统独立调度和分派的基本单位。
2、线程只拥有在运行中必需的资源(程序计数器,一组寄存器和栈),但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
3、一个线程可以创建和撤销另一个线程。
4、同一进程中的多个线程可以并发执行。
5、线程在运行中呈现间断性,也有就绪、阻塞和执行三种基本状态。
进程和线程的区别:
进程相当于“一列火车”,线程相当于“一节车厢”
(1)进程是操作系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,一个进程可以包含多个线程。
(2)进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。
(3)不同进程间数据很难共享,同一进程下不同线程间数据很易共享。
(4)进程要比线程消耗更多的计算机资源
(5)进程间不会相互影响,一个线程挂掉将导致整个进程挂掉。
2.进程间的通信方式
1.匿名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,只能在父子进程间使用。
2.命名管道(named pipe):也是半双工的通信方式,但是它允许无亲缘关系关系进程间通信。
3.信号(signal):是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。 信号是Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。
4.信号量(semophere):信号量是一个计数器,可用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
5.消息队列(message queue):消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
6.共享内存(shared memory):就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问,共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量等配合使用,来实现进程间的同步和通信。
7.套接字(socket):套接口也是进程间的通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。
几种方式的比较:
管道:速度慢、容量有限
消息队列:容量收到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题。
信号量:不能传递复杂信息,只能用来同步。
共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全。
3.共享内存通信的原理:
首先申请一块物理内存,然后将这块物理内存通过页表映射到需要进行通信的进程的虚拟地址空间中,然后进程可以通过访问虚拟地址从而间接的访问共享物理内存,每一个与共享物理内存建立映射关系的进程都可以实现进程间通信。
共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限、大小和最近访问的时间等。
为什么共享内存是最快的IPC?
从上图中,我们可以看出,使用管道(FIFO/消息队列)从一个文件传输信息到另外一个文件需要复制4次。一是,服务器端将信息从相应的文件复制到server临时缓冲区中;二是,从临时缓冲区中复制到管道(FIFO/消息队列);三是,客户端将信息从管道(FIFO/消息队列)复制到client端的缓冲区中;四是,从client临时缓冲区将信息复制到输出文件中。
从上图中,我们可以看出,共享内存的消息复制只有两次。一是,从输入文件到共享内存;二是,从共享内存到输出文件。这样就很大程度上提高了数据存取的效率。
它将同一块内存区域映射到共享它的不同进程的地址空间中,使得这些进程间的通信就不需要再经过内核,只需对该共享的内存区域进程操作就可以了,但是它需要用户自己进行同步操作。
4.进程管理过程
计算机操作系统基础(十六)---进程同步之共享内存 - SegmentFault 思否
每一个进程都有自己的进程空间,并且他们的进程空间是通过页表通过段页式存储管理和实际的内存建立起映射的。进程之间他们的进程空间是互不干扰的,相互独立的。一个进程不能访问另外一个进程的内存空间
因此: 在某种程度上,多进程是共同使用物理内存的(也就是说多进程是共享物理内存的)
由于操作系统的进程管理,进程间的内存空间是独立的(也就是任意两个进程他们逻辑上的内存空间是完全没有联系的),这样就保证了每一个进程它们独立运行的安全性(这也是进程管理的一个作用)
共享内存就可以打破这样的限制,通过共享内存,进程就可以通过页表来映射到同样的一片内存中去,这片内存既可以被进程1所使用,也可以被进程2所使用。也就是这片共享内存可以被进程1所读或者是写,同样也可以被进程2所读或者所写。因此,通过共享内存,进程1和进程2建立了联系。那么共享内存也是操作系统所提供的重要的进程同步的方法
共享内存介绍
共享存储允许不相关的进程访问同一片物理内存(它实现的原理就是把一片相同的物理内存映射到不同进程的页表中去,使得不同的进程通过页表可以访问相同的一块物理内存)
共享内存是两个进程之间共享和传递数据最快的方式
共享内存未提供同步机制,需要借助其它机制管理访问,以避免并发访问所带来的问题
5.虚拟内存
什么是内存(二):虚拟内存 - eleven_yw - 博客园
虚拟内存将主存看成是一个磁盘的高速缓存,主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据。
页面置换算法
页面置换算法:最佳置换算法、先进先出置换算法、最近最久未使用置换算法、最近最少未使用置换算法、Clock置换算法、页面缓冲算法
最佳置换算法 | 最佳置换算法是所选择的是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低缺页率。最佳置换算法是一种理想化的算法,无法实现,但可以作为标准评价其他算法的优劣。 |
先进先出置换算法 | 直观上,分配给的作业的实页越多,缺页中断率越小,但对FIFO算法这个结论并不是绝对的。在某些情况下,当分配的页面多反而导致更多的缺页中断,这种现象称为FIFO异常现象或称Belady现象。 |
最近最久未使用置换算法 | LRU算法是选择最近最久未使用的页面予以淘汰。LRU算法是向前看的,即根据各页以前的使用情况来判断。需要有寄存器和栈两类硬件之一的支持。 |
最近最少未使用置换算法 | 当需要淘汰时,应淘汰被访问次数最少的页,一种简单的实现方式是为每一页设置一个计数器, |
Clock算法(LRU近似算法) | 把所有页面都保存在一个类似时钟表面的环形链表中,用一个指针指向最老的页面。当发生缺页中断时,算法检查指针指向的页面,如果R位是0就淘汰掉这页,并把新页插入这个位置,再把指针前移一个位置;是1,就清除R位并把指针前移一个位置 |
页面缓冲算法 |
6.死锁
(1)定义:死锁是指多个进程在运行过程中因竞争资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们将无法向前推进。
(2)产生的必要条件:互斥条件、请求和保持条件、不可抢占条件、循环等待条件。
产生死锁的条件:互斥、持有并等待、资源不可被剥夺、循环等待
(3)处理方法:预防死锁、避免死锁、检测死锁、解除死锁。
(4)预防死锁:破坏死锁产生的后三个必要条件。
(5)避免死锁:利用银行家算法
(6)检测死锁:资源分配图
(7)解除死锁:抢占资源、终止或撤销进程
1).抢占资源,从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态
2).终止进程,终止系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。
7.存储管理
(1)存储器的结构:
(2)存储管理方式
分页存储管理、分段存储管理、段页式存储管理
分页存储管理
分页地址结构:页号、页内位移
快表:页表存放在内存中,使CPU每要存取一个数据,都要两次访问(访问页表,寻找物理块号;访问内存,读写数据);这使计算机的处理速度降低1/2。为提高地址变换速度,可在地址转换机构中增设一个具有并行查寻能力的特殊高速缓冲存储器,又称快表(TLB),用以存放当前访问最频繁的那些少量页表项。
分段存储管理
分页和分段的区别:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要。段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的,各个模块在链接时必须组织成同一个地址空间;分段的地址空间是二维的,各个模块在链接时可以每个段组织成一个地址空间。