zoukankan      html  css  js  c++  java
  • (笔记)Linux内核学习(一)之内核介绍

    内核与操作系统:

    内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中;

    操作系统与底层硬件设备交互和为运行应用程序提供执行环境。

    Linux内核与微内核比较:

    微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。

    运行在微内核之上的几个系统进程实现系统级功能:内存分配,设备驱动程序……完全的模块化进程。任何操作

    系统层都是独立的程序模块,通过模块化的方法定义明确清晰的软件接口与其它层交互。内核中暂且不需要执行

    的系统进程可以被调出或者撤销。微内核便于移植和充分利用RAM,但开销大效率是个问题。

     

    宏内核:Linux内核:单块结构。内核的全部代码,包括所有子系统(如内存管理、文件系统、设备驱动程序)

    都打包到一个文件中。内核中的每个函数都可以访问内核中所有其他部分。模块特性依赖于内核与用户层之间设计

    精巧的通信方法,这使得模块的热插拔和动态装载得以实现。

    每个内核层都被继承到整个内核程序中,并代表着当前进程在内核态下运行。

    模块化(非进程)——允许在运行状态下动态的安装。模块是一个目标文件,其代码在运行时链接到内核或从内核解除链接。

    目标代码通常是一组函数组成,用来实现文件系统,驱动程序……这些模块与其他静态链接内核函数一样,代表着当前进程

    在内核态下执行,直接函数调用避免进程切换消息传递的开销,效率可能更高。

     

    Linux用户程序两种状态:

           用户态和内核态;用户态切换到内核态:

        l  进程系统调用

        l  CPU异常

        l  中断

        l  内核线程被执行

      多用户系统:

        能并发执行和独立的执行多个用户的应用程序,各个用户拥有独立空间。用户组,Root用户。

    Linux进程:

           进程Process:

        l  操作系统的基本抽象。

        l  进程是程序执行时的一个实例;一个运行程序的执行上下文。

        l  几个进程能并发的执行同一个程序;而同一个进程能顺序执行几个程序。

        l  具有独立的地址空间;多个进程可以同时执行。

      进程受内核管理;每个进程由一个进程描述符表示,包含进程当前的状态信息。

      当内核暂停一个进程的执行时,就把几个相关处理器寄存器的内容保存在进程描述符中。这些寄存器包括:

        l  程序计数器PC和栈指针SP寄存器

        l  通用寄存器

        l  浮点寄存器

        l  包含CPU状态信息的处理控制寄存器

        l  跟踪进程对RAM访问的内存管理寄存器

      当内核恢复执行进程时:将进程描述符中合适字段来装在CPU寄存器,根据程序计数器指向恢复到程序执行的地方。

    Linux重入内核:

      内核可重入:

        可重入函数:使用局部变量

        实现同步机制:信号量、锁、关中断

      进程执行状态切换: 进程在用户态与内核态的转换,Linux是抢占式内核

      进程地址空间:每个进程运行在似有地址空间

      同步和临界区:内核数据操作访问。

      进程间通信IPC:信号量、消息队列、共享内存

      进程管理:fork与_exit,exec(),子进程与父进程

          

    Linux文件系统:

      文件系统是对存储设备上的数据和元数据进行组织的机制,以树形结构组织。

           文件类型:

        不同文件

        目录

        符号链接

        面向块得设备文件                               (设备驱动相关)

        面向字符的设备文件                           (设备驱动相关)

        管道(pipe)和命名管道(named pipe)(进程间通信相关)

        套接字(socket)                             (进程间通信相关)

      文件访问权限和访问模式

      文件描述符和索引节点:记录文件的信息数据。

      文件操作的系统调用:open、read、write……

          

    内存管理:

           虚拟内存:处于应用程序内存请求与硬件内存单元之间的逻辑层。

           随即访问存储器RAM:一部分用于内核映像,其余虚拟内存处理

           内核内存分配器:KMA 处理内存请求子系统

        l  速度快

        l  减少内存浪费

        l  减轻内存碎片

        l  与其他内存管理合作(页框)

        l  内存分配算法

      进程虚拟空间地址处理:内核分配给进程的虚拟地址空间由以下内存区组成:

        l  程序的可执行代码

        l  程序的初始化数据

        l  程序未初始化数据

        l  初始化程序栈

        l  所需共享库的可执行代码和数据

        l  程序动态请求的内存堆

      高速缓存:

    设备驱动程序:

           内核通过设备驱动程序与I/O设备交互,设备驱动程序在内核中,用户程序通过内核访问设备。

  • 相关阅读:
    7.$a = 'abcdef'; 请取出$a的值并打印出第一个字母
    8.PHP可以和sql server/oracle等数据库连接吗?
    6.能够使HTML和PHP分离开使用的模板
    4.用PHP打印出前一天的时间格式是2006-5-10 22:21:21
    5.echo(),print(),print_r()的区别
    3.数据库中的事务是什么?
    spring中配置quartz调用两次及项目日志log4j不能每天生成日志解决方法
    tomcat7性能调优与配置(以windows版为例)
    eclipse中maven下载不了私服上面的第三方包问题
    birt4.6部署到tomcat及启动服务报错解决方法
  • 原文地址:https://www.cnblogs.com/tdyizhen1314/p/5315478.html
Copyright © 2011-2022 走看看