Java面试题—操作系统篇

进程与线程

进程是资源分配的最小单位,线程是程序执行的最小单位。

  • 进程vs线程

    1. 进程有自己的独立地址空间,每启动进程就会分配地址空间。线程是共享进程中的数据,使用相同的地址空间。
    2. 线程间通信方便,统一进程下的线程共享全局变量、静态变量、堆、文件等公用资源,而进程间通信需要以通信的方式(IPC)进行
    3. 多进程程序更健壮,挂了一个不会影响别的进程,因为有自己独立的地址空间;多线程一个线程挂了整个进程就挂了。
  • 进程调度策略:
    FCFS(先来先服务)
    优先级
    时间片轮转
    多级反馈

  • 进程的几种状态:
    就绪态:进程已具备运行条件,但是CPU还没有分配过来
    运行态:进程占用CPU,并在CPU上运行
    阻塞态:进程因等待某件事发生而暂时不能运行(如等待I/O、进程sleep、等待解锁)
    两种不可能发生的状态转换:
    阻塞->运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取。
    就绪->阻塞:就绪态根本没有执行,谈不上进入阻塞态

  • 线程的几种状态:
    新建(new)> 就绪(start())> 运行(run())> 阻塞 > 死亡
    阻塞原因:调用sleep方法进入睡眠;I/O阻塞;锁被其他线程持有;等待某个触发条件
    死亡原因:run方法正常退出而死亡;异常未捕获导致此方法线程猝死

  • 进程死锁
    如有多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,就会导致死锁的发生

    • 必要条件:
      1. 互斥:每个资源要么已经分配给了一个进程,要么就是可用的
      2. 占有和等待:已经得到了某个资源的进程可以再请求新的资源
      3. 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放
      4. 环路等待:有两个或两个以上的进程组成一个环路,该环路中的每个进程都在等待下一个进程所占有的资源
    • 处理办法:
      1. 鸵鸟策略:忽略死锁发生及其带来的影响
      2. 死锁检测和死锁恢复:检测资源和进程的有向图是否存在环路;通过抢占、回滚、杀死进程恢复
      3. 死锁避免:在程序运行前预防发生死锁

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

你可能感兴趣的:(Java面试题—操作系统篇)