zoukankan      html  css  js  c++  java
  • Linux内核简介


    Linux
    中一切都是文件,这样可以通过相同的系统调用接口来操作数据和设备。

     

    处理器的运行状态可以分为:

    • 运行于内核态,处于进程上下文中,代表某个进程执行了系统调用;
    • 运行于内核态,处于中断上下文,代表正在处理中断;
    • 运行于用户态,正在执行用户进程。

    单内核与微内核

    • 单内核:内核作为一个整体构成一个大过程,运行在一个地址空间中,这样的内核以单个二进制文件的形式存在。内核之间的通信是微不足道的,因为它们之间可以相互调用。
    • 微内核:内核根据功能划分为很多个过程,每个过程独立运行在各自的地址空间,它们通过IPC来通信

    Linux是一个单内核,但它吸取了微内核的精华:

    • 模块化设计
    • 抢占式内核
    • 内核线程
    • 动态装载内核模块
    • 避免了微内核的性能缺陷:所有东西都运行于内核态,可以直接互相调用,无需消息传递

     

    Linux内核的编译

    • make menuconfig 修改配置
    • make defconfig  根据体系结构生成一个默认的配置
    • make -j4 多个编译作业
    • 示例:

    $ make

    $ make modules

    # make modules_install

    # make install

    # depmod 2.6.18.8-xen

    # cd /boot

    # mkinitrd -v -f --with=sd_mod --with=scsi_mod initrd-2.6.18.8-xen.img 2.6.18.8-xen

     

    Linux内核开发的特点

    • 不能访问C
    • 必须使用GNU C
    • 缺乏用户空间的内存保护机制
    • 浮点数很难用
    • 很小的定长堆栈(内核栈为两页,即328KB6416KB
    • 异步中断、抢占和SMP要求时刻注意同步和并发(自旋锁/信号量)
    • 支持内联函数
    • 支持内联汇编
    • likely unlikely分支优化

     

  • 相关阅读:
    SpringMVC拦截器使用
    JavaCORBA
    Mybatis各语句高级用法(未完待续)
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part II
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part I
    iBatis连接MySQL时的注意事项
    MyBatis入门
    属性(property) VS 数据成员(field)
    [译文]C# Heap(ing) Vs Stack(ing) in .NET: Part III
    LINQ To Objects
  • 原文地址:https://www.cnblogs.com/feisky/p/2433252.html
Copyright © 2011-2022 走看看