自已写操作系统_自已动手写操作系统读书笔记 - CSDN
精华内容
参与话题
  • 自编STM32轻量级操作系统(一)------操作系统实现

    万次阅读 多人点赞 2017-08-28 20:54:35
    16年寒假那段时间开始接触UCOS实时操作系统,感觉真的很神奇,还借了任哲和邵贝贝的书的来看,原来代码还可以得那么美妙。 后来,在知乎上看到一位答主的文章...

    你好,这里是风筝的博客,

    欢迎和我一起交流。


    寒假那段时间开始接触UCOS实时操作系统,感觉真的很神奇,还借了任哲和邵贝贝的书的来看,原来代码还可以写得那么美妙。

    后来,在知乎上看到一位答主的文章(https://www.zhihu.com/question/25628124/answer/133388181),顿时对操作 系统兴趣大增,想着自己也简单写一个轻量级的嵌入式操作系统。

    现在好几个月过去了,这个操作系统我用着感觉还不错,非常的小(自己写的嘛,功能有限,呵呵呵)。当然,当初写这个也是为了好玩而已,并不保证严格的实际用途。

    就想着开源出来,与大家一起分享。


    这一章并不打算就这样裸讲程序,感觉先把概念说一下比较好:

    什么是操作系统?

    所谓操作系统就是能有效地管理计算机系统中的各种硬件\软件资源、合理的组织计算机的工作流程,从而为程序员\操作员和各类用户创造良好的工作环境的系统软件.


    由于我学习的操作系统为UCOS,所以也将参照他的风格来写。而且由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异。

    我们需要完成以下部分:

    a.任务调度策略

    b.内存管理

    c.中断处理

    d.共享资源的访问

    恩.....大概就这些吧,反正我只实现了这些,,,,,,

    我的实验平台为ST公司的STM32F1系列的板子,Cortex-M3的内核,属于ARMv7家族。

    好了,写代码之前,我们得先确定下a点,任务调度策略:

    采用基于优先级的抢先式调度策略。

    但是我们怎么实现任务抢占(即任务切换)呢?

    当一个运行中的任务A因为某种原因要切换到其他任务去运行时,A必须保存自己的"上下文"(进程的状态以及堆栈中的内容被称为该进程的上下文),以保证以后再次切换回A运行时,能从已保存的"上下文"中恢复回来。这样当A再次运行时,对A而言"上下文"根本没有变化过,好像从来没有进行过任务切换一样。

    如果用汇编写程序就知道,很多东西都是存在寄存器里的。查看下《Cortex-M3权威指南》可以知道:


    Cortex-M3有两个堆栈指针,但是同一时刻只能用一个,我们可以用一个来作为任务切换时保存"上下文"。如图


    抽象图,嘿嘿。。。。。。。

    此时在cpu在跑任务B,任务切换时,把运行任务B时的寄存器参数入栈保存到任务B栈中,再把任务A栈里的内容出栈处理,这样就可以实现任务切换了,从任务B切换到任务A。

    其实在权威指南里也说有:


    使用双堆栈指针。注意哦,M3的堆栈是"向下"的哦。


    这图明显没我灵魂画师画得好,嘿嘿。不过看到一个有用的信息:SysTick作为系统"心跳"。

    好了,知道是怎么切换任务的了,那问题又来了,谁来做这些操作呢?

    当然是从权威指南里找答案了:


    还有一张图,带你理解PendSV,真贴心:


    到这里。任务切换部分算是知道是怎么回事了。。。

    b.内存管理,这个以后再说。

    c.中断处理,从之前的图可以看出,系统应当采用SysTick(滴答定时器)作为系统"心跳"。

    因为是基于基于优先级的调度策略,所以每次"心跳",都要去检测有没有比当前任务更高优先级的任务产生,如果有,通过PendSV进行任务切换。当然,任务切换不仅限于此,可能还是任务自身让出CPU使用权。

    d.共享资源的访问,因为是单核的CPU,打个比方,厕所(资源)只有一个,小A(任务A)和小B(任务B)都想去上厕所(资源),那不就出问题了吗?所以之后我们要注意这个问题,之后再深入讨论这个。


    恩,,,,,,码了那么多,感觉就那么多了,就先这样了。下一章再分析具体程序。

    先放个交流群:136045527


    下一章:自编STM32轻量级操作系统(二)------任务调度




    展开全文
  • 学习 自已动手写操作系统

    千次阅读 2007-09-01 10:17:00
    去年还是前年,就在书店看到那本《自已动手写操作系统》。觉得很不错。 以前在《程序员》杂志上也看过于渊的关于简单操作系统的文章。 书到时大部份都看过了。就是没有实践,呵呵! 现在,有种自已coding一遍的...
     去年还是前年,就在书店看到那本《自已动手写操作系统》。觉得很不错。
     以前在《程序员》杂志上也看过于渊的关于写简单操作系统的文章。
     书到时大部份都看过了。就是没有实践,呵呵!
           现在,有种自已coding一遍的冲动。
           原来看过的《windows核心编程》,那些什么保护模式什么的,都可以实践一遍了,HOHO~~
         工具准备:
         1、FloppyWriter.exe网上下载或光盘里就有的。
         2、NASM也从网上下载了。
         3、顺便也把NASM的中文手册也下载下来了。呵~
         4、虚拟机VM不知道好用否。不行的话再下载Virtualpc.
          
    展开全文
  • 学习扎记之保护模式(X86)  学完这一章后,我尝试来好好总结一下,发现在很难做到,因为相关的细节牵扯比较多,一不小心就... 这跟操作系统历史的发展密切相关,在早期,操作系统是单进程,你输入一个命令就执行一个
     <自已动手写操作系统>学习扎记之保护模式(X86)
    

          学完这一章后,我尝试来好好总结一下,发现在很难做到,因为相关的细节牵扯比较多,一不小心就必须要到具体的实现细节,而要了解这些细节Intel 开发手册已有清晰的描述.下面以问题的方式要来记录一下自已的一些体会.

       1. 为什么需要保护模式?

           这跟操作系统历史的发展密切相关,在早期,操作系统是单进程,你输入一个命令就执行一个命令,像DOS.完了等待用户续继输入.这挺浪费计算机资源,人们希望同时运行多个任务,即同时运行多个进程.多进程会引起一系列的问题,这里说一下一个基本的问题,怎么样保证一个进程不非法访问其它进程的内存.学过8086CPU的人知道,这种CPU是相当阳春白雪,通过段:偏移的方式就可以访问物理内存,如果我们在这种CPU上实现多进程,(我们假设速度足够快,内存足够大),操作系统能合理分配内存,但无法在软件层面保证一个进程非法访问其它的内存,也就是说需要硬件的支持.因此要稳定可靠的实现多进程,必须对原有的硬件体系进行改造增强, 现在我们给这个增强的硬件体系叫做保护模式.

       2.保护模式增加有那些基本的硬件设施?

              这里以IA-32为例,

              a. 4个控制寄存器(32位) 

                CR0 CPU工作方式工作方式控制,包含实模式/保护模式,启用与禁用分页机制等.

                  CR1  保留

                  CR2和CR3用于分页管理管理机制

             b. 系统地址寄存器

                   GDTR(48位)全局描述符表寄存器,  包含全局描述符表段的基地址和段界限.

          LDTR(16位)  局部描述符寄存器  LDTR实际是一个特别的选择子,用来定位每个任务的局部描述符表

                    IDTR(48位)  中断描述符寄存器 包括IDT的基地址32位和段界限16位

                    TR (16位)  任务状态段寄存器 包含当前任务的任务状态段的选择子

     

       3.保护模式的一些基本术语的解释?

             a.描述符

                   描述符是一个数据结构,用来说明一段内存的情况,包括段的基地址,段界限,段属性(段类型,段权限等), 或 用来说明一种调用门,包括目标代码段的选择子,入口地址偏移和其它属性。

             b.描述符表

                   实际是一个描述符数组,分为全局描述符表,局部描述符表,中断描述表

                   全局描述符表  表示系统最顶层的内存分配描述符表集合,通常包含内核所使用代码段,数据段,堆栈段,以及一些特别的段.

                   局部描述符表  每个任务私有的段描述表

                   中断描述符表  表示中断和异常处理的各种门的描述符表

             c.调用门

         正如字面的意思,作用相当于一个"门",其实就是一个目标代码段的入口.包括目标代码的选择子和偏移地址和权限级别等其它属性.通常应用程序需要调用操作系统提供的服务,而应用程序运行在较低的特权级别,无法直接访问操作系统的服务,这就要通过调用门实现系统调用,这其中涉及到权限的检查,堆栈的切换等.

             d.选择子

                 选择子有点类似于一个index,所不同的是还包含一个位指示是全局描述表还是局部描述表,还有2个字节表示RPL(Request Privilege Level),在保护模式下是加载到段寄存器CS,SS,DS,ES,FS,GS.选择子加描述符的设计个人感觉是又增加了一个层次,用描述符来专门记录内存的寻址信息,不再像8086那样寻址受寄存器位的影响,如果以后调整内存的寻址方式,基本上不会对其它硬件造成影响.

             e.中断和异常

         中断和异常是硬件级实现的事件通知机制。中断概念跟实模式是一样的,只是实现的方式发生了变化。异常是CPU检测到指令的执行先决条件不满足(如除法指令不能除以0)或某些系统规则被违返或不满足(缺页等)发出的事件通知,CPU不是God,异外情况发生了只能向外发出通知请求处理。异常分为Faults,Traps和Aborts. Faults为可称之为“良性”的异常,意为可以correct并重新恢复程序执行。Traps 是一种特别的异常,用于设置断点或调试。Aborts是真的发生了错误,会中断程序的执行。中断和异常虽然概念不一样,但具体的实现的方式是一样的。

     

             f.分段和分页

                     想像一下一本书,如果你把这本书每一页都撕下来排成一列,从第一页到最后一页整体就叫'段',每一页就叫'页',分段就是先确定一块'大'块的内存,确定的它的基地址和界限,然后再切分成更小的块相等的内存,这就是分页.切分页的方法通过二级目录,这里以4K每页为例,首先把线性地址的高10位作为Index在一级目录中得到二级目录的首地址,再把线性地址的中间10位作为Index在二级目录中得到物理地址高20位,最后和线性地址的低12位相加得到真正的物理地址。

    另外,分页的另一个好处可以实现虚拟内存.

     

       4.保护模式是如何工作的?

                 一旦把CR0的PE位(0)设为1,CPU就进入了保护模式.保护模式最大的改变首先是内存寻址。段寄存器退化成了一个选择子,EIP,ESP还是偏移地址,

          寻址变成了首选通过选择子,在全局或局部描述符表中找到相应的描述符,描述符中有段的基地址,基地址加偏移地址得到线性地址,如果没有开启分页,

    线性地址就是物理地址.如果开启了分页,就发生上面描述的情形。另外保护模式在这其中会进行大量的安全检查,下面描述。

     

       5.保护模式的有那些"保护"?

        段级保护

                     访问是否超出段的范围,段类型是否正确,如你不能把数据段加载到代码段,段的权限级别检查等。

              页级保护

                     包括权限和读写保护

        IOPL(I/O Permssion Level)

          提供I/O保护,如果当前的程序没有相应的权限,不能运行一些I/O敏感的指令,如in,out,cli,sti.

               I/O许可位图

           控制当前的程序那些I/O端口可以访问。

     

     保护模式的细节比较旁杂,要详细了解可以参看Intel开发手册三卷,要真的理解保护模式工作原理还得Review书上的源代码,最好自已动手调试一番。

    展开全文
  • VMware 实现自己设计的最小操作系统

    千次阅读 2013-03-27 08:33:13
    近日,看了《自己动手写操作系统》一书,真的是受益匪浅,结合书本,本人实践了一下,在VMware中运行起了最小的操作系统,只实现Hello,OS world。具体操作可分为如下7步: 1. 打开VMware,创建一台虚拟机TestOS...

        近日,看了《自己动手写操作系统》一书,真的是受益匪浅,结合书本,本人实践了一下,在VMware中运行起了最小的操作系统,只实现Hello,OS world。具体操作可分为如下7步:

    1.      打开VMware,创建一台虚拟机TestOS,创建成功后,如图1所示。


    图1

    2.      双击Floppy,弹出如图2所示对话框,在Connection里,选择use floppy image file,然后点击Create…,创建虚拟软盘镜像文件virtual_floppy.flp,点击OK,查看保存目录,可以看到生成了虚拟软盘镜像文件,大小为1.44MB,如图3所示。


    图2


    图3

    3.      使用文本编辑器,编写最小系统汇编文件(文件内容参考《自己动手写操作系统》),如图4所示,生成boot.asm汇编文件。


    图4

    4.      下载NASM汇编编译器,编译器截图如图5所示,安装汇编编译器,完成后,在命令行模式下,执行命令nasm boot.asm –o boot.bin,生成二进制文件,如图6所示。


    图5


    图6

    5.      下载《自己动手写操作系统》光盘中的FloppyWriter工具,如图7所示,然后点击Write File to Image,选择上一步生成的二进制文件boot.bin,打开,如图8所示,然后继续打开虚拟软盘镜像文件,如图9所示,此时将boot.bin写入了刚开始为空的软盘镜像文件中,软件会提示写入成功,如图10所示。


    图7


    图8


    图9


    图10

    6.      打开刚才建立的虚拟机,设置开机从软盘启动,设置如图11所示。


    图11

    7.      打开虚拟机,会出现红色的Hello,OS world,如图12所示,这样就把自己做的操作系统运行起来了。


    图12


    展开全文
  • 02326操作系统课后答案

    千次阅读 2019-04-11 00:59:01
    操作系统既是一种资源管理程序,又是一种其他程序执行的控制程序,其目的是提供一个供其它程序执行的良好环境。 3、操作系统管理计算机系统的哪些资源? 答:操作系统管理的计算机系统资源包括两大类:硬件资源和...
  • 最后觉得对操作系统感兴趣的人还是很多,吧.我不一定能造出玉,但我可以抛出砖. 包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变得更...
  • 软盘引导自已操作系统草木瓜20080420一、前言 前面我们文章曾提到0磁道的概念(《小议计算机存储之二.硬盘存储原理》)。我们也知道以前的硬盘由于每磁道上最多有63个扇区,外圈疏内圈密,没有很好利用盘面的资源,...
  • 单片机超轻量级操作系统

    万次阅读 2017-01-10 18:54:18
    后发现如下好文,后面再把它封装成类的话,就更方便使用了,我觉得这将会使很多只有操作系统能做的工作,普通单片机裸机也能完成,可以充分利用单片机的性能,降低整个电子行业的成本,使得例如机器人,虚拟现实等...
  • UNIX操作系统设计》……  操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。操作系统(英语;Operating System,简称OS)是一管理电脑硬件与软件资源的程序,同时也是计算机系统...
  • 制作自已的Linux操作系统ISO

    千次阅读 2014-08-18 18:38:32
    本文参考自:http://hi.baidu.com/websfx/item/f6a7b2177ddf9325f7625cdb,非常感谢
  • 本文是笔者在学习嵌入式实时操作系统VxWorks时的学习笔记和实验报告。
  • 操作系统题库

    万次阅读 多人点赞 2019-01-11 22:55:44
    2.如果操作系统具有很强的交互性,可同时供多个用户使用,系统响应比较及时,则该操作系统属于(分时系统)类型; 3.操作系统提供给程序员的接口是(系统调用)。 4.操作系统的4大功能是(处理机管理)、存储器管理...
  • 自已动手ORM框架(1)——幼儿园

    千次阅读 2015-07-16 10:32:09
    自已动手ORM框架(1)——幼儿园  ORM即Object,Relation,Mapping的缩写,什么意思呢?先从一个例子说起。  现在需要开发一个学生成绩管理系统,要求可以进行信息的增删改查,首先进行需求分析:一个学校有...
  • unix 与 linux 操作系统 介绍

    千次阅读 2013-05-26 12:49:52
    第四章银行常用操作系统   本章将对银行计算机中常用的操作系统UNIX和Linux作简要的介绍,着重说明两者的特点和应用场合,而对另一个常用的操作系统Windows不作介绍。   4.1 操作系统的基本概念   计算机...
  • 给51 DIY超轻量级多任务操作系统

    千次阅读 2012-07-28 12:08:24
    最后觉得对操作系统感兴趣的人还是很多,吧.我不一定能造出玉,但我可以抛出砖. 包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变...
  • 简单的51单片机多任务操作系统(C51)

    千次阅读 多人点赞 2018-08-12 13:45:21
    简单的多任务操作系统 其实只有个任务调度切换,把说它是OS有点牵强,但它对于一些简单的开发应用来说, 简单也许就是最好的.尽情的扩展它吧.别忘了把你的成果分享给大家. 这是一个最简单的OS,一切以运行效率为重,经...
  • Linux操作系统原理及应用

    千次阅读 2015-11-02 22:45:08
     简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 Linux最早由一位名叫...
  • 嵌入式Linux操作系统学习规划

    千次阅读 2009-02-15 19:19:00
    嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或...
  • 实时多任务操作系统之我见

    千次阅读 2006-05-19 16:26:00
    实时多任务操作系统之我见 (转载) 清风 发表于 2005-6-18 12:35:00
  • 操作系统有哪些?

    千次阅读 2013-05-14 12:09:41
    Windows 开发商 Microsoft ... Windows98/me是基于MS-DOS的混合的16/32位操作系统正慢慢的退出PC舞台了,2000/XP以及Server2003都是基于WindowsNT的32位操作系统,XP/Server2003已经有64位版本了。
1 2 3 4 5 ... 20
收藏数 25,587
精华内容 10,234
关键字:

自已写操作系统