检查文件目录是否存在的最优雅方法是什么,如果不存在,使用Python创建目录?这是我尝试过的:
import os
file_path = "/my/directory/filename.txt"
directory = os.path.dirname(file_path)
try:
os.stat(directory)
except:
os.mkdir(directory)
f = file(filename)
Run Code Online (Sandbox Code Playgroud)
不知何故,我错过了os.path.exists(感谢kanja,Blair和Douglas).这就是我现在拥有的:
def ensure_dir(file_path):
directory = os.path.dirname(file_path)
if not os.path.exists(directory):
os.makedirs(directory)
Run Code Online (Sandbox Code Playgroud)
是否有"开放"的标志,这会自动发生?
二进制信号量和互斥量之间是否存在差异,或它们基本相同?
我一直想做的一件事是开发我自己的操作系统(不一定像Linux或Windows那样花哨,但比我已经完成的简单的引导加载程序更好).
我很难找到资源/指南,让你过去编写一个简单的"Hello World"操作系统.
我知道很多人可能会建议我看看Linux或BSD; 但是像这样的系统的代码库(大概)是如此之大,以至于我不知道从哪里开始.
有什么建议?
更新:为了让通过Google登陆此帖子的人们更容易,这里有一些操作系统开发资源:
编写自己的操作系统(感谢Adam)
Linux From Scratch(感谢John)
SharpOS(C#操作系统)(谢谢lomaxx)
OS Dev Wiki和论坛(感谢Steve)
BonaFide(谢谢史蒂夫)
布兰(谢谢史蒂夫)
滚动你自己的玩具UNIX克隆操作系统(谢谢史蒂夫)
其他资源:
我找到了一个名为MikeOS的好资源,"MikeOS是一个学习工具,用于演示操作系统的简单操作.它使用16位实模式进行BIOS访问,因此不需要复杂的驱动程序"
版权所有11/14/08
我在Freebyte的指南中找到了一些资源...免费和非免费的操作系统链接到OSKit和ExOS库等工具包.这些在开始OS开发时似乎非常有用.
2009年2月23日更新
Ric Tokyo在这个问题上推荐了nanoos.Nanoos是一个用C++编写的操作系统.
更新于3/9/09
Dinah为有抱负的操作系统开发人员提供了一些有用的Stack Overflow讨论:创建自定义操作系统的障碍讨论了在开发操作系统和操作系统开发时可能遇到的陷阱是一个更为一般性的讨论.
2009年7月9日更新
LB提供了Pintos项目的链接,Pintos项目是为学生学习OS开发而设计的教育操作系统.
2009年7月27日更新(仍然很强劲!)
我偶然发现了伯克利的在线操作系统课程,有23个讲座.
TomOS是MikeOS的一个分支,包括一些内存管理器和鼠标支持.作为MikeOS,它旨在成为一个教育项目.它是用NASM汇编程序编写的.
2009年8月4日更新
我发现幻灯片和其他材料与上面列出的在线伯克利讲座一致.
2009年8月23日更新 …
我想确定我的Java程序以编程方式运行的主机的操作系统(例如:我希望能够根据我是在Windows还是Unix平台上加载不同的属性).100%可靠性最安全的方法是什么?
我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.
这就是perfmon解释这些术语的方式:
Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.
Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.
Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.
这些是我的问题:
是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?
该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?
私有字节,工作集和虚拟字节之间是否有任何关系?
还有其他工具可以更好地了解内存使用情况吗?
我从未明白ABI是什么.请不要指向维基百科的文章.如果我能理解它,我就不会在这里张贴这么长的帖子.
这是我对不同界面的看法:
电视遥控器是用户和电视之间的接口.它是一个现有实体,但本身无用(不提供任何功能).遥控器上每个按钮的所有功能都在电视机中实现.
接口:它是间"现有实体"层
functionality和consumer的该功能.接口本身不起作用.它只是调用后面的功能.现在取决于用户是谁,有不同类型的接口.
命令行界面(CLI)命令是现有实体,消费者是用户和功能所在.
functionality:我的软件功能解决了我们描述这个界面的一些目的.
existing entities:命令
consumer:用户图形用户界面(GUI)窗口,按钮等是现有实体,消费者再次是用户和功能所在.
functionality:我的软件功能解决了我们描述这个界面的一些问题.
existing entities:窗口,按钮等..
consumer:用户应用程序编程接口(API)函数(或更正确的)接口(在基于接口的编程中)是现有实体,这里的消费者是另一个程序而不是用户,并且该层后面的功能也是如此.
functionality:我的软件功能解决了我们描述这个界面的一些问题.
existing entities:函数,接口(函数数组).
consumer:另一个程序/应用程序应用程序二进制接口(ABI)这是我的问题开始的地方.
functionality:???
existing entities:???
consumer:???
ABI涵盖了诸如此类的详细信息
- 数据类型,大小和对齐方式;
- 调用约定,它控制函数参数的传递方式并返回检索的值;
- 系统调用号码以及应用程序应如何向操作系统进行系统调用;
其他ABI标准化细节,如
- C++名称错误,
- 异常传播,和
- 在同一平台上调用编译器之间的约定,但不需要跨平台兼容性.
谁需要这些细节?请不要说操作系统.我知道汇编编程.我知道链接和加载是如何工作的.我确切地知道里面发生了什么.
为什么C++名称输入?我以为我们正在谈二进制.语言为什么会进来?
无论如何,我已经下载了[PDF] System V Application Binary Interface Edition 4.1(1997-03-18),看看它究竟包含了什么.好吧,大部分都没有任何意义.
为什么它包含两章(第4和第5章)来描述ELF文件格式?实际上,这些是该规范中仅有的两个重要章节.其余章节是"处理器特定的".无论如何,我认为这是一个完全不同的话题.请不要说ELF文件格式规范是 ABI.根据定义,它不符合接口的条件.
我知道,因为我们谈论的水平很低,所以必须非常具体.但我不确定它是如何"指令集架构(ISA)"具体的?
我在哪里可以找到Microsoft Windows的ABI?
所以,这些是困扰我的主要问题.
与维基百科相比,文件描述符的简化描述是什么?他们为什么需要?比如说,以shell进程为例,它是如何应用的?
进程表是否包含多个文件描述符.如果是,为什么?
我只是想知道谁知道Windows,Mac OS X和Linux是由哪些编程语言组成的,以及OS的每个部分使用的语言(即:内核,插件架构,GUI组件等).
我假设每种语言都有多种语言,显然我知道Linux内核是用C语言编写的.
我完全猜测Mac OS X包含很多Objective-C代码,因为它是源自NeXT的Apple语言.
Windows,我听说包含C,C++和Intel Assembly.Linux或Mac OS是否包含任何汇编代码?
此外,操作系统开发人员是否使用Ruby,Python等脚本语言来编写操作系统的部分脚本?操作系统的哪些部分将用每种语言编写?
最近,我在面试中被问到一个问题,即流程和线程之间的区别.真的,我不知道答案.我想了一会儿,给了一个非常奇怪的答案.
线程共享相同的内存,而进程则没有.在回答这个问题之后,面试官给了我一个邪恶的微笑,并向我解释了以下问题:
问:你知道程序划分的部分吗?
我的回答:是的(认为这是一个简单的)堆栈,数据,代码,堆
问:那么,告诉我:线程共享哪些段?
我无法回答这个问题并最终说出了所有这些.
请问,任何人都可以为流程和线程之间的差异提供正确和令人印象深刻的答案吗?
如何在没有运行操作系统的情况下自行运行程序?你能创建计算机可以在启动时加载和运行的汇编程序,例如从闪存驱动器启动计算机并运行cpu上的程序吗?