创建一个操作系统似乎是一个 大规模的 的项目。怎么会有人甚至开始?

例如,当我弹出Ubuntu到我的驱动,如何可以我的计算机仅仅是 运行 它? (这个,我想,是什么我真的想知道。)

或者看它从另一个角度来看,什么是最少量的字节,可能是一个磁盘上仍然可"运行"作为一个操作系统?

(我抱歉如果这是模糊的。我只有 没有想法 关于这个主题,所以我不可能是非常具体的。我会假装知道一个公平的金额如何计算机工作,但我完全没有线索的关于这个问题。)

有帮助吗?

解决方案

嗯,答案存在于书中: 现代操作系统 - Andrew S. Tanenbaum 非常好。下面的封面插图。

最简单但完整的操作系统内核,适合学习或只是好奇心, Minix 即可。结果 此处您可以浏览源代码


(来源: cs.vu.nl

其他提示

操作系统是一个很大的话题,如果你想真正深入了解操作系统的设计和构建方法,我可以推荐你这是一本好书:

操作系统概念

如果您真的很好奇,我会指导您 Linux from Scratch 作为学习完整版的好地方操作系统的来龙去脉以及所有部分如何组合在一起。如果这比您正在寻找的信息更多,那么关于操作系统的这篇维基百科文章可能会很好开始的地方。

PC知道要查看磁盘的特定扇区以获取启动指令。然后,这些指令将告诉处理器在给定处理器中断时,将调用特定代码。例如,在定期打勾时,调用调度程序代码。当我从设备获取内容时,请调用设备驱动程序代码。

现在操作系统如何使用系统设置所有内容?硬件硬件也有API。它们是在考虑系统程序员的情况下编写的。

我见过很多裸机操作系统,这真的是绝对的核心。有许多嵌入式本土操作系统,他们所做的一切都没有。

其他功能,例如要求应用程序向操作系统询问内存,或者需要特定操作的特权,甚至是进程和线程本身,虽然在大多数PC架构上实现,但实际上是可选的。

操作系统简直就是使您的软件能够管理硬件的功能。显然,一些操作系统比其他操作系统更复杂。

计算机开始在固定地址执行,这意味着当计算机启动时,它会将程序计数器设置为预定义的地址,并开始执行机器代码。

在大多数计算机中,这种“引导”是指“引导”。进程立即初始化已知外围设备(例如,磁盘驱动器)。初始化后,引导过程将使用一些预定义的序列来利用这些外围设备。再次使用磁盘驱动程序,进程可能会从硬盘驱动器的第一个扇区读取代码,将其放入RAM中的已知空间,然后跳转到该地址。

这些预定义的序列(CPU的启动,磁盘的加载)允许程序员在CPU启动的早期部分添加越来越多的代码,随着时间的推移,最终会启动非常复杂的程序

在现代世界中,凭借先进的外围设备,先进的CPU架构和庞大的资源(GB或RAM,TB的磁盘和非常快的CPU),操作系统可以为开发人员提供非常强大的抽象(多个进程) ,虚拟内存,可加载驱动程序等。)。

但是对于一个简单的系统,使用受限资源,你并不需要为“操作系统”提供很多东西。

作为一个简单的例子,许多小型控制器计算机具有非常小的“OS”,并且一些可以简单地被认为是“监视器”,仅提供对串行端口(或终端或LCD)的轻松访问。显示)。当然,在这些条件下对大型操作系统的需求并不大。

但也要考虑类似经典的Forth系统。在这里,您有一个带有“OS”的系统,它为您提供磁盘I / O,控制台I / O,内存管理,以及实际的编程语言和汇编程序,这适用于少于8K的内存一台8位机器。

或CP / M的旧时代及其BIOS和BDOS。

CP / M是一个很好的例子,说明一个简单的操作系统可以作为一个抽象层,允许便携式程序在大量硬件上运行,但即使这样,系统也需要不到8K的RAM来启动和运行

与现代操作系统使用的内存MB相差甚远。但是,公平地说,我们拥有MB的记忆,而且我们的生活更加简单(大部分),而且功能更强大,因为它。

编写操作系统很有趣,因为制作HARDWARE打印“Hello World”很有意思。一次将数据推送到一些不明显的I / O端口,或者将其填入某个魔术存储器地址。

获取一个x86模拟器并开始派对引导部门说出你的名字。这是一种傻笑。

基本上......您的计算机可以运行磁盘,因为:

BIOS在引导顺序中包含该磁盘设备。

启动时,BIOS会按顺序扫描所有可启动设备,如软盘驱动器,硬盘驱动器和CD ROM。每个设备访问其媒体并检查硬编码位置(通常是磁盘或cd设备上的扇区)以获取标识媒体的指纹,并列出跳转到指令开始的磁盘(或媒体)上的位置。 BIOS告诉设备将其头部(或其他)移动到媒体上的指定位置,并读取大量指令。 BIOS将这些指令交给CPU。

CPU执行这些指令。在您的情况下,这些说明将启动Ubuntu操作系统。它们也可以是停止指令,或者添加10 + 20等等。

通常情况下,操作系统将从占用大量内存开始(同样,直接来自CPU,因为像'GlobalAlloc'等库命令不可用,因为它们是由尚未提供的loaded-OS)并开始为操作系统本身创建结构。

操作系统为应用程序提供了许多“功能”:内存管理,文件系统,输入/输出,任务调度,网络,图形管理,打印机访问等。这就是你在“控制”之前所做的事情:创建/启动所有服务,以便以后应用程序可以一起运行,而不是踩在彼此的内存上,并为操作系统提供的服务提供了一个很好的API。

操作系统提供的每个“功能”都是一个很大的主题。操作系统提供所有操作系统,因此应用程序只需要担心调用正确的操作系统库,操作系统可以管理两个程序同时尝试打印的情况。

例如,没有操作系统,每个应用程序都必须处理另一个程序正在尝试打印的情况,并且“执行某些操作”,例如打印,或取消其他工作等。相反,只有操作系统具有为了处理它,应用程序只是说操作系统“打印这些东西”和操作系统确保打印一个应用程序,所有其他应用程序只需等到第一个应用程序完成或用户取消它。

作为OS的最少字节量实际上没有意义,因为“OS”是一个“OS”。可能意味着许多或很少的功能。如果你想要的只是从CD执行一个程序,那将是非常少的字节。但是,那不是操作系统。操作系统的工作是提供服务(我一直称之为功能)以允许运行许多其他程序,并管理对程序的这些服务的访问。这很难,你添加的共享资源越多(网络,wifi,CD刻录机,操纵杆,iSight视频,双显示器等等)就越难。

我见过的最近的一个操作系统项目有一个严肃的支持,是一个名为 Singularity ,完全用C#.NET从头开始编写。

要想知道需要多少工作,有两个核心开发者,但他们在任何给定的时间都有多达十几个实习生,而且他们还需要两年时间才能让操作系统达到一定程度会启动并显示BMP图像(这是他们用来做演示的方式)。在他们甚至可以达到有命令行的地方(比如大约4年)之前,还需要做更多的工作。

基本上,关于OS实际上的内容有很多争论。如果大家都同意操作系统的具体内容(它只是内核吗?在内核模式下运行的一切?是操作系统的外壳部分?是操作系统的X部分吗?是Web浏览器是操作系统的一部分吗?),你的问题得到了解答!否则,你的问题没有具体的答案。

您可能希望获得 FreeBSD操作系统的设计和实现这本书,以获得非常详细的答案。您可以从亚马逊获取它,或者这个链接到FreeBSD.org的网站看起来像我记得的那本书:链接文字

我简直不敢相信这一点......但是有关操作系统设计概述的经典书籍是操作系统 - 设计与实现由MINIX的创建者Andrew S Tanenbaum撰写。本书中的很多例子也直接面向MINIX。

如果您想了解更多信息, OS Dev 是一个很好的起点。特别是维基。这个网站充满了信息以及为小型项目/业余爱好编写个人操作系统的开发人员。这也是一个很好的学习资源,因为在OSDev上有很多人和你想要了解操作系统的内容。你最终也可能最终自己尝试了!

操作系统(OS)是控制硬件的软件层。硬件越简单,操作系统就越简单,反之亦然; - )

如果是微型计算机的早期阶段,您可以将操作系统安装到16K ROM中并硬连接主板,以便在ROM地址空间的开头执行机器代码指令。然后,这个“引导”过程将加载其他设备(如键盘,显示器,软盘驱动器等)的驱动程序代码,并在几秒钟内启动并准备好使用。

如今......同样的原则,但硬件越来越复杂; - )

哦,这很有趣。我已经完成了整个事情,并且经历了很大一部分演变。

一般来说,你从小开始开始编写新的操作系统。最简单的事情是一个bootstrap加载器,它是一小块代码,它可以提取大量代码并运行它。曾几何时,使用Nova或PDP计算机,您可以通过前面板进入引导程序加载程序:您输入十六进制数字指令十六进制数。引导加载程序将某些介质读入内存,并将程序计数器设置为该代码的起始地址。

这段代码通常会加载其他东西,但它不需要:你可以编写一个程序,它意味着在裸机上运行。这种程序本身就有用。

真正的操作系统更大,并且有更多的碎片。你需要加载程序,把它们放在内存中,然后运行它们;您需要提供运行IO设备的代码;随着它变大,你需要管理记忆。

如果你想真正了解它是如何运作的,请找 Doug Comer的新书和Andy Tannenbaum 关于 Minix

嗯,你有一些东西将芯片的启动链接到“bios”,然后连接到OS,这通常是由许多代码服务完成的非常复杂的任务。

如果你想要了解更多关于这一点的信息,我会推荐阅读一本关于微控制器的内容......尤其是那些用80或类似内容在c中创建小型操作系统的内容......或者学习一些x86程序集并创建一个非常小的“bootloader OS”。

操作系统是一个程序,就像您编写的任何其他应用程序一样。该程序的主要目的是允许您运行其他程序。现代操作系统利用现代硬件来确保程序不会相互冲突。

如果您有兴趣编写自己的操作系统,请在此处查看我自己的问题:

如何开始操作系统开发

你问你可以把几个字节放在磁盘上还是作为操作系统运行?答案取决于您对操作系统的期望,但我所知道的最小有用的操作系统适合1.7兆字节。它是 Tom's Root Boot 磁盘,它是一个非常好的小型操作系统,具有“救援”功能。 适合一张软盘的应用程序。回到每台机器都有软驱而不是每台机器都有CD-ROM驱动器的日子里,我经常使用它。

我认为它就像你自己的生活。首先,你知道的很少 - 只是足够相处。这类似于BIOS提供的内容 - 它足够了解磁盘驱动器并从中读取信息。然后,当你上小学时,你会学到更多东西。这就像引导扇区被读入内存并被赋予控制权。然后你去高中,这就像操作系统内核加载。然后你上大学(司机和其他申请。)当然,这是你有责任CRASH的。他是。

底线是越来越多的功能层被缓慢加载。操作系统没有什么神奇之处。

通过这里阅读将了解创建Linux所需的内容 https://netfiles.uiuc.edu/rhasan/linux/

适用于一个磁盘的另一个非常小的操作系统是QNX(我很久以前看过它,整个操作系统,带有GUI界面,网络浏览器,磁盘访问和内置的Web服务器,适合一个软驱)。

从那时起我就没有听过太多关于它的内容,但它是一个实时操作系统,因此设计得非常快。

实际上,有些人访问了一所4年制的大学,对此有了一个大致的想法..

核心操作系统非常简单。以下是成功操作系统的初学者指南: 1.使用调度程序管理CPU,调度程序决定要调度哪个进程(程序的运行实例)。 2.管理内存以确定哪些进程使用它来存储指令(代码)和数据(变量)。 3.管理I / O接口,如磁盘驱动器,警报,键盘,鼠标。 现在,超过3个要求导致需要流程进行通信(而不是战斗!),与外界进行交互,帮助应用程序做他们想做的事情。 要深入了解它是如何做到的,请阅读恐龙书:)

因此,只要您设法处理所有硬件资源,就可以使操作系统尽可能小。 当你启动时,BIOS告诉CPU开始读取bootloader(它加载了OS的第一个函数,它驻留在内存中的固定地址 - 类似于小C程序的main())。然后这会创建函数,进程和线程并启动大爆炸!

首先,读读和阅读有关,什么是操作系统;然后是什么使用/种类/质/目的/需要的不同的操作系统。一些链路如下;新手将享受这些链接:

现代操作系统 -这给想法有关的一般操作系统。

开始操作系统 -这给基础什么是真正需要使操作系统,我们如何才能使它如何能够修改本开放源码操作系统通过自己。

Wiki OS -使想法不同的操作系统的使用在不同的领域,并使用它的(对象特征的操作系统。)

让我们看看在一般的什么操作系统包含 (不sophisticatedLinux或Windows)

OS需要一个CPU和倾倒码在它你需要一个 bootloader.OS必须有目标和满足这些目标必须是定义中的包装,这就是所谓 Kernel 在里面你可以 scheduling timeISR's (取决于客观和操作系统需要使)

操作系统开发很复杂。有一些网站,如osdev或lowlevel.eu(德国)致力于该主题。还有一些书,其他人已经提到过。

我忍不住也参考了“编写自己的操作系统”。 youtube上的视频系列,因为我是制作它的人: - )

请参阅 https://www.youtube.com/playlist?list=PLHh55M_Kq4OApWScZyPl5HhgsTJS9MZ6M

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top