读书笔记(chapter1-2)

一、linux内核简介

1.1unix的历史

  1、unix强大的根本原因:1.unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的;2.在unix中,所有的东西都被当作文件对待;3.unix的内核和相关的系统工具软件是用C语言编写而成,在各种硬件体系架构面前都具备令人惊异的移植力;4.unix的进程创建非常迅速,并且有一个非常独特的fork()系统调用。

  2、unix已经发展成一个支持抢占式多任务、多线程、虚拟内存、换页、动态链接和TCP/IP网络的现代化操作系统。

1.2linux简介

  1、linux内核也是自由(公开)软件

1.3操作系统和内核简介

  1、内核被称作是管理者或者是操作系统核心,它一般处于系统态,拥有受保护的内存空间和访问硬件设施的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。

  2、在系统中运行的应用程序通过系统调用来和内核通信:

    运行于用户空间,执行用户进程

    运行于内核空间,处于进程上下文,代表某个特定的进程执行

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

1.4linux内核和传统unix内核的比较

  1、linux支持动态加载内核模块

  2、linux支持对称多处理的(SMP)机制

  3、linux内核可以抢占

  4、linux不区分线程和其他一般进程,所以进程都一样

1.5linux内核版本

 

二、从内核出发

2.1获取内核源码

  1、使用git

    git是分布式的的系统

  2、安装内核源代码

      内核压缩以GUN zip(gzip)和bzip2两种形式发布

  3、使用补丁

2.2内核源码树

  1、arch:特定体系结构的源码

     kernel:像调度程序这样的核心子系统

    lib:通用内核函数

2.3编译内核

  1、配置内核

    配置选项也可以是字符串或整数

    $ make config

    $ make menuconfig

           $ make gconfig

  2、减少编译的垃圾信息

    $ make >  /detritus

    $ make >  /dev/null

  3、衍生多个编译作业

  4、安装新内核

    % make modules_install

2.4内核开发的特点

1、不能访问C库也不能访问标准的C头文件

  内核不能链接使用标准C函数库;

  基本的头文件位于内核源代码树顶级目录下的include目录中;

  体系结构相关的头文件位于内核源代码树的arch/<architecture>/include/asm目录中;

  内核提供的printk()函数几乎与printf()函数相同,唯一区别在于,printk()允许你通过指定一个标志来设置优先级。sysslogd会根据这个优先级标志来决定在什么地方显示这条系统消息;

2、内核编程时候必须使用GUN C

  1.内联函数:定义一个内联函数时候,需要使用static作为关键字,并且用inline限定它

  2.内嵌汇编:通常使用asm()指令嵌入汇编代码

  3.分支声明

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

  内核中内存都不分页

4、内核编程难以执行浮点运算

5、内核给每个进程只有一个很小的定长堆栈

  32位 8KB

6、内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发

7、可移植性很重要

 

posted on 2016-03-15 14:51  20135325  阅读(170)  评论(0编辑  收藏  举报

导航