1、为什么 Linux要分为用户空间和内核空间?
1)在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允 许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。
2)CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同,用户空间不需要关注这种不 同,只需调用内核空间接口即可。
补充:
1)内核空间和用户空间
对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说 一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护 的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作系统一般都强制用户进程 不能直接操作内核。具体的实现方式基本都是由操作系统将虚拟地址空间划分为两部分,一部分为内核空间, 另一部分为用户空间。针对 Linux 操作系统而言,最高的 1G 字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF)由 内核使用,称为内核空间。而较低的 3G 字节(从虚拟地址 0x00000000 到 0xBFFFFFFF)由各个进程使用,称为 用户空间。 对上面这段内容我们可以这样理解: 每个进程的 4G 地址空间中,最高 1G 都是一样的,即内核空 间。只有剩余的 3G 才归进程自己使用。 换句话说就是, 最高 1G 的内核空间是被所有进程共享的!
2)为什么需要区分内核空间与用户空间
在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果 允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。 所以,CPU 将指令分为特权指令和非 特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通应用程序只能使用那些不会造成灾 难的指令。比如 Intel 的 CPU 将特权等级分为 4 个级别:Ring0~Ring3。 其实 Linux 系统只使用了 Ring0 和 Ring3 两个运行级别(Windows 系统也是一样的)。当进程运行在 Ring3 级别时被称为运行在用户态,而运行在 Ring0 级别时被称为运行在内核态。
3)内核态与用户态
当进程运行在内核空间时就处于内核态,而进程运行在 用户空间时则处于用户态。在内核态下,进程运行在内核地址空间中,此时 CPU 可以执行任何指令。运行的 代码也不受任何的限制,可以自由地访问任何有效地址,也可以直接进行端口的访问。 在用户态下,进程运行 在用户地址空间中,被执行的代码要受到 CPU 的诸多检查,它们只能访问映射其地址空间的页表项中规定的在 用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中 I/O 许可位图(I/O Permission Bitmap)中规定的 可访问端口进行直接访问。
对于以前的 DOS 操作系统来说,是没有内核空间、用户空间以及内核态、用户态这些概念的。可以认为所有 的代码都是运行在内核态的,因而用户编写的应用程序代码可以很容易的让操作系统崩溃掉。 对于 Linux 来 说,通过区分内核空间和用户空间的设计,隔离了操作系统代码(操作系统的代码要比应用程序的代码健壮很 多)与应用程序代码。即便是单个应用程序出现错误也不会影响到操作系统的稳定性,这样其它的程序还可以正 常的运行(Linux 可是个多任务系统啊!)。
4)所以,区分内核空间和用户空间本质上是要提高操作系统的稳定性及可用性。
5)如何从用户空间进入内核空间
其实所有的系统资源管理都是在内核空间中完成的。比如读写磁盘文件,分配回收内存,从网络接口读写数据 等等。我们的应用程序是无法直接进行这样的操作的。但是我们可以通过内核提供的接口来完成这样的任务。 比如应用程序要读取磁盘上的一个文件,它可以向内核发起一个 "系统调用" 告诉内核:"我要读取磁盘上的某 某文件"。其实就是通过一个特殊的指令让进程从用户态进入到内核态(到了内核空间),在内核空间中,CPU 可 以执行任何的指令,当然也包括从磁盘上读取数据。具体过程是先把数据读取到内核空间中,然后再把数据拷 贝到用户空间并从内核态切换到用户态。此时应用程序已经从系统调用中返回并且拿到了想要的数据,可以开开心心的往下执行了。 简单说就是应用程序把高科技的事情(从磁盘读取文件)外包给了系统内核,系统内核做 这些事情既专业又高效。
2、如何提高linux最大文件打开数?
在LINUX系统中有一个重要的概念:一切都是文件
查看方法:ulimit -a 或者 ulimit -n
更改方法:
1)临时生效: # ulimit -SHn 10000 其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。
软限制和硬限制的区别:硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。
2)永久生效: 要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf 在该配置文件中添加、
* soft nofile 65535
* hard nofile 65535
echo "* soft nofile 65535" >> /etc/security/limits.conf echo "* hard nofile 65535" >> /etc/security/limits.conf
3、linux如何查看后台所有php进程?
ps -ef |grep php
4、linux 系统日志文件在哪?
/var/log/messages
5、用什么命令查看ip地址及接口信息?
ifconfig
6、查看所有环境变量
env
7、通过什么命令查找执行命令?
which
8、怎么对命令进行取别名?
alias la='ls -a'
9、如何杀掉进程?
kill 命令用于终止进程
-9 强迫进程立即停止
kill -9 [PID]
10、LINUX中如何查看某个端口是否被占用?
netstat -anp | grep 端口号
11、将/test1目录下的file1复制到/test3目录,并将文件名改为file2
cp /test1/file1 /test3/file2
12、如何在Linux下更改权限?
假设你是系统管理员或文件或目录的所有者,则可以使用chmod命令授予权限。使用+符号添加权限或 - 符号拒绝权 限,以及以下任何字母:u(用户),g(组),o(其他),a(所有),r(读取),w(写入)和x(执行)。例 如,命令chmod go + rw FILE1.TXT授予对文件FILE1.TXT的读写访问权限,该文件分配给组和其他组。
13、什么是以点开头的文件名?
通常,以点开头的文件名是隐藏文件。这些文件可以是包含重要数据或设置信息的配置文件。将这些文件设置为隐藏 会使其不太可能被意外删除。
14、linux系统中用户有哪几种?
所有者 user u 所属组 group g 其他用户 other o u+g+o=a
15、切换到一个目录里面,需要哪些权限?
rx
16、同时将某个文件夹的属主改为 oracle ,属组改为 db
chown -R oracle:dba test
17、给指定文件的属主和属组所有权限(包括读、写、执行)
chmod ug+rwx file.txt
18、查看系统负载?
uptime
19、查看内存使用情况?
free -m
20、设置一个每十分钟执行一次的计划任务
*/10 * * * * /test.php
21、linux解压tar文件
tar xvf test.tar
22、vim如何清空一个文件中的所有内容?
ggdG
23、sed全局替换?
sed 's/要被取代的字串/新的字串/g' test.txt
24、查找/usr目录下文件大小大于100MB的文件,并按照文件大小由大到小排列,并显示文件大小、
find / -type f -size +100M | xargs ls -lh -S
25、在一个文件夹中递归查询包含test这个字符串的文件
grep -r "test" *
26、linux全盘查找指定文件名的文件?
find / -name test.txt
27、linux如何查看磁盘情况?
df -lh
28、linux挂载命令?
mount /dev/hda1 /mnt
29、linux无提示删除xxx目录下面的所有文件?
rm -rf xxx