我对计算机日益增长的兴趣使我提出了更深层次的问题,我们似乎不必再问这些问题了。我们的电脑,在开机,据我了解,在文本模式,其中可使用软件中断来显示一个字符0x10时AH=0x0e。我们都见过著名的启动字体,无论启动什么计算机,它看起来总是一样的。
那么,计算机究竟如何在最低级别(例如,低于操作系统)输出图形?而且,当然图形不会使用软件中断一次输出一个像素,因为这听起来很慢?
是否有定义顶点、多边形、字体等基本输出的标准(例如,在 OpenGL 下,可能使用哪种 OpenGL)?让我问的是为什么操作系统在没有安装官方驱动程序的情况下通常可以正常运行?他们是怎么做到的?
如果我的假设不正确,请道歉。我将非常感谢您对这些主题的详细说明!
操作系统(最好是 Linux)如何知道您访问了不允许访问的内存位置?
这个问题的灵感来自那些该死的指针!我的看法是:计算机中的一切都是在速度、安全性、完整性等方面做出妥协。
我很清楚 Linux 中的内存映射,但对我来说,内核检查您尝试访问的位置是否位于每次访问的有效范围内听起来有点荒谬。听起来这会浪费很多时间,这些时间可以用来做一些更有效率的事情(但如果没有检查,可能会更不安全!)。或者它可能会记住所有最近的访问并在每个硬件计时器滴答时检查它们?(但这听起来不安全,而且还是很慢。)
我很惊讶这个问题似乎在任何地方都没有答案。这是我一直想知道的事情。这让我觉得有一部分硬件将代表操作系统以一种很好、方便的抽象级别来完成这项工作。但是,它可能需要在每次上下文切换时加载下一个进程的内存映射,这听起来又很慢。
所以是的,无论如何,我要讲一点:操作系统如何检测内存违规?
谢谢
我一直在使用 研究 Linux 中的内存过度使用/proc/sys/vm/overcommit_memory,并且我阅读了几篇文章,但它们并没有说同样的话。
该文档在“走错方向”标题下继续说,“值 1:过度使用,0(默认):不要”,但在接下来的几行中,它提到了类似的事情,这实际上不是真的,0 意味着“猜测有多少过度承诺是合理的”。这意味着使用值 0不会禁用内存过量使用,对吗?
它还表示 1 表示“从不拒绝任何 malloc()”,2 表示“对过度使用要准确——永远不要提交大于交换空间加上物理内存的一部分 overcommit_ratio 的虚拟地址空间。”
另一方面,Red Hat 杂志指出,“如果值为 0,则内核检查以确定是否有足够的可用内存来授予来自应用程序的 malloc 调用的内存请求。如果有足够的内存,则请求被批准。否则,它被拒绝并向应用程序返回错误代码。” 这听起来就像禁用过度使用。
“如果该值设置为 1,则内核授予超过系统中物理 RAM 和交换量的分配,如 overcommit_ratio 值所定义......如果此文件中的设置为 2,则内核允许所有内存分配,无论当前的内存分配状态如何。” 就值 1 和 2 而言,这与之前的文档所说的相反,对吗?
有谁知道什么是真正正确的,以及是否可以“禁用”过度使用?
我有几个关于使用对称加密的 gpg/gpg2 安全性的问题。它们(我想)非常基本,所以如果它们被记录在某处,我很抱歉。问题是,我不知道要搜索什么才能找到答案。
按以下方式使用 gpg2:
gpg2 -c file.txt
仅使用我stdin 仅提供的密钥使用默认密码 (CAST5) 加密文件,与
我的用户的 RSA/SHA 密钥没有任何关系,即在任何其他机器上使用 gpg2 解密文件与任何其他用户会绝对没问题?(我想让它签署文件进入了这个细节,但我对此不感兴趣。)
--cipher-algo参数违反了 OpenPGP 标准;为什么?我将它设置为不同的密码有什么问题?任何帮助将非常感激!