iNode介绍

cron

死锁

死锁必须同时满足4个条件(破坏任意一个即可):

  1. 互斥使用:资源被一个任务使用时,别的任务不能使用(一般不破坏这个条件)
  2. 不可抢占:请求者不能强制从占有者手中夺取资源(任务拿到资源1时却拿不到资源2就主动释放所有已占有的资源)
  3. 占有且等待:请求其他资源的同时保持对原有资源的占有(每个任务一次申请所有的资源,失败就阻塞等待)
  4. 循环等待:任务一等待任务二释放资源,二又等一释放(给所有资源设定序号,每个任务都从需要小的资源开始申请)

线程/协程/异步的编程模型

IO多路复用select/poll/epoll介绍

select:使用文件描述符

  1. 1024 bitmap
  2. FD_SET设置好的bitmap不可重用
  3. bitmap从用户态拷贝到内核态的开销
  4. 发生事件select返回后,需要O(n)遍历全部bitmap才能知道发生了哪些事情

poll:使用struct pollfd{fd,events,revents}

  1. 内核使用链表存储,不止1024(events和revents时short有65535个bit)
  2. 关心事件bitmap(events)和发生事件(revents)分开,使得bitmap可重用
  3. 同select
  4. 同select

epoll:使用struct epoll_event{data.fd,events}

  1. 内核使用红黑树存储,但没有revents
  2. epoll_ctl添加关心事件到内核态(可重用)
  3. 第2步已经拷贝到内核态,一次拷贝,终生受用,降低开销(视频有误:实际没有使用共享内存)
  4. poll_wait直接把发生事件回填到参数内不需要再遍历判断

float是如何在计算机中存储的

信号

用户态与内核态

用户态 申请外部资源(系统调用,中断,异常)后会陷入到内核态

操作系统的内存管理简介

nginx反向代理与负载均衡教程