应该说是把linux内核这部分知识提前了,因为坐公交需要点视频来打发一下时间,感觉linux内核的视频就不错,就顺便把linux内核提前了。这一次也是打算视频和书一起看,然后总结。书的话还是推荐《深入linux内核架构》。不吹水了,开始进入正题。

1.1 内核简介

1.1.1 内核的任务

在纯技术层面,内核是硬件与软件之间的一个中间层。其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。

尽管如此,仍然可以从其他一些有趣的视角对内核进行研究

  • 从应用程序的视角:内核可以被认为是一台增强的计算机,将计算机抽象到一个高层次上。会把硬件上的各种细节屏蔽,然后应用层,只需要调用内核的API,就能使用各种功能。
  • 当若干程序在同一系统中并发运行时,也可以将内核视为资源管理程序。内核负责将可用的共享资源(包括CPU时间、磁盘空间、网络连接等)分配到各个系统进程,同时还需要保证系统的完整性。
  • 另一种研究内核的视角是将内核视为库,其提供了一组面向系统的命令。

1.1.2 实现策略

当前,在操作系统实现方面,有以下两种主要的范型。

  1. 微内核,只有最基本的功能直接由中央内核实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。例如:独立进程可能负责实现各种文件系统,内存管理等。(当然,与系统本身的通信需要用到最基本的内存管理功能,这是微内核实现。)

    好处:动态可扩展性和运行时切换重要组件,

    缺点:由于各个组件之间支持复杂通信需要额外的CPU时间。

  2. 宏内核,与微内核相反,宏内核是构建系统内核的传统方法。在这种方法中,内核的全部代码,包括所有子系统(如内存管理、文件系统、设备驱动程序)都打包到一个文件中。

宏内核的性能仍然强于微内核,linux仍然是依据这种范型实现的。但其中已经引进了一个重要的革新。在系统运行中,模块可以插入到内核代码中,也可以移除,这使得可以向内核动态添加功能。

1.2 为什么内核是特别的

内核很神奇,但归根结底它只是一个大的C程序,带有一些汇编代码(不时出现很少量的“黑巫术”)。

是什么使得内核如此吸引人?原因有几个。

  1. 内核是由世界上最好的程序员编写的,源代码可以证实这一点。
  2. 结构良好,细节一丝不苟,巧妙的解决方案在代码中处处可见。
  3. 内核采用了设计得非常干净的抽闲,以保持代码的模块化和易管理性,与内核其他方面混合起来,使得代码非常有趣和独特。
  4. 内核会以上下文相关的重用比特位置,多次重载结构成员,还有很多其他东西。

还有许多不同于用户程序的严肃问题需要说明:

  1. 调试内核通常要比调试用户层程序困难。应用层有大量的调试器可用。
  2. 内核提供了许多辅助函数,类似于用户空间的C语言库,但内核领域中的东西总是朴素得多。
  3. 用户层应用程序的错误可能会导致段错误(segmentation fault)或内存转储(core dump),但内核错误会导致整个系统故障。
  4. 必须考虑到内核运行的许多体系结构上根本不支持非对齐的内存访问。
  5. 所有的内核代码都必须是并发安全的。由于对多处理器计算机的支持,linux内核代码必须是可重入和线程安全的。
  6. 内核代码必须在小端序计算机上能够工作。
  7. 大多数的体系结构根本不允许在内核中执行浮点计算,因此计算需要想办法用整形来替代。

1.3 内核的组成部分

我们来看下完整的linux系统的各个层次:

linux内核下接计算机硬件,对计算机硬件统一管理,然后提供系统调用接口(API)给用户进程调用(前面也讲过了)。

第二张图,是linux内核中的一些子系统之间的关系,包括我们之后要学习的进程调度,内存管理,进程通信,虚拟文件系统,网络模块等内核子模块,这里就先看看吧,反正初学者也知识知道这些,并不清楚里面的知识。

linux系统中比较重要的数据结构:

task_struct:代表一个进程数据结构指针形成一个task数组

mm_struct:代表进程的虚拟内存

inode:代表虚拟文件系统中的文件、目录等对应的索引节点

1.4 linux内核源码组织

1.4.1 内核版本说明

linux内核版本号由3组数字组成

第一组:目前发布的内核主版本

第二组:偶数表示稳定版本,奇数表示开发中版本

第三组:错误修补次数

1.4.2 源码组织

比较偷懒,直接赋值一个图片即可。

一、linux内核源码分析(内核源码结构组成)相关推荐

  1. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】...

    原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...

  2. Linux内核 eBPF基础:kprobe原理源码分析:源码分析

    Linux内核 eBPF基础 kprobe原理源码分析:源码分析 荣涛 2021年5月11日 在 <Linux内核 eBPF基础:kprobe原理源码分析:基本介绍与使用>中已经介绍了kp ...

  3. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】...

    原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinauni ...

  4. 【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★

    文章目录 一.JobServiceContext 引入 二.JobServiceContext 源码分析 三.用户在应用层如何使用 JobScheduler 四.用户提交任务 五.广播接收者监听广播触 ...

  5. Android源码分析--MediaServer源码分析(二)

    在上一篇博客中Android源码分析–MediaServer源码分析(一),我们知道了ProcessState和defaultServiceManager,在分析源码的过程中,我们被Android的B ...

  6. k8s源码分析--kube-scheduler源码(一)

    版本:v1.13.0 启动分析 kubernetes基础组件的入口均在cmd目录下,kube-schduler入口在scheduler.go下. kubernetes所有的组件启动采用的均是comma ...

  7. k8s client-go源码分析 informer源码分析(3)-Reflector源码分析

    k8s client-go源码分析 informer源码分析(3)-Reflector源码分析 1.Reflector概述 Reflector从kube-apiserver中list&watc ...

  8. xf86-video-intel源码分析1 —— 源码目录结构概览

    在<Spectacle/Flameshot/X11 Xlib截屏问题现象及解决方法>一文(链接如下)中提到, Spectacle/Flameshot/X11 Xlib截屏问题现象及解决方法 ...

  9. Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7) 【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-4938388.html   研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了 ...

  10. 【Linux 内核】进程管理 ( 进程相关系统调用源码分析 | fork() 源码 | vfork() 源码 | clone() 源码 | _do_fork() 源码 | do_fork() 源码 )

    文章目录 一.fork 系统调用源码 二.vfork 系统调用源码 三.clone 系统调用源码 四._do_fork 函数源码 五.do_fork 函数源码 Linux 进程相关 " 系统 ...

最新文章

  1. 近世代数--外直积--外直积是什么?关于阶的性质?
  2. python切换消息窗_用Python切换窗口
  3. 一个edit的学习笔记
  4. 狂人日记学习 之一 CSS布局的目的
  5. 微信小程序php java_PHP实现微信小程序用户授权的工具类
  6. 一张图搞懂 Redis 缓存雪崩、缓存穿透、缓存击穿
  7. mysql常用的备份命令有哪些_Mysql常用命令及sql代码整理 非常实用值得收藏 - 文中之舞...
  8. 送走2007 ^_^ 迎来2008
  9. 十年磨一剑!腾讯QQ Linux版 2.0.0 Beta重磅发布!
  10. 胡小羊的前端专栏(1期)
  11. 技术族谱:软件开发相关知识体系的整理心得(图)
  12. 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
  13. Phoenix踩坑填坑记录
  14. 零基础小白需要多长时间可以学会UI设计?
  15. VC操作word绘制表格
  16. 今日头条能干掉微信么?
  17. colorkey口红怎么样_colorkey小众品牌口红唇釉效果好吗 – 爱分享
  18. Apache Cordova development lands on Visual Studio Code
  19. 在 F1 Delta Time 大奖赛中找到对速度的热爱
  20. 32位版本的轻量级linux,CRUX 3.4 发布,轻量级 Linux 发行版

热门文章

  1. Ruby中对应PHP的hex2bin和bin2hex方法
  2. RK3288出现tts下载不了
  3. mysql 12_Navicat for MySQL12免费版
  4. python绘制折线图和散点图
  5. MATLAB均值滤波
  6. C语言实现校运动会项目管理系统
  7. 鹏芯U盘(UDK2008)意外断电后修复 1
  8. Mac版的DjVu格式文件阅读工具
  9. 计算机管理中无法格式化,Win7电脑无法格式化SD卡怎么办?
  10. 局域网ftp工具,ftp上传下载工具使用指南,5款好用的局域网ftp工具推荐