18

我正在编制自学程序员必须具备的各种能力列表。

在所有科目中,操作系统是最棘手的一门,因为即使是创建一个玩具操作系统也是一项相当艰巨的任务。但是,与此同时,应用程序开发人员(可能没有正式学习过 CS)必须至少了解并希望已经实现了一些关键概念,以了解操作系统的工作原理,并成为更好的开发人员。

我有几个具体问题:

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

8 回答 8

6

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

但是,从书籍索引中,我们可以确定最少的关键主题:

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

开始玩这个主题的最简单方法是下载MINIX

http://www.minix3.org/

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

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

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

于 2012-11-03T10:30:38.103 回答
5

每个操作系统设计者都必须了解Multics背后的概念。最出色的想法之一是将巨大的虚拟内存划分为直接可读和可写的段,并提供全面的保护,并支持多处理器启动。使用 64 位指针,我们有足够的位直接寻址地球上的所有内容。这些想法来自 1960 年代但永恒的恕我直言。

这些知识的明显丧失使我们成为“太监”,现在被实例化为 Unix,然后是 Linux,以及来自 Microsoft 的同样糟糕的设计,两者都将世界组织为一个平面的进程空间和文件。不了解历史的人注定会做一些更愚蠢的事情。

尽你所能获得 Organick 关于 Multics 的书的副本,并从头到尾阅读它。(Elliott I. Organick,Multics 系统:对其结构的检查)。

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

于 2012-11-03T17:04:10.460 回答
3

我相信这取决于您正在开发的应用程序类型和您正在开发的操作系统平台。例如,如果您正在开发一个网站,您不需要对操作系统了解太多。在此示例中,您需要了解有关您的网络服务器的更多信息。当您在 Windows、Linux 或 Android 或某些嵌入式系统上工作时,您需要了解不同的事情,或者有时您需要了解 API 提供的内容之外的任何内容。一般来说,开发人员或 CS 人员了解追随者总是有好处的。

  1. 什么是应用程序、工具链和操作系统的责任。
  2. OS系统调用提供的进程间通信和不同的IPC机制。

操作系统是一个非常有趣的主题,但主要由理论组成,但是当您在嵌入式系统上工作时,这个理论就会发挥作用。平均而言,对于桌面应用程序,您看不到所有这些理论都适用于何处。

于 2012-07-20T13:04:13.297 回答
2

Well that depends on the need of the developer like:-

Point.

Applications such as web browsers and email tools are performing an increasingly important role inmodern desktop computer systems. To fulfill this role, they should be incorporated as part of the operating system. By doing so, they can provide better performance and better integration with the rest of the system. In addition, these important applications can have the same look-and-feel as the operating system software.

Counterpoint.

The fundamental role of the operating system is to manage system resources such as the CPU, memory, I/O devices, etc. In addition, it’s role is to run software applications such as web browsers and email applications. By incorporating such applications into the operating system, we burden the operating system with additional functionality. Such a burdenmay result in the operating system performing a less-thansatisfactory job at managing system resources. In addition, we increase the size of the operating system thereby increasing the likelihood of system crashes and security violations.

enter image description here

Also there are many other important points which one must understand to get a better grip of Operating System like Multithreading, Multitasking, Virtual Memory, Demand Paging, Memory Management, Processor Management, and more.

于 2012-11-02T19:20:09.063 回答
2

我将从每个程序员应该知道的关于内存的知识开始。(不完全是操作系统,但所有这些都是有用的信息。第 4 章介绍了虚拟内存,这是阅读您的问题时首先想到的。)

要零碎学习其余部分,请选择任何系统调用并准确了解它的作用。这通常意味着了解它操作的内核对象。

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

于 2012-11-03T16:51:10.643 回答
2

好的,好的程序员应该了解的操作系统概念。实际上。除非你关心性能。如果您使用跨操作系统语言编写。没有任何。

如果你关心性能。

  1. 用户/系统转换的成本
  2. 操作系统如何处理锁定/线程/死锁以及如何最好地使用它们。
  3. 虚拟内存/分页/抖动及其成本。
  4. 内存分配,操作系统如何做到这一点,以及您应该如何利用它来何时 A、使用操作系统分配器(参见 1)以及何时从 os 分配和子分配。
  5. 如前所述,进程创建/进程间通信。
  6. 默认情况下,操作系统如何写入/读取磁盘以优化读取/写入(查看为什么数据库使用 B 树)
  7. 奖金、子操作系统、缓存大小和缓存行在性能方面对您意味着什么。

但通常它会归结为操作系统为您提供的不是通用的,以及它的成本和原因,以及成本过高(过多的 cpu、过多的磁盘使用、过多的 io、过多的网络)等)。

于 2012-11-01T17:34:28.603 回答
1

简单的说:

线程和进程。

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

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

此后监视器、信号量、互斥量

内存如何工作以及如何与进程和设备对话。

于 2012-11-03T18:22:48.313 回答
0

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

于 2012-11-03T15:24:52.567 回答