Questions tagged «architecture»

有关(UNIX)OS体系结构的一般问题

7
为什么我们需要创建新流程?
在Unix中,每当我们要创建一个新进程时,便会分叉当前进程,并创建一个与父进程完全相同的新子进程。然后执行exec系统调用,用新流程替换父流程中的所有数据。 为什么我们首先创建父流程的副本,而不直接创建新流程?




3
为什么允许rm删除另一个用户拥有的文件?
为什么从rm删除只读文件?我知道,rm只需要对目录具有写许可权即可删除文件。但是我发现很难消化这种行为,在这种行为下我们可以轻松地删除所有者和组不同的文件。 我尝试了以下 mtk:我的用户名 abc:创建了一个新用户 $ ls -l file -rw-rw-r-- 1 mtk mtk 0 Aug 31 15:40 file $ sudo chown abc file $ sudo chgrp abc file $ ls -l file -rw-rw-r-- 1 abc abc 0 Aug 31 15:40 file $ rm file $ ls -l file <deleted> 我以为这不应该被允许。用户应该只能删除其所有权下的文件吗?有人可以阐明为什么允许这样做吗?以及如何避免这种情况?我可以认为仅限制父目录的写权限即可禁止意外删除文件。


1
什么是软件和硬件中断?如何处理?
我不确定我是否了解硬件和软件中断的概念。 如果我理解正确,则硬件中断的目的是引起CPU的注意,这是实现CPU多任务处理的一部分。 那么什么发出硬件中断?它是硬件驱动程序过程吗? 如果是,硬件驱动程序进程在哪里运行?如果它在CPU上运行,那么它就不必通过硬件中断来引起CPU的注意,对吗?那么它在其他地方运行吗? 硬件中断是直接中断CPU,还是先联系内核进程,然后内核进程联系/中断CPU? 另一方面,我认为软件中断的目的是让当前正在CPU上运行的进程请求一些资源。 有哪些资源?它们都是以运行过程的形式存在吗?例如,CPU驱动程序进程和内存驱动程序进程是否代表CPU和内存资源?I / O设备的驱动程序进程是否代表I / O资源?该进程是否还希望与其他正在运行的进程进行资源通信? 如果是,软件中断是否通过内核进程间接联系进程(代表资源)?与硬件中断不同,软件中断从不直接中断CPU,而是中断/联系内核进程,对吗?

15
* nix的面向对象的外壳
前言:我喜欢bash,无意发动任何形式的争论或圣战,希望这不是一个非常幼稚的问题。 这个问题与有关超级用户的帖子有些相关,但是我不认为OP真正了解他的要求。我在FreeBSD,Linux,OS X和Windows上的cygwin上使用bash。我最近在Windows上使用PowerShell也有丰富的经验。 * nix的外壳是否已经存在或正在开发中,并且与bash兼容,但是在混合中添加了一层面向对象的脚本编制?我所知道的唯一接近的是python控制台,但据我所知它并不提供对标准Shell环境的访问。例如,我不能只是cd ~和ls,而是chmod +x file在python控制台中。我将不得不使用python来执行那些任务,而不是标准的unix二进制文件,或者使用python代码调用二进制文件。 是否存在这样的外壳?


2
外行对“一切都是文件”的解释-与Windows有何不同?
我知道“一切都是文件”意味着即使设备在Unix和类似Unix的系统中也具有其文件名和路径,并且这允许在各种资源上使用通用工具,而不论其性质如何。但是我无法与Windows进行对比,Windows是我使用过的唯一其他操作系统。我已经阅读了一些有关此概念的文章,但我认为对于非开发人员而言,有些不容易理解。外行的解释是人们所需要的! 例如,当我要将文件复制到读卡器附带的CF卡时,将使用类似 zcat name_of_file > /dev/sdb 我认为在Windows中,读卡器将作为驱动程序出现,我们会做类似的事情。那么,“一切都是文件”哲学在这里有何不同?

2
Linux终端如何工作?
如果启动一个终端并调用一个可执行文件(为简单起见,假设它是面向行的),您将从可执行文件中得到对该命令的答复。如何打印给您(用户)?终端会做类似的事情pexpect吗?(轮询等待输出)还是什么?如何通知要输出的输出?终端如何启动程序?(这类似于python的os.fork()吗?)我不知道终端的工作方式,我一直在使用一些终端仿真器,但我仍然不了解所有这些魔术如何工作。我正在查看konsole(kde)和yakuake(可能使用konsole)的来源,我无法了解发生所有魔术的地方。

3
信号在内部如何工作?
一般而言,要终止进程,我们会生成SIGKILL,SIGTSTP等信号。 但是,如何知道是谁订购了该特定信号,是谁将其发送到特定进程的,以及通常来说信号如何执行其操作呢?信号在内部如何工作?

2
捕获信号时中断系统调用
通过阅读read()和write()调用上的手册页,可以看出这些调用被信号打断了,而不管它们是否必须阻塞。 特别地,假设 进程为某些信号建立处理程序。 O_NONBLOCK 未设置(即以阻止模式运行)打开设备(例如,终端) 然后,该过程将进行read()系统调用以从设备读取数据,从而执行内核空间中的内核控制路径。 当程序read()在内核空间中执行时,先前安装了处理程序的信号将传递到该进程,并调用其信号处理程序。 阅读SUSv3“系统接口卷(XSH)”中的手册页和相应部分,您会发现: 一世。如果a read()在读取任何数据之前被信号打断(即由于没有可用数据而不得不阻塞),则它将返回-1并将其errno设置为[EINTR]。 ii。如果a read()在成功读取某些数据后被信号中断(即可以立即开始处理请求),则它将返回读取的字节数。 问题A): 我是否正确地假设在任何一种情况下(块/无块)信号的传递和处理对信号都不完全透明read()? 案例一 这似乎是可以理解的,因为阻塞read()通常会将进程置于TASK_INTERRUPTIBLE状态,以便在传递信号时,内核会将进程置于TASK_RUNNING状态。 但是,当read()不需要阻塞(情况ii。)并在内核空间中处理请求时,我会认为信号的到达及其处理将是透明的,就像硬件的到达和正确处理一样中断会。特别是,我会假设在传递信号后,该过程将被暂时置于用户模式下以执行其信号处理程序,然后该信号处理程序将最终返回该用户处理程序,以完成对中断read()(在内核空间中)的处理,从而read()运行其直到完成为止,然后过程返回到调用read()(在用户空间中)之后的点,结果将读取所有可用字节。 但是ii。似乎暗示read()中断了,因为数据立即可用,但是它返回时仅返回部分数据(而不是全部)。 这使我想到了第二个(也是最后一个)问题: 问题B): 如果我在A)下的假设是正确的,那么read()即使不需要阻塞,因为有可用的数据可以立即满足请求,为什么会被中断?换句话说,为什么read()在执行信号处理程序后不能恢复,最终导致所有可用数据(毕竟是可用的)被返回?


1
简单的命令行方法来确定特定的ARM体系结构字符串?
我正在尝试编写一个脚本,该脚本将根据计算机的体系结构确定操作。我已经使用uname -m来收集建筑线,但我不知道有多少ARM架构也有,我也不知道一个人是否是armhf,armel或arm64。 由于这是需要这种脚本来确定脚本的部分是否可以运行或不,我试图找到一个简单的方法来确定该架构armhf,armel或arm64。是否有可用于输出或者任何单行或简单的命令armhf,armel或arm64? 该脚本是专门为Debian和Ubuntu系统编写的,因此我谨以此标记(如果您不在这些发行版之一中,它将自动退出,但是如果该发行版可以用更广泛的方式应用,命令存在) 编辑:最近了解到armel已死,而arm64软件构建器(基于PPA或基于虚拟的)并不是最稳定的。因此,我有一个通配符搜索发现arm*并假设使用了armhf,但是仍然有必要找出一个返回三个函数之一的liner-无论是Ubuntu / Debian命令还是内核调用或其他东西。

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.