操作系统面试题

操作系统

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事件

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