一  linux组成:kernel、库、rootfs、程序

1、kernel的功能:

1) kernel提供的功能都通过系统调用给用户接口

   2) kernel包括:进程管理 、内存管理 、网络管理 、驱动程序、安全管理 、文件系统

 

 

  2、库

    函数功能模块集合,调用接口是二进制程序,要想运行,必须别其他程序调用,即其他程序面向硬件的一个中间层,有两种情形

      1)过程调用(procedure)无返回值

      2)函数调用(function ):有返回值

  3、rootfs

    linux一切皆文件,除了一级文件外,其他文件需要挂载至根文件系统

  4、程序

    1)、开机过程
                  开机 -->内核运行 --> 内核加载根文件系统 -->运行根文件系统上的第一个应用程序init

    init:它是负责后面的总的应用程序的启动回收等,启动可能需要向内核申请,这一切都在用户空间运行,如果init程序终止了,则用户空间的所有程序终止
              2)、配置文件
                  让程序按照我们需要的方式一直运行下去

二 运行中分为二层系统环境

  1)用户空间:应用程序

  2)内核空间:系统调用时会运行

三 内核程序设计流派

  内核也是应用程序,内核具有许多功能,那么是将这些功能全都整合到内核中,还是各功能独立成子系统,是内核设计流派不同的主要原因。

    

 

  注:linux在一步步的发展中吸取了微内核的设计经验,虽然是单内核,但是兼具微内核的特性。

linux通过使用模块化内核设计来兼具微内核特性,但这样的模块化设化设计并不是像微内核一样是各个子系统,而是由核心加外围的功能性模块组成内核。而微内核子系统都是各自独立运行的,不需要依赖其他部分就能工作。而linux各模块必须依赖核心,在使用时进行装载,不用时被动态卸载。linux下的模块外在表现为类型程序的库文件,只是程序库文件后缀名为.so,而内核模块后缀名为.ko(kernel object),被内核调用。 

四 linux操作系统中内核特点

支持模块化

linux内核会将其各部分功能模块化,这使得在安装linux内核时,可以仅保持最基本的内核和功能,不过内核中模块数量会变多。linux内核中的.ko(kernel object)文件就是可以被内核调用的内核模块。

做以下假设:驱动是内核提供的,编译好一个内核之后,在装在主机上,在未来添加新的硬件设备没有新的驱动的话。是重新编译一次内核?这种设计是一件反人类的设计啊,因此引入了模块设计。

模块化设计得以避免这种情况,故各大厂商可以通过模块化的形式开发自己的驱动,只需针对某一特定设备开发自己驱动程序即可,在编译驱动模块。由于linux支持动态装载和卸载模块,因此当我需要和不需要某一功能时,可自行拆卸,此操作并不影响核心的正常运行。

五 linux内核的组成部分

  1、内核核心文件

    /boot/vmlinuz-VERSION-release

       VERSION :内核版本,release:rpm包的发行号,不是必要的  

  2、ramdisk(内存盘)

     CentOS 5:/boot/initrd-VERSION-release.img
                  CentOS 6,7:/boot/initramfs-VERSION-release.img

  当系统完成内核的加载之后,内核要加载根文件系统以启动用户空间,但是根文件系统是在某个硬件设备之上,内核需要某驱动程序来装载根文件系统,但是驱动程序的文件又存在某目录之下,也就是存在根文件系统之下(鸡和蛋的问题)

内核有两种解决方案:

    方案一:将驱动程序编译进内核,但是因为不知道用户要装载哪种根文件系统,会导致内核变复杂

    方案二:借助一个外部设备来生成驱动根文件系统的驱动程序,ramdisk就是这样一个文件,它把内存当做一个磁盘来使用,将硬盘设备装载至内核,伪根文件系统仅仅存有驱动根文件系统所在硬件设备的文件,它随着内核被装载至内存也装载进内存,它和内核在同一个目录之下,所以内核完成启动初始化后,就来加载这个文件中的各种驱动程序,这个文件不是提前制作后的,而是内核被加载之后动态生成的,以相对应的生成对应硬件设备的驱动程序文件。它仅仅是辅助装载驱动,装载完成之后进行根切换,把临时的这个为根文件系统切换为真正的根文件系统              

  3、功能模块文件

    /lib/modules/VERSION-release

 
#查看内核核心文件
[root@Centos5 ~]# ls /boot
config-2.6.18-398.el5 grub initrd-2.6.18-398.el5.img lost+found message symvers-2.6.18-398.el5.gz System.map-2.6.18-398.el5 vmlinuz-2.6.18-398.el5
vmlinuz-2.6.18-398.el5 内核核心文件
 
 
 
#查看内核模块文件
[root@Centos5 ~]# ls /lib/modules/2.6.18-398.el5/
build modules.dep modules.pcimap updates
extra modules.ieee1394map modules.seriomap weak-updates
kernel modules.inputmap modules.symbols
modules.alias modules.isapnpmap modules.usbmap
modules.ccwmap modules.ofmap source
 

linux内核管理的更多相关文章

  1. Linux 内核管理

    Linux内核基础:Linux Kernel:  Linux内核的体积结构是单内核的,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制,使得虽然是单内核,但工作在模块化的方式下,并且模块可以动态 ...

  2. Linux内核管理子系统和进程管理子系统

    内核管理子系统职能:1.管理虚拟地址与物理地址的映射 2.物理内存的分配 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体. 进程:是一个执行中的程序,它是动态的实体 进程四要素: ...

  3. 二十七、Linux内核管理

    内核组成: uname命令 内核:uname,mkinitrd,dracut 模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod /proc,sysctl,/ ...

  4. Linux 内核管理类

    一个类由一个 struct class 的实例来定义: struct class { char *name; struct class_attribute *class_attrs; struct c ...

  5. linux内核--内存管理(二)

    一.进程与内存     所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内 ...

  6. 初探Linux内核中的内存管理

    Linux内核设计与实现之内存管理的读书笔记 初探Linux内核管理 内核本身不像用户空间那样奢侈的使用内存; 内核不支持简单快捷的内存分配机制, 用户空间支持? 这种简单快捷的内存分配机制是什么呢? ...

  7. Linux内存管理 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4491368.html Linux内存管理 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理 ...

  8. 2018-2019-1 20189215 《Linux内核原理与分析》第七周作业

    <庖丁解牛>第六章书本知识总结 操作系统内个实现操作系统的三大管理功能:进程管理.内存管理.文件系统.分别对应<操作系统原理>中最重要的3个抽象概念是进程.虚拟内存和文件. L ...

  9. linux物理内存管理

    1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助 ...

随机推荐

  1. Django里使用open函数

    Django里使用open函数 前言 在Django里使用open函数打开一个文件的时候,常常会遇到路径错误的问题.我在Django APP里写了一个爬虫用于为网站提供数据,但是需要打开文件,也就是在 ...

  2. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 运行Java Web项目报错

    运行Java Web项目报错 今天,我启动服务,发现项目报错,并且是在打开登录界面时报错. 具体错误如下: org.apache.catalina.core.Standard WrapperValue ...

  4. WIN7 嵌入式系统安装教程 Windows Embedded Standard 2011 安装

    轻松构建你的第一个 Windows Embedded Standard 2011 镜像.通过本文你可以快速掌握如何使用Windows Embedded Standard 2011 CTP1 来构建一个 ...

  5. 三级级联查询省份名称和编码(保证名称不重复)的SQL语句

    三级级联查询省份名称和编码(保证名称不重复)的SQL语句 1.省份.地市和县级数据库表 2.SQL语句 SELECT DISTINCT t.`province_name`,t.`province_co ...

  6. JDBC连接池(三)DBCP连接池

    JDBC连接池(三)DBCP连接池 在前面的随笔中提到 了  1.JDBC自定义连接池  2. C3P0连接池 今天将介绍DBCP连接池 第一步要导入jar包   (注意:mysql和mysql 驱动 ...

  7. 用OpenStack界面轻松创建虚拟机的你,看得懂虚拟机启动的这24个参数么?

    看这篇文章之前,保证看过以下文章: 我是虚拟机内核我困惑?! Qemu,KVM,Virsh傻傻的分不清 裸用KVM创建虚拟机,体验virtualbox为你做的10件事情 大家从OpenStack页面上 ...

  8. JVM 调优系列之图解垃圾回收

    摘要: jvm必知系列,总结一些常见jvm回收机制,方便查阅 对于调优之前,我们必须要了解其运行原理,java 的垃圾收集Garbage Collection 通常被称为"GC", ...

  9. Python Cookbook(第3版)中文版:15.16 不确定编码格式的C字符串

    15.16 不确定编码格式的C字符串¶ 问题¶ 你要在C和Python直接来回转换字符串,但是C中的编码格式并不确定. 例如,可能C中的数据期望是UTF-8,但是并没有强制它必须是. 你想编写代码来以 ...

  10. Entity Framework Core 2.0 入门简介

    不多说废话了, 直接切入正题. EF Core支持情况 EF Core的数据库Providers: 此外还即将支持CosmosDB和 Oracle. EFCore 2.0新的东西: 查询: EF.Fu ...