首页
社区
课程
招聘
[翻译] OSDev Wiki——操作系统开发入门基础(一)
2018-12-31 14:28 8515

[翻译] OSDev Wiki——操作系统开发入门基础(一)

2018-12-31 14:28
8515

OSDev Wiki——操作系统开发入门基础(一)


 

本文翻译自 OSDev.org


目录


Welcome

欢迎加入到操作系统开发的行列,勇敢的开拓者们!

 

并不是所有人都会在这个领域取得“成功”,不少人甚至连操作系统开发的入门课都未通过。不过,这或许并不会妨碍你更进一步,开创出下一个 LinuxWindows ?亦或是稍低一点的目标,MenuetOSCP/M
无论你的目标为何,操作系统开发都是程序开发的巅峰,这是毋庸置疑的。不过,你并不孤独。我们整个网站,包括网站论坛和该 Wiki,都是致力于操作系统开发的。在这儿不仅仅是交流编程技巧,更是交流感情和友谊的地方。相信在学习过程中,你一定能与网络另一端的建立良好的友谊。

 

在操作系统开发中,想要取得“成功”,你该怎么做呢?
首先,你应该阅读一下 Getting Started 这篇文章。如果你打算使用 C/C++ 作为你的开发语言,那么你需要构建 GCC Cross-Compiler。而如果你偏爱其他语言,那么你同样得准备类似的工具(例如,编译器)。这一切都得你自己付出精力。但是,用你喜欢的语言可能给你的工作带来不少激励和兴奋。

 

祝你好运!

操作系统是什么?

操作系统是一套软件,控制对计算机系统的操作和资源。其主要功能包括:

  • 管理内存及其他系统资源。
  • 实施安全管控和访问控制策略。
  • 调度和多进程与多线程。
  • 启动及关闭用户程序,同时为这些用户程序提供基本的系统服务。
  • 提供基本的用户接口和应用程序编程接口。

并不是所有的操作系统都提供所有这些功能。像 MS-DOS 这样的单用户系统并没有进程调度功能,而像 eCOS 这样的嵌入式系统则可能没有用户界面。
然而,操作系统不是:

  • 计算机硬件。
  • 一个具体的应用程序如,字处理程序,Web 浏览器或游戏。
  • 一套工具(如在许多类 Unix 系统中广泛使用的 GUN tools)。
  • 一套开发环境(尽管有些系统,比如 UCSD PascalSmalltalk-80自带有解释器和 IDE )。
  • 一套图形用户界面(不少现代操作系统都集成有 GUI 界面)。

尽管大多数的操作系统在分发的时候都自带有这样或是那样的工具,可这些工具本身并非是 OS 的必需组件。一些操作系统如 Linux,通常被封装成不同的封包形式发布, 不同的封包往往封装有不同的工具套件和应用程序,在软件组织方式也存在差异,这些不同的封装的系统,一般称为发行版(distributions)。尽管如此,这些不同的发行版只是基于基本 OS 封装有各自的工具套件而已,不应该被认为是不同类型的操作系统。

内核(kernel)是什么?

操作系统内核是操作系统中用户永远无法看见的部分。内核的基本功能是保证其他程序能正常执行。它负责处理硬件产生的事件(称为中断)、软件产生的事件(系统调用)以及管理资源的访问。
系统中断硬件事件处理程序(中断处理程序),举例来说,就是记录你按下的按键,并将它转换成相应的字符存储在缓冲区中,以便某些程序索取这些数据。
系统调用则是由用户级程序发起的,比如说打开文件,启动其他程序的过程等等,都是在调用系统调用。每一个系统调用处理程序都会检查用户程序传递的参数是否合法,然后才进入系统内部,响应用户程序请求。

 

大多数用户程序(除了汇编程序)并不直接调用系统调用,而是使用标准库,这些库通常处理参数格式化和生成系统调用的任务(例如,C 函数 fopen() 最终是调用内核函数打开文件)。

 

另外,内核通常定义有一些抽象概念,比如文件,进程,套接字,目录等等。这些抽象概念用于记录了上个会话的系统内部状态,所以程序可以更加有效地处理新的操作会话。

shell 是什么?

shell是一个提供人机交互接口的特殊程序,通常集成到系统发行版中。从用户角度来看,shell 往往因系统而异,在不同的系统上体现形式也不一样(如:cmd 形式的命令行,文件资源管理器等等);不过,其主要功能不外乎以下几点:

  • 允许用户选择一个程序启动,同时可以选择性地传递某些具体会话参数。
  • 允许对本地存储器进行一些简单操作,像列出目录下的内容,在系统中移动和拷贝文件。

为了完成这些操作,shell 需要调用若干的系统调用,比如,“打开文件 x ;打开文件 y,如果不存在就新建一个;读取 X 的内容,写入 Y 中,然后关闭 XY这两个文件,给标准输出返回“操作完成”信号 ”。
此外,shell 还可以被应用程序用来调用其他程序,靠其他程序来完成自身无法完成的工作(例如,生成“*.mp3”,取得某个程序的确切路径等等)。
现代 shell 还具有不少其他额外的功能特性,举例如下:

  • 自动补全:按 TAB 键(或其他补全功能键),用户输入的字符会自动补全为有效的 shell 命令,文件名,目录或其他内容。连续多次敲击自动补全键,可列出当前所有可能的命令选项。
  • 字符插入:用户可以通过方向键在 shell 中移动光标位置。当光标位于一行命令中间时,此时便可将新的命令“插入”其中。
  • shell 命令历史:通过 方向键 键和 键,用户可以翻看之前输入的命令行。
  • 屏幕滚动:当输出内容超过控制台的行高时, shell 可以把输出存入缓冲区中,以便用户上下翻页。
  • 脚本支持:一些 shell 具有自定义脚本语言,如 bashDOS 的批处理。
  • ......

GUI 是什么?

Graphical User Interface (GUI,图形用户界面),是操作系统最具可视化的部分。其扮演的角色已然超出了一个简单图形绘制库的范围。GUI 的主要功能包括:

  • 捕获用户输入事件(键盘,鼠标等等)并将这些事件派遣给恰当的处理对象。
  • 更新内部关于哪些内容需要显示,显示在哪个位置,屏幕哪个部分需要刷新显示的信息。
  • 更新屏幕的当前显示内容,刷新绘制必要的部分。
  • 以自然、直观的方式,响应用户。

**桌面环境,窗口管理器,组件库
当你在 KDEWindows 打开新的会话,那么这便是一个桌面环境。
系统中负责组织众多运行程序窗口,窗口缩放/关闭,窗口边界,滚动条等等的,是窗口管理器。
最后,还需要有子系统负责绘制这些窗口元素,渲染屏幕显示的文档等等,这便是我们常说的 组件库。不过,一些声明式语言(例如,Mozilla 的 XUL ,Qt 的 QML)也可实现类似的功能。

 

论坛 GUI 相关的帖子

为什么要开发一个操作系统?

人们选择开发一个 OS 的原因各异,但是,对于绝大多数开发者来说,可能有这几条是共同的:

  • 获得对机器完全地控制。
    当在开发应用程序或其他用户级程序时,开发者需要考虑其他人写的代码,如操作系统,各种库,其他程序等等。写操作系统能让人感到对机器的强有力控制。
  • 研究。
    有相当一部分操作系统项目是家庭作业和研究项目。想要在大学一年级完成一个操作系统的作业,实在不是一个很好的想法,毕竟时间太紧张。而研究项目往往是为了改进、提高现有的操作系统。新手们经常犯的错误,往往是严重低估了从头写一个系统所需的时间。
  • 为了替代现在使用的系统。
    或许是因为现有的系统无法满足开发者的某些特定需求,或许是因为这些系统令人生厌(Linux 太过庞大,Windows 不够稳定)。这可能是为了盈利目的,尽管这个周期将会十分漫长。
  • 因为开发操作系统是一个有趣的过程。
    低级(语言)编程开发是一个充满趣味和刺激的任务,所有的一切都需要你自己处理。这似乎很困难,然而,正是因此而更加有趣。你可以知道所有这些是如何运作的,所有你程序内部的工作。

很可惜的是,不少操作系统项目都是不合理的条件下启动的。参见 Beginner Mistakes 列表。

相关条目

文章


 

原文:https://wiki.osdev.org/Introduction
翻译:看雪翻译小组 StrokMitream
翻译&校对:看雪翻译小组 一壶葱茜


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2019-1-2 12:44 被StrokMitream编辑 ,原因: 看雪翻译小组 [一壶葱茜] 校对
收藏
点赞3
打赏
分享
最新回复 (3)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
junkboy 2018-12-31 15:26
2
0

辛苦了

 

锚点测试

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

test

最后于 2018-12-31 15:29 被junkboy编辑 ,原因:
雪    币: 12105
活跃值: (15519)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2019-1-2 15:40
3
0
请问楼主,这样的外文文章在哪里能找到??我是英语专业的,且对信息安全感兴趣,我想利用闲暇时间翻译一些外国的技术文献,一来可以提高我的英语水平,二来可以给看雪论坛做些贡献(方便新手学习^_^),我需要楼主提供一些这些外文的技术文献的地址,在哪里可以找到这些文献,也欢迎大家来提供一些书籍文章链接,谢谢(插一句,用坚果VPN应该就可以浏览外网了吧??)
雪    币: 2730
活跃值: (781)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
StrokMitream 3 2019-1-2 20:06
4
0
@ pureGavin 很简单的办法,这些译文都会附原文地址,跟这个链接过去,不就是这些外文文章的来源吗?目前,绝大部分技术性外文网站还是可以直接访问的啊。
游客
登录 | 注册 方可回帖
返回