Stdin和stdout是由多个进程共享的单个文件,用于从用户获取输入.那么操作系统如何确保只有特定程序的输入才能在stdin中显示而不是程序?
到现在为止,我已经花了至少10个小时试图了解Linus Akesson着名的博客文章,我仍然在苦苦挣扎.所以让我怀疑我对tty/ptty的怀疑是一系列简短的问题.
1)用户空间或内核空间中的tty/ptty是什么?
2)什么是tty/ptty与设备或驱动程序或某些编号或东西的连接?
3)tty似乎与某个过程的控制终端有关,什么是关系,是与终端相关的每个过程?
4)总的来说,我仍然不明白这个终端概念适合的位置.一个进程想要从stdio中读取一些内容,但它只是从所需的设备文件中读取它.tty打算如何解决这个问题究竟是什么?
5)我在某处读到有人试图将tty从用户空间移动到内核空间.这是一个历史性的残留物,而不是一个强大的设计特征.
我正在阅读有关并行处理的OpenMP和其他主题,并发现其中大量声称CUDA或OpenCL将成为此类系统的未来.但是,我认为OpenMP的某些修改版本将是最佳解决方案,并且没有看到GPU不应该运行线程的原因.
所以我的问题是,GPU可以像CPU一样运行线程吗?可以扩展OpenMP以支持GPU吗?这有什么理论问题吗?
我读到最新的OpenMP标准支持GPU,但是没有一个实现.如果有实现,那么它比OpenCL使用的'内核'模型更好还是更差?
#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
有人可以列出使用主机总线的总线主控提供的最常见操作吗?我可以列举几个。。
1) GPU 通过 PCI-e(最近的 x86)使用总线控制将整个帧缓冲区传输到视频卡。
2) 以太网卡使用总线控制将接收到的数据包传输到主存储器。
3)我假设硬盘也使用总线控制来传输块。
在这种情况下,这些设备/驱动器什么时候使用总线主控,而不是 3rd 方 DMA?
最近,Linux 内核似乎开始支持 PCIe 中的 P2P DMA,设备之间直接通信。现在,P2P DMA 与常规总线主控 DMA 有何根本不同。我想,直到现在,总线主控仅被设备用于传输到由 DMA 子系统创建的缓冲区,并且它总是与主内存之间的往来,对吗?我猜,P2P Dma 是一种允许完全绕过主内存的规定。我还在某处读到过,高端游戏系统中的某些专有图形驱动程序正在使用此类规定,而 Linux 则是后来者。
有人可以提供对现代系统中可用的 DMA 种类的广泛概述,以及一些从概念上理解它们的方法(如果有的话)?
编辑:常规 DMA 更改为 3rd 方 DMA
我希望了解程序集级别的printf()语句.但是,大多数汇编程序执行的操作类似于调用外部打印函数,其依赖性由链接器添加的其他目标文件满足.我想知道在打印函数内部的系统调用和非常基本的汇编代码.我想要一个汇编代码,其中唯一的外部调用是系统调用,对于printf.我在考虑类似于已组装的目标文件.我在哪里能得到类似的东西?
我知道JVM有一个单独的类加载器,它是加载类并执行它们的默认运行时方法.我只是想知道类加载如何适用于cpp.并且cpp中的类加载与操作系统中的动态加载有些相关.如果类没有动态加载,我想没有真正需要堆分配.但是cpp显然有free()内存选项.我有点困惑.它是如何工作的?
编辑:我理解为什么堆是对象初始化所必需的.但是我自己并不清楚静态或动态加载类本身的原因,特别是cpp的做法.
众所周知,插入排序的最佳情况运行时间为n,最坏情况运行时间为n 2。在这种情况下,它是否具有很大的 theta 值?
c ×2
linux-kernel ×2
algorithm ×1
big-o ×1
bus ×1
c++ ×1
classloader ×1
cuda ×1
driver ×1
filesystems ×1
gpu ×1
linux ×1
mount ×1
object-files ×1
opencl ×1
openmp ×1
pci ×1
pci-e ×1
system-calls ×1
tty ×1
unix ×1