进程与线程的区别:
1.进程是系统进行资源分配的基本单位,有独立的内存地址空间;线程时CPU调度的基本单位,没有单独的地址空间,有独立的栈、局部变量、寄存器、程序计数器等。
2.一个进程无法直接访问另一个进程,同一个进程内的多个线程共享进程的资源。
3.线程属于进程,不能独立执行。进程切换开销大,线程切换开销小。
进程通信的几种方式:(以Linux为例)
1.管道(Pipe):管道可用于具有亲缘关系进程间的通信
2.信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。
3.报文(Message)队列(消息队列):消息队列是消息的链接表,有足够权限的进程可以向队列中添加消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4.共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。一般与其他通信机制结合使用,如与信号量结合使用,达到进程间的同步及互斥。
5.信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
6.套接口(Socket):一般的进程间的通信机制,可用于不同机器之间的进程间通信。
进程调度算法:
1.先来先服务调度算法(FCFS):从“就绪队列”中选择一个最先进入队列的进程。
2.短作业优先调度算法(SJ/PF): 是指对短作业或短进程优先调度的算法。
3.高优先权优先调度算法:把处理机分配给就绪进程队列中优先级最高的进程。
优先级调度算法的两种方式:
- 非抢占式优先级算法:系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就能一直执行下去,直至完成;或因等待某事件的发生使该进程不得不放弃处理机时,系统才能将处理机分配给另一个优先级高的就绪进程。
- 抢占式优先级算法:进程调度程序把处理机分配给当时优先级最高的就绪进程,使之执行。一旦出现了另一个优先级更高的就绪进程时,进程调度程序就停止正在执行的进程,将处理机分配给新出现的优先级最高的就绪进程。
优先级种类:
- 静态优先级:是在创建进程时确定进程的优先级,在进程的整个运行期间保持不变。
- 确定优先级依据:进程的类型(系统进程大于一般用户进程)、进程对资源的需求(需求少的优先级高)、根据用户的需求
- 动态优先级:是在创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变。