[linux] 内核简介

文章来自公众号 技术乱舞

原文链接https://mp.weixin.qq.com/s/KjpwHhxQV7To3DRe5u8wag

详述linux内核基础知识,先从简介开始,如果感兴趣可以关注#公众号:技术乱舞

文章目录

前段时间,看了《Linux内核设计与实现》这本书,从个人的感受来说,说实话和网上说的大致差不多,一本很基础很适合入门的一本书linux书,思来想去,还是打算做一下整本书的总结,也算是为自己以后深入学习linux内核重新打打基础,毕竟只读书不思考也没啥意义。把自己理解的知识,用键盘记录下来,也是一件有意义的事情。
艾恩凝

众所周知,linux源于Unix,在1991年的某天,那个时候作为芬兰赫尔辛基大学的一名学生Linus,正对着Unix系统烦恼,同时流行的Microsoft的DOS系统,除了玩游戏没有其他用处,就此linux运用而生,并迅速赢得了众多用户喜爱。简短的介绍了linux由来,如果感兴趣可以到网上查询相关Linus的故事。

1.1 内核简介

谈内核就离不开操作系统,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分,主要包括内核、设备驱动程序、启动引导程序、命令行shell、GUI图形界面、基本的文件管理工具和系统工具,还有应用程序。

说了这么多,内核才是操作系统的心脏,可以被称作管理者,或者操作系统核心,从下图可以看出它们的关系。

图片

上图简要的概括了应用程序、内核、硬件的关系,,围绕内核展开的活动,其实主要概括为就是三种,其一,程序运行于用户空间,执行用户进程,其二,程序运行于内核空间,处在进程上下文,代表某个进程执行,最后,程序运行于内核空间,处在中断上下文,与进程无关,处理某个中断。所有的程序都逃不掉这三种情况。

1.2 内核特点

  • 支持动态加载内核模块
  • 支持对称多处理机制
  • 内核可以抢占
  • 内核不区分线程和其他一般进程,对内核来说都一样
  • 内核提供设备类的面向对象的设备模型、热拔插事件

1.3 内核源码

简要的谈了谈,还是要看源码,可以使用git下载源码,也可去官网上,至于解压和怎么git就不多谈了,操作上主要说说打补丁和生成补丁吧。

$ patch -p1 < ../patch-x.y.z #打补丁$ diff -urN directory/file1 directory/file2 > xxx.patch #生成补丁

内核源码树由很多目录组成,如下表所示。

图片

1.4 编译内核

$ make config     # 简单内核配置$ make menuconfig # 图形界面配置$ make defconfig  # 基于默认配置创建一个配置$ make            # 最后执行make,进行编译

1.5 内核开发特点

内核开发相对于用户空间应用程序开发来说,内核有些特别之处,主要包括下面几种:

  • 内核开发不能访问C库也不能使用标准的C头文件,主要原因是内核使用C库庞大并且效率低下
  • 内核开发必须使用GNU C 的标准
  • 内核开发并没有用户空间那样的内存保护机制
  • 内核开发中不能轻易使用浮点数
  • 内核给每个进程都只有一个很小的定长堆栈
  • 内核开发必须注意同步和并发,毕竟内核支持异步中断、抢占和SMP
  • 必须要考虑移植性的问题

1.6 小结

走在内核开发学习路上,同时还有驱动开发,难就难在陌生,多看多思考多写写代码就会有收获,整理了一个小节的知识点,虽然特别基础,但也另有收获。虽然曾经来过,重走一遍,却有不一样的风景。过程也许一样,结局或许会不一样,就像有些书值得读多次。

欢迎关注 #公众号:技术乱舞 一起交流

灵魂碰撞