浅入分析和Linux内核相关的文件夹/proc和/sys .
近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了9次。。。如果您真的觉得我的文章很烂,请告诉我原因,不胜感激。
这星期,马哥讲了关于Linux内核的编译和Linux的内核模块,浅显易懂,所以写出来和大家一起分享学习成果。首先说明,这只是简单的编译,和手动添加模块,而这篇主要介绍linux的内核分类,和linux内核相关的两个文件夹/proc /sys 这是实现内核编译和添加内核模块的理论基础。
内核的分类:
1. 微内核:尽可能的保证内核的精简,所有的设备都需要安装驱动程序(不知道这样说准确否) 例如windows,你所有的设备的驱动城区都是你后来装的。
2. 单内核:设备直接融入到内核中去。
linux属于单内核,但是由于它巧妙的设计(可以这样想,内核外表有很多“洞”用于连接模块),它可以将很多设备做成模块,当需要时自动加入内核,由于是在内核中工 作,所以效率非常高。
从理论上来讲,微内核是更先进的设计,但是到目前为止,它的优势都没有发挥出来,linux由于单内核的设计,所以造成了驱动程序难安装,难研发。
Linux内核的分类
1.kernel 内核本身
还记得initrd吗?它其实是生成的,从过/sbin/mkinitrd这个脚本,在你安装操作系统后,自动生成,用于辅助内核。
2.kernel object 内核对象(内核模块)
它们是以.ko结尾的文件,所有的,ko文件只能在内核加载。他们位于/lib/modules目录 大小50M左右,内核将文件系统和各种外围驱动都做成模块放在这里面,而且每一个 不同版本的内核都对应一个和内核版本名字相同的文件夹存放对应的内核模块文件###必须严格对应,否则会出错
内核编译时选择的选项不同,功能也不同
redhat提供了3个32位核心版本,2个64位核心版本
32位
kernel 最多支持32位cpu,最多支持4G内存
kernel:1G 启动时kernel要占去1G内存,留给进程的只有3G
process:3G
kernel-PAE 最多支持32颗对称多处理器,支持16G内存
单个进程只能最多3G内存,对
kernel-xen 支持基于xen半虚拟化 ,现在不支持,转向KVM
64位:
kernel : 64个cpu, 512G
kernel-xen:126颗cpu,512G内存
以目前的技术可以支持到1T的内存
内核参数:
内核可以接受很多参数,例如grub.conf在启动时传递给内核启动等级。而在系统运行的时候也可以传递内核参数,内核工作在内核空间,但是用户程序工作在用户空间所以需要通过用户空间传递一些参数给内核,让内核按我们的需要来工作。
那么向内核传递参数,这就是今天这两个文件夹的作用。
他们的作用:
/porc 正在运行的内核信息映射
主要输出:进程信息
内存资源信息
磁盘分区信息等等
/sys
硬件设备的驱动程序信息
它们都是伪文件系统,如果了解这些文件的参数,并向里面传递特殊数值,完全可以实现实时调整内核工作特征和硬件工作特征。
那么我们打开/proc目录来查看里面的内容,具体命令我就不写了,这里我只根据目录树来介绍我学到的各个目录的作用(通过颜色识别),如果您有兴趣可以看下~
/proc/
1/cmdline 启动进程的命令行命令及其参数是什么
1/proc/cmdline gurb向内核传递的参数文件,以后可以通过脚本读取它的参数,来判定启动时向内核传递什么信息
1/maps 内存使用信息的映射
1/mem 内存信息
1/io 读写
1/stat 进程信息
1/status
acpi 高级队员管理子系统相关信息
asoud 声音信息
budyinfo 伙伴系统信息,实现内存回收的子系统,防止内存碎片
bus 系统硬件总线信息
cpuinfo
crypto 加密
devices 当前系统上所有的字符设备和块设备
diskstat 磁盘状态信息 (很难懂)
iostat 通过这个文件可以查看它的信息
dma 直接内存访问,实现内存与对应的磁盘设备,直接映射以后,访问将数据脱离cpu管理时,仍然可以从磁盘读取到内存的一种
系统优化设备
fb (frame buffer) 帧缓存,对一些特殊的显卡显示设备提供驱动。
filesystems 当前系统中启用的所有文件系统
/cpuset cpu分组,可以实现进程和cpu绑定,可以将它挂载来查看那捆绑信息,它也是一个伪目录
ide
fs
interruptes 中断(硬终端,软中断)
ioports 硬件IO端口信息
loadavg 平均负载,uptime命令查看这个文件
locks 文件锁,文件进程不允许两个进程同时写文件
molues 当前系统上正在时候的模块
mdstat RAID
meminfo 内存信息
partitions 内核识别的分区信息
schedstat 进程调度信息
slabinfo 内存子系统信息和budyinfo一样
swaps 交换分区信息
uptime uptime命令显示的文件
version `uname -r`
vmstat
zoneinfo 内存的分区信息,Normal段 DMA段 BIOS段
/proc/sys 凡是输出在sys目录里的信息,都是可以通过调整他们的参数来管理内核
crypto
debug
dev
ls
fs
kernel
net
/ipv4 里面都是可以调整的网络模块
/ icmp_echo_ignore_all 改为1别人就ping不同
ip_forward 用于定义如果主机上有两块网卡,或者一个网卡有两个地址,并且在不同网络段,
它能启用在两个网络之间实现数据包路由(直连路由)转发功能。它可以决定你的
主机是否可以作为路由器或网关使用。默认为0
max_orphans 最大孤儿链接数
tcp_fin_timeout tcp fin数据包等待超时时间
tcp_max_syn_backets 网络调优其实就是调这些参数
tcp_mem 缓冲大小
tcp_rmen 读缓冲大小
tcp_ wmen 写缓冲大小
tcp_reuse tcp的链接数是否可重用,多次时间重用
sunrpc
vm
/dorp_caches 用于释放内存里缓存
区别哪些文件可以传递参数:凡是有w权限的都是可以传递参数的
如何调整内核参数文件的值 一般在/proc/sys
1. 临时调成(暂时有效,立即生效):
- # echo > echo 1 > /proc/sys/net/ipv4/ip_forward #全路径
- # sysctl -w sysctl -w net.ipv4.ip_forward=1 #去掉/proc/sys 用.隔开
2. 永久有效,(但是设置好不是立即生效)
通过设置/etc/sysct1.conf,他是启动时rc.sysinit读取的内核参数
例如修改里面的
- net.ipv4.ip_forward = 1 #打开路由转发功能
另外如果想使修改后的值立即生效
- #sysctl -p
显示当前运行的所有生效的内核参数的值
- #sysctl -a
#######这个文件是系统工程师生涯的直观重要的文件
浅入分析和Linux内核相关的文件夹/proc和/sys .的更多相关文章
- Linux内核相关常见面试题
转:http://www.embeddedlinux.org.cn/html/xinshourumen/201303/11-2475.html 本文详细阐述了linux内核相关的开发职位面试中 ...
- linux内核中的文件描述符(二)--socket和文件描述符
http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...
- 【转】 Linux内核中读写文件数据的方法--不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大 ...
- 关于Linux系统清理/tmp/文件夹的原理
转自:http://www.opsers.org/base/clean-up-on-the-linux-system-tmp-folder-you-may-want-to-know.html 我们知道 ...
- linux系统下修改文件夹目录权限
linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...
- albert1017 Linux下压缩某个文件夹(文件夹打包)
albert1017 Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把 ...
- 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数
[转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...
- Linux中如何查看文件夹的大小
直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...
- linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体[转]
linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体 1.引用头文件#include<dirent.h> struct ...
随机推荐
- Mac安装Protobuf
1. 下载protobuf2.6.1:https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz ...
- CCF 201712-4 90分
90分,不知道错在哪里了,dijkstra算法,用一个数组的d[i]表示以i点结尾的小路的长度,以i点为中心扩展时,若下一点为k,如果i->k是小路,则 d[j] = d[k]+M[k][j]; ...
- 【POJ1185】炮兵阵地(状压DP)
题意: 思路:状压DP经典题 可以预处理下每一行内合法的状态,发现很少 所以转移时可以使用状态的编号而不是状态本身 DP时记录前两行状态的编号进行转移和判断 #include<cstdio> ...
- 2017icpc乌鲁木齐网络赛Colored Graph (构造)
题目 https://nanti.jisuanke.com/t/16958 题意 给定一个n(n<=500)个点的无向图,给每条边黑白染色,输出同色三角形最少的个数和对应的方案 分析 首先考虑给 ...
- 洛谷 P3879 [TJOI2010]阅读理解
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...
- Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
这是版本的问题: 解决办法有两种: 1.降低Quartz版本,降到1.X去. 2.升级Spring版本到3.1+,根据Spring的建议,将原来的**TriggerBean替换成**TriggerFa ...
- 打开input输入的时候,css中position:absolute/fixed定位的时候,定位元素上移问题解决
1.异常代码 <style> .box{ min-height: 100vh; width: 100%; position: relative; } .position{ position ...
- Nexus3.0.1如何上传第三方插件
原文:http://blog.csdn.net/wang465745776/article/details/52527905 前提条件 Nexus 3.0.1 提出问题 如何上传第三方插件到Nexus ...
- eclipse设置全局编码为UTF-8的方法
1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右侧Text file encoding ...
- Office WORD里面打字,后面的字自动被删除怎么办
word或其他编辑器里打字以后其后面的字就被自动删除了-解决方案 2011-09-26 14:52:09| 分类: 电脑维护|字号 订阅 解决方法: 再按一下 Insert键 就OK啦 今天有 ...