启动-操作系统是如何编写的,我只想知道原理?

问题描述

操作系统是如何编写的,我只想知道原理?

听说操作系统主要是写文件操作这部分,然后在写入硬盘一块叫引导区的地方,开机就会自启动,和其它应用软件一样?

解决方案

抄篇文件,供参考

本人学习计算机技术至今,对于如何学习操作系统原理有一点自己的看法,现在写出来,希望对大家能有所帮助!
操作系统怎么学,首先要想操作系统是怎么来的,在没有操作系统的年代里,人们是怎么编程的。这是首要的问题。不知道有没有人看过INTEL官方的CPU文档,总是分为应用级编程、系统级编程、指令集这三块。其中系统级编程这一块最复杂,我不说内容,就单从文件的大小来看,IA-64编程手册的应用级编程卷是2MB,系统卷却有6MB。就连IA-32编程手册上的系统卷部分也远比应用卷的要多。当然这些内容我还没有看,不过从目录当中,觉得有很多相似的地方,比如CPU内存寻址、虚拟存储器管理、中断与保护等等,可以从INTEL的CPU文档上看出,各种CPU或机器虽然各有各的不同,各有各的特点,但是目前的CPU要解决的核心问题就是那么几块,要解决的就是象如何寻址内存,如何管理虚拟存储,如何实现中断,如何保护资源等等。

    各位编程的同仁想必都很清楚,计算机的操作系统就是在为应用级编程提供服务,提供什么服务,就是提供象诸如如何内存寻址,如何管理虚拟存储器、如何进行中断,如何管理磁盘,如何。。。。等等。操作系统为我们做掉了系统级编程中最繁重的一块,所以我们在用应用级编程比如用C++编程的时候才会那么舒服,用int分配一个变量这内存地址就来了,某个函数要调用另一个函数执行的时候这执行行程就能跳到那个函数,内存不够了,没有关系,操作系统自动启动虚拟存储器(只不过慢了些),所以应用级编程是最舒服的,操作系统级编程比较难,而直接做单片机可能就是最难的了。因为即使就是操作系统级编程,可能很多有关CPU底层的东西也已经做掉了,你要做的可能就是要了解的你的操作系统做掉了哪些功能,如何调用。而单片机就没有那么好玩了,单片机我没有做过,我想可能就是直接对着一个CPU用汇编来编程,而且很可能是在没有操作系统的情况下,这样一来,操作系统要承担的诸如内存管理,中断,过程跳转等这些复杂繁重的工作就得程序员自己来承担,那程序员的负担就比目前应用级编程大得多了。

    我猜想,可能在没有操作系统的时候,每个计算机程序员的日子可不会象现在的那么好过,因为做每个程序,都需要你自己去分配管理内存,你不但要考虑如何高效的管理内存,还要知道如何进行过程跳转等等这一大堆的的细活,而这些细活在不同的CPU上的实现方式也是不同的,直到把这些问题都解决了以后,你才开始真正考虑你的应用方面的程序逻辑如何去编的问题。当然了,虽然有关CPU底层的系统级实现细节不一样,但是大至CPU系统级这一部分要解决哪几块问题这是一样的,所以在INTEL的官方文档上,无论是IA-32还是IA-64这两个编程手册的系统卷上,都是那么几块内容。

    既然系统级要解决的几个任务都是相同的,每个程序员在编程的时候都要考虑这几方面的内容,那么可能就会想,为什么不把这些程序要解决的相同的任务给提取出来呢,这就形成了操作系统,操作系统的内核的任务,就是专门负责解决早期计算机程序员每次编程都必须要解决的几项系统级任务,这样一来,留给应用级的担子就非常的轻了,忘记在哪里看过,好像以前的数据库系统是属于应用软件的,可能同样是因为每个应用软件连同操作系统都需要一个数据库,所以就把数据库系统给单独提了出来做为系统软件了。有一点不明白为什么目前的操作系统要用文件系统,直接用数据库系统不更好些吗,既对用户服务,又为系统服务!

    我觉得,如果大家有要学操作系统原理的,根本就不必要去看所谓什么操作系统原理这一类的书,连外文的书籍也没有必要去看,因为目前国际CPU制造商提供的CPU文档的系统级编程卷才是真正的,原汁原味最好的教材,你要编写的操作系统从大部分任务就是解决系统卷里的任务的。有一次在QQ上和一个做单片机的家伙聊天,那人比我小一点,我当时说目前操作系统底层好难,他就说这有什么难的,他马上就能做一个操作系统,就连编译器也能做,我当时被吓了一大跳,小小年纪就这么厉害,现在我懂了,做单片机的,大概都会做操作系统,因为单片机的每次编程就是和系统底层打交道的,所以做单片机程序的自然对一个操作系统内核会比较了解了。

    在此建议和我一样的对操作系统原理感兴趣,对系统底层的感兴趣的人,直接去看INTEL的官方材料吧,操作系统原理有哪几条,要解决哪些任务,通过查看不同CPU的系统卷编程手册,找出其中相同的任务和逻辑去自己总结操作系统是如何做,无疑这种方法学到会是最多的了,而且理解起来可能会比一般的学习方法来得更深刻。

    学习应用软件的朋友,我也劝你们看看操作系统,内核等这些系统底层的东西。看过了以后,你会觉得看应用级编程会更流畅,学起来也会更简单。我就是这样学的,学MFC,后来开始学INTEL CPU的应用级编程,现在我决定开始从系统级学起。目前我也会上MSDN英文网站看看有关MFC的东西,但我看MFC倒不是主要因为去编写MFC应用程序,而是想看看微软是用系统为所有的应用级编程提供服务的,这整个一套结构是如何构造出来的,ORACLE数据库是我继INTEL文档的下一波目标,我也是想看看,一个数据库体系结构是什么样的,可不可以嵌到操作系统里去。

    就写到这里,希望有志同道合的朋友和我一起前行,最后祝大家编程愉快,工作愉快。呵呵!

解决方案二:

推荐你去看操作系统原理,这个还真不是一两句可以说清楚的。

解决方案三:

各大学计算机系里都有一门课就是操作系统,里面介绍了操作系统的几个絯心方面,但只是介绍,离自己写个操作系统相差很远。

解决方案四:

看看《计算机体系结构》一书 或者嵌入式方面入门的书籍会对你有很大的帮助

时间: 2024-08-30 19:23:56

启动-操作系统是如何编写的,我只想知道原理?的相关文章

c++,用VC6与opencv目前只想把图像显示出来,语法没错但无法显示,有什么问题求教大神

问题描述 c++,用VC6与opencv目前只想把图像显示出来,语法没错但无法显示,有什么问题求教大神 实验5 类和对象 实验目的 掌握类和对象的创建 掌握构造函数.构造函数的重载,拷贝构造函数.析构函数的设计和使用 掌握成员函数的设计和使用 实验内容 下面的代码已经创建了图像类的框架,请完善该图像类.在该类中,实现图像的读入.保存.显示,并实现图像的翻转.缩放.裁剪等操作.在主程序中,读入某个图像文件(比如"fruits.jpg") ,对其进行缩小,上下翻转,左右翻转,指定区域裁剪等

Photoshop如何制作只想陪你一直走下去的签名?

  本教程主要使用Photoshop制作只想陪你一直走下去签名教程,喜欢的朋友让我们一起来学习吧. 效果图: 教程: 素材 背景素材: 素材①: 素材②: 纸片素材: 调色的数值:[截图截取的比较失败--] 人物塬图:         注:更多精彩教程请关注三联photoshop教程栏目,三联PS群:339853166欢迎你的加入 分类: PS入门教程

共享文件夹-我共享了一个文件夹只想让局域网内指定的两个电脑访问,其他电脑没有权限访问如何设置?

问题描述 我共享了一个文件夹只想让局域网内指定的两个电脑访问,其他电脑没有权限访问如何设置? 求大侠帮忙,有详细的步骤,万分感谢 下面是在百度上搜到的答案,我试了,但是删除everyone后,电脑就无法访问共享文件夹了 winxp局域网中设置共享文件夹权限 假定有三台电脑分别是 Computer01 Computer02 Computer03 用户分别是 Computer01User01 Computer02User02 Computer03User03 Computer01User01 想把自

c++-C++多次操作数据库,打开数据库的操作只想执行一次应该放在什么位置

问题描述 C++多次操作数据库,打开数据库的操作只想执行一次应该放在什么位置 小型学生管理系统,有一个类Database专门用于操作数据库,构造函数里有打开数据库的操作,增删改查操作四个类里都建了Database类对象,程序运行时数据库会打开多次,请问打开数据库的操作只想执行一次的话,应该放在什么位置 解决方案 在c++ builder里一般open是用来执行查询,查询几次就要open几次 解决方案二: 其实你走了弯路, 这个不是需要你思考的东西. 数据库连接的打开, 固然需要时间, 但你不关闭

xamarin-Xamarin android4.0.2 安卓门外汉,只想配置好一个能运行的版本,然后学习写点代码

问题描述 Xamarin android4.0.2 安卓门外汉,只想配置好一个能运行的版本,然后学习写点代码 [AndroidRuntime] Shutting down VM[AndroidRuntime] FATAL EXCEPTION: main[AndroidRuntime] java.lang.ExceptionInInitializerError[AndroidRuntime] at java.lang.Class.newInstanceImpl(Native Method)[And

javascript-我只想要在用户输入input框查找时这个enter快捷键会调用search(),怎么修改?

问题描述 我只想要在用户输入input框查找时这个enter快捷键会调用search(),怎么修改? document.onkeyup=function(event){ var e=event||window.event; var keyCode=e.keyCode||e.which; switch(keyCode){ case 13:search(); break; } } 想要实现在网页中使用快捷键,可是我只想要在用户输入input框查找时这个enter快捷键会调用search(),怎么修改

java-一个方法两个页面先后调用 只想让其执行一遍怎么破。本人新手望大神不惜赐教

问题描述 一个方法两个页面先后调用 只想让其执行一遍怎么破.本人新手望大神不惜赐教 提问如题.请大神敲打一下我愚笨的脑子吧!不胜感激.执行一遍.我怎么就想不到方法呢. 解决方案 这是错误的设计!你要搞清楚,为什么要在两个页面分别调用方法,却只要执行一次.有这个必要吗? 如果一定要这么做,需要引入一个参数来记录,被调用一次给这个参数一个值,标识已被调用.方法里面先判断这个参数即可.(这个参数可以是全局变量,也可以写到文件中) 解决方案二: 方法里面加个全局标记,如果运行了就标记运行,下次调用直接返

javaweb-Struts2回显问题,只想Action传了一个ID,缺接收到了其他信息.

问题描述 Struts2回显问题,只想Action传了一个ID,缺接收到了其他信息. 问题1:新增用户的时候,回显了上次新增的数据.不知道为什么会出现这种情况 由于带着userID,所以我的新增操作就直接变成了编辑,数据库里没有新增一条数据,而是更新了这个回显出来的userID的那条数据. 参数传递如下: 1.点击添加用户按钮 <input style="font-size:12px; color:black; height=20;width=80" id="BT_Ad

网页设计与开发-问题:现在我只想单独显示“五金类”这个字段,怎么做?

问题描述 问题:现在我只想单独显示"五金类"这个字段,怎么做? 1.代码: /s:iterator 2.代码显示出来的字段: 拉链 纽扣 五金类 手工饰品 织带 3.问题:现在我只想单独显示"五金类"这个字段,怎么做?