Linux Kernel概述
Linux系统的基础包含了内核、C库、工具集和系统的基本工具。
内核态与用户态
内核运行的时候,系统是以内核态进入到内核空间运行的。而不同用户执行程序的时候,是以用户态在用户空间中运行的。
编译内核
配置内核
内核中有许多可以配置的选项,以CONFIG_FEATURE
的形式表示。
这些配置项的值只有两种选择:
yes
或no
二选一,代表是否开启某一项功能。yes
、no
或module
三选一,其中module
表示了功能会被安装,但是是以模块的形式。
使用make config
即可开始配置相关设置(只是有极为多的条目需要一一配置),另外还可以借助一些工具。
配置完成后进行编译,使用make
即可,由于内核内容众多,花费的时间会很长。
内核安装
内核的安装取决于使用的引导器,不过目前一般都在使用grub
引导。
具体安装流程待补充。
内核开发的特点
不能访问C库,也不能访问标准的C头文件。
主要原因在于速度和大小,对于内核来说都不合适。
虽然如此,但是大部分常用的C库函数都已经在内核中实现了,如操作字符串的函数可以通过包含
<linux/string.h>
来获得。这些能够访问的属于内核头文件。
必须使用GUN C。
没有内存保护机制
原本在非法访问内存时的内存保护机制就是由内核提供的,内核内部是没人来保护的。
所以在内核中就需要注意非法的地址访问,否则很有可能会直接挂掉。
另外内核中的内存是不分页的,用多少物理内存就少多少,注意内存占用。
尽量不要在内核中使用浮点数
内核不能完美支持浮点操作,使用浮点数会需要处理许多额外的东西,所以最好干脆不要使用。
使用容积小而固定的栈
内核中栈的大小有限,无法实现动态增长。
内核栈的大小因体系结构不同而不同,但都为两页。
同步和并发
内核中许多特性都要求并发地访问共享数据,这要求有同步机制以防止冲突。
常见的解决方法是自旋锁和信号量。
可移植性
Last updated
Was this helpful?