一、进程间通信与线程间通信进程间通信 1、管道。管道是一种半双工的通信方式,数据只能单向流动,而且只能在有血缘关系的进程间使用,进程的血缘关系通常是指父子进程关系。 2、命名管道。也是半双工的通信方式,但是它允许无亲缘关系关系进程间通信。 3、信号。是一种比较复杂的通信方式,用于通知接收进程某一事件已经发生。 4、信号量。信号量是一个计数器,可用来控制多个进程对共享资源的访问。它通常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。 5、消息队列。消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递消息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。 6、共享内存。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式 7、套接字。 管道:速度慢、容量有限 线程间通信 1、锁机制。互斥锁、条件变量、读写锁 互斥锁提供了以排他方式防止数据结构被并发修改的方法。 2、信号量机制。包括无名信号量和命名线程信号量 3、信号机制。类似进程间的信号处理 二、堆和栈都保存什么堆区:全局变量、静态变量、new对象 栈区:函数的参数值、局部变量 三、临界区及如何解决冲突每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进入后不允许其他进程进入。如果有若干个进程要求进入空闲的临界区,一次仅允许一个进程进入。任何时候,处于临界区的进程不可多于一个。如已有进程进入自己的临界区,则其他试图进入临界区的进程必须等待。进入临界区的进程要在有限时间内退出,以便其他进程能及时进入自己的临界区。如果不能进入自己的临界区,就应该让出CPU,避免进程出现忙等等现象。 四、Windows下的内存是如何管理的1、虚拟内存:最适合用来管理大型对象或者结构数组 五、什么是虚拟内存虚拟内存允许执行进程不必完全在内存中。虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻进行必要的映射;当程序引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的部分装入物理内存并重新执行失败的命令。这样,对于进程而言,逻辑上似乎有很大的内存空间,实际上其中一部分对应物理内存上的一块(称为帧,通常页和帧大小相等),还有一些没加载在内存中的对应在硬盘上。 六、分段和分页的区别段式存储管理是一种符合用户视角的内存分配管理方案。在段式存储管理中,将程序的地址空间划分为若干段,如代码段,数据段,堆栈段;这样每个进程有一个二维地址空间,相互独立,互不干扰。段式管理的优点是:没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片。 页式存储管理方案是一种用户视角内存与物理内存相分离的内存分配管理方案。在页式存储管理中,将程序的逻辑地址划分为固定大小的页(page),而物理内存划分为同样大小的帧,程序加载时,可以将任意一页放入内存中任意一个帧,这些帧不必连续,从而实现了离散分离。页式存储管理的优点是:没有外碎片(因为页的大小固定),但会产生内碎片。 两者的不同点: 目的不同:分页是由于系统管理的需要而不是用户的需要,它是信息的物理单位;分段的目的是为了能更好地满足用户的需要,它是信息的逻辑单位,它含有一组其意义相对完整的信息; 大小不同:页的大小固定且由系统决定,而段的长度却不固定,由其所完成的功能决定; 地址空间不同: 段向用户提供二维地址空间;页向用户提供的是一维地址空间; 信息共享:段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制; 内存碎片:页式存储管理的优点是没有外碎片(因为页的大小固定),但会产生内碎片(一个页可能填充不满);而段式管理的优点是没有内碎片(因为段大小可变,改变段大小来消除内碎片)。但段换入换出时,会产生外碎片(比如4k的段换5k的段,会产生1k的外碎片)。 七、什么是死锁?产生条件?如何避免死锁在2个或多个并发进程中,如果每个进程持有某有资源而又都等待别的进程释放它或他们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。 死锁产生的原因:系统资源不足,进程推进顺序非法 死锁的处理策略:鸵鸟策略、预防策略、避免策略、检测与解除死锁 八、进程、线程同步的方式进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作。从而使程序的执行具有可再现性。 同步机制遵循的原则:空闲让进、忙则等待、有限等待、让权等待。 线程同步是指多个线程同时访问某资源时,采用一系列的机制以保证最多只能一个线程访问该资源。 进程同步的方式: 原子操作、信号量机制、自旋锁管理、会合、分布式系统 线程同步的方式: 1、临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问。 2、互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会同时被多个线程访问。 3、信号量:它允许多个线程同一时刻访问同一资源,但是需要限制同一时刻访问此资源的最大线程数目。信号量对象与其他前面几种方法不同,信号允许多个线程同时使用共享资源。 4、事件(信号):通过通知操作的方式来保持多线程的同步,还可以方便实现多线程的优先级比较操作。 九、进程和线程各有哪几种状态进程:就绪、运行、阻塞 线程:创建、就绪、运行、阻塞、等待、时间等待、消亡 十、进程的调度算法1、先来先服务(FCFS):此算法的原则是按照作业到达后备作业队列(或进程进入就绪队列)的先后次序选择作业(或进程) |
|