第一章 Linux内核简介

一、Unix

Unix是一个强大、健壮和稳定的操作系统。

  1. 简洁
  2. 绝大部分东西都被当做文件对待。这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open(),read(),write(),lseek()和close()
  3. 出色的平台可移植性——内核和相关的系统工具软件用C语言编写而成
  4. 进程创建迅速
  5. 进程间通信原语简单稳定

Unix——支持抢占式多任务、多线程。虚拟内存、换页、动态链接和TCP/IP网络。

二、操作系统和内核简介

操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。

  • 内核
  • 设备驱动程序
  • 启动引导程序
  • 命令行shell或者其他种类的用户界面
  • 基本的文件管理工具和系统工具

内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。

这种系统态和被保护起来的内存空间,统称为内核空间

在系统中运行的应用程序通过系统调用来与内核通信。

应用程序完成其工作的基本行为方式是:

应用程序通过系统调用界面陷入内核。

处理器的活动必然其下三者之一:

  • 运行于用户空间,执行用户进程
  • 运行于内核空间,处于进程上下文,代表某个特定的进程执行
  • 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

三、Linux内核版本

Linux内核有两种,稳定的和处于开发中的。



从版本号如果是偶数,就是稳定版,如果是奇数,就是开发版。

第二章 从内核出发

一、获取内核源码

课本中给出的方式是使用git,git的使用方法在上学期就曾经学习过,所以这里列出代码:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

git pull # 更新分支到Linux的最新分支

安装:

tar xvjf linux-x.y.z.tar.bz2
或者
tar xvzf linux-x.y.z.tar.gz

※ 如果使用git获取就不需要下载压缩文件。

※/usr/src/linux目录应当保证原封不动。

打补丁:

patch -p1 < ../patch-x.y.z

二、内核源码树

这一段与笔记中互为印证。



三、编译内核

1.配置内核

  1. 字符页面的命令行工具:

     make config
  2. 图形界面工具

     make menuconfig

配置项的二选一和三选一:

二选一:yes 或者 no

三选一:yes 或者 no 或者 module(以模块生成)

其他的几种配置:

make defconfig //基于默认配置
make oldconfig //验证和更新配置

2.编译内核

make

减少编译的垃圾信息?对输出进行重定向。

make > .. /detritus # 重定向到这个文件里了
make > /dev/null # 把无用的输出信息重定向到永无返回值的黑洞里。

衍生多个编译作业?

make jn # n是衍生出的作业数,每个处理器可以衍生出1或2个作业,16核时n可取32.

3.安装新内核

make modules_install

System.map这个文件是一份符号对照表

四、内核开发的特点

  1. 内核开发时既不能访问C库也不能访问标准的C头文件

    应对:include/linux文件夹中包含了所需的内核头文件。
  2. 内核编程时必须使用GNU C
    • 内联函数:

      函数会在所调用的位置上展开。

      定义时,需要使用static作为关键字,用inline限定它。

      内联函数必须在使用之前就定义好,一般在头文件中定义。

      内核中优先使用内联函数而不是宏。

    • 内联汇编:

      通常使用asm()指令嵌入汇编代码,用volatile表示不优化

    • 分支声明:

      unlikely(x) - x很少出现,绝少发生,通常为假

      likely(y) - y经常出现,通常为真

  3. 内核编程时缺乏像用户空间那样的内存保护机制

    内核中内存不分页。
  4. 内核编程时难以执行浮点运算
  5. 内核给每个进程只有一个很小的定长堆栈
  6. 由于内核支持异步中断、抢占和SMP,必须时刻注意同步和并发

    SMP:对称多处理系统。

    常用的解决竞争的方法:自旋锁信号量
  7. 要考虑可移植性的重要性

    诸如保持字节序,64位对其,不假定字长和页面长度等。

总之

课本上的内容与视频中、老师上课讲述内容有所重复也有所补充,并且配合曾经学习过的知识一同学习,事半功倍。

20135202闫佳歆--week3 课本1-2章学习笔记的更多相关文章

  1. 20135202闫佳歆--week6 课本第三章学习笔记

    第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程, ...

  2. 20135202闫佳歆--week4 课本第5章学习笔记

    第五章 系统调用 一.与内核通信 系统调用在用户控件进程和硬件设备之间添加了一个中间层,作用如下" 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系 ...

  3. 20135202闫佳歆--week4 系统调用(上)--学习笔记

    此为个人笔记存档 week 4 系统调用(上) 一.用户态.内核态和中断处理过程 用户通过库函数与系统调用联系起来. 1.内核态 在高执行级别下,代码可以执行特权指令,访问任意的物理地址. 2.用户态 ...

  4. 20135202闫佳歆--week5 系统调用(下)--学习笔记

    此为个人笔记存档 week 5 系统调用(下) 一.给MenuOS增加time和time-asm命令 这里老师示范的时候是已经做好的了: rm menu -rf 强制删除 git clone http ...

  5. 20135202闫佳歆--week3 跟踪分析Linux内核的启动过程--实验及总结

    实验三:跟踪分析Linux内核的启动过程 一.调试步骤如下: 使用gdb跟踪调试内核 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd r ...

  6. 20135202闫佳歆--week5 课本18章学习笔记

    第十八章 调试 内核级开发的调试工作远比用户级开发艰难的多. 一.准备开始 准备工作需要的是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 在这一章里,调试的主要思想是让bug重现 ...

  7. 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记

    此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...

  8. 20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结

    week 7 实验:Linux内核如何装载和启动一个可执行程序 1.环境搭建: rm menu -rf git clone https://github.com/megnning/menu.git c ...

  9. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

随机推荐

  1. 封装Ajax框架!(前言篇)

    Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点,如果这些你都会的话,请直接跳转到封装ajax框架!(代码篇) 一.Ajax对象的创建 1.创建 ...

  2. js节流

    function _throttling(fn,wait,mustRun){ var time=null; var startTime= new Date() return function(){ c ...

  3. unity3D iTween的使用

     iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.让你做开发更轻松,用它能够轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等 到官网看看 http://itwe ...

  4. Tarjan-割点&桥&双连通

    $Tarjan$求割点 感觉图论是个好神奇的东西啊,有各种奇奇怪怪的算法,而且非常巧妙. 周末之前说好回来之后进行一下学术交流,于是wzx就教了$Tarjan$,在这里我一定要说: wzx  AK   ...

  5. BZOJ2502:清理雪道(有上下界最小流)

    Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时 ...

  6. [Message123] JMS 与 MQ

    https://www.cnblogs.com/steven520213/p/6810369.html JMS的队列消息传递过程如下图(消费者与生产者): JMS的主题消息传递过程如下图(发布/订阅) ...

  7. docker swarm英文文档学习-1-概述

    参考https://docs.docker.com/engine/swarm/ Swarm mode overview群模式概述 Docker的当前版本包括集群模式,用于本地管理称为集群的Docker ...

  8. jenkins报错;自定义工作目录;

    [1]no such file 报错: 如果jdk配置路径错误,有可能会报这样的错误: 其实只要在/etc/profile中配置好JAVA_HOME就足够了: 对应的系统配置框,留空不新加即可: [2 ...

  9. OpenCV——阈值化

    上述五种结合CV_THRESH_OTSU(自适应阈值),写成:THRESH_BINARY | CV_THRESH_OTSU

  10. lvs+dr模式(关键操作)

    1)  IP配置(配置回环接口添加虚拟ip,让他代为转发) /sbin/ifconfig lo:0 192.168.1.96 broadcast 192.168.1.96 netmask 255.25 ...