Linux2.6--Linus电梯】的更多相关文章

      内核为了处理来自IO层的请求,需要进行相应的优化,因为当请求很多时,且请求的块又都几种在一块,那么如果按照顺序处理这些请求无疑是很大的时间开销,所以,我们需要寻求方法来处理这种情况(当然,不只是这一种情况),这篇文章介绍的就是Linux中经典的IO调度程序--Linus电梯,这个是以Linux的发明者Linus自己的名字命名的.在2.4版的内核中,Linus电梯是默认的IO调度程序.虽然在后来的2.6版内核中它被另外两个调度程序所取代了,但是由于这个调度程序比后来的调度程序简单,而且…
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linux系统编程为例并且会穿插一些深入理解Linux内核的内容来写. 1 入门与基本概念 本书的背景 Linux内核3.9,gcc编译器4.8,C库2.17 文件和文件系统 文件必须打开才能访问 同一个文件可以由多个进程或者同一个进程多次打开.系统会为每个打开的文件实例提供唯一描述符.进程可以共享文件描述…
最近太忙,居然过了2个月才更新第十四章.... 主要内容: 块设备简介 内核访问块设备的方法 内核I/O调度程序 1. 块设备简介 I/O设备主要有2类: 字符设备:只能顺序读写设备中的内容,比如 串口设备,键盘 块设备:能够随机读写设备中的内容,比如 硬盘,U盘 字符设备由于只能顺序访问,所以应用场景也不多,这篇文章主要讨论块设备. 块设备是随机访问的,所以块设备在不同的应用场景中存在很大的优化空间. 块设备中最重要的一个概念就是块设备的最小寻址单元. 块设备的最小寻址单元就是扇区,扇区的大小…
第一部分:实验 首先还是网易云课堂的学习,这次的课程是可执行程序的装载. 预处理.编译和链接: 可执行程序是怎么来的 以c语言代码为例的话,经过预处理,编译成汇编代码,再汇编成目标码再链接可执行文件. 过程如图所示,.c用gcc编译成汇编代码.asm,然后再汇编成目标码.o再ld链接成可执行文件. 以helloworld为例,处理过程如下所示 vi hello.c gcc -E -o hello.cpp hello.c -m32 //对.c文件预处理,hello.cpp是预处理的中间文件,预处理…
视频学习 可执行文件是怎么得来的? .c汇编成汇编代码.asm,然后再汇编成目标码.o.然后在连接成可执行文件,然后加载到内存可执行了. 对hello.c文件预处理(cpp),预处理负责把include的文件包含进来及宏替换等工作. 把hello.cpp编译成汇编代码hello.s 再把编译代码hello.s编译成目标代码hello.o(二进制的文件),然后把hello.o链接成可执行文件hello. hello是使用共享库的,再静态编译,把所有完全依赖的都放在hello.static的内部.…
块I/O层 基本概念 系统中可以随机访问固定大小数据片的硬件设备称做块设备,这些固定大小的数据片称之为块.还有一种基本的设备称之为字符设备,其需要按照顺序访问,比如键盘. 扇区:块设备中最小的寻址单元称为扇区,扇区是块设备的物理属性. 块: 文件系统最小的逻辑可寻址单元.是文件系统的一种抽象. 缓冲区: 当一个快被调入内存时候,存在一个缓冲区中.每个缓冲区与一个块对应,相当于磁盘块在内存中的表示. 缓冲区头: 每个缓冲区都有一个描述符 buffer_head ,用来描述内核处理数据时的相关控制信…
<Linux内核原理与设计>第八周作业 视频学习及操作分析 预处理.编译.链接和目标文件的格式 可执行程序是怎么来的? 以C语言为例,经过编译器预处理.编译成汇编代码.汇编器编译成目标代码,然后链接成可执行文件,再将可执行程序加载到内存中执行,过程可以通过下图展示(其中预处理已省略): 可执行文件的创建--预处理.编译和链接: cd Code vi hello.c gcc –E –o hello.cpp hello.c –m32 //预处理,把include的文件包含进来及宏替换等工作 vi…
块设备是能随机存取装置固定大小的数据表设备.如硬盘:字符设备(如串口和键盘)它是按照字符流进入有序进行.不同之处在于是否足够的随机存取数据--这时候,你可以随心所欲地从一个位置跳到访问设备和位置.复杂多,实际上内核在块设备上下了大工夫--块I/O层. 基础概念 块设备中最小的可寻址单元是扇区. 文件系统的最小寻址单元是块. 所谓的缓冲区是块在内存中的表示. 对于一个缓冲区(块),内核须要知道它的控制信息.这时须要一个结构进行描写叙述--缓冲区头. I/O调度机制 首先,这里的I/O调度指的是磁盘…
定时器和时间管理 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关概念 定时器执行流程 实现程序延迟的方法 定时器和延迟的例子 1. 系统时间 系统中管理的时间有2种:实际时间和定时器. 1.1  实际时间 实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个时间,主要是用户空间的程序有时需要获取当前时间,所以内核中也管理着这个时间.实际时间的获取是在开机后…
一.        链表数据结构简介      链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式.相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据.链表的开销主要是访问的顺序性和组织链的空间损失.      通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,指针域用于建立与下一个节点的联系.按照指针域的组织以及各个节点之间的联系形式,…