wiki.osdev.org 系列之(一) - 简介

threeoslogos.png

简介

欢迎

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

并不是所有的“成功”都在这个领域,毕竟有很多没有通过操作系统就开发出的“Hello World”,但也许你会更进一步,创造下一个Linux?还是 Windows ?或者你的目标更低一点 - MenuetOS?甚至CP/M?

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

在 OSDev'ing 中取得成功需要什么?您应该阅读入门文章。如果您打算使用 C/C++ 作为您选择的语言,您需要先构建一个 GCC 交叉编译器。如果您更喜欢使用其他语言,那么拥有一些类似的工具(例如编译器)很重要,如果没有这样的工具,那么只有你的努力才可以帮助到你。但是,在你的工作中使用你喜欢的语言可以为你增加一些动力和兴奋。

祝你好运!

什么是操作系统?

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

Capable of loading and executing user programs providing standardized (hardware-independent) input / output interface for them.
能够加载和执行用户程序,为他们提供标准化的(硬件独立的)输入/输出接口。

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

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

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

操作系统不是:

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

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

什么是内核?

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

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

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

大多数用户程序不直接发出系统调用(asm 程序除外),而是使用标准库来完成内核要求的参数格式化和生成系统调用的丑陋工作。 (例如,C 函数 fopen() 最终会调用一个实际打开文件的内核函数。)

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

什么是 shell?

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

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

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

shell 也可能被想要启动其他程序但不想自己执行此操作的程序使用(例如,完成像“*.mp3”这样的文件模式匹配,检索程序的确切路径等)。

现代 shell 还可以具有各种额外的功能,例如:

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

GUI 是关于什么的?

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

  • 捕获用户输入事件(键盘、鼠标等)并将它们分派给适当的对象。
  • 更新什么将在屏幕上显示的内部信息,确定屏幕的哪些部分需要重绘。
  • 更新可见的屏幕内容,重新绘制必要的部分。
  • 以一种对用户感觉自然、直观和响应迅速的方式进行操作。

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

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

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

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

GUI 相关的论坛主题

为什么要开发操作系统?

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

不幸的是,许多操作系统项目都是出于错误的原因。参见初学者错误列表


标题:wiki.osdev.org 系列之(一) - 简介
作者:糖醋鱼
地址:https://expoli.tech/articles/2022/06/09/1654767003313.html

    评论
    0 评论
avatar

取消