- 用户态和内核态:
用户态是3级特权(最低特权),内核态是0级特权(最高特权),以下三种情况会从用户态切换到内核态:
1、系统调用。是用户态主动要求切换到内核的一种方式,比如fork()是通过中断来实现的。
2、异常。
3、外围设备中断。 - 用户栈和内核栈:
内核栈是操作系统空间的一块区域,用于保存操作系统子进程间的调用,保护中断现场;用户栈是用户空间的一块区域,用于保存用户进程的相互调用。
如果只有系统栈(大小有限),可能内存不足;如果只有用户栈,则不能提供相应的保护措施。 - 内存池和线程(进程)池:
内存池:程序预先从操作系统申请一块足够大的内存,当需要时直接从内存池获取,当释放时返回内存池,最后程序退出时才真正的释放内存。
进程(线程)池:启动若干的线程(进程)并处于睡眠状态,当需要时唤醒一个线程(进程),用完又处于睡眠状态。 - 死锁:
必要条件:
1、互斥条件:一个资源每次只能被一个进程使用;
2、请求与保持条件:进程因请求资源而阻塞,对已获得的资源保持不放;
3、不剥夺条件:对于已获得的资源,未使用完不能强行剥夺;
4、循环等待条件:进程间形成循环等待资源。
若系统发生死锁,则上述四个条件都成立。 - 进程调度算法:
1、按先后(长短)顺序
1.1、先来先服务(FCFS):有利于长作业(进程)、CPU繁忙型;不利于短作业(进程)、I/O繁忙型。
1.2、短作业(进程)优先调度算法(SJ/PF):反之。
2、按优先权
2.1、最高优先权优先(FPF)
2.2、高响应比优先:弥补FPF的不足,引入动态优先权,使得优先等级随着时间增加而提高。
3、基于时间片的轮转调度算法
C++随笔
最新推荐文章于 2021-11-01 16:45:42 发布