上一次,发布了sdust cl大牛的总结之后,受到了广大的欢迎,这次决定整理一下cl大牛总结的问题,然后罗列出来,方便大家整理和背诵。顺序就按照他的顺序来喽!
1. 进程的有哪几种状态,状态转换图,及导致转换的事件。
2. 进程与线程的区别。
线程的引入是为了减少程序在冰法执行时的时空开销,使os具有更好的并发性,从而进一步提高了资源的利用率和系统的吞吐量。
二者比较:
(1)调度:在传统的os中用友资源的基本单位和独立调度、分派的基本单位都是进程;在引入线程的os中,则把线程作为系统调度和分派的基本单位,而把进程作为拥有资源的基本单位。(2)拥有资源:两种os中用友资源的基本单位都是进程。线程除了一点在运行中必不可少的资源外,本身基本不拥有资源,但它可以访问其隶属进程的资源。(3)并发性:在引入线程的os中,不仅进程之间可以并发执行,而且同一个进程的多个线程之间也可以并发执行,因此他具有更好的并发性。(4)系统开销:由于在创建或撤销进程的时候,系统要为之分配或回收资源。由于隶属同一个进程的多个线程共享同一空间和地址,以及该进程的所有已打开文件,从而使他们之间的同步和通信的实现也比进程更方便。
3. 进程通信的几种方式。
(1)共享存储器系统:
① 基于共享数据结构的通信方式。(此通信方式抵消,只适用于传递相对少量的数据)
② 基于共享存储区的通信方式:为了传送大量数据,在存储区中划出一块共享存储区,所有的进程可通过对共享存储区进行读或写数据实现通讯,可传输大量数据。
(2)消息传递系统:
① 直接通信方式——消息缓冲:采用进程的消息缓冲队列;消息发送者将消息直接放在接受者的消息缓冲队列。
② 间接通信方式:利用中间者——信箱、邮局来传递信件;发送进程将消息发送到信箱中,接受进程从信箱中提取出消息。
(3)管道通信:
所谓“管道”,是指链接二哥进程的一个打开的共享文件,又名pipe文件;发送进程以字符流形式将大量的数据送入管道;接收进程则在需要时从管道中读取数据。
4. 线程同步几种方式。(一定要会写生产者、消费者问题,完全消化理解)
(1)临界区
当多个线程访问一个独占性共享资源时,可以使用临界区对象。用友临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,知道用友临界区的线程放弃临界区为止。具体应用方式:① 定义临界区对象CcriticalSection g_CriticalSection; ② 在访问共享资源(代码或变量)之前,先获得临界区对象,g_CriticalSection.Lock(); ③ 访问共享资源后,则放弃临界区对象,g_CriticalSection.Unlock();
(2)事件
事件机制,则允许一个线程在处理完了一个任务后,主动唤醒另外一个线程执行任务。比如在某些网络应用程序中,一个线程如A负责侦听通信端口,另外一个线程B负责更新用户数据,利用事件机制,则线程A Cevent类对象有两种类型:人工事件和自动事件。
自动事件对象,在被至少一个线程释放后自动返回到无信号 状态;
人工事件对象,获得信号后,释放可利用线程,但知道调用成员函数ReSet();