操作系统常见面试题(三)

1、进程什么时候会有调度?

进程创建、退出、阻塞、IO中断

2、进程间的通信能解决什么问题?

哲学家就餐问题
睡眠理发师问题
生产者-消费者问题
读者-写者问题

3、文件系统的实现方式?

连续分配
链表分配
采用内存中的表进行链表分配(磁盘地址表)
i节点

4、i节点包含什么内容?

文件属性、文件的磁盘块地址

5、文件类型有哪两种?

特殊文件和普通文件。其中,特殊文件又分为字符特殊文件和块特殊文件,普通文件分为ASCII文件和二进制文件。

6、Unix有哪五种IO模型?

    1. 阻塞IO。
    2. 非阻塞IO。
    3. IO多路复用。
    4. 信号驱动。
    5. 异步IO。

提示1:前面4种IO都可以归类为同步IO(synchronous IO)
提示2:IO多路复用包括select、poll、epoll

7、如何理解阻塞、非阻塞、同步、异步?

总的来说:

阻塞/非阻塞是看用户线程在系统调用下的处理方式。比如读取IO数据时,要发起系统调用切换到内核态,如果此时用户线程挂起,就是阻塞IO,如果立即返回,那就是非阻塞IO。 主要是看这种情况下用户线程的处理方式。

同步/异步是看数据准备的结果。同步的话,如果返回,那必定是准备好了数据,如果是异步的话,返回不一定数据准备好,要等待一个事件回调来处理。

8、简单介绍阻塞IO的流程?

    1. 用户进程需要进行IO操作时,会进行一次系统调用,进入到内核态,此时用户进程被挂起。处于阻塞状态。此时进程不会再占用cpu资源。
    
    2. 内核进行数据的准备,把需要的数据填充到内核缓冲区。
    
    3. 内核缓冲区数据填充完毕,把数据从内核缓冲区复制到用户缓冲区。
    
    4. 数据复制完毕,返回,从内核态从新切换到用户态,进程进入就绪状态等待cpu执行。

    提示:适用并发量小的网络应用开发

9、简单介绍非阻塞IO的流程?

    1. 用户进程需要进行IO操作时,会进行一次系统调用,进入到内核态,如果数据没有准备好,立即返回EWOULDBLOCK。此时不会造成进程阻塞。进程还可以继续处理其他事情。
    
    2. 进程会轮询查看内核数据是否准备好,如果没有准备好,就继续立即返回EWOULDBLOCK,不阻塞进程。
    
    3. 轮询到数据准备好了后,进行数据复制,从内核缓冲区复制到用户缓冲区。在此期间进程会挂起,处于阻塞状态,知道数据复制完成。
    
    4. 数据复制完毕后返回,进程转为就绪态,等待cpu调度。

提示1:非阻塞IO因为要用轮询代替了阻塞,使得进程在内核数据准备期间不会阻塞,可以执行其他事情,但是因为要轮询,所以会对CPU资源造成较大的消耗。
提示2:在进行内核态往用户态数据复制过程中,进程还是会处于阻塞状态的。
提示3:虽然非阻塞IO可以使得进程在IO内核数据准备期间不阻塞,可以执行其他事情,但是,由于轮询需要消耗较大的cpu资源,所以会使得服务端处理和响应请求会有较大的延时。
提示4:适用并发量较小、且不需要及时响应的网络应用开发。

10、select、poll、epoll的区别?

操作方式上:select 和 poll 为遍历,epoll 为回调
底层实现上:select 为数组,poll 为链表,epoll 为红黑树
IO效率上:select 和 poll 都为 O(n),epoll 为 O(1)
最大连接数上:select 为 1024 或 2048,poll 无上限,epoll 无上限
fd拷贝上:select 和 poll 每次调用都需要把 fd 集合从用户态拷贝到内核态;而调用 epoll_ctl 时拷贝进内核并保存,之后每次 epoll_wait 不拷贝



#学习路径#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 22:29
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
评论
1
34
分享
牛客网
牛客企业服务