小编Ste*_*eve的帖子

哪些组件使用区域设置变量?

我已经读过每个进程都有一组与之关联的语言环境变量.例如,这些是与bash我系统上的进程关联的语言环境变量:

$ locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)

我想知道谁实际使用这些语言环境变量.

C标准函数(例如:) fwrite()和Linux系统调用是否使用它们?某些C标准函数或某些Linux系统调用的行为是否因某些语言环境变量的值而异?

或者只是某些程序可以使用这些区域设置变量?例如,我可以编写一个程序,根据LANGlocale变量的值,以不同的语言向用户显示消息.

c linux environment-variables

13
推荐指数
2
解决办法
448
查看次数

x86 CPU是否重新排序指令?

我已经读过一些CPU重新排序指令,但这对于单线程程序来说不是问题(指令仍会在单线程程序中重新排序,但看起来好像指令是按顺序执行的),这只是一个问题用于多线程程序.

为了解决指令重新排序的问题,我们可以在代码中的适当位置插入内存屏障.

但x86 CPU是否重新排序指令?如果没有,那么就没有必要使用内存屏障了吧?

x86 assembly multithreading cpu-architecture memory-barriers

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

在 x64 中完全不使用分段吗?

在 x86 中,当您想要访问内存地址时,您将指定一个地址,该地址将通过两个阶段转换为内存地址:分段分页

在此处输入图片说明

但是在 x64 中也使用分段吗?(我认为它没有被使用,但我不确定它是不是在所有情况下都使用,或者在某些情况下使用它)。

x86 operating-system x86-64 memory-segmentation

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

使用硬件计时器是实现进程调度的唯一方法吗?

我已经读过操作系统使用以下方法实现调度:

  • CPU必须有一个硬件定时器,每隔X毫秒触发一次中断.
  • 一旦定时器中断触发,定时器中断处理程序将执行指令,使CPU开始执行另一个进程(或者我想应该说的另一个线程).

我的问题是:我刚才描述的方法是实现调度的唯一方法吗?

linux windows macos operating-system scheduling

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

x86 CPU有多少个内存屏障指令?

我已经发现,在x86 CPU有以下内存屏障指令:mfencelfence,和sfence

x86 CPU是否仅具有这三个内存屏障指令,或者还有更多指令?

x86 assembly multithreading memory-barriers

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

内存屏障是否既充当标记又充当指令?

我读过有关内存屏障如何工作的不同内容。

例如,用户Johan在这个问题中的回答说,内存屏障是 CPU 执行的指令。

虽然用户Peter Cordes在这个问题中的评论说了以下关于 CPU 如何重新排序指令的内容:

它的读取速度比执行速度快,因此它可以看到即将到来的指令的窗口。有关详细信息,请参阅 x86 标签 wiki 中的一些链接,例如 Agner Fog 的 microarch pdf,以及 David Kanter 对 Intel Haswell 设计的文章。当然,如果您只是用谷歌搜索“乱序执行”,您会找到您应该阅读的维基百科文章。

所以我根据上面的评论猜测,如果指令之间存在内存屏障,CPU将看到这个内存屏障,这导致CPU不会对指令重新排序,所以这意味着内存屏障是一个“标记”让CPU看到而不是执行。


现在我的猜测是,内存屏障既充当标记又充当 CPU 执行的指令。

对于标记部分,CPU 看到指令之间存在内存屏障,这导致 CPU 不会对指令进行重新排序。

至于指令部分,CPU会执行内存屏障指令,这会导致CPU做一些诸如刷新存储缓冲区之类的事情,然后CPU会继续执行内存屏障之后的指令。

我对么?

x86 assembly instruction-set cpu-architecture memory-barriers

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

EFLAGS 是通用寄存器吗?

有些教程说EFLAGS寄存器是通用寄存器,而其他教程说它不是通用寄存器。

那么是哪一个呢?!

x86 assembly cpu-registers

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