![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pintos
windroid
这个作者很懒,什么都没留下…
展开
-
pintos (6) --运算符优先级
一个定点小数除法如下:#define FD_DIV(X, Y) (((fp_t)X)<<FD_SHIFT_AMOUNT/(Y))然而这是错的……错在哪里呢…左移 << 的优先级低于除法 / … 所以会先计算FD_SHIFT_AMOUNT/(Y)#define FD_DIV(X, Y) ((((fp_t)X)<<FD_SHIFT_AMOUNT)/(Y))加上括号就好了…对括号哲学的理解还是不够原创 2017-12-15 19:20:15 · 360 阅读 · 0 评论 -
pintos (0) --前言
要完成pintos不仅需要理解操作系统理论,同时也需要:一个好的IDE,良好的阅读代码环境是极其重要的,不论vim+ctags也好,Emacs,Sublime,Atom,Eclipse等也罢,进入函数内部阅读其内容的功能是必要的仔细阅读帮助文档,仔细阅读每个代码文件:从LOADER开始,到init,再到usercode,了解从系统启动开始的每一步都做了什么;有哪些系统支持的数据结构和算法C的基原创 2017-12-15 18:28:35 · 441 阅读 · 0 评论 -
pintos (2) --Priority Scheduling
为Pintos建立优先级调度机制,并确保任何时刻CPU上运行的都是最高优先级线程。为确保最高优先级的线程运行,需要重新计算调度的时刻有:创建新线程,设置线程优先级。故将ready_list改为有序队列,优先级较高在前,同时在thread_yield()时,如果下个线程的优先级小于当前线程,则不进行调度。信号量和条件变量的优先级,均可通过保证waiters list 按优先级排列实现唤醒优先级最高原创 2017-12-15 18:44:47 · 4166 阅读 · 8 评论 -
pintos (3) --Priority Inversion
解决lock上优先级反转的问题优先级反转的问题使用优先级捐赠来解决,当当前线程想要获得低优先级线程拥有的锁时,将低优先级线程的优先级设为当前线程的优先级,当低优先级线程释放锁的时候恢复其原始优先级。整个过程分两个部分:捐赠和恢复。其中的问题有:链式捐赠,多重捐赠,捐赠对信号量的影响。优先级捐赠分两步:如果要获取的锁已被获取,且拥有者的优先级低于当前线程,则设置其优先级为当前线程优先级。此时原创 2017-12-15 18:55:57 · 2019 阅读 · 4 评论 -
pintos (4) --Mesa vs. Hoare style
在阅读pintos/src/threads/synch.c的时候,发现了一个令人疑惑的地方:/* Down or "P" operation on a semaphore. Waits for SEMA's valueto become positive and then atomically decrements it.This function may sleep, so it must n原创 2017-12-15 19:02:26 · 1210 阅读 · 0 评论 -
pintos (5) --Advanced Scheduler
多级反馈队列调度器(multilevel feedback queue scheduler)在多级反馈队列调度器中,线程的优先级是通过下面的公式动态计算的:priority = PRI_MAX - (recent_cpu/4) - (nice * 2)recent_cpu = (2*load_avg)/(2*load_avg + 1)*recent_cpu + niceload_avg= (59原创 2017-12-15 19:15:33 · 1371 阅读 · 0 评论 -
pintos (1) -- Alarm Clock
实现非阻塞的timer_sleep()函数。线程调用timer_sleep()后主动block,并设置blockticks,每次时钟中断blockticks减1,待其减为0时unblockstruct thread 添加属性:long long blockticks; /* Ticks to be block.*/同时在init_thread()中对其进行初始化:t->blockticks =原创 2017-12-15 18:10:23 · 1938 阅读 · 0 评论