操作系统
文章平均质量分 77
Choopper
做人没梦想那和一条咸鱼有什么分别
展开
-
OS-基于位图的RR调度算法
OS-基于位图的RR调度算法位图原理有这么个业务场景,在10亿个不重复的随机整数中查找某个数 x 是否存在其中,32为操作系统,4G内存。普通算法我们可以使用10亿个int类型的空间来存储这10亿个数据,然后再进行x查找。这1亿个int数据就需要占用:1000000000*4 = 3.72G字节空间。光存储这10亿数据就要花到这么多内存实在是太恐怖了。其次在查找的时候,最快的hash查找,光数据结构的空间都要需要很庞大的内存空间。位图算法我们先把数据量缩小,假设只有10个随机数(0-9)原创 2022-04-12 17:04:51 · 526 阅读 · 0 评论 -
OS-实现一个RR调度算法
OS-实现一个RR调度算法原理RR调度相比于FCFS要公平一点,RR为每一个任务分配了一段固定的时间片(timeslice),当这个任务消耗完分配的时间片后,就会切换到下一个任务进行调度,这样相同优先级的任务都能够得倒相对公平的调度机会。在RR调度中就是timeslice的大小的划分,太大就退化成了FCFS,太小会引起过多的上下文切换,无味的消耗CPU是很浪费的。什么是timeslice?OS会使用一个timer来定时发生中断,timer的定时周期就是timeslice,比如说我们设定timer原创 2022-04-12 11:47:25 · 764 阅读 · 0 评论 -
OS-实现一个FIFO调度算法
OS-实现一个FIFO调度算法原理FIFO是在FCFS调度上加入了优先级来进行任务抢占,调度器从ready队列里获取优先级最高的任务进行调度,除非高优先级任务放弃CPU资源,低优先级的任务永远得不到调度,优先级相同的任务采用FCFS进行调度。什么时候会发生调度?主动放弃cpu资源(sleep/suspend)被动放弃cpu资源(mutex/semaphore)被更高优先级任务抢占扩展数据结构FIFO加入了优先级这个维度,我们把之前的ready队列扩展成二维,每一个优先级对应一个队列,相同原创 2022-04-11 17:48:33 · 1822 阅读 · 0 评论 -
OS-实现一个FCFS调度算法
OS-实现一个FCFS调度算法原理FCFS也叫先来先服务调度算法,是非常简单的一种调度算法,他基于队列的排队思想,调度器必须排队处理加入队列的任务,不能进行抢占,我们只需要使用一个队列的数据结构就能够很方便的实现LINUX下的SCHED_FIFO调度策略和FCFS是不一样的,虽然都是排队,但是SCHED_FIFO是基于优先级的,高优先级可抢占的,当相同优先级时和FCFS相同准备数据结构队列(queue)任务控制块(tcb)queuelist_head是一个双向循环链表,我们可以用他来原创 2022-04-11 16:06:22 · 1332 阅读 · 0 评论 -
OS-任务调度状态机
OS-任务调度状态机原创 2022-04-07 14:51:58 · 641 阅读 · 0 评论 -
从一个ELF程序的加载窥探操作系统内核-(5)
从一个ELF程序的加载窥探操作系统内核-(5)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》LINUX下的ELF加载器究竟是如何完成的ELF加载器其实和OS的实现是紧密捆绑在一起的,原创 2022-03-30 16:21:46 · 1549 阅读 · 0 评论 -
从一个ELF程序的加载窥探操作系统内核-(4)
从一个ELF程序的加载窥探操作系统内核-(4)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》为什么需要栈栈一种先入后出的数据结构,恰好满足我们的设计需求而已,像矩阵存在的意义一样原创 2022-03-30 14:23:22 · 624 阅读 · 0 评论 -
从一个ELF程序的加载窥探操作系统内核-(3)
从一个ELF程序的加载窥探操作系统内核-(3)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》进程和线程究竟有何区别让我们先回到MCU的世界:由于MCU没有MMU单元,所以在RT原创 2022-03-29 17:21:50 · 735 阅读 · 0 评论 -
从一个ELF程序的加载窥探操作系统内核-(2)
从一个ELF程序的加载窥探操作系统内核-(2)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》linux下运行一个ELF程序都经历了什么当我们在shell终端下执行一个ELF程序,首先原创 2022-03-29 15:15:16 · 1307 阅读 · 0 评论 -
从一个ELF程序的加载窥探操作系统内核-(1)
从一个ELF程序的加载窥探操作系统内核-(1)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》一个ELF程序的构成与运行这里的ELF程序指的是可执行类型的文件,动态库和静态库也是ELF原创 2022-03-29 11:05:17 · 1026 阅读 · 0 评论 -
如何使用MMU隔离地址空间
如何使用MMU隔离地址空间划分空间在32位ARM架构下,我们可用使用的地址空间为4G(0x0000 0000 ~ 0xFFFF FFFF ),也就是我们能操作的地址空间范围,但是这只是我们软件上的可操作范围。实际上我们的物理内存可能低于4G或者超过4G,超过4G空间我们就需要用64位的ARM,64位的ARM理论上是没有物理内存范围限制的。还有就是你所选的ARM,他具体支持多大的物理内存,不是所有的32位ARM都支持4G物理内存,这个和SOC公司相关,SOC公司会根据ARM核心(v7/v8)来重新设计原创 2021-09-17 10:02:17 · 475 阅读 · 0 评论 -
ELF加载器的原理与实现
ELF加载器为什么需要ELF隔离应用服务和内核服务有了ELF,我们的应用程序都可以通过编译成ELF的方式从外部加载,系统内核部分只提供关键的内核服务(内存管理/中断/调度/IPC)和系统服务(文件/网络),用户服务程序都可以通过ELF的方式进行加载。同时库的同步更新可以在不更新内核的情况进行同步更新。提供统一编程接口我们通过提供统一的POSIX标准库,来为用户提供标准的编程接口,方便了应用程序开发人员进行标准开发应用程序可以动态加载和卸载通过ELF,用户可以动态的加载和卸载相关服务,原创 2021-08-19 15:05:03 · 2944 阅读 · 0 评论