操作系统

进程线程,协程

进程是程序动态执行的的形式,包括进程控制块和分配的资源(文件描述符和虚拟内存)。

线程共享进程资源,属于进程的子任务。

协程:内核态线程,遇到 IO 挂起,通知事件循环,读完,准备恢复。上下文切换,栈指针。

结合项目: 计算密集型,IO 密集型。

进程调度:

先来先服务,时间片轮转,短服务优先,优先级调度,多级反馈队列

IO模型:

同步(一直等待结果返回,需要轮询查看结果)异步(立即返回),阻塞,非阻塞。

IO多路复用: select, poll, epoll(文件描述符大小,轮询,边缘触发)。

创建 epoll 对象后,可以用 epoll_ctl() 向内核注册新的描述符或者是改变某个文件描述符的状态。已注册的描述符在内核中会被维护在一棵红黑树上,通过回调函数内核会将 I/O 准备好的描述符加入到一个链表中管理,进程调用 epoll_wait() 便可以得到事件完成的描述符。

死锁:

多个线程需要相同的资源,因为请求锁顺序问题,形成了互相等待,相互阻塞。无法进行继续请求资源。

互斥条件,占用并等待,不可抢占,循环等待

解决:鸵鸟,检测与恢复(检测环路,通过抢占,回滚,杀死进程恢复),预防(破坏四个条件),避免(银行家算法:计算现有资源是否支持所有线程分配)

内存管理:分页(将整个内存划分为页,解决外部碎片,无法解决内部碎片),分段(程序划分为段,安全性,隔离性),段页(划分为段,再划分为页)