码迷,mamicode.com
首页 > 其他好文 > 详细

自制操作系统(九) 内存管理

时间:2016-07-04 23:37:15      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

2016.07.04  2016.07.05

 

        操作系统本质是一个程序,一个大型软件工程(商业化os的情况)。而程序的本质---一方面是所谓的“数据结构+算法”,另一方面则是 封装+抽象。操作系统作为一个出现,一方面是控制硬件启动开机,并且作为第一个在计算机上运行的软件,另一方面,操作系统负责管理计算机的资源(内存管理,文件管理,I\O),协助用户要运行的程序在计算机上运行,甚至是多个程序同步运行(进程管理)。所以你可看到,操作系统本质上和那些b\s模式的企业管理网站本质没有任何区别,都是管理。只不过操作系统要管理的是计算机资源(在对计算机底层抽象的基础上),和程序,作为一个boss级别的程序管理程序(这里你要理解程序运行所需的那些基础,内存、寄存器、cpu等等……了解了这些基础才能知道操作系统作为一个boss程序怎么管理应用程序)。

      所以你可以看到,计算机的目的就是要运行程序。而操作系统是一个在计算机上运行的程序,目的是帮助计算机在人类的操作下更好的运行程序。

技术分享

      这一章的内存管理便是操作系统作为boss程序的一种体现。操作系统管理内存是因为,计算机要运行程序需要内存,所以操作系统作为程序的大boss,来负责管理并给应用程序(小弟们)分配、回收内存。

 

      首先,内存管理要涉及缓存的概念。在我们做内存检查时要将缓存设为OFF。

unsigned int memtest(unsigned int start, unsigned int end)
{
    char flg486 = 0;
    unsigned int eflg, cr0, i;

    /* 确认CPU是386还是486以上的 */
    eflg = io_load_eflags();
    eflg |= EFLAGS_AC_BIT; /* AC-bit = 1 */
    io_store_eflags(eflg);
    eflg = io_load_eflags();
    if ((eflg & EFLAGS_AC_BIT) != 0) { /* 如果是386、即使设定AC=1,AC的值还是会回到0 */
        flg486 = 1;
    }
    eflg &= ~EFLAGS_AC_BIT; /* AC-bit = 0 */
    io_store_eflags(eflg);

    if (flg486 != 0) {
        cr0 = load_cr0();
        cr0 |= CR0_CACHE_DISABLE; /* 禁止缓存 */
        store_cr0(cr0);
    }

    i = memtest_sub(start, end);

    if (flg486 != 0) {
        cr0 = load_cr0();
        cr0 &= ~CR0_CACHE_DISABLE; /* 允许缓存 */
        store_cr0(cr0);
    }

    return i;
}

(未完待续)

自制操作系统(九) 内存管理

标签:

原文地址:http://www.cnblogs.com/rixiang/p/5641936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!