我对操作系统的内部运作了解不多,为什么我们对Linux中打开文件和正在运行的进程的最大数目有限制?
如果有人可以帮助我理解,我将不胜感激。
我对操作系统的内部运作了解不多,为什么我们对Linux中打开文件和正在运行的进程的最大数目有限制?
如果有人可以帮助我理解,我将不胜感激。
Answers:
这主要是出于历史原因。在较旧的Linux大型机上,许多用户会连接并使用大型机的资源。当然,有必要加以限制,并且由于诸如文件句柄和进程之类的操作已内置在内核中,因此它仅限于此。它还有助于限制攻击,如叉炸弹。此处显示了使用过程限制抵御炸弹的防御措施。
类似于前叉炸弹试图做的那样,它还允许不受控的派生和文件打开,从而有助于控制复杂的服务和守护程序。
还需要注意的是诸如可用的RAM和CPU数量之类的东西,以及32位计数器只能引用这么多的事实(32位计数器只能计数4294967296条目),但是这样的限制是远远不够的。高于程序员和系统管理员通常设置的那些。无论如何,早在拥有4294967296进程之前,您的计算机很可能已按计划重新启动,或者由于由于缺少另一资源而开始锁定。
除非您以584 TiB的内存运行Titan,否则您将不会很快达到此进程限制,除非您不会这样做,因为Linux无法在超级计算机上作为一个实例运行。即使这样,假设没有共享内存,平均进程也将仅具有大约146KB的内存。
生活和Linux中的大多数事物都有局限性。有时限制很高,不值得担心,有时又太低,由懒惰的程序员任意设置,或者由硬件限制设置。
当程序员做出决定(例如,地址等字段中允许的最大字符数)时,就会出现任意限制。设置一些任意限制比根据需要动态分配内存要容易得多。您不想将所有可用内存分配给一个简单的输入字段,但是您也不想允许输入覆盖其他可能很重要的内存。对于打开的文件和进程,可能有一个任意限制,或者可能受到可用内存的限制。如果是后者,那么当您接近极限时,坏事将开始发生,并且系统可能会挂起,因此在极限发生之前发挥作用通常是一件好事。有时,任意限制可能会在启动时根据内存或磁盘空间来确定,通常相当智能,
然后是由硬件设置的限制,例如整数或字符的大小。如果您使用的是32位系统,则有一个限制,该限制由整数的最大大小设置(如果无符号,则为4,294,967,295,如果有符号,则为一半)。
对于进程,/ proc / sys / kernel / pid_max是允许的最大pid,因此这是可以在任何时刻运行的进程数的硬限制。但是,对内存的限制通常会在此之前发挥作用。
对于整个计算机上打开文件的上限,/ proc / sys / fs / file-max是硬限制;这取决于计算机中的内存量,因此会有所不同。内核将其设置为:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
每1 MB RAM大约为100。
每个过程的限制是不同的。ulimit将定义这些。
我们有一个限制,因为计算机有限制,我有4GB的RAM,所以现在不能运行15个游戏了吗?
我很可能可以稍作延迟来运行它,但这不是人类,这是您的PC和Linux内核的极限,您需要一个更好的内核和大量RAM才能容纳所有抛出的程序。
就像我运行Windows 7的笔记本电脑一样,我可以玩《战地风云》,但是它占用了我80%的RAM,因此,如果我尝试玩“ Need For Speed”,那通常需要60%的时间,我可以同时打开这两个游戏,但是整个系统是由于我正在运行2个重型程序,因此速度变慢了,它们都在争夺RAM(随机存取存储器)
简而言之,一台普通的计算机不能一次运行很多程序,音乐,记事本,浏览器,电子邮件,游戏,您认为这在计算机上很多,但仅仅是,像《魔兽世界》这样的游戏需要更多的RAM和使您的计算机陷入困境(除非您像昂贵的笔记本电脑一样拥有8-16 GB的RAM!)