小编use*_*550的帖子

stdin和stdout如何在流程中独树一帜?

Stdin和stdout是由多个进程共享的单个文件,用于从用户获取输入.那么操作系统如何确保只有特定程序的输入才能在stdin中显示而不是程序?

unix operating-system

4
推荐指数
1
解决办法
655
查看次数

什么是tty子系统?

到现在为止,我已经花了至少10个小时试图了解Linus Akesson着名的博客文章,我仍然在苦苦挣扎.所以让我怀疑我对tty/ptty的怀疑是一系列简短的问题.

1)用户空间或内核空间中的tty/ptty是什么?

2)什么是tty/ptty与设备或驱动程序或某些编号或东西的连接?

3)tty似乎与某个过程的控制终端有关,什么是关系,是与终端相关的每个过程?

4)总的来说,我仍然不明白这个终端概念适合的位置.一个进程想要从stdio中读取一些内容,但它只是从所需的设备文件中读取它.tty打算如何解决这个问题究竟是什么?

5)我在某处读到有人试图将tty从用户空间移动到内核空间.这是一个历史性的残留物,而不是一个强大的设计特征.

linux operating-system tty linux-kernel

4
推荐指数
1
解决办法
863
查看次数

OpenMP可以扩展到包括图形处理器吗?

我正在阅读有关并行处理的OpenMP和其他主题,并发现其中大量声称CUDA或OpenCL将成为此类系统的未来.但是,我认为OpenMP的某些修改版本将是最佳解决方案,并且没有看到GPU不应该运行线程的原因.

所以我的问题是,GPU可以像CPU一样运行线程吗?可以扩展OpenMP以支持GPU吗?这有什么理论问题吗?

我读到最新的OpenMP标准支持GPU,但是没有一个实现.如果有实现,那么它比OpenCL使用的'内核'模型更好还是更差?

multithreading cuda gpu openmp opencl

3
推荐指数
1
解决办法
358
查看次数

挂载文件系统究竟是什么?

当您“挂载文件系统”时到底发生了什么?它发生在堆栈的哪个级别?为什么它甚至是必要的?

filesystems mount

3
推荐指数
2
解决办法
1411
查看次数

这个表达式在 C 中的计算结果是真还是假(1 或 0)?

#include<stdio.h>
int main()
{
    int a=4;
    int b=4;
    int c= a++ < ++b? 1 : 0;
    
    printf ("%d",c);
}
Run Code Online (Sandbox Code Playgroud)

已知在 处有一个序列点?,这意味着前缀和后缀操作都必须在该点完成。还知道(?)b在比较之前增加。然而,是a在比较之前还是之后增加呢?

如果在测试之前递增<,则布尔值计算结果为 false 并c设置为 0,否则为 true 并c设置为 1。在我的编译器中,它计算结果为 true,这意味着a++在比较操作之后执行并c设置为1.

但这种行为是规范的一部分吗?

我修改为

#include<stdio.h>
int main()
{
    int a=4;
    int b=4;
    int d=2;
    int c= a++ + d < ++b + d? 1 : 0;
    
    printf ("%d",c);
}
Run Code Online (Sandbox Code Playgroud)

它的计算结果仍然为 1。后缀必须在 之前完成?,但这真的确保它在比较之后发生吗<?

c conditional-operator unary-operator sequence-points postfix-operator

3
推荐指数
2
解决办法
199
查看次数

最常见的总线主控操作是什么,它们比常规 DMA 有什么优势?

有人可以列出使用主机总线的总线主控提供的最常见操作吗?我可以列举几个。。

1) GPU 通过 PCI-e(最近的 x86)使用总线控制将整个帧缓冲区传输到视频卡。

2) 以太网卡使用总线控制将接收到的数据包传输到主存储器。

3)我假设硬盘也使用总线控制来传输块。

在这种情况下,这些设备/驱动器什么时候使用总线主控,而不是 3rd 方 DMA?

最近,Linux 内核似乎开始支持 PCIe 中的 P2P DMA,设备之间直接通信。现在,P2P DMA 与常规总线主控 DMA 有何根本不同。我想,直到现在,总线主控仅被设备用于传输到由 DMA 子系统创建的缓冲区,并且它总是与主内存之间的往来,对吗?我猜,P2P Dma 是一种允许完全绕过主内存的规定。我还在某处读到过,高端游戏系统中的某些专有图形驱动程序正在使用此类规定,而 Linux 则是后来者。

有人可以提供对现代系统中可用的 DMA 种类的广泛概述,以及一些从概念上理解它们的方法(如果有的话)?

编辑:常规 DMA 更改为 3rd 方 DMA

driver bus linux-kernel pci pci-e

2
推荐指数
1
解决办法
600
查看次数

仅使用系统调用将printf置于汇编中?

我希望了解程序集级别的printf()语句.但是,大多数汇编程序执行的操作类似于调用外部打印函数,其依赖性由链接器添加的其他目标文件满足.我想知道在打印函数内部的系统调用和非常基本的汇编代码.我想要一个汇编代码,其中唯一的外部调用是系统调用,对于printf.我在考虑类似于已组装的目标文件.我在哪里能得到类似的东西?

c operating-system system-calls object-files

1
推荐指数
1
解决办法
1707
查看次数

cpp类是否动态加载?

我知道JVM有一个单独的类加载器,它是加载类并执行它们的默认运行时方法.我只是想知道类加载如何适用于cpp.并且cpp中的类加载与操作系统中的动态加载有些相关.如果类没有动态加载,我想没有真正需要堆分配.但是cpp显然有free()内存选项.我有点困惑.它是如何工作的?

编辑:我理解为什么堆是对象初始化所必需的.但是我自己并不清楚静态或动态加载类本身的原因,特别是cpp的做法.

c++ classloader

0
推荐指数
1
解决办法
250
查看次数

插入排序有 ?(n) 值吗?

众所周知,插入排序的最佳情况运行时间为n,最坏情况运行时间为n 2。在这种情况下,它是否具有很大的 theta 值?

algorithm complexity-theory big-o insertion-sort

0
推荐指数
1
解决办法
74
查看次数