这个教学材料,值得收藏和学习。 来源:https://www.seas.harvard.edu/courses/cs20/ 原下载链接:Mathematics for Computer Science 本地下载:Mathematics for Computer Science
READ MORE »机器学习介绍
在学习客户业务过程中接触到机器学习,本文是基于网上多份材料基础上综合而来,希望能够帮助读者快速了解机器学习的概念、作用、常用算法及与大数据的关系。 作为初学者,理解有偏颇之处,欢迎各位批评指正。 下载链接:机器学习介绍
READ MORE »Linux通用块设备层
在块设备上的操作,涉及内核中的多个组成部分,如图1所示。假设一个进程使用系统调用read()读取磁盘上的文件。下面步骤是内核响应进程读请求的步骤; (1)系统调用read()会触发相应的VFS(Virtual Filesystem Switch)函数,传递的参数有文件描述符和文件偏移量。 (2)VFS确定请求的数据是否已经在内存缓冲区中;若数据不在内存中,确定如何执行读操作。 (3)假设内核必须从块设备上读取数据,这样内核就必须确定数据在物理设备上的位置。这由映射层(Mapping Layer)来完成。 (4)此时内核通过通用块设备层(Generic Block Layer)在块设备上执行读操作,启动I/O操作,传输请求的数据。 (5)在通用块设备层之下是I/O调度层(I/O Scheduler Layer),根据内核的调度策略,对等待的I/O等待队列排序。 (6)最后,块设备驱动(Block Device Driver)通过向磁盘控制器发送相应的命令,执行真正的数据传输。 对于(1)、(2)两个步骤,在Linux虚拟文件系统中,我们讨论了VFS(Virtual Filesystem Switch)主要数据结构和操作,结合相关系统调用(如sys_read()、sys_write()等)的源码,我们不难理解VFS层相关的操作和实现。而对于第(3)步中的Mapping Layer需要结合具体的文件系统解释,我们暂时不考虑。 本文主要分析(4)步,就是通用块设备层。 完整文档下载:Linux通用块设备层
READ MORE »Linux内核读文件过程
我们对系统调用read()非常熟悉,也常听说“零拷贝”。在看Linux内核源码时,有很多人会有一些困惑:比如读文件的整个流程是怎样的?内核是如何Cache已经读取的文件数据?驱动从磁盘上读取的数据是否会直接写到用户的缓冲区中?内核是在哪个地方分配空间来存储将要读取的数据?是在哪个地方将当前进程阻塞,直至读取数据结束?“零拷贝”是如何实现的? 本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分析从用户进程通过read()读取文件,直至数据返回给用户的整个流程。 目 录Table of Contents 1 概述… 4 2 虚拟文件系统与ext4文件系统层… 6 2.1 sys_read()… 6 2.1.1 fget_light()和fput_light()… 7 2.2 vfs_read()… 8 2.3 do_sync_read()… 10 2.3.1 异步I/O.. 10 2.3.2 do_sync_read()… 12 2.4 generic_file_aio_read()… 14 2.5 do_generic_file_read()… 17 2.5.1 address_space->readpage()方法… 24 2.5.2 file_read_actor()… 25 2.6 […]
READ MORE »Linux内核写文件过程
用户进程通过系统调用write()往磁盘上写数据,但write()执行结束后,数据是否立即写到磁盘上?内核读文件数据时,使用到了“提前读”;写数据时,则使用了“延迟写”,即write()执行结束后,数据并没有立即立即将请求放入块设备驱动请求队列,然后写到硬盘上。 本文以Redhat Enterprise Linux 6 Update 3内核版本2.6.32-279.el6.x86_64为例,分析内核写文件过程。 目 录Table of Contents 1 概述… 4 2 虚拟文件系统与ext4文件系统层… 7 2.1 sys_write()… 7 2.2 vfs_write()… 8 2.3 do_sync_write()… 9 2.4 ext4_file_write()… 10 2.4.1 Ext4文件系统extent特性… 10 2.4.2 ext4_file_write()函数分析… 13 2.5 generic_file_aio_write()… 15 2.6 __generic_file_aio_write()… 16 2.7 generic_file_buffered_write()… 19 2.8 generic_perform_write()… 20 2.8.1 ext4文件系统address_space_operations. 20 2.8.2 […]
READ MORE »Linux内核延迟写机制
在分析sys_write()的源码过程中,generic_perform_write()函数执行完后,会逐 层返回,直至sys_write()返回,系统调用结束。但此时要写的数据,只是拷贝到内核缓 冲区中,并将相应的页标记为脏;但数据并未真正写到磁盘上。那么何时才会将数据写到磁 盘上,又由谁来负责将数据写到磁盘上呢?
READ MORE »书籍推荐 – 《了凡四训》
《了凡四训》又名《命自我立》,是中国明朝袁了凡先生,结合了自己亲身的经历和毕生学问与修养,为了教育自己的子孙而作的家训,教戒他的儿子袁天启,认识命运的真相,明辨善恶的标准,改过迁善的方法,以及行善积德谦虚种种的效验。他在早期验证了命数的准确性,后来进一步通晓了命数的由来,知道人们可以掌握自己的未来,改造自己的命运。就在他的下半生中,又验证了人们完全可以自我“立命”,自求多福的准确性。不过,光是知命安命是消极的无益的;而自强不息改造命运的“立命之学”则是积极的和有益的。了凡先生以自己改造命运的经验来“现身说法”;读了可以使人心目豁开,信心勇气倍增,亟欲效法了凡先生,来改造自己的命运;实在是一本有益世道人心,转移社会风气不可多得的好书。 献给 – 勇于改造命运的人 “命中注定”,大家耳熟能详。 但 是 真有一个操纵命运的主宰吗? 答案是肯定的 – 那就是“自己”! 人是命运的主人翁, 却常为命运所戏弄! 愿 您 读完此书后, 能走出被命所运的阴霾, 成为一个 勇于创造命运的人! 下载: 白话文版《了凡四训》 简注易解版《了凡四训》 这本书值得大家花3小时认真看一遍,将终身受益。
READ MORE »ARM64浮点运算精度丢失问题
同样的代码,在ARM64和x86_64分别运行,发现部分计算结果从小数点后17位开始出现不同,双精度浮点运算结果有细微差异。 为了方便定位差异,我们编写一段简单浮点运算代码。 #include <math.h> #include <stdio.h> int main() { double dv[] = {-0.13942759833577333949961030157283, -0.046687081540714665817137785097657, -0.48496455527857718070805503884912, -0.60722091847450498924843032000354, 1, 1, 0, 0, -3.4221570491790771484375}; double dw[] = {0.019916933333333299710465880139054, -0.021317733333333300366208007403657, 0.13007783333333300390677322866395, 0.0013823433333333299752321288167423, 0.11358973333333299837732965897885, 0.21664233333333299258427473432675, -0.078728843333333298204479433479719, 0.31518266666666699959975517231214, 0.10316096666666700609749085515432 }; double dp = 0.0; int i = 0; for(i=0; i<9; i++){ dp += dv[i]*dw[i]; printf("\n========================"); printf("\ndv[%d]:%.32f ", i,dv[i]); printf("\ndw[%d]:%.32f ", i, […]
READ MORE »BBC The Documentary – No Destination
50年前,Satish Kumar身无分文徒步12000公里,从新德里到莫斯科、巴黎、伦敦,再到华盛顿,宣传核武和平。 每听一遍BBC这个podcast,内心都激动一番。有兴趣的,可以仔细听一下或买他写的《No Destination》这本书。 Fifty years ago, at the height of the Cold War and at the time of increasing tensions between East and West, Satish Kumar hit headlines around the world when he walked 8000 miles from New Delhi to Moscow, then on to Paris, London and Washington DC delivering packets of ‘peace tea’ […]
READ MORE »