Linux内核学习,推荐的书籍:

《linux设备驱动开发详解第二版》、《Linux内核设计与实现第三版》、《嵌入式Linux应用开发完全手册》

第一篇:讲解Linux内核的基础知识,先有一个整体的框架,后续会逐步讲解,一步步深入。

1.物理地址和虚拟地址

地址转换:内核所使用的地址一定是虚拟地址,但是CPU真正最后使用或者访问的是物理地址,所以,必须有一个转换过程。内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易,+-这个差就行了。

页表:一般而言,页的大小是4K,所以说,页表的大小就是你所需要访问的所有物理地址除以4K。Linux所能查找的最小单位是页。

举例:如果所要访问的空间是4G,那么页表的大小就是1M。(4G=(4*1024M)/(4*1024)=1M)

页表是存在内存中的。Linux是通过查内存中的一张页表实现虚拟地址到物理地址的转换的。

内存的属性:可读可写可执行。每一个页都有属性。

2.Linux内核中的内存管理:页(4K byte)为单位进行分配内存。

3.系统调用(Linux特有):用户使用内核函数(API)的媒介。

具体实现:通过一个exception,使得应用程序陷入内核中执行。

4.内核线程-程序运行的主体。

内核只有线程,没有进程:内核因为代码空间只有一份,内核空间也只有一个,所有的内核线程共用一份内核代码,共用一个内核空间,所有只有线程,没有进程。

3种调度方式:SCHED_RR时间片轮转 SCHEDPRI 优先级 SCHED_RT实时进程(优先级最高)

调度的时机:时钟中断发生时,Linux发生内核态和用户态互相切换时,Linux执行完信号时。

5.内核中的同步和线程间通信方式

原子操作:所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。

同步通信方式:自旋锁spin_lock和信号量semaphore

异步通信方式:信号signal

6.中断

中断的硬件概念:就是外部的一个电平信号。

中断处理的上半部:需要Linux内核在暂时关闭其他中断信号,来处理的程序段。一定是处理关键的同时能够迅速完成的程序段。这个程序段一定是不能等待其他条件发生的。

中断处理的下半部:是上半部中来不及处理的,比较冗长的程序段,是需要等待其他程序运行结果或者需要等待获取其他资源的程序段。

7.时钟和定时器管理

时钟的硬件概念:时钟从硬件上讲是一种产生定时中断的电路。

RTC和system timer:RTC-实时时钟或实时计数器。属于CPU外围的资源。

时钟是专门用来给系统做计时用。而RTC是系统用来获取当前的系统时间,延时。

system timer是RTC的一个延伸,很多情况就是用作延迟和计算相对时间的。

tick和jiffies:

tick就是时钟中断的周期。假设系统时钟是100M。那么大致的tick值是10ms。

jiffies它是一个全局变量,如果系统是64位系统,他就是64位的变量。记录了从上电开始到现在所经历的tick数。

8文件系统概述

虚拟文件系统(VFS):是Linux内核为了屏蔽具体的物理文件系统的差异,所产生的一个中间层。

主要的物理文件系统(ext4,yaffs2等):ext4最大特点是有完善的日志系统。yaffs2是比较适合在nand Flash上部署的文件系统。

ubifs(ARM实时,执行速率快)和btfs(防止碎片产生)这两种是目前比较流行的新文件系统。

Linux内核的基本概念的更多相关文章

  1. Linux内核之 基本概念

    一直想写写Linux内核的文章,特别是进程这方面的,说实话,不好写,也不太敢写:)直到遇到了一本好书.<Linux内核设计与实现>,原书<Linux Kernel Developme ...

  2. 菜鸟装逼指南--linux内核中听过就能记住的概念

    打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...

  3. linux内核中听过就能记住的概念

    打算给我们部门弄个内部分享.发现大家对一些底层知识的认知停留在一句一句的,比如听说JVM使用-XX:-UseBiasedLocking取消偏向锁可以提高性能,因为它只适用于非多线程高并发应用.使用数字 ...

  4. Linux内核中网络数据包的接收-第一部分 概念和框架

    与网络数据包的发送不同,网络收包是异步的的.由于你不确定谁会在什么时候突然发一个网络包给你.因此这个网络收包逻辑事实上包括两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协 ...

  5. Linux内核设计与实现笔记_1_基本概念

    Linux内核设计与实现笔记_1_基本概念 操作系统 系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括: 内核, ...

  6. linux内核,驱动,应用程三者的概念和之间的关系

    驱动程序属于内核的一个部分.准确的说是内核的一个组件.不包含驱动的内核也叫做内核,并且这也是我们常说的内核.内核要干的事情无非5件. 1,内存管理 2,虚拟文件系统 3,进程调度 4,网络接口 5,进 ...

  7. <Linux内核源码>文件系统VFS内核4.0.4版本基本概念源码

    题外话:Linux内核从2.x和3.x到现在最新的4.x变化非常大,最直观的表现就是很多书上的内核代码已经无法直接继续使用,所以看看新的源码是非常有意义的! (下文中的内核源码都来自于 kernel ...

  8. Linux 内核版本命名

    Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...

  9. Linux内核--内核数据类型

    转自:http://www.linuxidc.com/Linux/2013-12/93637.htm 将Linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关.坚持使用严格的数 ...

随机推荐

  1. POJ1182食物链(并查集)

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  2. mysql安装出现的问题

    ERROR 1045 (28000): Access denied for user root@localhost (using password: NO) 错误描述: Mysql中添加用户之后可能出 ...

  3. (入门篇 NettyNIO开发指南)第三章-Netty入门应用

    作为Netty的第一个应用程序,我们依然以第2章的时间服务器为例进行开发,通过Netty版本的时间服务报的开发,让初学者尽快学到如何搭建Netty开发环境和!运行Netty应用程序. 如果你已经熟悉N ...

  4. root用户不能修改iptable文件

    问题: 需要放通IP 端口  执行: vi /etc/sysconfig/iptables, 添加完成后,wq保存,提示文件只读无法保存!!! 解决步骤: 1.查看文件权限  ls -ld /etc/ ...

  5. 每天一道Java题[10]

    题目 阐述创建线程最常用的两种方法及其对比. 解答 方法一:继承Thread类实现 步骤: 创建Thread类的子类,如MyThread. 重写Thread类的run()方法. 实例化MyThread ...

  6. 移动端车牌识别——可以嵌入智能手机系统里的新OCR识别技术

    移动端车牌识别技术,是在OCR光学字符识别技术的基础上研发的用来识别汽车号牌特征信息的图像识别技术.在国内,该项技术由北京易泊时代携手清华大学成功地将"国家863计划"项目成果-- ...

  7. Ionic进行PC端Web开发时通过脚本压缩提高第一次加载效率

    1. 问题 1.1. 问题上下文描述: 基于Ionic进行PC端的Web应用开发: 使用Tomcat作为最终服务发布容器. 1.2. 问题描述: 编译后main.js的大小为4-6MByte.(集成第 ...

  8. (转)wxWidgets 2.9.2svn(3.x)最小体积编译方法

    官方论坛.网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当.下面简单总结一下如何编译最新的SVN代码.下载最新源码(每日构建):http://biolpc ...

  9. 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率

    隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...

  10. sql 经典面试题

     如果数据库里两个日期型字段d1,d2,怎样用sql语句列出按月的所有区间,比如表结构如下localid    d1          d21         2014-1-15    2014-3- ...