浅入分析和Linux内核相关的文件夹/proc和/sys .

简介: 近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了9次。。。如果您真的觉得我的文章很烂,请告诉我原因,不胜感激。 这星期,马哥讲了关于Linux内核的编译和Linux的内核模块,浅显易懂,所以写出来和大家一起分享学习成果。

近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了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. 临时调成(暂时有效,立即生效):

  1. # echo >                  echo 1 > /proc/sys/net/ipv4/ip_forward           #全路径    
  2. # sysctl -w               sysctl -w net.ipv4.ip_forward=1                  #去掉/proc/sys  用.隔开          

                                        
2. 永久有效,(但是设置好不是立即生效)
通过设置/etc/sysct1.conf,他是启动时rc.sysinit读取的内核参数

 

例如修改里面的

  1. net.ipv4.ip_forward = 1                       #打开路由转发功能  

 

 

另外如果想使修改后的值立即生效

  1. #sysctl -p            

 

 

显示当前运行的所有生效的内核参数的值

  1. #sysctl -a            

#######这个文件是系统工程师生涯的直观重要的文件

http://www.ahbank.org/
目录
相关文章
|
存储 Unix Linux
浅入分析Linux
Linux 操作系统必须完成的两个主要目的 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户程序都直接与硬件部分进行交互, 比如典型的MS-DOS。
1016 0
|
安全 Linux Android开发
浅入浅出 Android 安全:第二章 Android Linux 内核层安全
第二章 Android Linux 内核层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一,Linux 已经被证明是一个安全,可信和稳定的软件,全世界数千人对它进行研究,攻击和打补丁。
1338 0
|
2月前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
95 4
|
1月前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
1月前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
1月前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
2月前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
51 2
|
2月前
|
缓存 网络协议 Linux
深入探索Linux操作系统的内核优化策略####
本文旨在探讨Linux操作系统内核的优化方法,通过分析当前主流的几种内核优化技术,结合具体案例,阐述如何有效提升系统性能与稳定性。文章首先概述了Linux内核的基本结构,随后详细解析了内核优化的必要性及常用手段,包括编译优化、内核参数调整、内存管理优化等,最后通过实例展示了这些优化技巧在实际场景中的应用效果,为读者提供了一套实用的Linux内核优化指南。 ####
60 1
|
2月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
87 9
|
2月前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。