进程和线程
 
 进程
 
  进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。 进程是正在运行的程序的实例。 
 
线程
 
  Linux中所谓的“线程”只是在被创建时clone了父进程的资源,因此clone出来的进程表现为“线程。 
 
进程特征
 
  动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的; 并发性:任何进程都可以同其他进程一起并发执行; 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进; 结构特征:进程由程序、数据和进程控制块三部分组成; 
 
进程切换
 
  切换:从正在运行的进程那里收回处理器,使待运行的进程占用处理 切换过程:把正在运行的进程占用的处理器的寄存器中的中间数据(进程的上下文)存储到进程私有堆栈寄存器中,把待运行进程的断点送入处理器的程序指针PC,此时这个进程已经占有处理器的使用权了。 
 
进程状态
 
  就绪状态:已获得除处理器外的所需资源,等待分配处理器资源; 运行状态:占用处理器; 阻塞状态:条件未满足,无法执行 
 
进程状态转换
 
  就绪----->运行;条件,进程调度 运行----->就绪;条件,时间片用完 运行----->阻塞;条件,等待某个事件发生 阻塞----->就绪;条件,某个事件已经发生 
 
引发进程创建的事件
 
  用户登录(内核):分时系统,终端用户登录,得为终端创建一个进程 作业调度(内核):批处理系统,一定算法调度某作业,将作业装入内存,为其分配资源,需为它创建进程 提供服务(内核):运行的用户程序提出某种请求 应用请求:应用进程的需求,由它创建新的进程以便并发运行完成某个任务 
 
进程创建过程
 
  申请空白PCB 为新进程分配资源 初始化进程控制块 插入就绪队列 
 
进程通信目的
 
  数据传输 共享数据 通知事 资源共享 进程控制 
 
进程之间如何通信
 
 同一主机上的进程
 
 UNIX进程间通信方式
 
  管道(PIPE):半双工通信方式;父子进程间使用;无格式的字节流;管道缓冲区有限(存在于内存); 有名管道(FIFO):半双工通信方式;允许无亲缘关系进程间通信; 信号(Signal):复杂的通信方式;用于通知某个接收进程某个事件已经发生; 
 
System V进程间通信方式
 
  信号量(Semaphore):计数器;控制多个进程对共享资源的访问;锁机制 消息队列(Message Queue):消息的链表;存放在内核;克服信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点; 共享内存(Shared Memory):映射一段能被其他进程访问的内存(共享内存由进程创建);共享内存最快的IPC方式; 
 
POSIX 进程间通信
 
  posix消息队列 posix信号灯 posix共享内存 
 
网络主机间的进程通信
 
  Remote Procedure Call远程过程调用 Socket:基于TCP/IP协议的通信方式(可用于不同主机之间进程通信) 
 
管道实现机制
 
  管道是由内核管理的一个缓冲区; 管道的一端连接一个进程的输出。这个进程会向管道中放入信息。 管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息 当两个进程都终结的时候,管道也自动消失。 借助了文件系统的file结构和VFS的索引节点inode 将两个file结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的 一个命名管道实际上就是实现一个FIFO文件; 命名管道一旦建立,之后它的读、写以及关闭操作都与普通管道完全相同 
 
流管道s_pipe
 
 线程之间如何通信
 
  使用全局变量 使用消息实现通信:消息队列 使用事件CEvent类实现线程间通信:监视处于有信号状态的事件 
 
线程间的同步方式
 
  临界区 互斥量(内核对象):可在不同进程间实现同步 信号量(内核对象):可以同一时刻允许多个线程访问同一资源 事件(内核对象):一个布尔值表示是手动置位事件还是自动置位事件,另一个布尔值用来表示事件有无触发。