Questions tagged «operating-systems»

操作系统(OS)是基本软件,其规则是对软件和可用硬件的中间软件需求,管理输入/输出,内存分配/重新分配,文件系统以及设备应执行的其他基本任务。

30
如何创建自己的编程语言和用于它的编译器[关闭]
我对编程很了解,并且遇到过各种语言,包括BASIC,FORTRAN,COBOL,LISP,LOGO,Java,C ++,C,MATLAB,Mathematica,Python,Ruby,Perl,JavaScript,Assembly等。我不明白人们是如何创建编程语言并为其设计编译器的。我也无法理解人们如何创建Windows,Mac,UNIX,DOS等操作系统。对我来说,另一件事是神秘的,人们如何创建像OpenGL,Op​​enCL,OpenCV,Cocoa,MFC等之类的库。我无法弄清的最后一件事是科学家如何设计微处理器的汇编语言和汇编器。我真的很想学习所有这些知识,而且我今年15岁。我一直想成为计算机科学家,例如Babbage,Turing,Shannon或Dennis Ritchie。 我已经读过Aho的Compiler Design和Tanenbaum的OS概念书,他们都只在高层次上讨论概念和代码。它们不涉及细节和细微差别,也不涉及如何设计编译器或操作系统。我需要一种具体的理解,以便我自己创建一个,而不仅仅是对线程,信号量,进程或解析的理解。我问我兄弟这一切。他是麻省理工学院EECS的SB学生,对如何在现实世界中实际创建所有这些东西一无所知。他所知道的只是对编译器设计和OS概念的理解,就像你们提到的(即线程,同步,并发,内存管理,词法分析,中间代码生成等)一样。

15
为什么Tanenbaum在Tanenbaum-Torvalds辩论中错了?
最近,在我的OS课堂上,我被分配阅读Tanenbaum-Torvalds辩论的内容。在辩论中,Tanenbaum做出了一些预测: 微内核是未来 x86将消失,RISC架构将主导市场 (从那时起的5年内)每个人都将运行一个免费的GNU OS 辩论发生时我只有一岁,所以我缺乏历史直觉。为什么没有提出这些预测?在我看来,从Tanenbaum的角度来看,它们是对未来的相当合理的预测。发生了什么事以至于他们没有通过?

12
操作系统如何运行……而无需运行操作系统?
我现在真的很好奇。我是Python程序员,这个问题令我感到困惑:您编写了一个OS。您如何运行它?它必须以某种方式运行,并且这样可以在另一个OS中运行吗? 没有OS的情况下如何运行应用程序?如果没有要运行的操作系统,如何告诉计算机运行C,并在屏幕上执行这些命令? 它与UNIX内核有关吗?如果是这样,什么是Unix内核,或者一般来说是一个内核? 我敢肯定,操作系统比这更复杂,但是它如何工作?

4
飞机使用什么操作系统,以及使用什么编程语言开发?[关闭]
我想知道是否有人知道商用飞机使用什么操作系统(例如波音或空中客车公司)。 另外,什么是(首选)实时编程语言?我听说波音公司使用了Ada,所以我的问题是-为什么要使用Ada?波音人选择该语言的标准是什么?(我猜想Java并不是一个不错的选择,如果恰好在垃圾收集器启动时唤醒它)。


11
为什么软件OS是特定的?
我正在尝试确定为什么使用某些操作系统的编程语言生产的软件只能在它们上使用的技术细节。 我的理解是,二进制文件特定于某些处理器,这是因为它们了解特定于处理器的机器语言以及不同处理器之间的指令集不同。但是,操作系统的特异性来自何处?我曾经假设它是操作系统提供的API,但后来我在一本书中看到了以下图表: 操作系统-内部和设计原则第7版-W.Sallings(Pearson,2012年) 如您所见,API未表示为操作系统的一部分。 例如,如果我使用以下代码在C中构建一个简单程序: #include<stdio.h> main() { printf("Hello World"); } 编译此程序时,编译器是否在进行任何特定于OS的操作?

10
为什么没有基于高级语言的操作系统?低级语言是否更有效?
在不冒昧的情况下,我想请您考虑一下这种可能性。如今,大多数操作系统都基于相当低级的语言(主要是C / C ++),即使是新的操作系统(例如Android)也使用JNI,底层实现也使用C语言 实际上,(这是一个个人观察),许多用C编写的程序的运行速度比其高级程序要快得多(例如:传输(Ubuntu上的bittorrent客户端)比Vuze(Java)或Deluge(Python)快很多。 )。即使PyPy是一个例外,即使python编译器也是用C编写的。 那么,这是否有特定原因?为什么我们所有具有出色的“ OOP”概念的所谓“高级语言”都不能用于构建可靠的OS? 所以我基本上有两个问题。 为什么用低级语言编写的应用程序比HLL同行更有效?低级语言是否会由于低级语言和更容易转换为机器代码的简单原因而表现更好? 为什么我们没有完全基于高级语言的成熟操作系统?

8
为什么要(不)细分?
我正在研究操作系统和x86体系结构,当我阅读有关分段和分页的内容时,我自然地很好奇现代OS如何处理内存管理。从我的发现中,Linux和大多数其他操作系统从本质上回避了分段,而支持分页。我发现这样做的一些原因是简单性和可移植性。 分段(x86或其他方式)有什么实际用途,我们是否会看到使用它的健壮操作系统,或者它们将继续支持基于分页的系统。 现在,我知道这是一个加载的问题,但是我很好奇如何使用新开发的操作系统来处理分段。支持分页是否有意义,以至于没有人会考虑采用一种“分段”的方法?如果是这样,为什么? 当我说“避免”分割时,我的意思是Linux仅在需要时使用它。用户和内核代码/数据段只有4个段。在阅读英特尔文档时,我感觉到细分的设计考虑了更强大的解决方案。然后我又在很多场合被告知x86可能过于复杂。 在链接到Linux Torvald最初针对Linux的“公告”后,我发现了这个有趣的轶事。他稍后在几篇文章中说: 简而言之,我想说移植是不可能的。它主要是用C语言编写的,但是大多数人不会称呼我写C语言。它使用了我能找到的386的所有可能的功能,因为它也是一个向我传授386的项目。如上所述,它使用了MMU ,用于分页(尚未到磁盘)和分段。正是这种细分使其真正依赖386(每个任务都有一个64Mb的代码和数据段-4Gb中最多64个任务。任何需要超过64Mb /任务的人-坚韧的cookie)。 我想我自己对x86的试验使我提出了这个问题。Linus没有StackOverflow,因此他只是实现了它来进行尝试。

5
为什么Windows / Linux不使用关系数据库(RDBMS)?
Windows / Linux为什么不使用关系数据库(RDBMS)? 我知道他们使用文件系统来存储所有数据,但是您不认为像在网站/ Web应用程序中那样使用数据库会更有效吗? 请详细说明如何通过数据库使用文件系统进行存储。 这与“ 何时应优先使用数据库而不是从文本文件中解析数据”相重复?我仅在操作系统上下文方面进行讨论,而这个问题是笼统的。

3
内核模式Web服务器:明智的优化还是安全的噩梦?
我正在阅读一个黑客新闻主题,其中一个用户发布了2011年的链接,解释说IIS比大多数其他(* nix)Web服务器要快得多。另一位用户回答,解释说IIS通过拥有名为HTTP.sys的内核模块而获得了这一优势。据我所知,2015年大多数其他流行的Web服务器都没有这样做。 我永远都不想写一个内核模式的Web服务器,因为我永远不相信自己让它摆脱安全漏洞(在较低防护等级下运行不会那么严重)。 从软件工程师(相对于Web服务器的客户)的角度来看,以内核模式运行是否是明智的性能决策?是否可以在应用程序开发中减轻安全隐患,以使内核模式服务器成为消费者的纯利?

3
为什么“胖二进制文件”没有更广泛地用于跨平台应用程序?
据我所知,所谓的“胖二进制文件”(包含用于多个系统的机器代码的可执行文件)仅在Apple PC上真正使用过,甚至在那里似乎它们仅使用它们是因为它们需要从PowerPC到x86。 如今,许多软件都是跨平台的,似乎制作单个胖二进制文件比跟踪操作系统和体系结构的每种组合的十几个左右不同的下载要简单得多,更不用说以某种方式传达给客户他们想要哪一个。 关于这种方法为何从未流行的原因,我可以提出很多猜测,例如: 缺乏交叉编译工具使多操作系统二进制文件不可行 无论如何,您都需要在每个操作系统上测试代码,因此您已经必须拥有可以针对每个操作系统进行本地编译的系统 显然,32位程序已经可以在64位计算机上“正常工作” 动态链接在每个OS上的工作方式都不同,因此即使“胖应用程序”可以运行“胖库”也可能不起作用 但是由于我一直在使用一个库或框架来向我隐藏所有这些特定于操作系统和特定于体系结构的详细信息,所以我不知道这些内容到底有多真实,或者是否还有更多我不知道的问题关于。那么,为什么通常不使用胖二进制文件来创建多体系结构和/或多OS软件的实际原因是什么?(Apple以外)

5
是否可以通过分配系统上的所有空白空间来从另一个程序读取内存?
从理论上讲,如果我要构建一个程序来分配系统上所有未使用的内存,并继续请求越来越多的内存,因为其他应用程序释放了它们不再需要的内存,则可以从另一个应用程序读取最近释放的内存?还是受到现代操作系统的某种保护? 我对此没有实际应用,我只是很好奇。我意识到现实生活中分配“所有可用内存”存在一些问题。 编辑:为澄清起见,我专门询问“已释放”内存,而不访问其他应用程序当前分配的内存。

8
Unix和Linux在设计和其他方面有什么基本区别?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我一直在读这句话: Linux是类Unix系统,但不是Unix。 我不知道两者之间的真正区别是什么。我知道Linux从Unix得到了很多想法,并且两者的许可证是不同的。除此之外,由于我都不是其中之一,因此我想知道它们在设计或其他重要方面是否存在基本差异。

3
实际上,开发人员还可以管理DBMS和系统吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我真的不知道该问什么。所以就到这里。 我在一家很小的公司工作,该公司生产ERP软件和网站。 1位具有10年以上经验的开发人员。 2位具有3年以上经验的开发人员。 3位具有1年经验的开发人员。 而已。 没有团队,没有DBA,没有系统管理员。 这里没有人拥有Web开发方面的专业知识,所以我碰巧负责Web开发。但是我只有3年的经验!作为开发人员! 我知道在一家小公司中,您需要做很多不同的事情,但是如果我必须做sysadmin,数据库体系结构,软件设计和开发,这是否太多了?哦,我被要求在不同的平台上做所有的事情。 我目前正在使用JSP,ASP,MSSQL,MySQL,Oracle,Windows Server和Linux。 在数据库中,我从编写查询到备份和恢复。 服务器设置,系统崩溃恢复,数据库和服务器迁移。 毛绒HTML,Javascript和CSS :) 我负责的项目数量:5 我不是所有的专家! 我必须搜索Internet,阅读教程并在StackOverflow中提出问题才能完成所有工作! 所以我问你,这正常吗? 这是正常的做法吗? 无论我去哪家小公司,我都会面对同样的情况吗? 我在韩国工作。贵国情况如何? PS 谢谢大家的意见。我要对所有人进行投票,因为所有人都以不同的方式帮助我看待它,但是显然您需要15的声誉才能投票:(

8
有没有足够简单的操作系统可供学习?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我真的很想了解操作系统在幕后的工作方式。但是,我认为大多数开源OS的内核对于学习目的来说过于复杂,即使是专职程序员也无法学习。是否有仅用于学习目的的“简单”操作系统?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.