Introduction

来自osdev
Zhang3讨论 | 贡献2021年12月14日 (二) 09:05的版本 (创建页面,内容为“== Welcome == 欢迎来到操作系统开发;伟大的边疆。 在这个领域,并不是所有人都“成功”,许多人甚至没有通过操作系统开发的“Hello World”,但也许你会更进一步,创建下一个Linux?还是窗户?或者你的目标是更低的?甚至CP/M? 无论你的目标是什么,OSDev'ing都是编程的巅峰。 但是,你并不孤单。 事实上,整个网站,包括[http://forum.osdev.org论坛]和…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

Welcome

欢迎来到操作系统开发;伟大的边疆。

在这个领域,并不是所有人都“成功”,许多人甚至没有通过操作系统开发的“Hello World”,但也许你会更进一步,创建下一个Linux?还是窗户?或者你的目标是更低的?甚至CP/M?

无论你的目标是什么,OSDev'ing都是编程的巅峰。 但是,你并不孤单。 事实上,整个网站,包括[1]和这个Wiki都是专门为OSDev'ing开发的。 这不仅关乎出色的编程技能,还关乎社区和发展友谊。 论坛成员或IRQ和流程之间的友谊。

您需要什么才能成功地进行OSDev'ing?您应该阅读Getting Started这篇文章。 如果您打算使用C/C++作为您选择的语言,那么首先需要构建GCC交叉编译器。 如果你喜欢使用其他语言,那么拥有一些类似的工具(例如编译器)是很重要的,或者如果没有这样的工具,通常只有你的努力才能帮助你。 但是,使用你喜欢的语言可以在工作中增加一些动力和刺激。

祝你好运

什么是操作系统?

操作系统是控制计算机系统及其资源运行的软件。 除此之外,所有操作系统都有一个非常重要的共同标准:

能够加载和执行用户程序,为其提供标准化(独立于硬件的)输入/输出接口。

操作系统的主要功能可能包括:

  • 管理内存和其他系统资源。
  • 强制实施安全和访问策略。
  • 调度和多路复用进程和线程。
  • 动态启动和关闭用户程序。
  • 提供基本的用户界面和应用程序程序员界面。

并非所有操作系统都提供所有这些功能。 像MS-DOS这样的单任务系统不会安排进程,而像eCOS这样的嵌入式系统可能没有用户界面,或者可能使用一组静态用户程序。

操作系统为“非”:

  • 计算机硬件。
  • 特定的应用程序,如文字处理器、web浏览器或游戏。
  • 一套实用程序(如GNU工具,在许多Unix派生系统中使用)。
  • 开发环境(尽管有些操作系统,如UCSD Pascal或Smalltalk-80,包含解释器和IDE)。
  • 图形用户界面(尽管许多现代操作系统将GUI作为操作系统的一部分)。

虽然大多数操作系统都使用这些工具进行分发,但它们本身并不是操作系统的必要组成部分。 一些操作系统,如Linux,可能以几种不同的打包形式出现,称为“分发版”,它们可能具有不同的应用程序和实用程序套件,并且可能以不同的方式组织系统的某些方面。 尽管如此,它们都是相同基本操作系统的所有版本,不应被视为不同类型的操作系统。

什么是内核?

操作系统的内核是你永远看不到的。 它基本上可以执行任何其他程序。 它处理由硬件(称为“中断”)和软件(称为“系统调用”)生成的事件,并管理对资源的访问。

例如,硬件事件处理程序(“中断处理程序”)将获取您刚才按下的键的编号,并将其转换为存储在缓冲区中的相应字符,以便某些程序可以检索它。

“系统调用”由用户级程序启动,用于打开文件、启动其他程序等。 每个系统调用处理程序都必须检查传递的参数是否有效,然后执行内部操作以完成请求。

大多数用户程序不直接发出系统调用(例如,asm程序除外),而是使用“标准库”,它完成内核所需的格式化参数和生成系统调用的难看工作。 (例如,C函数“”fopen()“”最终调用实际打开文件的内核函数。)

内核通常定义一些“抽象”,如文件、进程、套接字、目录等,它们对应于它记忆的关于最后一次操作的内部状态,以便程序可以更有效地发出操作会话。

什么是贝壳?

shell是一种特殊的程序,通常集成在操作系统发行版中,为人类提供与计算机的接口。 它对用户的显示方式可能因系统而异(命令行、文件浏览器等),但概念始终相同:

  • 允许用户选择要启动的程序,并可选地为其提供特定于会话的参数。
  • 允许在本地存储上执行简单的操作,如列出目录的内容、在系统中移动和复制文件。

为了完成这些操作,shell可能必须发出许多系统调用,如“打开文件“x”;打开文件“y”,如果不存在则创建它;从x读取内容,写入y,关闭两个文件,将“完成”写入标准输出”。

shell也可用于希望启动其他程序但不希望自己启动的程序(例如,完成“*.mp3”等文件模式,检索程序的确切路径等)。

现代Shell还可以具有各种附加功能,例如:

  • 自动完成:通过按TAB(或任何首选)键,用户正在键入的单词将完成为有效的shell命令、文件、目录或其他内容。按自动完成键多次循环其他完成可能性。
  • 字符插入:用户可以使用箭头键在输入的内容中移动。当在句子的中间键入新的字符时,字符将被“插入”。
  • Shell History:通过使用向上和向下箭头键,用户可以滚动浏览以前的输入。
  • 滚动:当有超过控制台高的行数时,将输出保存在缓冲区中,并允许用户在控制台中上下滚动。
  • 脚本:一些shell具有自定义脚本语言。脚本语言的例子有Bash或DOS批处理。
  • ...

GUI是关于什么的?

图形用户界面是任何具有图形用户界面的操作系统中最可见的部分。 它的作用不仅仅是一个简单的绘图库;它还必须能够:

  • 捕获用户输入事件(键盘、鼠标等)并将其发送到适当的对象。
  • 更新屏幕上显示内容的内部信息,确定屏幕的哪些部分需要重新绘制。
  • 更新“可见”屏幕内容,重新绘制必要的部分。
  • 以一种自然、直观和响应用户的方式进行操作。

桌面环境、窗口管理器、小部件库

当您启动KDE或Windows会话时,这是一个“桌面环境”,即为所有较低级别功能提供功能环境的图形shell。

系统中负责组织各种运行程序的窗口、其大小调整/关闭小工具、窗口边框、滚动条等的部分是“窗口管理器”。

最后,您有一个子系统,用于绘制控制元素、在屏幕上呈现文档等。;这通常称为“小部件库”。然而,小部件库也有替代品,通常以声明性语言的形式出现(例如,Mozilla的XUL、Qt的QML)。

GUI相关论坛线程

为什么要开发操作系统?

人们选择开发操作系统有多种原因。 每个开发人员可能都有自己的原因,但有些(如果不是大多数)开发人员有一些共同的原因:

  • 完全控制机器。 在开发应用程序或其他用户空间程序时,开发人员必须考虑其他人编写的代码:操作系统、库、其他程序等。 这是一种强烈的感觉,在机器上运行的唯一代码是您自己的。
  • 研究。 相当多的操作系统项目是作为家庭作业或研究项目开始的。 虽然在大学预科或一年级环境中作为家庭作业启动操作系统通常被认为是一个坏主意(由于期限较短),但长期项目是相当不错的。 研究项目通常是为了改进现有的操作系统。 然而,初学者的一个常见错误是低估了从头开始编写操作系统所需的时间。
  • 替换当前可用的操作系统。 也许他们没有开发人员想要的特定功能。 也许他们只是一般的吸吮(Linux是臃肿的,Windows是不稳定的,等等)。这可能是为了利润;尽管任何回报都可能需要很长时间。
  • 因为它很有趣。 低级编程是一项有趣而令人兴奋的任务,因为你必须做所有的事情。 这可能看起来更难(是的,别担心),但出于同样的原因,这更有趣。 你知道每件事是如何工作的,它是如何适合你的,以及你的程序最内在的运作方式。

不幸的是,许多操作系统项目是出于错误的原因进行的。有关列表,请参见Beginner Mistakes

See Also

Articles