操作系统
zmrlinux
密码学 小仙女 欢迎私聊一起学习
展开
-
ParalleX OS 设计与实现 思考篇 __start
前言我要做什么:做一个自己的操作系统,一直都是所有程序员心底的一个梦想,不论他有没有尝试去实现,但是他一定这么想过. 作为一个小小程序员,我也有这样一个梦想,或者说是一种情怀吧。我很庆幸我身边有很多愿意一起为这个理想奋斗的小伙伴。(欣欣学姐,小菊花,欢神,神,杜师傅等很多前辈和小伙伴,还有陈莉君老师,王亚刚老师)。 So,我要做一个OS,有特点的,神奇的小OS。我为什么要做O...原创 2016-06-21 22:19:28 · 428 阅读 · 0 评论 -
ParalleX OS 设计与实现 启动篇multiboot方式
启动方式相关说明:每个操作系统的启动都需要一套启动的机制,所以说在最早的时候各个操作系统启动的方式都是不同的,我们在设计实现自己的“操作系统”的时候,其实也可以自己写一段启动程序,但是个人觉得暂时没有什么必要,如果用现有的GRUB启动其实在后期可以节省不少事。但是启动的原理必须要清楚。《X86汇编语言:从实模式到保护模式》这本书讲的还是挺清楚的,大家可以看看。这里不再赘述原理。 关于...原创 2016-07-17 19:09:43 · 713 阅读 · 0 评论 -
ParalleX OS 设计与实现 Parallex 操作系统设计方向讨论
Parallex操作系统设计方向讨论西安邮电大学张明瑞 概要ParalleXOS是一个具有可动态配置的操作系统,与传统宏内核操作系统不同的是,它是基于消息传递的一款分布式操作系统。进一步将低了操作系统多模块之间的耦合。模块分离更加清晰。 本文主要描述ParalleX的设计来讨...原创 2016-08-04 11:36:57 · 500 阅读 · 0 评论 -
ParalleX OS 补充设计草稿
ParalleX 补充设计草稿在上一篇设计方向讨论稿里,我们虽然讨论了大体结构化设计,但是局限于细节没有设计与说清楚操作系统的几个核心概念,首先,我们来回顾下,设计操作系统的几个关键要素。我们设计操作系统的目的:第一是为了让操作系统帮助我们管理硬件资源。第二是帮助我们让操作系统帮助我们运行程序。第三是为了让操作系统将硬件性能发挥到极致。在这个三个前提下,我们设计操作...原创 2016-08-08 15:32:34 · 266 阅读 · 0 评论 -
内存管理器(二)边界标识法
边界标识算法前言首先说明,我们这里的内存管理器主要是以模拟各种内存分配算法为主,从内存申请一片内存然后根据我们所选定的数据结构和算法,实现程序的堆空间的分配,至于内存分配详情我们会在Linux内核内存管理的简单分析中探讨。这个算法是什么边界标识法是操作系统中用以进行动态分配的一种存储管理的方法,系统将所有的空闲块链接在一个双重循环链表结构中;分配可以按照首次匹配,最佳匹配方法执行,其次个人觉得先学原创 2015-10-12 22:54:06 · 2710 阅读 · 0 评论 -
内存管理器(八)基于Glibc malloc 实现内存管理程序
前言 经历了两周多吧,总算把Glibc malloc 源码分析的文档啃完了,也算是对于malloc这个东西有深刻了解吧,毕竟自己也写了两版代码,后边还会出一个多线程版本的。就是在这个版本上修改一个支持多线程的,这个算是V2.0了。说明 前面已经阐述了malloc的分配思想,这里我接合线程池原理和边界标识法,做了这个2.0 版本。 1.最小块的大小所为40B。 2.bins 只建原创 2015-10-26 17:02:16 · 923 阅读 · 0 评论 -
内存管理器(七)Glibc malloc 实现(三)--多线程思想(先占个坑)
基本方式1.使用锁的方式来支持多线程 我们之前介绍过,库函数的实现方式是通过一个主分配区和多个非主分配区来组织的,每一个分配区中又有一个bins.我们先说对于大的分配区是如何保证线程安全的。首先,每一个分配区均有一个结构体,这个结构体中有一个线程锁和一些其他的数据结构,其中别的东西我们今天并不关心,我们只看看这个锁今天做了哪些工作。全局还有一个锁list_mutex.主要是用来同步分配区链表原创 2015-10-24 21:08:35 · 1322 阅读 · 0 评论 -
异常控制流--进程的基石
异常控制流流:首先,说“流“这个概念,我们经常使用流这个概念,却没有思考过它到底代表什么意思,文件中常用I/O 流,工程中常用控制流,网络中也使用流作为传送数据的方式。其实我们可以感受到,“流“就是一系列连续的动作集合,可以类比水流,就是不间断,连续不断(至少逻辑上是连续的)。一些指令的顺序集合我们把它抽象为控制流,连续不断的数据我们把它抽象为I/O流。异常控制流:操作系统的处理事件都不是预先演练原创 2015-10-09 21:57:21 · 555 阅读 · 0 评论 -
内存管理器(五)Glibc malloc实现(一)(概论)
系统malloc实现前言之前,我们了解了下边界表识法,以及伙伴算法,并且简单实现了,mallc /free 库函数。 为了探究操作系统到底如何分配释放内存,我们开始研究下glibc 的实现。内存管理内存管理一般分三个层面: 1.用户管理 2.C运行时库的管理 3.操作系统层管理原创 2015-10-19 18:22:25 · 842 阅读 · 0 评论 -
内存管理器(六)Glibc malloc 实现(二)--设计模式
ptmalloc 的设计模式原创 2015-10-21 21:51:42 · 820 阅读 · 0 评论 -
内存管理器(十二)kernel内存管理----kmalloc/kfree
内存管理器(十二)kernel内存管理----kmalloc/kfree前言上一篇说了页的获取与释放,既然是内核内存管理,内核自然也有自己的一套内存分配与释放函数。go on!kmalloc( )--分配函数这个函数是内核中用来分配内存的函数,它和malloc很像,当时这里多了一个flags标记。用它可以获得以字节为单位的一块内核内存。当然如果希望得到以页为单位的内存还是用__get_fr原创 2015-11-06 18:15:01 · 3019 阅读 · 0 评论 -
内存管理器(十一)kernel内存管理---页的获取与释放
前言上一篇说了内存管理的数据结构,现在来说说内存管理的一些接口函数,页的分配与释放。alloc_pages && __free_pages[c]includeincludeincludeincludeincludeMODULE_LICENSE("GPL");MODULE_AUTHOR("zmrlinux");MODULE_DESCRIPTION("something abou原创 2015-11-05 12:29:28 · 563 阅读 · 0 评论 -
内存管理器(三)使用边界标识法实现内存分配器
使用边界标识法实现简单分配器前言前一篇我们已经了解了边界标识算法和数据结构,其实边界标识法还是比较复杂的,它的难点在于对C的使用的淋漓尽致,以及复杂的逻辑关系。所以我们还需要多思考,多体会才能领悟个中精髓,其实我昨天在学习那个小例子的时候由一瞬间感觉如果用C++实现可能更方便,所以再此决定等这几篇完成,就使用C++实现一个小小的实例。 言归正传,我们今天需要看一个用C使用边界标识法实现的简单分配器原创 2015-10-16 17:29:54 · 2363 阅读 · 0 评论 -
内存管理器(一)简单分配器
前言之前,有学长做了内存管理的主题沙龙,自己以前也看过一些内存管理方面的东西,所以最近想做一个内存管理器,其实最终实现主要是以函数的形式表达。废话不多说,路线基本如下:学习路线1.内存管理器(一)简单分配器(需求) 2.内存管理器(二) 遍界标识法 3.内存管理器(三)使用遍界标识法实现分配器 4.内存管理器(四) 伙伴算法(现代主流内存管理方法) 5.内存管理器(五) Linux内核内存管原创 2015-10-12 17:26:11 · 913 阅读 · 0 评论 -
内存管理器(九)内核内存管理–进程相关数据结构
内存管理器(九)内核内存管理–进程相关数据结构前言前面的几篇博文都是在学习用户态内存管理,malloc与free 也研究了Glibc 的内存管理函数的实现,本来想点到位置,但是觉得还是太浅了,不够深入,遂决定,继续挖掘下去(读破万卷始见金嘛)。所以再次修改学习路线,希望最后能做出来一切实可用的东西。毕竟本科学习阶段主要还是在于掌握原理上的东西,真的很难做出什么有实际价值的东西,原创 2015-11-04 14:59:41 · 499 阅读 · 0 评论 -
内存管理器(四) 伙伴算法及分配器原理实现
内存管理器(四) 伙伴算法前言上两篇一共介绍了边界标识算法,以及使用边界标识算法实现了一个堆内存的分配器,现在我们学习下另一种内存管理的算法,我们的Linux的内存管理就广泛应用了伙伴算法。非话不多说。__START这个算法是什么?伙伴算法:伙伴算法(系统)是操作系统中用到的另一种动态存储管理方法。它和边界标识法类似。在用户提出申请时,分配一块恰当的内存区域给用户;原创 2015-10-17 22:35:29 · 1780 阅读 · 0 评论