八股文打卡day19——操作系统(2)

本文详细介绍了进程调度算法,包括先来先服务、优先级、时间片轮转、最短作业时间优先、优先级反馈队列等,分析了各自的优缺点,并讨论了吞吐量最大和最高响应比等策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题:进程调度算法你了解多少?

我的回答:

1.先来先服务算法
先来先服务算法就是哪个进程先来,先给哪个进程使用CPU。
优点:最简单、最公平的算法
缺点:可能造成短进程一直等待长进程,造成等待时间长的问题。
2.优先级算法
给不同的进程分配不同的优先级。优先级高的进程先执行,优先级低的进程后执行。
优点:适合紧急任务优先执行的场景
缺点:可能会造成优先级低的进程一直等待,产生饥饿问题。
3.时间片轮转调度算法
对CPU的使用时间进行分片。不同的进程轮转使用CPU。
优点:响应时间快,适合交互式系统
缺点:时间片的设置对性能影响比较大。
4.最短作业时间优先调度算法
执行时间短的进程优先使用CPU。
优点:使等待时间最短
缺点:得提前知道每个进程的执行时间
5.优先级反馈队列调度算法
设置优先级队列,进程在不同的队列之间移动,优先级高的队列中的进程优先执行,等待时间太长的进程会被提到优先级较高的队列中。
优点:灵活性高,可以根据进程的需求和行为动态调整优先级
缺点:比较复杂
6.吞吐量最大调度算法
保证单位时间内完成的进程数最多
优点:执行完的进程多
缺点:可能不够公平
7.最高响应比优先调度算法
响应比=等待时间/服务时间,响应比高的优先执行。
优点:平衡了服务时间和等待时间
缺点:得提前知道服务时间
8.最短剩余时间优先调度算法
在所有进程中,最短剩余时间的进程优先执行。
优点:理论上保证了最短的等待时间
缺点:得提前知道剩余的执行时间

回答八股的时间:2024.01.02

### 操作系统面试知识点总结 #### 进程与线程 进程是操作系统中的基本执行单元,拥有独立的内存空间、程序和数据[^2]。线程则是进程中更轻量级的执行单元,同一进程内的线程共享内存空间和其他资源。 #### IO 多路复用 `select`、`poll` 和 `epoll` 是常见的 I/O 多路复用机制,用于监控多个文件描述符的状态变化。当某个文件描述符变为可读或可写时,这些机制会通知应用程序采取相应动作[^1]。 - **Select**: 支持有限数量的文件描述符,性能随监听数增加而下降。 - **Poll**: 解决了 select 的最大连接数限制问题,但仍存在轮询效率低下的缺点。 - **Epoll**: 提供高效的事件驱动模型,在高并发场景下表现优异。 #### 同步与互斥 同步是指控制多个线程按特定顺序访问临界区的技术;互斥则指在同一时刻只有一个线程能访问某段代码区域。常用技术包括信号量、锁(mutex)、条件变量等。 #### 调度算法 调度算法决定了 CPU 时间如何分配给各个任务。主要分为抢占式调度和非抢占式调度两大类: - 常见调度策略:先来先服务 (FCFS),最短作业优先 (SJF),时间片轮转 (RR),多级反馈队列等。 #### 内存管理 现代操作系统采用虚拟内存技术解决物理内存不足的问题。涉及的关键概念如下: - 页面置换算法:LRU(最近最少使用), FIFO(先进先出) 等。 - 地址映射:逻辑地址到物理地址转换过程。 - 缺页中断处理流程及其优化措施。 以下是基于上述内容的一个简单伪代码示例展示 epoll 使用方式: ```c++ #include <sys/epoll.h> #include <unistd.h> void handle_events(int epfd, struct epoll_event *events, int num){ for(int i=0;i<num;i++){ if(events[i].data.fd == listen_fd && events[i].events & EPOLLIN){ // 新连接到来 accept_connection(); }else{ // 数据到达已建立连接上 process_data(events[i].data.fd); } } } int main(){ int epfd = epoll_create(MAX_EVENTS); struct epoll_event event; // 添加listen socket 到 epoll 实例中 event.events = EPOLLIN | EPOLLET; event.data.fd = listen_fd; epoll_ctl(epfd, EPOLL_CTL_ADD, listen_fd,&event); while(true){ struct epoll_event events[MAX_EVENTS]; int nfds = epoll_wait(epfd, events, MAX_EVENTS,-1); handle_events(epfd,events,nfds); } close(epfd); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值