如何对自己的操作系统(OS)进行编程

披露: 您的支持有助于保持网站的正常运行!我们会为此页面上推荐的某些服务收取推荐费.


确实没有比操作系统(OS)开发更具挑战性的开发领域。这是“编程的最高峰”。

很少有程序员尝试构建OS,而许多尝试这样做的人却从来没有产生过功能正常的系统。.

但是,如果您一路走到终点,并生产出功能良好的操作系统,那么您将加入一个由顶级程序员组成的精英团队.

什么是操作系统?

最早的计算机没有操作系统.

在这些早期系统上运行的每个程序都必须包含运行计算机,与连接的硬件进行通信以及执行程序实际上打算执行的计算所需的所有代码。这种情况意味着即使简单的程序也很复杂.

随着计算机系统的多样化以及变得越来越复杂和功能强大,编写同时用作操作系统和有用应用程序的程序变得越来越不切实际。.

作为响应,大型机的个体计算机所有者开始开发系统软件,从而使编写和运行程序变得更加容易,并且诞生了操作系统。.

操作系统(OS)是管理计算机硬件和系统资源并提供应用程序需要操作的工具的软件。操作系统的诞生意味着不再需要编写程序来控制整个计算机操作范围.

取而代之的是,计算机应用程序可以编写为由操作系统运行,而操作系统则担心计算机资源和所连接的外围设备(例如打印机和打孔纸读卡器).

操作系统简史

第一个操作系统由通用汽车公司于1956年创建,用于运行单个IBM大型机。其他IBM大型机所有者也效仿并创建了自己的操作系统.

可以想象,最早的操作系统在一台计算机与另一台计算机之间千差万别,尽管它们确实使编写程序变得更容易,但它们不允许程序在不完全重写的情况下在多个主机上使用。.

在1960年代,IBM是第一家承担操作系统开发任务的计算机制造商,并开始随其计算机一起分发操作系统。.

但是,在此期间,IBM并不是唯一一家创建操作系统的供应商。 Control Data Corporation,Computer Sciences Corporation,Burroughs Corporation,GE,Digital Equipment Corporation和Xerox也在1960年代都发布了大型机操作系统。.

在1960年代后期,开发了Unix操作系统的第一个版本。 Unix是用C语言编写的,并且在最早的几年中可以免费使用,它很容易移植到新系统上并迅速获得了广泛的认可。.

许多现代操作系统,包括Apple OS X和所有Linux版本,都可以追溯到Unix。.

Microsoft Windows是应IBM要求运行其个人计算机范围的操作系统的要求而开发的.

微软制造的第一个操作系统不是Windows,而是MS-DOS,它于1981年通过从Seattle Computer Products购买了86-DOS操作系统并进行修改以满足IBM的要求而构建。.

Windows的名称最初是在1985年创建图形用户界面并与MS-DOS配对时使用的.

Apple OS X,Microsoft Windows和各种形式的Linux(包括Android)现在占领了绝大多数现代操作系统市场.

操作系统的组成部分

操作系统由两个主要部分组成:

  • 内核;
  • 系统程序.

核心 是操作系统的心脏。它是计算机启动时加载的第一个程序,它管理计算机资源,并处理来自系统程序和应用程序的请求.

系统程序 在内核之上运行。它们不是用来执行有用的工作的,它们是将内核连接到用户应用程序和外围设备所必需的程序。设备驱动程序,文件系统,网络程序以及磁盘碎片整理程序之类的系统实用程序都是系统程序的示例.

应用程序 不是操作系统的一部分,而是用于执行有用工作的程序。文字处理应用程序,浏览器和媒体播放器是常见的应用程序类型。应用程序由内核管理和启用,并使用系统程序访问计算机外围设备和硬件.

您需要知道的

在尝试进行操作系统开发之前,需要了解的事情清单很长。在进入操作系统开发之前,您需要掌握的三项最重要的事情是:

  • 基本的计算机科学知识;
  • 计算机程序设计理论和最佳实践;
  • 低级和高级编程语言.

学习计算机科学

操作系统开发与网络开发不同。这不是您可以随意学习的东西。在继续学习其他主题之前,您需要为计算机科学打下坚实的基础.

以下是一些入门资源:

Coursera:计算机科学101 如果您是计算机编程和计算机科学领域的新手,那么这是您应该首先学习的课程.

如果您掌握一些知识和经验,请跳过此课程,转而使用edX选项的Udacity。但是,如果您是该领域的新手,那么本课程将采用无经验的方法介绍计算机科学和编程主题.

Udacity:计算机科学入门 采用网络开发方法教授计算机科学。虽然这并不直接适用于构建操作系统的前景,但这是一门扎实的课程,可提供有用的信息并提供对计算机编程基础知识的很好概述.

edX:计算机科学概论 是此列表中最完整,最深入的计算机科学课程。这门免费的,自定进度的课程是由哈佛大学设计的,与课程内容相同,与哈佛大学校园中提供的名称相同.

在这门影响深远的课程中,您将学习算法,数据结构,资源管理,软件工程,并了解C,PHP和JavaScript等编程语言。.

学习计算机编程

拥有扎实的计算机科学知识和有限的编程语言经验,下一步是学习如何处理大型编程项目.

Udacity:软件开发过程 如果以前从未进行过大规模的,富有挑战性的编程项目,那么每个人都应该参加这门非常好的课程。在本课程中,您将学习工作流程和管理工具以及Git等技术,以及如何设置集成开发环境.

学习编程语言

为了开发操作系统,您将需要掌握至少两种编程语言:

  • 低级汇编语言;
  • 一种高级编程语言.

汇编语言用于直接与CPU通信。每种类型的CPU都讲一种机器语言,每种类型的CPU只有一种相应的汇编语言。最常见的计算机体系结构是x86,它最初是由Intel开发的,现在被包括AMD,VIA和许多其他许多计算机芯片制造商所使用。在本指南中,我们将指导您学习x86汇编语言的方向.

高级编程语言可与多种计算机体系结构一起使用。 C是最常用的编程语言,推荐用于编写操作系统。因此,我们将建议学习并使用C进行OS开发。但是,也可以使用其他语言,例如C ++和Python.

x86汇编语言

x86组装指南 是开始学习汇编语言的好地方。这份简短的文档简要概述了x86汇编语言,并为您将要使用的更高级的资源奠定了基础。.

从头开始编程 乔纳森·巴特利特(Jonathan Bartlett)撰写的汇编语言领域的一本经典书籍。本书使用汇编语言作为学习计算机科学和编程的基础。也可以从Internet存档中获得此资源。.

汇编语言的艺术 兰迪·海德(Randy Hyde)撰写的汇编语言教育世界中的另一个标志性文本。该文字最初是为海德在Cal Poly和UC Riverside的编程课程专门编写的,在1990年代中期以HTML电子书的形式发布,并被认为是该领域的定义性著作。耶鲁FLINT集团也将这些文本作为一系列PDF文件托管。.

如果要使用传统的教科书来学习x86汇编语言,则最常用和强烈推荐的两种文本是:

  • 汇编语言分步指南:Jeff Duntemann的Linux编程。
  • Daniel Kusswurm撰写的现代X86汇编语言编程.

C

您可以学习许多高级编程语言,还可以使用许多不同的资源来学习它们。我们的建议以及OS开发社区最普遍赞同的建议是学习C,并且我们发现了许多出色的资源,它们将使您成为一名合格的C程序员。.

完成此操作,即可快速了解C编程语言 C教程. 该资源不会使您成为专家,但可以使您对语言有一个很好的基本了解,并为您准备应对更具挑战性的主题和资源.

艰苦学习C 是一本包含许多练习的免费HTML电子书。本文将带您逐步了解C编程语言,如果您投入工作,花时间并完成所有练习,那么您到成为合格的C程序员的道路将很好完成本教程.

如果您更喜欢传统教科书,那么这两本教科书是掌握C编程语言时最受欢迎的教科书。.

  • Kernighan和Ritchie的C编程语言;
  • Perry和Miller撰写的C编程绝对入门指南.

操作系统开发教程

一旦掌握了计算机科学和编程的基本概念,并掌握了汇编语言和C语言,下一步便是完成一两个OS开发教程,这些教程将逐步完成从头开发简单OS的整个过程。我们发现了三种出色的资源.

Linux从零开始 将引导您完成构建完整的Linux操作系统的过程。完全来说,本教程不会产生完整的操作系统,但是它将为您提供扎实的代码基础,以构建完整的操作系统。解决高级教程,例如Scratch提供的Beyond Linux,Scratch提供的Automated Linux,Scratch提供的Cross Linux或Scratch提供的Hardened Linux,可将基本操作系统构建为有用的软件.

关于OS开发的小书 由Erik Helin和Adam Renberg共同开发,是高级计算机科学课程的一部分,作者在斯德哥尔摩皇家技术学院学习时完成了该课程。本课程从设置编程环境开始,逐步完成开发x86操作系统的完整过程,最终完成多任务编程,并探讨诸如管理系统内存和开发文件系统之类的主题。.

操作系统开发系列 来自Broken Thorn Entertainment的系列教程共有25个系列,将引导您逐步完成从头开始创建操作系统的过程。初学者要当心:本系列假定您已经了解IDE的知识,并且是一名熟练的C和汇编语言程序员.

您可以使用许多文本来了解OS开发的学科。最常推荐的三个是:

  • Tanenbaum和Bos的现代操作系统;
  • Maurice Bach设计的UNIX操作系统;
  • Silberschatz,Galvin和Gagne的操作系统概念.

操作系统开发社区

当您踏上成为OS开发人员的征途时,您可以在一些地方找到其他OS开发人员以学习并感到同情:

  • OSDev.org是一个Wiki,包含有关OS开发的大量信息,也是一个论坛,您可以在该论坛上聚会并获得其他志同道合的程序员的反馈.
  • reddit上的OS Development Channel是一个很棒的社区,您可以在其中学习OS开发,并在OS开发任务变得繁重时享受片刻的时刻.
  • StackExchange的计算机科学,程序员和StackOverflow是您遇到其他似乎无法自行解决的问题时可以向其他程序员提出技术问题的地方.

摘要

学习OS开发是您可以执行的最具挑战性的编程任务之一。但是,如果您成功构建可运行的OS,将使您成为一名称职的程序员,并且深刻理解处理器,硬件和计算机程序如何协同工作,以创造世界上其他一切正常运行的计算机。.

下一步 –寻找虚拟主机?请参阅我们的网络托管指南 & 我们推荐的主机.

另请参阅我们的其他编程语言指南.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map