ASM基本必要,至于高级语言就很难说了。去osdev wiki上一翻一堆各种语言实现的玩意。

一个模拟OS其实不太容易完整搭出来,反倒是直接构造内核的后顾之忧少(如果还有真的想在SIGALRM里耍什么异常控制流的还是算了吧,挺悲催的)。不过如果是子系统模拟还是可以的:

1. 进程的模拟一般强调调度算法多于基本抽象,所以可以考虑用原生的线程搭配k个互斥量模拟忽略超线程的SMP调度。实时调度的发生频率用一个timer就可以解决。
2. 地址空间和MM是比较不容易模拟的东西,但国内老湿们往往喜欢啃buddy heap或者一般向header/footer-based heap而不是基础MM本身所以其实反倒好做。直接按算法模拟就行。
3. 单纯针对硬盘的FS直接在一坨当作disk image的文件上搭几个模拟驱动,然后就开始算法向了。没什么特别要说的。
4. I/O子系统模拟起来其实没什么趣味:失去了真实性的机制看起来也怪囧的,随机应变吧。

即使是内核也不一定选择c/c++作为开发主要部分的高级语言,何况一个模拟实验。

reference:
http://forum.osdev.org/

必须用C模拟OS?的更多相关文章

  1. Matlab学以致用--模拟os任务装载情况

    2012-06-08 21:26:42 用matlab来建模,仿真不同时刻os task在队列中的装载情况.输入参数如下 作为初学者,M文件写的有点长.能实现功能就算学以致用了. clear;clc ...

  2. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  3. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  4. Java - NIO

    java.nio:NIO-2: NIO 面向流的IO体系一次只能处理一个或多个字节/字符,直至读取所有字节/符,且流中的数据不能前后移动.效率低,当数据源中没有数据时会阻塞线程.Java-4提供的新A ...

  5. Java基础:多线程

    基本概念 程序&线程&进程 程序是一个段可以提供业务功能的代码,它可以包含1个或多个进程.程序在OS上运行时表现为进程对各种资源(CPU,内存,Disk..)的消耗和处理. 进程是OS ...

  6. ubuntu下安装使用vmware、kvm、xen

    一. 概念介绍: (1)全虚拟化(Full Virtulization) 简介:主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行, 速度会根据不同的实 ...

  7. [翻译]Mock 在 Python 中的使用介绍

    目录 Mock 在 Python 中的使用介绍 原文链接与说明 恐惧系统调用 一个简单的删除函数 使用 Mock 重构 潜在陷阱 向 'rm' 中加入验证 将文件删除作为服务 方法 1:模拟实例的方法 ...

  8. Python 调用系统命令的模块 Subprocess

    Python 调用系统命令的模块 Subprocess 有些时候需要调用系统内部的一些命令,或者给某个应用命令传不定参数时可以使用该模块. 初识 Subprocess 模块 Subprocess 模块 ...

  9. day21:正则函数&模块和包(import)

    正则函数 1.search  通过正则匹配出第一个对象返回,通过group取出对象中的值 # search 通过正则匹配出第一个对象返回,通过group取出对象中的值 strvar = "1 ...

随机推荐

  1. hackerrank:Almost sorted interval

    题目链接:https://www.hackerrank.com/challenges/almost-sorted-interval 题目大意: 定义一个“几乎单调”区间(区间最小值在最左面,最大值在最 ...

  2. mysql优化整理(索引)

    什么是索引? 索引是表记录的单个或多个字段重新组织的一种方法,其目的是提高数据库的查询速度,本质上就是一种数据结构. 索引的类型:primary(主键).secondary(其他) 索引的数据结构 I ...

  3. 修改oracle服务器所在linux主机名

    1.修改/etc/hosts 2.修改 /etc/sysconfig/network 3.修改oracle的 listener.ora 4.修改 tnsnames.ora  

  4. volatile-java关键字

    volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2 ...

  5. [RxJS] Observables can complete

    The Observer object has the functions next() and error(). In this lesson we will see the other (and ...

  6. MySQL加密的性能测试

    这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...

  7. passwd-shadow文件

    [root@rusky /]# vi /etc/passwd root:x:::Redhat5:/root:/bin/bash rusky:x::::/home/rusky:/bin/bash 1.r ...

  8. nginx反向代理nginx,RealServer日志打印真实ip

    title: nginx反向代理nginx,RealServer日志打印真实ip date: 2016-05-11 19:15:37 tags: --- nginx反向代理nginx,RealServ ...

  9. C复习手记(Day1)

    auto存储类:所有局部变量默认的存储类  ex:{int mount;auto int month}  auto只用在函数内,只做局部变量 register 存储类:register 存储类用于定义 ...

  10. CSS投影实现方式

    备用素材: 1.png    shadow.png 第一种方式: 利用负边距实现 最终效果图: <!DOCTYPE html> <html lang="en"&g ...