
1. 请求调页是一种动态内存分配技术,它把页框的分配推迟到不能再推迟为止。这种技术的动机是:进程开始运行的时候并不访问地址空间中的全部内容。事实上,有一部分地址也许永远也不会被进程所使用。程序的局部性原理也保证了在程序执行的每个阶段,真正使用的进程页只有一小部分,对于临时用不到的页,其所在的页框可以由其它进程使用。因此,请求分页技术增加了系统中的空闲页框的平均数,使内存得到了很好的利用。从另外一个角度来看,在不改变内存大小的情况下,请求分页能够提高系统的吞吐量。当进程要访问的页不在内存中的时候,就通过缺页异常处理将所需页调入内存中。
2. 写时复制主要应用于系统调用fork,父子进程以只读方式共享页框,当其中之一要修改页框时,内核才通过缺页异常处理程序分配一个新的页框,并将页框标记为可写。这种处理方式能够较大的提高系统的性能,这和Linux创建进程的 *** 作过程有一定的关系。在一般情况下,子进程被创建以后会马上通过系统调用execve将一个可执行程序的映象装载进内存中,此时会重新分配子进程的页框。那么,如果fork的时候就对页框进行复制的话,显然是很不合适的。
在上述的两种情况下出现缺页异常,进程运行于用户态,异常处理程序可以让进程从出现异常的指令处恢复执行,使用户感觉不到异常的发生。当然,也会有异常无法正常恢复的情况,这时,异常处理程序会进行一些善后的工作,并结束该进程。也就是说,运行在用户态的进程如果出现缺页异常,不会对 *** 作系统核心的稳定性造成影响。 那么对于运行在核心态的进程如果发生了无法正常恢复的缺页异常,应该如何处理呢?是否会导致系统的崩溃呢?是否能够解决好内核态缺页异常对于 *** 作系统核心的稳定性来说会产生很大的影响,如果一个误 *** 作就会造成系统的Oops,这对于用户来说显然是不能容忍的。本文正是针对这个问题,介绍了一种Linux内核中所采取的解决方法。
在读者继续往下阅读之前,有一点需要先说明一下,本文示例中所选的代码取自于Linux-2.4.0,编译环境是gcc-2.96,objdump的版本是2.11.93.0.2,具体的版本信息可以通过以下的命令进行查询:
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)
$ objdump -v
GNU objdump 2.11.93.0.2 20020207
Copyright 2002 Free Software Foundation, Inc.
linux管理常见错误一:随意许可,原因是不理解许可如果对许可配置不当,就会给黑客留下机会。处理许可问题的最简单方法是使用所谓的RWE方法,即Read(读取)、Write(写入)、Execute(执行)。假设你想让一个用户能够读取一个文件但不能写入文件。为此,你可以执行:chmod
u+w,u-rx 文件名,一些新用户可能会看到一个错误,说他们没有使用文件的许可,因此他们就使用了:Chmod 777
文件名,以为这样能够避免问题。但这样做实际上会导致更多的问题,因为它给了文件的可执行的权限。
记住这一点:777将一个文件的读取、写入、执行的许可给了所有用户,666将一个文件的读取、写入权限给了所有用户,而555将文件的读取、执行权限给了所有用户,还有444、333、222、111等等。
linux管理常见错误二:忽视更新
这并不是说Linux管理员缺乏技巧。不过,许多Linux管理员在运行了Linux之后,以为日后就无事可做了,以为它安全可靠。其实,新的更新可以为一些新的漏洞打上补丁。维持更新可以在一个易受损的系统与一个安全的系统之间构造分水岭。Linux的安全来自于不断地维护。为了实现安全性,为了使用一些新的特性和稳定性,任何管理员都应当跟上Linux的更新步伐。
linux管理常见错误三:不经过严格审核,从多种渠道下载安装各种类型的应用程序
乍看起来,这也许是一个不错的主意。如果你在运行Ubuntu,你会知道包管理程序使用的是。deb软件包。不过,你找到的许多应用程序是以源代码的形式提供的。没有问题吗?这些程序安装后也许能够正常工作。但是你为什么不能随意安装程序呢?道理很简单,如果你以源的形式安装了程序,那么,你的软件包管理系统将无法跟踪你所安装的东西。
因此,在程序包A(以源的形式安装)依赖于程序包B(从一个。deb库安装的),而软件包B是从更新管理器更新的时候,会发生什么事情呢?程序包A可能运行,也可能无法运行。不过,如果程序包A和B都从。deb库安装的话,二者都能运行的机会将更高。此外,在所有的程序包都来自于同样的二进制类型时,更新程序包将更为容易。
linux管理常见错误四:将服务器启动进入到X
在一台机器是专用服务器时,你可能会想到安装X,这样一些管理任务就会简单一些。不过,这并不意味着用户需要将服务器启动进入到X.这样会浪费珍贵的内存和CPU资源。相反地,你应当在级别3上停止启动过程,进入命令行模式。这样做不但会将所有的资源留给服务器,而且还会防止泄露机器的机密。要登录到X,用户只需要以命令行方式登录,然后键入startx进入到桌面。
linux管理常见错误五:糟糕的口令
记住,root
的口令通常是linux王国的关键。所以为什么要让root的口令那么容易被破解呢?保障你的用户口令的健壮性至关重要。如果你的口令比较长,且难于记忆,可将这个口令存放在一个可被加密的位置。在需要这个口令时,可用解密软件解开这个口令使用之。
linux管理常见错误六:没有备份关键的配置文件
许多管理员都有这样的体会,在升级到某个X版本,如X11之后,却发现新版本破坏了你的xorg.conf配置文件,以至于你再也无法使用X?建议你在升级X之前,先对以前的/etc/x11/xorg.conf作一个备份,以免升级失败。当然,X的升级程序会设法为用户备份xorg.conf文件,但它却在/etc/x11目录内备份。即使这种备份看起来不错,你最好还是自己做一个备份吧。笔者的一个习惯是将其备份到/root目录中,这样,用户就可以知道只有根(root)用户能够访问此文件。记住,安全第一。这里的方法也适用于其它的关键备份,如Samba、Apache、Mysql等。
linux管理常见错误七:忽视日志文件
/var/log的存在是有理由的。这是存放所有的日志文件的唯一位置。在发生问题时,你首先需要看一下这里。检查安全问题,可看一下/var/log/secure.笔者看的第一个位置是/var/log/messages.这个日志文件保存着所有的一般性错误。在此文件中,你可以得到关于网络、媒体变更等消息。在管理一台机器时,用户可以使用某个第三方的应用程序,如logwatch,这样就可以创建为用户创建基于/var/log文件的各种报告。
linux管理常见错误八:没有安装一个可正常运行的内核
你可能不会在一台机器上安装10个以上的内核。但你需要更新内核,这种更新并没有删除以前的内核。你是怎么做的呢?你一直保持使用最近的可正常工作的内核。假设你目前正常工作的内核是2.6.22,而2.6.20是备份内核。如果你更新到2.6.26,而在新内核中一切都工作正常,你就可以删除2.6.20了。
linux管理常见错误九:逃避使用命令行
恐怕很少有人愿意记住那么多命令。在大多数情况下,图形用户界面是许多人的最爱。不过,有时,命令行使用起来更加容易、快捷、安全、可靠。逃避使用命令行是Linux管理的大忌。管理员至少应当理解命令行是如何工作的,至少还要掌握一些重要的管理命令。
linux管理常见错误十:以根用户身份登录
这是一种很危险的错误。如果用户需要根特权来执行或配置一个应用程序,可以在一个标准的用户账户中使用su切换到root用户。登录到root为什么不是一件好事儿?在用户以标准用户身份登录时,所有正在运行的X应用程序仍拥有仅限于此用户的访问权。如果用户以根用户身份登录,X就拥有了root的许可。这就会导致两个问题,一、如果用户由GUI犯了一个大错,这个错误对系统来说,有可能是一个巨大的灾难。二、以根用户的身份运行X使得系统更易于遭受攻击。
linux提示内核死机不同步,我们不要慌,linux不像Windows,可以利用强大的文字界面 *** 作,按Ctrl-Alt-F1,就会切换到TTY文字界面。再就需要用户名密码登入。需要注意的是键盘输入的速度可能会比较慢。下面在提示符后面输入top回车,这时会看到一张动态的表,上面列出了耗用资源最多的进程。观察它刷新一两次,按q退出,然后输入kill ,其中的 PID 你可以在 top 里面看到。这个时候应该会快了不少,如果你发现没有成功结束掉,就再输入 kill -KILL ,这次基本上就没问题了。除了上面 这种情况外,一些底层软件的 bug 也可能导致一些奇怪的死机问题。以前有个用户就因为莫名其妙的死机强制重启把 ext4 的分区给伤了。最后是sysreccd修复了,貌似是分区表部分损坏,死机时键鼠均无反应。一般来说,系统负载高导致的死机,最可怕键盘的就是键鼠都没反应了。
这时我们可以利用reisub,这个方法可以在各种情况下安全地重启计算机。在键盘上找到一个叫做“Sys Rq”的键,在台机的键盘上通常与 Prt Sc 共键,在笔记本可能在其他位置,如 Delete以台机为例,要使用这种方法需要按住 Alt-Print(Sys Rq),然后依次按下 reisub 这几个键,按完b系统就会重启。
其实Sys Rq是一种叫做系统请求的东西,按住 Alt-Print 的时候就相当于按住了 Sys Rq 键,这个时候输入的一切都会直接由 Linux 内核来处理,它可以进行许多低级 *** 作。
这个时候reisub中的每一个字母都是一个独立 *** 作,他们分别表示:unRaw 将键盘控制从 X Server 那里抢回tErminate 给所有进程发送 SIGTERM 信号,让他们自己解决善后kIll 给所有进程发送 SIGKILL 信号,强制他们马上关闭Sync 将所有数据同步至磁盘Unmount将所有分区挂载为只读模式reBoot重启。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)