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

 

原文地址:https://www.cnblogs.com/feisky/p/2433252.html