• 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分支优化

     

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/feisky/p/2433252.html
Copyright © 2020-2023  润新知