operating system not 每个程序员应该知道什么样的操作系统概念?




operating system not found解決 (7)

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

在所有的主题中,操作系统是最棘手的,因为创建一个玩具操作系统是一个相当不重要的任务。 然而,与此同时,一个应用程序开发人员(他们可能还没有正式学过CS)至少应该意识到并希望应该实现一些关键的概念来体会一个操作系统如何工作,并成为一个更好的开发人员。

我有几个具体问题:

  • 操作系统的关键概念对自学的程序员来说是非常重要的,所以他们可以成为更好的软件开发人员(尽管正在开发应用程序)。
  • 在字节大小的实用程序中学习这样一个主题甚至是可能的吗? (甚至像编译器构建这样的主题都可以在手中学习,而且复杂程度相当低)

Answer #1

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


Answer #2

我相信这取决于您正在开发的应用程序的类型以及您正在开发的操作系统平台。 例如,如果你正在开发一个网站,你不需要知道太多的操作系统。 在这个例子中,你需要知道更多关于你的网络服务器。 当你在Windows,Linux,Android或某个嵌入式系统上工作时,需要了解不同的东西,或者有时除了API提供的东西外你什么也不知道。 总的来说,开发人员或CS人员总是对以下内容有所了解。

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

操作系统是一个相当有趣的主题,但主要由理论组成,但是这个理论在嵌入式系统上工作时就会起作用。 对于桌面应用程序来说,平均看不出理论适合哪里。


Answer #3

好的,好的程序员应该知道的操作系统概念。 实际上讲。 除非你担心表演。 如果您使用的是跨语言的书写方式。 没有。

如果你关心性能。

  1. 用户/系统转换的成本
  2. 操作系统如何处理锁定/线程/死锁以及如何最好地使用它们。
  3. 虚拟内存/寻呼/抖动及其成本。
  4. 内存分配,操作系统是如何操作的,以及如何利用操作系统分配器(请参阅1)以及何时从操作系统分配和分配操作。
  5. 如前所述,进程创建/和进程间通信。
  6. 缺省情况下,如何将磁盘写入/读取到磁盘进行读写(请参阅为什么数据库使用B树)
  7. 奖金,子操作系统,高速缓存大小和高速缓存行在性能方面可能对您意味着什么。

但通常这将归结为操作系统提供给你什么不是通用的,什么,为什么会花费,什么将花费太多(太多的CPU,太多的磁盘使用,太多的Io,太多的网络ECT)。


Answer #4

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

点。

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

对位。

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

此外还有很多其他重要的要点,比如多线程,多任务,虚拟内存,需求分页,内存管理,处理器管理等,以便更好地掌握操作系统。


Answer #5

简单的说:

线程和进程。

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

其次是进程僵局的基本概念。

之后监控vs信号量与互斥量

内存如何工作和谈判的过程和设备。


Answer #6

每个OS设计者都必须理解Multics背后的概念。 其中最出色的思想是将大量的虚拟内存划分为可直接读写的段,并提供全面的保护,并支持多处理器启动; 用64位指针,我们有足够的位来直接处理地球上的所有事情。 这些想法是从20世纪60年代,但永恒的恕我直言。

这种知识的明显丧失使我们现在被实例化为Unix和Linux,同样来自微软的一个同样糟糕的设计,两者都把世界组织成一个平坦的进程空间和文件。 那些不了解历史的人注定要做些事情。

尽一切可能得到一本关于Multics的有关Organick的书,并阅读它 ,封面。 (Elliott I. Organick,Multics系统:对其结构的考察)。

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


Answer #7

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

要了解其余的零碎,请选择任何系统调用,并确切地知道它做了什么。 这通常意味着学习它操作的内核对象。

当然,细节会有所不同,从操作系统到操作系统...但你的问题的答案也是如此。