每个程序员应该注意哪些操作系统概念?

时间:2012-07-20 12:45:18

标签: operating-system

我正在编写自学成才必须具备的各种能力列表。

在所有科目中,操作系统是最棘手的,因为创建一个玩具操作系统是一项相当重要的任务。然而,与此同时,应用程序开发人员(可能尚未正式学习CS)必须至少了解并希望应该实现一些关键概念以了解操作系统的工作方式,并成为更好的开发人员。

我有几个具体问题:

  • 操作系统的哪些关键概念对于自学成才的程序员来说很重要,因此他们可以成为更好的软件开发人员(尽管正在进行常规应用程序开发)?
  • 在字节大小的实用作品中学习这样的主题是否可以远程学习? (即使像编译器构造这样的主题也可以在相当低的复杂程度下学习)

8 个答案:

答案 0 :(得分:6)

我建议您阅读现代操作系统(ISBN 978-0-13-600663-3)上的 Andrew S. Tanenbaum http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum)一书一切都在那里。

然而,根据图书索引,我们可以确定最低限度的主题:

  • 过程
  • 内存管理
  • 文件系统
  • 输入/输出

开始使用此主题的最简单方法是下载 MINIX

http://www.minix3.org/

并研究代码。此操作系统的旧版本可能更容易理解。

另一个有用的资源是 Mike Saunders 如何编写一个简单的操作系统,它向您展示如何使用x86汇编语言编写和构建您的第一个操作系统:

http://mikeos.sourceforge.net/write-your-own-os.html

答案 1 :(得分:5)

每位操作系统设计师都必须了解Multics背后的概念。其中一个最出色的想法是将大量虚拟内存分成直接可读和可写的段,并提供全面保护,并支持多处理器启动;使用64位指针,我们有足够的位来直接解决地球上的所有问题。这些想法来自20世纪60年代,但永恒的恕我直言。

这种知识的明显缺失让我们“Eunuchs”现在被实例化为Unix然后是Linux,而且微软的设计也同样糟糕,两者都将这个世界组织成一个扁平的处理空间和文件。那些不了解历史的人注定会做一些笨蛋。

你可以做任何事情来获取Organick关于Multics的书的副本,并且阅读它,封面以涵盖。 (Elliott I. Organick,多元系统:对其结构的考察)。

维基百科网站提供了一些很好的信息; Corbato的论文很棒。

答案 2 :(得分:3)

我认为这取决于您正在开发的应用程序类型以及您正在开发的OS平台。例如,如果您正在开发一个网站,则无需了解操作系统。在此示例中,您需要了解有关Web服务器的更多信息。当您在Windows,Linux或Android或某些嵌入式系统上工作时,您需要了解不同的事情,或者有时您需要知道API提供的内容。一般来说,开发人员或CS人员了解以下内容总是好的。

  1. 应用程序,工具链和操作系统的责任在于什么。
  2. 进程间通信和OS系统调用提供的不同IPC机制。
  3. 操作系统是一个非常有趣的主题,但主要由理论构成,但是当您使用嵌入式系统时,这个理论就会起作用。平均而言,对于桌面应用程序,您无法看到所有理论适合的位置。

答案 3 :(得分:2)

好的,好的程序员应该注意的操作系统概念。 实际上说。除非你关心表现。如果您使用跨操作系统语言编写。无。

如果您关心关于表现。

  1. 用户/系统转换的成本
  2. 操作系统如何处理锁定/线程/死锁以及如何最好地使用它们。
  3. 虚拟内存/分页/颠簸及其成本。
  4. 内存分配,操作系统如何操作,以及如何利用它来实现A,使用OS分配器(参见1)以及何时从操作系统分配和子分配。
  5. 如前所述,流程创建/流程间通信。
  6. 操作系统默认如何写入/读取磁盘以最佳地读/写(请参阅数据库使用B树的原因)
  7. Bonus,sub-os,高速缓存大小和缓存行在性能方面对您意味着什么。

但一般情况下,它可以归结为操作系统为您提供的非通用内容,以及它的成本和原因,以及成本太高(cpu太多,磁盘使用量太多,io太多,太多的网络等。)

答案 4 :(得分:2)

这取决于开发人员的需求,如: -

点。

Web浏览器和电子邮件工具等应用程序 在现代台式计算机中扮演越来越重要的角色 系统。为了履行这一职责,他们应该成为其中的一部分 操作系统。通过这样做,他们可以提供更好的性能 并与系统的其他部分更好地集成。另外,这些 重要的应用程序可以具有与操作相同的外观 系统软件。

Counterpoint。

操作系统的基本作用是管理 系统资源,如CPU,内存,I / O设备等。此外, 它的作用是运行Web浏览器等软件应用程序 邮件申请。通过将此类应用程序合并到操作中 系统,我们为操作系统增加了额外的功能。 这种负担可能导致操作系统执行不太令人满意 管理系统资源的工作。另外,我们增加 操作系统的大小从而增加了可能性 系统崩溃和安全违规。

enter image description here

还有许多其他重要的观点需要了解才能更好地掌握多线程,多任务处理,虚拟内存,需求寻呼,内存管理,处理器管理等操作系统。

答案 5 :(得分:2)

我会从What Every Programmer Should Know About Memory开始。 (不完全是OS,但所有这些都是有用的信息。第4章涉及虚拟内存,这是首先想到的阅读你的问题。)

要了解剩余的零碎信息,请选择任何系统调用并准确了解其功能。这通常意味着要了解它操作的内核对象。

当然,细节会因操作系统而异;但问题的答案也是如此。

答案 6 :(得分:1)

简单地说:

线程和进程。

内核空间/线程与用户空间/线程(可能是某些内核级编程)

其次是进程死锁的基本概念。

此后监视器与信号量对比互斥量

内存如何工作并与流程和设备进行对话。

答案 7 :(得分:0)

每个自学成才的程序员和计算机科学家都应该了解OSI模型,并且了解它。它有助于确定问题所在,以及在出现问题时联系谁。范围在此处定义,可以在此处过滤许多问题。 这是因为在操作系统中只有太多的东西才能简单地学习它。作为Web开发人员,我通常在应用程序级别工作,当问题超出此范围时,我知道何时需要帮助。此外,许多人根本不关心他们想要尽快创建事物的某些组件。 OSI模型是一个人可以找到他们的计算机热点的地方。 http://en.wikipedia.org/wiki/OSI_model