进程与线程
进程是资源分配的最小单位,线程是程序执行的最小单位。
-
进程vs线程:
- 进程有自己的独立地址空间,每启动进程就会分配地址空间。线程是共享进程中的数据,使用相同的地址空间。
- 线程间通信方便,统一进程下的线程共享全局变量、静态变量、堆、文件等公用资源,而进程间通信需要以通信的方式(IPC)进行
- 多进程程序更健壮,挂了一个不会影响别的进程,因为有自己独立的地址空间;多线程一个线程挂了整个进程就挂了。
进程调度策略:
FCFS(先来先服务)
优先级
时间片轮转
多级反馈进程的几种状态:
就绪态:进程已具备运行条件,但是CPU还没有分配过来
运行态:进程占用CPU,并在CPU上运行
阻塞态:进程因等待某件事发生而暂时不能运行(如等待I/O、进程sleep、等待解锁)
两种不可能发生的状态转换:
阻塞->运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取。
就绪->阻塞:就绪态根本没有执行,谈不上进入阻塞态线程的几种状态:
新建(new)> 就绪(start())> 运行(run())> 阻塞 > 死亡
阻塞原因:调用sleep方法进入睡眠;I/O阻塞;锁被其他线程持有;等待某个触发条件
死亡原因:run方法正常退出而死亡;异常未捕获导致此方法线程猝死-
进程死锁
如有多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,就会导致死锁的发生-
必要条件:
- 互斥:每个资源要么已经分配给了一个进程,要么就是可用的
- 占有和等待:已经得到了某个资源的进程可以再请求新的资源
- 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放
- 环路等待:有两个或两个以上的进程组成一个环路,该环路中的每个进程都在等待下一个进程所占有的资源
-
处理办法:
- 鸵鸟策略:忽略死锁发生及其带来的影响
- 死锁检测和死锁恢复:检测资源和进程的有向图是否存在环路;通过抢占、回滚、杀死进程恢复
- 死锁避免:在程序运行前预防发生死锁
-
必要条件:
Linux常用命令
find [path] [option] [action]
-mtime +2 #查找两天前被修改的文件
-name filename #查找文件名为filename的文件
-size [+-]size #找出大于(+)或小于(-)size的文件
ls -a #查看全部文档
-h
-s #按文档容量大小排序
-t #按时间排序
-r #将排序后的结果反向输出
tar -zcvf #压缩 zip
tar -zxvf #解缩 unzip