操作系统
1.select,poll和epoll
其实所有I/O都是轮询的方法,只不过实现的层面不同罢了
基本select有三个缺点:
1.连接受限
2.查找配对速度慢
3.数据由内核态拷贝到用户态
poll改善了第一个缺点
epoll改善了第三个缺点
2.调度算法
- 先来先服务
- 短作业优先算法
- 最高优先权调度算法
- 时间片轮转算法
- 多级反馈队列算法
实时调度算法:
1.最早截至时间优先 EDF
2.最低松弛度优先 LLF
3.死锁
原因:
1.竞争资源
2.程序推进顺序不当
必要条件:
1.互斥
2.请求与保持条件
3.不可剥夺条件
4.环路等待条件
处理死锁基本方法
1.预防死锁
2.避免死锁(银行家算法)
3.检测死锁(资源分配图)
4.解除死锁
i .剥夺资源
ii.撤销进程
4.程序编译与连接
Build过程可以分解为4个步骤:预处理,编译,汇编,链接
预处理
预编译过程主要处理那些源文件中以“#”开始的预编译指令
编译
编译过程就是把预编译处理完成的文件进行一系列词法分析,语法分析,语义分析以及优化后生成相应的汇编代码文件,这个过程是构建的核心部分
汇编
汇编器将汇编代码转成机器可以执行的指令,每一条汇编语句几乎都是一条机器指令,经过编译,链接,汇编输出的文件成为目标文件
链接
链接主要内容就是把各个模块之间相互引用的部分处理好,使各个模块可以进行正确的拼接,链接主要过程包括地址和空间的分配,符号决议和重定位等步骤
静态链接和动态链接
静态链接方法,静态链接的时候,载入代码就会把程序用到的动态代码或者动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库
动态链接方法:使用这种方法的程序并不在一开始就完成动态链接,而是知道真正调用动态代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序
虚拟内存技术
虚拟存储器是指请求调入功能或者置换功能,能从逻辑上对内存容量加以扩充的一种存储系统
分页和分段
分页:用户程序的地址空间被划分成固定大小的区域
分端:将用户程序地址空间分成若干大小不等的段,每段可以定义一组相对完整的逻辑信息,存储分配时,以段为单位
分段和分页的区别
主要是分页的作业地址空间是一维的,分段的地址空间是二维的
分页主要是实现非连续分配,以便解决内存碎片问题
分段主要是更好的实现共享,满足用户的需要
页面置换算法
最佳置换算法:不可能实现
先进先出算法
最近最长未使用算法
clock算法
边沿触发和水平触发
边沿触发指每当状态变化时发生一个IO事件,条件触发的只是满足条件发生一个io事件