第四周课本学习 (第一章 第二章 )
Linux内核简介
1.3 操作系统和内核简介
操作系统 :是指在整个系统中负责完成最基本功能和系统管理的那些部分 它包括:内核 设备驱动 启动引导程序 命令行shell或者其他种类的用户界面 基本的文件管理工具和系统工具
内核:由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器的时间调度程序,负责管理进程地址空间的内存程序和网络,进程间通讯等系统服务程序共同组成
处理器的活动必然其下三者之一:
- 运行于用户空间,执行用户进程
- 运行于内核空间,处于进程上下文,代表某个特定的进程执行
1.4 Linux内核与传统内核的比较
• 单内核与微内核设计之比较
• 单内核是一种较为简单的设计 所有的内核都设计成单内核 单内核就是把它从整体上作为一个单独的大过程来实现 同时也运行在一个单独的地址空间上 所有的内核服务都是在这样的一个大内核地址空间上运行 。
(内核之间的通信是微不足道的 )
- 微内核
- 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。
- 微内核
- 内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。
- 优点:安全。内核的各种服务独立运行,一种服务挂了不会影响其他服务。
- 缺点:内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。
- 微内核
1.5 Linux内核版本
Linux内核有两种 :• 稳定的
• 处于开发的
偶数:稳定版
奇数:开发版
从内核出发
1.2 获取内核源码
1.21. Git
- git实际上是一种开源的分布式版本控制工具。
-
Linux作为一个开源的内核,其源代码也可以用git下载和管理
- 获取最新提交到版本树的一个副本 - $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - 下载代码后,更新自己的分支到最新分支 - $ git pull
1.22安装内核源代码
- 压缩形式为bzip2:
$ tar xvjf linux-x.y.z.tar.bz2
-
压缩形式为zip:
$ tar xvzf linux-x.y.z.tar.gz
关于参数: -x 解开.tar格式的文件 -v 显示详细信息 -j 使用bzip2程序 -z 使用gzip程序 -f 使用归档文件
1.23 使用补丁
从内部源码树开始,运行$ patch -p1 < ../patch-x,y,z
2.2 内核源码树
2.3 编译内核
配置选项(指定内核源码可以访问的值,一般以预处理宏的形式表示)
• 决定哪些文件编译进内核;通过预处理命令处理代码。
• .二选一:yes/no
• 三选一:yes(把代码编译进主内核映像中)/no/module(该配置项被选定了)【驱动程序一般是三选一】
• 可以是字符串或整数 - 配置工具: $ make config 配置命令解释器,最简单的一个字符界面下的命令行工具; $ make menuconfig 配置用户界面,基于ncurse库的图形界面工具; $ make gconfig 基于gtk+的图形工具; $ make defconfig 基于默认的配置为个人的体系结构创建一个配置; $ make oldconfig 验证和更新配置; - .config文件:配置项会被存放在内核代码树根目录下。
2.4 内核开发的特点
内核编程时既不能访问C库也不能访问标准的C头文件
内核编程时必须使用GNU C
-
内联函数: 函数会在所调用的位置上展开。 定义时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中优先使用内联函数而不是宏。
-
内联汇编: 通常使用asm()指令嵌入汇编代码,用volatile表示不优化
-
分支声明: unlikely(x) - x很少出现,绝少发生,通常为假 likely(y) - y经常出现,通常为真
内核编程时缺乏像内存空间那样的内存保护机制
难以执行浮点运算
考虑可移植的重要性