
操作系统
CrazyFox%
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
计算机导论——第39章 文件和目录
除了虚拟化CPU和内存,另外一个是持久存储,永久存储信息。持久存储设备与内存不同,内存在断电时内容会丢失,而持久存储设备会保持这些数据不变。原创 2023-12-03 17:44:42 · 1039 阅读 · 0 评论 -
Linux进程调度
MLFQ(Multi-level Feedback Queue)多级反馈队列,有巫毒常量,如配置多少队列、每一层队列的时间片是多大,多久提升一次进程的优先级。轮转,RR在一个时间片内运行一个工作,然后切换到下一个任务,优化响应时间,但对周转时间不利。调度:比例份额,彩票,缺点:不能很好地适合IO,最难的票数分配问题没有确定的解决方式。SJF最短任务优先,需要支持抢占,优化周转时间,但对响应时间不利。规则2:如果A的优先级=B的优先级,轮转运行A和B。规则1:如果A的优先级>B的优先级,运行A。原创 2023-11-21 20:40:15 · 117 阅读 · 0 评论 -
Linux网络驱动
Linux 网络设备驱动结构网络协议接口层向网络层协议提供统一的数据包收发接口,这一层使得上层协议独立于具体的设备网络设备接口层向协议接口层提供统一的用于描述具体网络设备属性和操作的结构体net_device,该结构体是设备驱动功能层中各函数的容器设备驱动功能层的各函数是网络设备接口层net_device具体结构的具体成员,是驱使网络设备硬件完成相应动作的程序网络设备与媒介层是完成数据包发送和接收的物理实体原创 2023-11-21 20:20:14 · 114 阅读 · 0 评论 -
USB驱动开发基础
USB端点被绑在接口中,USB接口只处理一类USB逻辑连接,每个USB驱动控制一个接口。USB接口被捆绑到配置上,一个USB设备可能有多个配置并在它们之间转换。USB Request Block,一个URB用来发送或者接受数据。原创 2023-11-21 16:45:15 · 481 阅读 · 0 评论 -
操作系统导论第33章——基于事件的并发
1. 基本含义while (1) { events = getEvents() for (e in events) { processEvent(e); }}对调度的显式控制来代替多线程,也就是说运行processEvent(e)时系统只运行该活动。2. 如何实现select()或者poll()select()检查IO描述符集合,返回就绪描述符的总数阻塞与非阻塞:阻塞接口在返回给调用者之前完成所有工作;非阻塞接口开始一些工作,但立即返回原创 2021-08-22 11:41:33 · 247 阅读 · 0 评论 -
操作系统导论第32章——常见并发问题
1. 非死锁缺陷非死锁缺陷占了并发问题的大多数(97%)1.1 违反原子性缺陷含义:代码段本意是原子的,但是子执行过程并没有强制实现原子性解决办法:加锁1.2 违反顺序缺陷含义:A应该在B之前执行,但是实际上却不是这个顺序解决办法:条件变量(实际上还要用到锁和状态的变量)2. 死锁缺陷含义:当线程1持有锁L1,正在等待另外一个锁L2,线程2持有锁L2,却在等待锁L1释放,死锁产生。为什么死锁容易发生?大型代码库中,组件之间有复杂的依赖 封装(不知道细原创 2021-08-22 11:01:23 · 230 阅读 · 0 评论 -
操作系统导论第31章——信号量
1. 定义一种同步原语,可以用它实现锁和条件变量初始化:#include <semaphore.h>sem_t s;sem_init(&s, 0, 1)第二个参数表示信号量的指针,第二个参数0表示信号量是在同一个进程的多个线程共享的,第三个参数是信号量的初始值sem_waitint sem_wait(sem_t* s) { 1.信号量减1 2.若信号量为负则等待}sem_postint sem_post(sem_t* s) ..原创 2021-08-22 10:05:35 · 512 阅读 · 0 评论 -
操作系统导论第8章——调度:多级反馈队列
1. 目标首先希望优化周转时间,这可以通过先执行短工作来完成;其次希望降低响应时间,RR降低响应时间,但是周转时间太长。2.基本规则Multi-level Feedback Queue, MLFQ规则1:如果A的优先级>B的优先级,运行A 规则2:如果A的优先级=B的优先级,轮转运行A和B3. 如何改变优先级规则3:工作进入系统时,先放入最高优先级 规则4a:工作用完整个时间片后,降低其优先级 规则4b:如果工作在其时间片以内主动释放CPU,则优先级不变分析当前M原创 2021-08-21 20:07:25 · 336 阅读 · 0 评论 -
操作系统导论第7章——进程调度:介绍
1. 理想假设每一个工作运行相同时间 所有工作同时到达 一旦开始,每个工作保持运行直到完成 所有的工作只是使用CPU(即执行IO) 每个工作的运行时间是已知的2. 调度指标T~周转时间~ = T~完成时间~ - T~到达时间~周转时间对应性能指标,另外进程调度还需要考虑公平指标3. 先进先出FIFO有时也称为先到先服务(First Come First Served, FCFS),实现简单,但是平均周转时间比较长4. 最短任务优先(SFJ)Shortest原创 2021-08-21 19:47:58 · 216 阅读 · 0 评论 -
操作系统导论第6章——机制:受限直接执行
1. 受限直接执行2. 受限制的操作硬件通过不同的执行模式来协助操作系统。用户模式下应用程序不能完全访问硬件资源;内核模式下,操作系统可以访问机器的所有资源。还提供了陷入内核和从陷进中返回到用户模式的说明。系统调用:允许内核小心地向用户程序暴露某些关键功能,比如访问文件系统,创建销毁进程,进程通信等。要执行系统调用就必须执行特殊的陷进指令,完成后操作系统调用一个特殊的从陷进找那个返回指令。3. 进程之间切换协作方式:等待系统调用,不太安全,万一某个进程进入无限循环 非协作方式:原创 2021-08-21 17:40:16 · 168 阅读 · 0 评论 -
操作系统导论第5章——插叙:进程API
1. fork()功能:拷贝进程,正常情况下两次返回,在父进程中返回子进程PID,在子进程返回02. wait()当父进程需要等待子进程执行完毕时很有用,正常情况返回子进程PID3. exec()可以让子进程执行与父进程不同的程序,成功调用则不会返回,在调用位置之后执行子进程的逻辑可以使用execvp(进程名,进程参数)实现...原创 2021-08-21 17:04:02 · 170 阅读 · 0 评论 -
操作系统导论第四章——抽象:进程
1. 进程含义进程是运行中的程序。什么构成了进程?答:需要理解进程的机器状态,其中关键就是它的内存,寄存器,还有访问的持久存储设备2. 进程API创建 销毁 等待 其他控制,比如暂停一段时间后恢复 状态3. 进程创建的细节将代码和静态数据(如初始化变量)加载到内存中 为程序的运行时栈分配内存 为程序的堆分配内存 初始化IO 启动程序4. 进程状态运行 就绪,进程已经准备好,但是操作系统选择不在此时运行 阻塞,一个进程执行了某种操作,知道其他事件发生原创 2021-08-21 16:55:47 · 252 阅读 · 0 评论 -
操作系统导论第2章——操作系统介绍
1. 虚拟化操作系统为了易于被使用,需要利用虚拟化技术,将物理资源(如处理器,内存或者磁盘)转换成更加通用,更加强大且更易于使用的虚拟形式,最主要介绍了虚拟化CPU,虚拟化内存2. 并发如何构建正确的并发程序?3.持久性持久地存储文件,从而让它们长期安全4. 操作系统设计目标提供高性能 在应用程序以及操作系统和应用程序之间提供保护 高可靠性5. 操作系统发展历史介绍早期操作系统只是一些库 超越库,提供保护 多道程序时代 现代操作系统...原创 2021-08-21 16:45:17 · 123 阅读 · 0 评论 -
操作系统导论第30章——条件变量总结
1. 提出背景如何实现父线程等待子线程的join功能?基于自旋的方式可以实现,代码如下:#include <pthread.h>#include <cstdio>volatile int done = 0;void* child(void* arg) { printf("child\n"); done = 1; return NULL;}int main() { printf("parent:begin\n"); pthread_t原创 2021-08-21 16:36:57 · 1342 阅读 · 1 评论 -
操作系统导论——第29章 基于锁的并发数据结构总结
1. 概述回答如何实现并发安全的基本数据结构,比如计数器,链表,队列,散列表,除了正确性还要关注性能,以及扩展性2. 并发计数器有最简单的实现,但是性能不好,扩展性不好通过使用懒惰计数器,可以提升扩展性,而且性能也很好,但是需要权衡准确性和性能3. 并发链表实现时注意尽量让获取锁和释放锁只环绕在真正的临界区,并且注意控制流变化时获取锁和释放锁过手锁:对每个结点加锁,遍历链表时需要先抢占下一个结点的锁,虽然从概念上增加链表的并发程度,但是实际上,每个结点获取锁、释放锁开销巨大,很难原创 2021-08-17 21:35:46 · 152 阅读 · 0 评论