近来文章被踩的厉害,我只想把自己从马哥学的知识自己总结下发到博客里,但是没想到昨天一篇文章刚发一上午被踩了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/

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

  1. Linux内核相关常见面试题

      转:http://www.embeddedlinux.org.cn/html/xinshourumen/201303/11-2475.html   本文详细阐述了linux内核相关的开发职位面试中 ...

  2. linux内核中的文件描述符(二)--socket和文件描述符

    http://blog.csdn.net/ce123_zhouwei/article/details/8459730 Linux内核中的文件描述符(二)--socket和文件描述符 Kernel ve ...

  3. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  4. 关于Linux系统清理/tmp/文件夹的原理

    转自:http://www.opsers.org/base/clean-up-on-the-linux-system-tmp-folder-you-may-want-to-know.html 我们知道 ...

  5. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  6. albert1017 Linux下压缩某个文件夹(文件夹打包)

    albert1017 Linux下压缩某个文件夹(文件夹打包) tar -zcvf /home/xahot.tar.gz /xahottar -zcvf 打包后生成的文件名全路径 要打包的目录例子:把 ...

  7. 【转】【Linux】Linux下统计当前文件夹下的文件个数、目录个数

    [转][Linux]Linux下统计当前文件夹下的文件个数.目录个数 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 统计文件夹下目录的 ...

  8. Linux中如何查看文件夹的大小

    直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...

  9. linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体[转]

    linux 系统获得当前文件夹下存在的所有文件 scandir函数和struct dirent **namelist结构体 1.引用头文件#include<dirent.h> struct ...

随机推荐

  1. HDU-1020-Encoding,题意不清,其实很水~~

    Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) http:// ...

  2. hdu4514(非连通图的环判断与图中最长链)(树的直径)

    湫湫系列故事——设计风景线 随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好.  ...

  3. BZOJ1986: [USACO2004 Dec] Dividing the Path 划区灌溉

    L<=1000000的土地上用长度在2*A~2*B的线段覆盖所有点,且给定n<=1000个区间,每个区间上只允许有一条线段,求最少多少线段,无解-1. f[i]表示填前i个土地最少线段,f ...

  4. as3corelib Tutorial:How to Use ArrayUtil Class in Flex

    ArrayUtil class contains static utility methods for manipulating and working with Arrays. Note that ...

  5. Two Sum(hashtable)

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  6. 【stl学习笔记】list

    list使用双向链表来管理元素. 与vector.deque的区别: 1.list不支持随机存取,在list中随机遍历任意元素,是很缓慢的行为 2.任何位置上执行元素的安插和移除都非常快,始终是常数时 ...

  7. webpack-Manifest

    Manifest 在使用 webpack 构建的典型应用程序或站点中,有三种主要的代码类型: 你或你的团队编写的源码. 你的源码会依赖的任何第三方的 library 或 "vendor&qu ...

  8. Lync 2013 与Exchange 2013 UM&amp;UC 集成!

     设置好对应的拨号计划.我们设置分机号码为4位: 配置好接入号码为5000: 配置自己主动助理号码为6000: 改动UM拨号模式为双模式: Set-UMService -identity Exch ...

  9. &lt;一&gt;读&lt;&lt;大话设计模式&gt;&gt;之简单工厂模式

    工厂模式尽管简单.可是写下这篇文章却不简单. 第一:本人经过内心的挣扎后才决定開始写博文的.为什么呢,由于好长时间没有写了,对自己的文学功底也是好不自信.可是技术这东西你不写出来你真不知道自己掌握多少 ...

  10. 【git体验】git原理及基础

    原理:分布式版本号控制系统像 Git,Mercurial,Bazaar 以及 Darcs 等,client并不仅仅提取最新版本号 的文件快照,而是把原始的代码仓库完整地镜像下来. 这么一来.不论什么一 ...